projects/guix·blob kernel-updates · refs

14998 lines · 542.2 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.48.0")
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 "06d6fji6qmiimfnfgfxqnq4hj245q5ipcfvr1csm53ly1sa3jcfy"))))
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 ;; AssertionError: proc.returncode == 130
6901 " and not test_sigint"))
6902 #:phases (modify-phases %standard-phases
6903 (add-before 'build 'configure-tls-backend
6904 (lambda _
6905 ;; XXX: PycURL fails to automatically determine which
6906 ;; TLS backend to use when cURL is built with
6907 ;; --disable-static. See setup.py and
6908 ;; <https://github.com/pycurl/pycurl/pull/147>.
6909 (setenv "PYCURL_SSL_LIBRARY" "gnutls"))))))
6910 (native-inputs
6911 (list python-bottle
6912 python-flaky
6913 python-flask
6914 python-numpy
6915 python-pytest
6916 python-setuptools
6917 python-websockets))
6918 (inputs
6919 (list curl gnutls))
6920 (home-page "https://pycurl.github.io/")
6921 (synopsis "Lightweight Python wrapper around libcurl")
6922 (description "Pycurl is a lightweight wrapper around libcurl. It provides
6923high-speed transfers via libcurl and frequently outperforms alternatives.")
6924
6925 ;; Per 'README.rst', this is dual-licensed: users can redistribute pycurl
6926 ;; under the terms of LGPLv2.1+ or Expat.
6927 (license (list license:lgpl2.1+ license:expat))))
6928
6929(define-public python-stamina
6930 (package
6931 (name "python-stamina")
6932 (version "25.2.0")
6933 (source
6934 (origin
6935 (method git-fetch)
6936 (uri (git-reference
6937 (url "https://github.com/hynek/stamina")
6938 (commit version)))
6939 (file-name (git-file-name name version))
6940 (sha256
6941 (base32 "100iadhzmxbavk0ras3srnagh9af5pxbqrm4mrrkyy69knih9jiy"))))
6942 (build-system pyproject-build-system)
6943 (native-inputs
6944 (list python-pytest
6945 python-anyio
6946 python-dirty-equals
6947 python-hatch-fancy-pypi-readme
6948 python-hatch-vcs
6949 python-hatchling
6950 python-structlog))
6951 (propagated-inputs
6952 (list python-tenacity
6953 python-typing-extensions))
6954 (home-page "https://github.com/hynek/stamina")
6955 (synopsis "Retries library for Python")
6956 (description
6957 "@code{stamina} is an opinionated wrapper around the
6958@url{https://tenacity.readthedocs.io/en/latest/, Tenacity} package.")
6959 (license license:expat)))
6960
6961(define-public python-stripe
6962 (package
6963 (name "python-stripe")
6964 (version "13.2.0")
6965 (source
6966 (origin
6967 (method git-fetch)
6968 (uri (git-reference
6969 (url "https://github.com/stripe/stripe-python")
6970 (commit (string-append "v" version))))
6971 (file-name (git-file-name name version))
6972 (sha256
6973 (base32 "0f0d1hqias3qylrhk56w055lqrlzjs9s7wxva30v54ykmn9nj6dx"))))
6974 (build-system pyproject-build-system)
6975 (arguments
6976 '(#:tests? #f)) ;; tests require network
6977 (native-inputs
6978 (list python-flit-core))
6979 (propagated-inputs
6980 (list python-httpx
6981 python-requests))
6982 (home-page "https://github.com/stripe/stripe-python")
6983 (synopsis "Python bindings for the Stripe financial services' API")
6984 (description "This package provides access to the Stripe financial
6985services' API. It includes a pre-defined set of classes for API resources
6986that initialize themselves dynamically from API responses which makes it
6987compatible with a wide range of versions of the Stripe API.")
6988 (license license:expat)))
6989
6990(define-public python-stripe-12
6991 (hidden-package
6992 (package/inherit python-stripe
6993 (name "python-stripe")
6994 (version "12.5.1")
6995 (source
6996 (origin
6997 (inherit (package-source python-stripe))
6998 (uri (git-reference
6999 (url "https://github.com/stripe/stripe-python")
7000 (commit (string-append "v" version))))
7001 (file-name (git-file-name name version))
7002 (sha256 (base32
7003 "0jgixfb8ydlx387vm7rdaqrzsiqbvi99nszrpb1ghjqyn755xigd"))))
7004 (native-inputs
7005 (list python-setuptools)))))
7006
7007(define-public python-tldextract
7008 (package
7009 (name "python-tldextract")
7010 (version "5.3.0")
7011 (source
7012 (origin
7013 (method url-fetch)
7014 (uri (pypi-uri "tldextract" version))
7015 (sha256
7016 (base32 "02c6cyh8f3dagcw786m9nl5y0n3xa98p5mb7d7xfr84l2l5bglmk"))))
7017 (build-system pyproject-build-system)
7018 (arguments
7019 (list
7020 #:phases
7021 #~(modify-phases %standard-phases
7022 (add-after 'unpack 'relax-requirements
7023 (lambda _
7024 (substitute* "pyproject.toml"
7025 (("\"requests-file.*\",")
7026 "\"requests-file\",")))))))
7027 (native-inputs
7028 (list nss-certs-for-test
7029 python-pytest
7030 python-pytest-mock
7031 python-responses
7032 python-setuptools
7033 python-setuptools-scm
7034 python-syrupy))
7035 (propagated-inputs
7036 (list python-filelock
7037 python-idna
7038 python-requests
7039 python-requests-file))
7040 (home-page "https://github.com/john-kurkowski/tldextract")
7041 (synopsis
7042 "Separate the TLD from the registered domain and subdomains of a URL")
7043 (description
7044 "TLDExtract accurately separates the TLD from the registered domain and
7045subdomains of a URL, using the Public Suffix List. By default, this includes
7046the public ICANN TLDs and their exceptions. It can optionally support the
7047Public Suffix List's private domains as well.")
7048 (license license:bsd-3)))
7049
7050(define-public python-tracerite
7051 (package
7052 (name "python-tracerite")
7053 (version "2.5.2")
7054 (source
7055 (origin
7056 (method url-fetch)
7057 (uri (pypi-uri "tracerite" version))
7058 (sha256
7059 (base32 "087i51ybbj62nx5jzx8znhqb6cd7279mi7v9j6lrxf8lhb81nr3r"))))
7060 (build-system pyproject-build-system)
7061 (arguments
7062 (list #:tests? #f)) ;no tests in PyPI or Git
7063 (native-inputs
7064 (list python-hatch-vcs python-hatchling))
7065 (propagated-inputs
7066 (list python-html5tagger))
7067 (home-page "https://github.com/sanic-org/tracerite")
7068 (synopsis "Human-readable HTML tracebacks")
7069 (description
7070 "@code{tracerite} converts Python tracebacks into useful error messages
7071in human-readable HTML format.")
7072 (license license:unlicense)))
7073
7074(define-public python-trio-websocket
7075 (package
7076 (name "python-trio-websocket")
7077 (version "0.12.2")
7078 (source
7079 (origin
7080 (method git-fetch)
7081 (uri (git-reference
7082 (url "https://github.com/HyperionGray/trio-websocket")
7083 (commit version)))
7084 (file-name (git-file-name name version))
7085 (sha256
7086 (base32 "1lm712gakpskcn3adna22kj8m1hspz9l68pmlziklr0ycphmyqac"))))
7087 (build-system pyproject-build-system)
7088 (native-inputs
7089 (list python-pytest
7090 python-pytest-trio
7091 python-setuptools
7092 python-trustme))
7093 (propagated-inputs
7094 (list python-outcome
7095 python-trio
7096 python-wsproto))
7097 (home-page "https://github.com/HyperionGray/trio-websocket")
7098 (synopsis "WebSocket library for Trio")
7099 (description "This library implements both server and client aspects of
7100the @url{https://tools.ietf.org/html/rfc6455, the WebSocket protocol},
7101striving for safety, correctness, and ergonomics. It is based on the
7102@url{https://wsproto.readthedocs.io/en/latest/, wsproto project}, which is a
7103@url{https://sans-io.readthedocs.io/, Sans-IO} state machine that implements
7104the majority of the WebSocket protocol, including framing, codecs, and events.
7105This library handles I/O using @url{https://trio.readthedocs.io/en/latest/,
7106the Trio framework}.")
7107 (license license:expat)))
7108
7109(define-public python-txacme
7110 ;; 0.9.3 tag was placed in 2020 and there a lot of changes providing
7111 ;; compatibility with twisted, use the latest commit from trunk branch.
7112 ;;
7113 ;;See: <https://github.com/twisted/txacme/issues/165>.
7114 (let ((commit "ac18f92f6dde971a6b38f2ecfae44665815db583")
7115 (revision "0"))
7116 (package
7117 (name "python-txacme")
7118 (version (git-version "0.9.3" revision commit))
7119 (source
7120 (origin
7121 (method git-fetch) ;no fresh release in PyPI
7122 (uri (git-reference
7123 (url "https://github.com/twisted/txacme")
7124 (commit commit)))
7125 (file-name (git-file-name name version))
7126 (sha256
7127 (base32 "0mgdfxldv8qflbn75ywslbarnd4i3l7c4krs4aibl2dpryclsjzs"))))
7128 (build-system pyproject-build-system)
7129 (arguments
7130 (list #:test-backend #~'custom
7131 #:test-flags #~(list "-m" "twisted.trial" "txacme")))
7132 (native-inputs
7133 (list python-setuptools))
7134 (propagated-inputs
7135 (list python-acme
7136 python-attrs
7137 python-eliot
7138 python-josepy
7139 python-pem
7140 python-treq
7141 python-twisted
7142 python-txsni))
7143 (home-page "https://github.com/twisted/txacme")
7144 (synopsis "Twisted implexmentation of the ACME protocol")
7145 (description
7146 "ACME is Automatic Certificate Management Environment, a protocol that
7147allows clients and certificate authorities to automate verification and
7148certificate issuance. The ACME protocol is used by the free Let's Encrypt
7149Certificate Authority.
7150
7151txacme is an implementation of the protocol for Twisted, the event-driven
7152networking engine for Python.")
7153 (license license:expat))))
7154
7155(define-public python-txaio
7156 (package
7157 (name "python-txaio")
7158 (version "25.9.2")
7159 (source
7160 (origin
7161 (method url-fetch)
7162 (uri (pypi-uri "txaio" version))
7163 (sha256
7164 (base32 "16ch62yk2gdikkak113h6qw13ns9ksca817hky0vabn0fyh08874"))))
7165 (build-system pyproject-build-system)
7166 (native-inputs
7167 (list python-pytest
7168 python-setuptools))
7169 (home-page "https://github.com/crossbario/txaio")
7170 (synopsis "Compatibility layer between Python asyncio and Twisted")
7171 (description
7172 "Txaio provides a compatibility layer between the Python @code{asyncio}
7173 bsmodule and @code{Twisted}.")
7174 (license license:expat)))
7175
7176;; XXX: Potentially abandonware since 2017, consider to remove when nothing
7177;; depends on it or fails to build.
7178(define-public python-txamqp
7179 (package
7180 (name "python-txamqp")
7181 (version "0.8.2")
7182 (source
7183 (origin
7184 (method url-fetch)
7185 (uri (pypi-uri "txAMQP" version))
7186 (sha256
7187 (base32 "0jd9864k3csc06kipiwzjlk9mq4054s8kzk5q1cfnxj8572s4iv4"))))
7188 (build-system pyproject-build-system)
7189 (arguments
7190 (list #:tests? #f)) ;all tests failed
7191 (native-inputs
7192 (list python-setuptools))
7193 (propagated-inputs
7194 (list python-six python-twisted))
7195 (home-page "https://github.com/txamqp/txamqp")
7196 (synopsis "Communicate with AMQP peers and brokers using Twisted")
7197 (description
7198 "This package provides a Python library for communicating with AMQP peers
7199and brokers using the asynchronous networking framework Twisted. It contains
7200all the necessary code to connect, send and receive messages to/from an
7201AMQP-compliant peer or broker (Qpid, OpenAMQ, RabbitMQ) using Twisted. It
7202also includes support for using Thrift RPC over AMQP in Twisted
7203applications.")
7204 (license license:asl2.0)))
7205
7206(define-public python-txsni
7207 (package
7208 (name "python-txsni")
7209 (version "0.2.0")
7210 (source
7211 (origin
7212 (method git-fetch)
7213 (uri (git-reference
7214 (url "https://github.com/glyph/txsni")
7215 (commit (string-append "v" version))))
7216 (file-name (git-file-name name version))
7217 (sha256
7218 (base32 "1fl8xi7vl24hwbva5v41l6nsrbkj2l2mlsgcvdjxgph61aznwywq"))))
7219 (build-system pyproject-build-system)
7220 (arguments
7221 (list #:test-backend #~'custom
7222 #:test-flags #~(list "-m" "twisted.trial"
7223 "--temp-directory=/tmp/_trial_temp"
7224 "txsni")))
7225 (native-inputs
7226 (list python-setuptools))
7227 (propagated-inputs
7228 (list python-pyopenssl
7229 python-service-identity
7230 python-twisted))
7231 (home-page "https://github.com/glyph/txsni")
7232 (synopsis "Run TLS servers with Twisted")
7233 (description
7234 "This package provides an easy-to-use SNI endpoint for use with the
7235Twisted web framework.")
7236 (license license:expat)))
7237
7238(define-public python-txtorcon
7239 (package
7240 (name "python-txtorcon")
7241 (version "24.8.0")
7242 (source
7243 (origin
7244 (method url-fetch)
7245 (uri (pypi-uri "txtorcon" version))
7246 (sha256
7247 (base32 "1l4ajw4h7nay4vmllh6cs7zh3hnh8vj4yvgfnq3m734wil9ikzmy"))))
7248 (build-system pyproject-build-system)
7249 (native-inputs
7250 (list python-pytest
7251 python-setuptools
7252 python-wheel))
7253 (inputs
7254 (list lsof))
7255 (propagated-inputs
7256 (list python-automat
7257 python-idna
7258 python-incremental
7259 python-pyopenssl
7260 python-service-identity
7261 python-twisted
7262 python-zope-interface))
7263 (home-page "https://github.com/meejah/txtorcon")
7264 (synopsis "Twisted-based Tor controller client")
7265 (description
7266 "This package provides a Twisted-based Tor controller client,with
7267state-tracking and configuration abstractions.")
7268 (license license:expat)))
7269
7270(define-public python-url-normalize
7271 (package
7272 (name "python-url-normalize")
7273 (version "2.2.1")
7274 (source
7275 (origin
7276 (method git-fetch) ; no tests in PyPI release
7277 (uri (git-reference
7278 (url "https://github.com/niksite/url-normalize")
7279 (commit (string-append "v" version))))
7280 (file-name (git-file-name name version))
7281 (sha256
7282 (base32 "1yhsf4sk6l6nznpnqigisbfz690a4g342dsk2n6dggh7q4l3amk4"))))
7283 (build-system pyproject-build-system)
7284 (arguments
7285 (list
7286 #:test-flags #~(list "--ignore=tests/test_cli.py")))
7287 (native-inputs
7288 (list python-pytest python-pytest-socket python-setuptools))
7289 (propagated-inputs
7290 (list python-idna))
7291 (home-page "https://github.com/niksite/url-normalize")
7292 (synopsis "URL normalization for Python")
7293 (description
7294 "This package provides a URI Normalization function with following
7295features:
7296@itemize
7297@item take care of IDN domains
7298@item always provide the URI scheme in lowercase characters
7299@item always provide the host, if any, in lowercase characters
7300@item only perform percent-encoding where it is essential
7301@item always use uppercase A-through-F characters when percent-encoding
7302@item prevent dot-segments appearing in non-relative URI paths
7303@item for schemes that define a default authority, use an empty authority if
7304the default is desired
7305@item for schemes that define an empty path to be equivalent to a path of
7306@code{/}, use @code{/}
7307@item for schemes that define a port, use an empty port if the default is
7308desired
7309@item all portions of the URI must be utf-8 encoded NFC from Unicode strings
7310@end itemize")
7311 (license license:expat)))
7312
7313(define-public python-waitress
7314 (package
7315 (name "python-waitress")
7316 (version "3.0.2")
7317 (source
7318 (origin
7319 (method url-fetch)
7320 (uri (pypi-uri "waitress" version))
7321 (sha256
7322 (base32
7323 "07y3xyx2006f2ni5d55byh3y7w4kcg9xww7vmfjasi0cmzralak8"))))
7324 (build-system pyproject-build-system)
7325 (arguments
7326 (list
7327 ;; https://github.com/Pylons/waitress/issues/443
7328 #:test-flags #~(list "-k" "not test_service_port")))
7329 (native-inputs (list python-pytest python-setuptools))
7330 (home-page "https://github.com/Pylons/waitress")
7331 (synopsis "Waitress WSGI server")
7332 (description
7333 "Waitress is meant to be a production-quality pure-Python WSGI server
7334with very acceptable performance.")
7335 (license license:zpl2.1)))
7336
7337(define-public python-weasel
7338 (package
7339 (name "python-weasel")
7340 (version "1.0.0")
7341 (source
7342 (origin
7343 (method git-fetch)
7344 (uri (git-reference
7345 (url "https://github.com/explosion/weasel/")
7346 (commit (string-append "release-v" version))))
7347 (file-name (git-file-name name version))
7348 (sha256
7349 (base32 "1sxcxri9hl9rs1kvdrv81g6mlg7lifhq9xacskracz63v4nyh8na"))))
7350 (build-system pyproject-build-system)
7351 (arguments
7352 (list
7353 #:test-flags
7354 ;; This test raises an error, but not the one expected by pytest.
7355 #~(list (string-append "--deselect=weasel/tests/test_validation.py::"
7356 "test_project_config_interpolation[10_0]")
7357 ;; Network access is required.
7358 #$@(map (lambda (test) (string-append "--deselect="
7359 "weasel/tests/cli/"
7360 test))
7361 (list "test_cli.py::test_project_git_dir_asset"
7362 "test_cli.py::test_project_git_file_asset"
7363 "test_cli_app.py::test_project_assets")))))
7364 (native-inputs
7365 (list python-pytest
7366 python-setuptools))
7367 (propagated-inputs
7368 (list python-cloudpathlib
7369 python-confection
7370 python-httpx
7371 python-packaging
7372 python-pydantic
7373 python-smart-open
7374 python-srsly
7375 python-typer
7376 python-wasabi))
7377 (home-page "https://github.com/explosion/weasel/")
7378 (synopsis "Small and easy workflow system")
7379 (description
7380 "This package provides a minimalistic workflow system to manage and
7381share end-to-end workflows for different use cases and domains.")
7382 (license license:expat)))
7383
7384(define-public python-webencodings
7385 (package
7386 (name "python-webencodings")
7387 (version "0.5.1")
7388 (source
7389 (origin
7390 (method url-fetch)
7391 (uri (pypi-uri "webencodings" version))
7392 (sha256
7393 (base32 "08qrgrc4hrximb2gqnl69g01s93rhf2842jfxdjljc1dbwj1qsmk"))))
7394 (build-system pyproject-build-system)
7395 (arguments
7396 (list #:test-flags #~(list "webencodings/tests.py")))
7397 (native-inputs
7398 (list python-pytest python-setuptools))
7399 (home-page "https://github.com/SimonSapin/python-webencodings")
7400 (synopsis "Character encoding aliases for legacy web content")
7401 (description
7402 "In order to be compatible with legacy web content when interpreting
7403something like @code{Content-Type: text/html; charset=latin1}, tools need to
7404use a particular set of aliases for encoding labels as well as some overriding
7405rules. For example, @code{US-ASCII} and @code{iso-8859-1} on the web are
7406actually aliases for @code{windows-1252}, and a @code{UTF-8} or @code{UTF-16}
7407BOM takes precedence over any other encoding declaration. The WHATWG
7408@url{https://encoding.spec.whatwg.org/,Encoding} standard defines all such
7409details so that implementations do not have to reverse-engineer each other.
7410
7411This module implements the Encoding standard and has encoding labels and BOM
7412detection, but the actual implementation for encoders and decoders is
7413Python’s.")
7414 (license license:bsd-3)))
7415
7416(define-public python-omnipath
7417 (package
7418 (name "python-omnipath")
7419 (version "1.0.10")
7420 (source
7421 (origin
7422 (method git-fetch)
7423 (uri (git-reference
7424 (url "https://github.com/saezlab/omnipath/")
7425 (commit (string-append "v" version))))
7426 (file-name (git-file-name name version))
7427 (sha256
7428 (base32 "0jnc7nsn6n5hqx5wlk928b7xmg0mpfqy8al9w2p707ihcwh4s1rf"))))
7429 (build-system pyproject-build-system)
7430 (arguments
7431 (list
7432 #:test-flags '(list "-k"
7433 (string-append
7434 ;; These require internet access
7435 "not test_download_homologene"
7436 " and not test_complex_genes"
7437 ;; These tests are not compatible with pandas 3
7438 " and not test_no_dtype_conversion"
7439 " and not test_strip_resource_label_no_func"
7440 " and not test_split_unique_join_no_func"
7441 " and not test_auto_dtype"))
7442 #:phases
7443 #~(modify-phases %standard-phases
7444 (add-after 'unpack 'set-home
7445 (lambda _
7446 (setenv "HOME" "/tmp"))))))
7447 (propagated-inputs (list python-attrs
7448 python-docrep
7449 python-inflect
7450 python-networkx
7451 python-packaging
7452 python-pandas
7453 python-requests
7454 python-tqdm
7455 python-typing-extensions
7456 python-urllib3
7457 python-wrapt))
7458 (native-inputs (list nss-certs-for-test
7459 python-bump2version
7460 python-hatchling
7461 python-pytest
7462 python-pytest-mock
7463 python-pytest-socket
7464 python-requests-mock))
7465 (home-page "https://omnipathdb.org/")
7466 (synopsis "Python client for the OmniPath web service")
7467 (description "This package provides a Python client for the OmniPath web
7468service.")
7469 (license license:expat)))
7470
7471(define-public python-openai
7472 (package
7473 (name "python-openai")
7474 (version "2.42.0")
7475 (source
7476 (origin
7477 (method git-fetch)
7478 (uri (git-reference
7479 (url "https://github.com/openai/openai-python")
7480 (commit (string-append "v" version))))
7481 (file-name (git-file-name name version))
7482 (sha256
7483 (base32 "1p0vzy34cx2gfkhsqg2kxzam51cjlpa99q0skzj4426sx2hsw3g6"))))
7484 (build-system pyproject-build-system)
7485 (arguments
7486 (list
7487 #:test-flags
7488 ;; These require internet access and an openai API key.
7489 #~(list "--ignore=openai/tests/asyncio/test_endpoints.py"
7490 "--ignore=openai/tests/test_endpoints.py"
7491 "--ignore-glob=tests/api_resources/*")))
7492 (propagated-inputs
7493 (list python-aiohttp
7494 python-distro
7495 python-httpx
7496 python-jiter
7497 python-pydantic
7498 python-requests
7499 python-tqdm
7500 python-typing-extensions))
7501 (native-inputs
7502 (list nss-certs-for-test
7503 python-dirty-equals
7504 python-hatchling
7505 python-hatch-fancy-pypi-readme
7506 python-inline-snapshot
7507 python-pytest
7508 python-pytest-asyncio
7509 python-pytest-mock
7510 python-pytest-xdist
7511 python-respx
7512 python-rich
7513 python-setuptools))
7514 (home-page "https://github.com/openai/openai-python")
7515 (synopsis "Python client library for the OpenAI API")
7516 (description "This package provides a Python client library for the
7517OpenAI API.")
7518 (license license:expat)))
7519
7520(define-public python-openapi-schema-validator
7521 (package
7522 (name "python-openapi-schema-validator")
7523 (version "0.6.2")
7524 (source
7525 (origin
7526 (method git-fetch) ;no tests in pypi release
7527 (uri (git-reference
7528 (url "https://github.com/p1c2u/openapi-schema-validator")
7529 (commit version)))
7530 (file-name (git-file-name name version))
7531 (sha256
7532 (base32
7533 "0pgsm1x7lhc5ryj4l45ik8m5x9gqyi50dkflaiqqr4fnl0bsbx09"))))
7534 (build-system pyproject-build-system)
7535 (arguments
7536 (list
7537 #:test-flags
7538 ;; This one returns 5 instead of 4 elements
7539 '(list "-k" "not test_array_prefixitems_invalid")
7540 #:phases
7541 #~(modify-phases %standard-phases
7542 ;; See https://github.com/python-openapi/openapi-schema-validator/issues/204
7543 (add-after 'unpack 'relax-requirements
7544 (lambda _
7545 (substitute* "pyproject.toml"
7546 (("jsonschema-specifications.*")
7547 "jsonschema-specifications = \">=2023.5.2\"\n")))))))
7548 (native-inputs (list python-poetry-core python-pytest))
7549 (propagated-inputs
7550 (list python-isodate
7551 python-jsonschema
7552 python-rfc3339-validator
7553 python-strict-rfc3339))
7554 (home-page "https://github.com/p1c2u/openapi-schema-validator")
7555 (synopsis "OpenAPI schema validation library for Python")
7556 (description "Openapi-schema-validator is a Python library that validates
7557a schema against:
7558@itemize
7559@item OpenAPI Schema Specification v3.0 which is an extended subset of the
7560JSON Schema Specification Wright Draft 00.
7561@item OpenAPI Schema Specification v3.1 which is an extended superset of the
7562JSON Schema Specification Draft 2020-12.
7563@end itemize")
7564 (license license:bsd-3)))
7565
7566(define-public python-openapi-spec-validator
7567 (package
7568 (name "python-openapi-spec-validator")
7569 (version "0.7.1")
7570 (source
7571 (origin
7572 (method git-fetch) ;no tests in pypi release
7573 (uri (git-reference
7574 (url "https://github.com/p1c2u/openapi-spec-validator")
7575 (commit version)))
7576 (file-name (git-file-name name version))
7577 (sha256
7578 (base32
7579 "0s5yd4dbr6knwd2g1g4v2931k14n1lm80l11n2ija18yfis8yisz"))))
7580 (build-system pyproject-build-system)
7581 (arguments
7582 (list
7583 ;; These tests attempt to fetch resources from the Internet
7584 #:test-flags '(list "--ignore-glob=tests/integration/validation/**"
7585 "-k" "not example")))
7586 (native-inputs
7587 (list python-poetry-core
7588 python-pytest))
7589 (propagated-inputs
7590 (list python-jsonschema
7591 python-jsonschema-path
7592 python-lazy-object-proxy
7593 python-openapi-schema-validator
7594 python-pyyaml
7595 python-requests
7596 python-setuptools))
7597 (home-page "https://github.com/p1c2u/openapi-spec-validator")
7598 (synopsis "OpenAPI spec validator")
7599 (description "OpenAPI Spec Validator is a Python library that validates an
7600OpenAPI specification against the OpenAPI 2.0 (also known as Swagger), OpenAPI
76013.0 and OpenAPI 3.1 specifications. The validator aims to check for full
7602compliance with the specification.")
7603 (license license:asl2.0)))
7604
7605(define-public python-openapi-core
7606 (package
7607 (name "python-openapi-core")
7608 (version "0.19.4")
7609 (source
7610 (origin
7611 (method git-fetch)
7612 (uri (git-reference
7613 (url "https://github.com/p1c2u/openapi-core")
7614 (commit version)))
7615 (file-name (git-file-name name version))
7616 (sha256
7617 (base32
7618 "092sj2933jmvq5r76khr0vphih490vls1ga3s43gz8i47aqaxx96"))))
7619 (build-system pyproject-build-system)
7620 (arguments
7621 (list
7622 #:test-flags
7623 '(list "tests/unit"
7624 "-k" "not test_chars_valid")))
7625 (native-inputs (list python-django
7626 python-falcon
7627 python-flask
7628 python-mock
7629 python-poetry-core
7630 python-pytest
7631 python-pytest-asyncio
7632 python-responses))
7633 (propagated-inputs
7634 (list python-attrs
7635 python-aiohttp
7636 python-isodate
7637 python-jsonschema
7638 python-lazy-object-proxy
7639 python-more-itertools
7640 python-openapi-schema-validator
7641 python-openapi-spec-validator
7642 python-parse
7643 python-six
7644 python-werkzeug))
7645 (home-page "https://github.com/p1c2u/openapi-core")
7646 (synopsis "OpenAPI core library")
7647 (description "Openapi-core is a Python library that adds client-side and
7648server-side support for the OpenAPI Specification v3. It has features such
7649as:
7650@itemize
7651@item Validation of requests and responses
7652@item Schema casting and unmarshalling
7653@item Media type and parameters deserialization
7654@item Security providers (API keys, Cookie, Basic and Bearer HTTP
7655authentications)
7656@item Custom deserializers and formats
7657@item Integration with libraries and frameworks.
7658@end itemize")
7659 (license license:bsd-3)))
7660
7661(define-public python-openid
7662 (package
7663 (name "python-openid")
7664 (version "3.2.0")
7665 (source
7666 (origin
7667 (method git-fetch)
7668 (uri (git-reference
7669 (url "https://github.com/necaris/python3-openid")
7670 (commit (string-append "v" version))))
7671 (file-name (git-file-name name version))
7672 (sha256
7673 (base32 "1b50wmwb7k5k61zlc7d2b982i20410vp472zgl2yx8gxdnfvn8g1"))))
7674 (build-system pyproject-build-system)
7675 (arguments
7676 (list #:test-backend #~'unittest
7677 #:test-flags #~(list "openid.test.test_suite")))
7678 (propagated-inputs
7679 (list python-defusedxml))
7680 (native-inputs
7681 (list python-psycopg2 python-django python-setuptools))
7682 (home-page "https://github.com/necaris/python3-openid")
7683 (synopsis "OpenID support for servers and consumers")
7684 (description "This library provides OpenID authentication for Python, both
7685for clients and servers.")
7686 (license license:asl2.0)))
7687
7688(define-public python-openid-cla
7689 ;; XXX: Last updated in 2015.
7690 (package
7691 (name "python-openid-cla")
7692 (version "1.2")
7693 (source
7694 (origin
7695 (method url-fetch)
7696 (uri (pypi-uri "python-openid-cla" version))
7697 (sha256
7698 (base32
7699 "102hy2qisvjxp5s0v9lvwqi4f2dk0dhns40vjgn008yxc7k0h3cr"))))
7700 (build-system pyproject-build-system)
7701 (arguments '(#:tests? #f)) ; No tests.
7702 (native-inputs (list python-setuptools python-wheel))
7703 (propagated-inputs (list python-openid python-six))
7704 (home-page "https://github.com/puiterwijk/python-openid-cla/")
7705 (synopsis "Implementation of the OpenID CLA extension for python-openid")
7706 (description "@code{openid-cla} is an implementation of the OpenID
7707contributor license agreement extension for python-openid.")
7708 (license license:bsd-3)))
7709
7710(define-public python-openid-teams
7711 ;; XXX: Last updated in 2018.
7712 (package
7713 (name "python-openid-teams")
7714 (version "1.1")
7715 (source
7716 (origin
7717 (method url-fetch)
7718 (uri (pypi-uri "python-openid-teams" version))
7719 (sha256
7720 (base32
7721 "05zrh78alav24rxkbqlpbad6d3x2nljk6z6j7kflxf3vdqa7w969"))))
7722 (build-system pyproject-build-system)
7723 (arguments '(#:tests? #f)) ; No tests.
7724 (native-inputs (list python-setuptools python-wheel))
7725 (propagated-inputs (list python-openid python-six))
7726 (home-page "https://github.com/puiterwijk/python-openid-teams/")
7727 (synopsis "Implementation of the OpenID teams extension for python-openid")
7728 (description
7729 "@code{openid-teams} is an implementation of the OpenID
7730teams extension for python-openid.")
7731 (license license:bsd-3)))
7732
7733(define-public python-priority
7734 (package
7735 (name "python-priority")
7736 (version "2.0.0")
7737 (source
7738 (origin
7739 (method url-fetch)
7740 (uri (pypi-uri "priority" version))
7741 (sha256
7742 (base32 "1h0qpa949bxx7za95v1apwnngkrngi695cwx8wchn3cd3d7xarf9"))))
7743 (build-system pyproject-build-system)
7744 (native-inputs
7745 (list python-pytest python-setuptools python-wheel))
7746 (home-page "https://python-hyper.org/projects/priority/en/latest/")
7747 (synopsis "Pure-Python implementation of the HTTP/2 priority tree")
7748 (description
7749 "Priority is a pure-Python implementation of the priority logic for HTTP/2,
7750set out in RFC 7540 Section 5.3 (Stream Priority).")
7751 (license license:expat)))
7752
7753(define-public python-weblate-language-data
7754 (package
7755 (name "python-weblate-language-data")
7756 (version "2025.8")
7757 (source
7758 (origin
7759 (method url-fetch)
7760 (uri (pypi-uri "weblate_language_data" version))
7761 (sha256
7762 (base32 "0byj1xl6xldam790b6wg62dk1b4i6qdlsp4lqzlv65wnp2klvrkf"))))
7763 (build-system pyproject-build-system)
7764 (arguments (list #:tests? #f)) ;not tests, just data files
7765 (native-inputs
7766 (list python-setuptools))
7767 (propagated-inputs
7768 (list python-translate-toolkit))
7769 (home-page "https://github.com/WeblateOrg/language-data")
7770 (synopsis "Language definitions for Weblate")
7771 (description
7772 "This package provides language definitions used by
7773@url{https://weblate.org/, Weblate}i.")
7774 (license license:expat)))
7775
7776(define-public python-wikidata
7777 (package
7778 (name "python-wikidata")
7779 (version "0.8.1")
7780 (source
7781 (origin
7782 (method git-fetch)
7783 (uri (git-reference
7784 (url "https://github.com/dahlia/wikidata")
7785 (commit version)))
7786 (file-name (git-file-name name version))
7787 (sha256
7788 (base32 "06zg74h249phszn1znfcjdz6c3lz350fiabdzn7iqb2xg4xh69a5"))))
7789 (build-system pyproject-build-system)
7790 (native-inputs
7791 (list python-pytest python-setuptools))
7792 (home-page "https://github.com/dahlia/wikidata")
7793 (synopsis "Wikidata client library")
7794 (description
7795 "This package provides a Python interface to @url{https://www.wikidata.org/,
7796Wikidata}.")
7797 (license license:gpl3+)))
7798
7799(define-public python-wsproto
7800 (package
7801 (name "python-wsproto")
7802 (version "1.3.2")
7803 (source
7804 (origin
7805 (method git-fetch)
7806 (uri (git-reference
7807 (url "https://github.com/python-hyper/wsproto/")
7808 (commit version)))
7809 (file-name (git-file-name name version))
7810 (sha256
7811 (base32 "1n67xnnq3mvnxp61r4d8730hh8hzrq8i9bdrv8jivhj369fhndn9"))))
7812 (build-system pyproject-build-system)
7813 (native-inputs
7814 (list python-pytest
7815 python-setuptools))
7816 (propagated-inputs
7817 (list python-h11))
7818 (home-page "https://github.com/python-hyper/wsproto/")
7819 (synopsis "WebSockets state-machine based protocol implementation")
7820 (description
7821 "@code{wsproto} is a pure-Python implementation of a WebSocket protocol
7822stack. It's written from the ground up to be embeddable in whatever program
7823you choose to use, ensuring that you can communicate via WebSockets, as
7824defined in RFC6455, regardless of your programming paradigm.")
7825 (license license:expat)))
7826
7827(define-public hypercorn
7828 (package
7829 (name "hypercorn")
7830 (version "0.18.0")
7831 (source
7832 (origin
7833 (method git-fetch) ;PyPI does not have tests
7834 (uri (git-reference
7835 (url "https://github.com/pgjones/hypercorn")
7836 (commit version)))
7837 (file-name (git-file-name name version))
7838 (sha256
7839 (base32 "0jdi05n5isxn0rysq242p198lz03gbwsnizzb9yp6rxr7ajapns4"))))
7840 (build-system pyproject-build-system)
7841 ;; Propagate because Hypercorn also exposes functionality over a module.
7842 (propagated-inputs (list python-h11
7843 python-h2
7844 python-priority
7845 python-tomli
7846 python-wsproto))
7847 (native-inputs (list nss-certs-for-test
7848 python-httpx
7849 python-pdm-backend
7850 python-poetry-core
7851 python-pytest
7852 python-pytest-asyncio
7853 python-pytest-trio
7854 python-trio))
7855 (home-page "https://gitlab.com/pgjones/hypercorn/")
7856 (synopsis "ASGI Server based on Hyper libraries")
7857 (description
7858 "Hypercorn is an ASGI web server based on the sans-io hyper, h11, h2, and
7859wsproto libraries and inspired by Gunicorn. It supports HTTP/1, HTTP/2,
7860WebSockets (over HTTP/1 and HTTP/2), ASGI/2, and ASGI/3 specifications. It
7861can utilise asyncio, uvloop, or trio worker types.")
7862 (license license:expat)))
7863
7864(define-public python-querystring-parser
7865 (package
7866 (name "python-querystring-parser")
7867 (version "1.2.4")
7868 (source
7869 (origin
7870 (method git-fetch)
7871 (uri (git-reference
7872 (url "https://github.com/bernii/querystring-parser")
7873 (commit version)))
7874 (file-name (git-file-name name version))
7875 (sha256
7876 (base32 "15n89bf1x9dgp1vi697pa238nvn0vbqp3ghf0xrcyqqa9gn1l6fb"))))
7877 (build-system pyproject-build-system)
7878 (arguments
7879 (list
7880 #:test-backend #~'custom
7881 #:test-flags #~(list "querystring_parser/tests.py")
7882 #:phases
7883 #~(modify-phases %standard-phases
7884 (add-after 'unpack 'fix-python-incompatibilities
7885 (lambda _
7886 (substitute* "querystring_parser/tests.py"
7887 ;; XXX FIXME: This test is broken with Python 3.7:
7888 ;; https://github.com/bernii/querystring-parser/issues/35
7889 (("self\\.assertEqual\\(self\\.knownValuesNormalized, result\\)")
7890 "True")
7891 ;; Removed in Python 3.12.
7892 (("assertEquals")
7893 "assertEqual")))))))
7894 (native-inputs (list python-setuptools))
7895 (propagated-inputs (list python-six))
7896 (home-page "https://github.com/bernii/querystring-parser")
7897 (synopsis "QueryString parser that correctly handles nested dictionaries")
7898 (description
7899 "This package provides a query string parser for Python and Django
7900projects that correctly creates nested dictionaries from sent form/querystring
7901data.")
7902 (license license:expat)))
7903
7904(define-public python-tornado
7905 (package
7906 (name "python-tornado")
7907 (version "6.4.2")
7908 (source
7909 (origin
7910 (method url-fetch)
7911 (uri (pypi-uri "tornado" version))
7912 (sha256
7913 (base32 "02v2mlvr58xg0l0gh08nswl53z73wkf23sziggypk63ffjsdbflj"))))
7914 (build-system pyproject-build-system)
7915 (arguments
7916 (list
7917 #:test-flags
7918 ;; AttributeError: 'TestIOStreamWebMixin' object has no attribute 'io_loop'
7919 #~(list "--ignore=tornado/test/iostream_test.py")))
7920 (native-inputs
7921 (list python-certifi
7922 python-pytest
7923 python-setuptools))
7924 (home-page "https://www.tornadoweb.org/")
7925 (synopsis "Python web framework and asynchronous networking library")
7926 (description
7927 "Tornado is a Python web framework and asynchronous networking library,
7928originally developed at FriendFeed. By using non-blocking network I/O,
7929Tornado can scale to tens of thousands of open connections, making it ideal
7930for long polling, WebSockets, and other applications that require a long-lived
7931connection to each user.")
7932 (license license:asl2.0)))
7933
7934(define-public python-tornado-http-auth
7935 (package
7936 (name "python-tornado-http-auth")
7937 (version "1.1.1")
7938 (source
7939 (origin
7940 (method git-fetch)
7941 (uri (git-reference
7942 (url "https://github.com/gvalkov/tornado-http-auth")
7943 (commit (string-append "v" version))))
7944 (file-name (git-file-name name version))
7945 (sha256
7946 (base32 "1v9sin1zlck9wvkwx0ldqb1b271xlkq63562w8g1yb7v6qka9q4f"))))
7947 (build-system pyproject-build-system)
7948 ;; XXX: This version is incompatible with current tornado.testing.
7949 (arguments (list #:tests? #f))
7950 (native-inputs (list python-setuptools))
7951 (propagated-inputs (list python-tornado))
7952 (home-page "https://github.com/gvalkov/tornado-http-auth")
7953 (synopsis "Digest and basic authentication module for Tornado")
7954 (description
7955 "Provides support for adding authentication to services using the Tornado
7956web framework, either via the basic or digest authentication schemes.")
7957 (license license:asl2.0)))
7958
7959(define-public python-wsgi-intercept
7960 (package
7961 (name "python-wsgi-intercept")
7962 (version "1.13.1")
7963 (source (origin
7964 (method url-fetch)
7965 (uri (pypi-uri "wsgi_intercept" version))
7966 (sha256
7967 (base32
7968 "1h94dj7h7n7zdj3ll4imqjhq5vk21yidk2niwnmpw7xik9inrgbr"))))
7969 (build-system pyproject-build-system)
7970 (arguments
7971 (list
7972 ;; XXX: tests required internet access
7973 #:tests? #f))
7974 (propagated-inputs
7975 (list python-six))
7976 (native-inputs
7977 (list python-httplib2
7978 python-pytest
7979 python-requests
7980 python-setuptools
7981 python-urllib3
7982 python-wheel))
7983 (synopsis "Puts a WSGI application in place of a real URI for testing")
7984 (description "Wsgi_intercept installs a WSGI application in place of a real
7985URI for testing. Testing a WSGI application normally involves starting a
7986server at a local host and port, then pointing your test code to that address.
7987Instead, this library lets you intercept calls to any specific host/port
7988combination and redirect them into a WSGI application importable by your test
7989program. Thus, you can avoid spawning multiple processes or threads to test
7990your Web app.")
7991 (home-page "https://github.com/cdent/wsgi-intercept")
7992 (license license:expat)))
7993
7994(define-public python-webob
7995 (package
7996 (name "python-webob")
7997 (version "1.8.10")
7998 (source
7999 (origin
8000 (method url-fetch)
8001 (uri (pypi-uri "webob" version))
8002 (sha256
8003 (base32
8004 "0avwfsqqva46aix1p61jbwjsw7kh6zkxvfds9xi3zg07yc8km5hw"))))
8005 (build-system pyproject-build-system)
8006 ;; tests: 2394 passed, 9 skipped, 1 xfailed, 35 warnings
8007 (native-inputs
8008 (list python-pytest
8009 python-setuptools))
8010 (home-page "https://webob.org/")
8011 (synopsis "WSGI request and response object")
8012 (description
8013 "WebOb provides wrappers around the WSGI request environment, and an
8014object to help create WSGI responses.")
8015 (license license:expat)))
8016
8017(define-public python-yewtube-search
8018 (package
8019 (name "python-yewtube-search")
8020 ;; Original repository for python-youtube-search package is archived, see:
8021 ;; <https://github.com/alexmercerind/youtube-search-python/issues/189>.
8022 ;; The most promising fork was
8023 ;; <https://github.com/ahmedayyad-dev/youtube-search-python-fork> which is
8024 ;; archived since <2026-04-04>. This is another fork with a different PyPI
8025 ;; name for python-yewtube.
8026 (version "1.6.7")
8027 (source
8028 (origin
8029 (method url-fetch)
8030 (uri (pypi-uri "yewtube_search_python" version))
8031 (sha256
8032 (base32 "0vjh4wrlqx4lv9qi6572jx2d0rsp6gkvaqf0f2ar4npdz0ldgl47"))))
8033 (build-system pyproject-build-system)
8034 (arguments (list #:tests? #f)) ;no tests in repository
8035 (native-inputs
8036 (list python-setuptools))
8037 (propagated-inputs
8038 (list python-httpx))
8039 (home-page "https://github.com/iamtalhaasghar/youtube-search-python")
8040 (synopsis "Search for YouTube videos, channels & playlists")
8041 (description
8042 "This package provides tools to search for @code{YouTube} videos,
8043channels and playlists; as well as getting video metadata from links. This
8044package does not rely on the @code{YouTube} Data API v3.")
8045 (license license:expat)))
8046
8047(define-public python-zc-lockfile
8048 (package
8049 (name "python-zc-lockfile")
8050 (version "4.0")
8051 (source
8052 (origin
8053 (method git-fetch)
8054 (uri (git-reference
8055 (url "https://github.com/zopefoundation/zc.lockfile")
8056 (commit version)))
8057 (file-name (git-file-name name version))
8058 (sha256
8059 (base32 "0b1kkwx2d4wf392sd3bfjvzgkdrknwsxg9mby121mq8zl7c490gg"))))
8060 (build-system pyproject-build-system)
8061 (arguments
8062 (list
8063 #:phases
8064 #~(modify-phases %standard-phases
8065 (replace 'check
8066 (lambda* (#:key tests? #:allow-other-keys)
8067 (if tests?
8068 (invoke "zope-testrunner" "--test-path=src")
8069 (format #t "test suite not run~%")))))))
8070 (native-inputs (list python-zope-testing python-zope-testrunner
8071 python-setuptools))
8072 (home-page "https://github.com/zopefoundation/zc.lockfile")
8073 (synopsis "Interprocess locks using lock files")
8074 (description
8075 "This package provides an implementation of interprocess locks using lock
8076files. These locks can also be used to mediate access to other files.")
8077 (license license:zpl2.1)))
8078
8079(define-public python-zconfig
8080 (package
8081 (name "python-zconfig")
8082 (version "4.3")
8083 (source
8084 (origin
8085 (method git-fetch)
8086 (uri (git-reference
8087 (url "https://github.com/zopefoundation/ZConfig/")
8088 (commit version)))
8089 (file-name (git-file-name name version))
8090 (sha256
8091 (base32 "06c4vffk51fw03q87r31s81b0xbxg2qqvjfmcl2z4hg21fr088c2"))))
8092 (build-system pyproject-build-system)
8093 (arguments
8094 (list
8095 #:phases
8096 #~(modify-phases %standard-phases
8097 (replace 'check
8098 (lambda* (#:key tests? #:allow-other-keys)
8099 (if tests?
8100 (begin
8101 ;; This test assumes we still have setup.py in the
8102 ;; directory from which we import zconfig, which
8103 ;; does not work after installing the package.
8104 (delete-file-recursively
8105 "src/ZConfig/tests/test_readme.py")
8106 (invoke "zope-testrunner" "-vv" "--test-path=src" "--all"))
8107 (format #t "test suite not run~%")))))))
8108 (native-inputs (list python-docutils python-manuel python-zope-exceptions
8109 python-zope-testrunner python-setuptools))
8110 (home-page "https://github.com/zopefoundation/ZConfig/")
8111 (synopsis "Structured configuration library intended for general use")
8112 (description
8113 "@code{zconfig} is a configuration library intended for general use. It
8114supports a hierarchical schema-driven configuration model that allows a schema
8115to specify data conversion routines written in Python. Its model is very
8116different from the model supported by the @code{configparser} module found in
8117Python's standard library, and is more suitable to configuration-intensive
8118applications.")
8119 (license license:zpl2.1)))
8120
8121(define-public python-zodb
8122 (package
8123 (name "python-zodb")
8124 (version "6.0.1")
8125 (source
8126 (origin
8127 (method url-fetch)
8128 (uri (pypi-uri "zodb" version))
8129 (sha256
8130 (base32 "02cmvf8j2nin5z26wvy2vq2k9mj12hqrr4276lj3w4jj32p0zxw9"))))
8131 (build-system pyproject-build-system)
8132 (arguments
8133 (list
8134 #:phases
8135 #~(modify-phases %standard-phases
8136 (replace 'check
8137 (lambda* (#:key tests? #:allow-other-keys)
8138 (if tests?
8139 (begin
8140 ;; This test does not work after installing the
8141 ;; package, since it expects the ZODB source code
8142 ;; to reside in the src/ directory.
8143 (delete-file-recursively
8144 "src/ZODB/tests/testdocumentation.py")
8145 (invoke "zope-testrunner" "-vv" "--test-path=src"
8146 "--all"))
8147 (format #t "test suite not run~%")))))))
8148 (native-inputs
8149 (list python-manuel
8150 python-wheel
8151 python-zope-testing
8152 python-zope-testrunner))
8153 (propagated-inputs
8154 (list python-btrees
8155 python-persistent
8156 python-transaction
8157 python-zc-lockfile
8158 python-zconfig
8159 python-zodbpickle
8160 python-zope-interface))
8161 (home-page "http://zodb-docs.readthedocs.io")
8162 (synopsis "Object-oriented database for Python")
8163 (description
8164 "@code{ZODB} provides an object-oriented and @acronym{ACID,
8165Atomicity Consistency Isolation Durability} compliant database for Python with
8166a high degree of transparency. @code{ZODB} is an object-oriented database,
8167not an object-relational mapping. This comes with several advantaged:
8168
8169@itemize
8170@item no separate language for database operations
8171@item very little impact on your code to make objects persistent
8172@item no database mapper that partially hides the database.
8173@item almost no seam between code and database.
8174@end itemize")
8175 (license license:zpl2.1)))
8176
8177(define-public python-zodbpickle
8178 (package
8179 (name "python-zodbpickle")
8180 (version "3.2")
8181 (source
8182 (origin
8183 (method url-fetch)
8184 (uri (pypi-uri "zodbpickle" version))
8185 (sha256
8186 (base32 "035bjrksl4h92mvjkx6id4gjcpc1k4mbci8ryjl6l9mki7ihx77b"))))
8187 (build-system pyproject-build-system)
8188 (arguments
8189 '(#:phases (modify-phases %standard-phases
8190 (replace 'check
8191 (lambda* (#:key tests? #:allow-other-keys)
8192 (if tests?
8193 (invoke "zope-testrunner" "-vv" "--test-path=src"
8194 "--all")
8195 (format #t "test suite not run~%")))))))
8196 (native-inputs (list python-zope-testrunner python-setuptools python-wheel))
8197 (home-page "https://github.com/zopefoundation/zodbpickle")
8198 (synopsis "Uniform pickling interface for @code{zodb}")
8199 (description
8200 "This package is a fork of the @code{pickle} module (and the
8201supporting C extension) from both Python 3.2 and Python 3.3. The fork adds
8202support for the @code{noload} operations used by @code{zodb}.")
8203 (license (list license:psfl license:zpl2.1))))
8204
8205(define-public python-zope-dottedname
8206 (package
8207 (name "python-zope-dottedname")
8208 (version "7.0")
8209 (source
8210 (origin
8211 (method git-fetch)
8212 (uri (git-reference
8213 (url "https://github.com/zopefoundation/zope.dottedname")
8214 (commit version)))
8215 (file-name (git-file-name name version))
8216 (sha256
8217 (base32 "0h7a637zsl1a3f0rpb2nw41mzxv0pqyj8ahn6h60n2c1px912rbd"))))
8218 (build-system pyproject-build-system)
8219 (arguments
8220 (list #:test-backend #~'custom
8221 #:test-flags #~(list "src/zope/dottedname/tests.py")))
8222 (native-inputs (list python-setuptools))
8223 (home-page "https://zopedottedname.readthedocs.io")
8224 (synopsis "Resolver for Python dotted names")
8225 (description
8226 "This package provides a @code{resolve()} function that resolves strings
8227containing dotted names into the appropriate Python object.")
8228 (license license:zpl2.1)))
8229
8230(define-public python-zope-event
8231 (package
8232 (name "python-zope-event")
8233 (version "6.0")
8234 (source
8235 (origin
8236 (method git-fetch)
8237 (uri (git-reference
8238 (url "https://github.com/zopefoundation/zope.event")
8239 (commit version)))
8240 (file-name (git-file-name name version))
8241 (sha256
8242 (base32 "0la3q47c59aq50s036q468bhnmzgs71f1cygv89w6qkk1hkn35ym"))))
8243 (build-system pyproject-build-system)
8244 (arguments
8245 (list
8246 #:test-flags
8247 #~(list "src/zope/event/tests.py")))
8248 (native-inputs (list python-pytest python-setuptools))
8249 (home-page "https://zopeevent.readthedocs.io/en/latest/")
8250 (synopsis "Event publishing system for Python")
8251 (description
8252 "Zope.event provides an event publishing API, intended for use by
8253applications which are unaware of any subscribers to their events. It is a
8254simple event-dispatching system on which more sophisticated event dispatching
8255systems can be built.")
8256 (license license:zpl2.1)))
8257
8258(define-public python-zope-interface
8259 (package
8260 (name "python-zope-interface")
8261 (version "7.2")
8262 (source
8263 (origin
8264 (method git-fetch)
8265 (uri (git-reference
8266 (url "https://github.com/zopefoundation/zope.interface")
8267 (commit version)))
8268 (file-name (git-file-name name version))
8269 (sha256
8270 (base32 "01snm1lbqhx3ird4m76nciaqasxvf8dd6817zm35v684g5hbzd2s"))))
8271 (build-system pyproject-build-system)
8272 (arguments
8273 ;; XXX: test suite can't find python-zope-testing
8274 (list #:tests? #f))
8275 (native-inputs (list python-setuptools))
8276 (home-page "https://zopeinterface.readthedocs.io")
8277 (synopsis "\"Design by contract\" methodology in Python")
8278 (description
8279 "Zope.interface provides an implementation of \"object interfaces\" for
8280Python. Interfaces are a mechanism for labeling objects as conforming to a
8281given API or contract.")
8282 (license license:zpl2.1)))
8283
8284(define-public python-zope-exceptions
8285 (package
8286 (name "python-zope-exceptions")
8287 (version "6.0")
8288 (source
8289 (origin
8290 (method git-fetch)
8291 (uri (git-reference
8292 (url "https://github.com/zopefoundation/zope.exceptions")
8293 (commit version)))
8294 (file-name (git-file-name name version))
8295 (sha256
8296 (base32 "0fmsw2j8islaiv6zf2mxh2s43y7virqny6s8gk8v2zkcxpy95cic"))))
8297 (build-system pyproject-build-system)
8298 (arguments
8299 (list
8300 #:phases
8301 #~(modify-phases %standard-phases
8302 (replace 'check
8303 (lambda* (#:key tests? #:allow-other-keys)
8304 (if tests?
8305 (invoke "zope-testrunner" "--test-path=src")
8306 (format #t "test suite not run~%")))))))
8307 (native-inputs (list python-setuptools python-zope-testrunner-bootstrap))
8308 (propagated-inputs (list python-zope-interface))
8309 (home-page "https://github.com/zopefoundation/zope.exceptions")
8310 (synopsis "Zope exceptions")
8311 (description
8312 "Zope.exceptions provides general-purpose exception types that have uses
8313outside of the Zope framework.")
8314 (license license:zpl2.1)))
8315
8316(define (python-zope-bootstrap-package orig)
8317 (package
8318 (inherit orig)
8319 (name (string-append (package-name orig) "-bootstrap"))
8320 (arguments
8321 (if (null? (package-arguments orig))
8322 (list
8323 #:tests? #f
8324 #:phases #~(modify-phases %standard-phases
8325 (delete 'sanity-check)))
8326 (substitute-keyword-arguments arguments
8327 ((#:tests? _ #f) #f)
8328 ((#:phases phases '%standard-phases)
8329 #~(modify-phases #$phases
8330 (delete 'sanity-check))))))
8331 (propagated-inputs `())
8332 (native-inputs (list python-setuptools))
8333 (properties `((hidden? . #t)))))
8334
8335(define-public python-zope-exceptions-bootstrap
8336 (python-zope-bootstrap-package python-zope-exceptions))
8337
8338(define-public python-zope-testing
8339 (package
8340 (name "python-zope-testing")
8341 (version "6.0")
8342 (source
8343 (origin
8344 (method git-fetch)
8345 (uri (git-reference
8346 (url "https://github.com/zopefoundation/zope.testing")
8347 (commit version)))
8348 (file-name (git-file-name name version))
8349 (sha256
8350 (base32 "0zqipsgv7qj7f8hrd3x6xpqwszdiac8vpjdm8ak5kljl5napw7d7"))))
8351 (build-system pyproject-build-system)
8352 (arguments
8353 (list
8354 #:phases
8355 #~(modify-phases %standard-phases
8356 (replace 'check
8357 (lambda* (#:key tests? #:allow-other-keys)
8358 (if tests?
8359 (invoke "zope-testrunner" "--test-path=src")
8360 (format #t "test suite not run~%")))))))
8361 (native-inputs (list python-setuptools
8362 python-zope-interface
8363 python-zope-testrunner-bootstrap))
8364 (home-page "https://zopetesting.readthedocs.io/")
8365 (synopsis "Zope testing helpers")
8366 (description
8367 "Zope.testing provides a number of testing utilities for HTML forms, HTTP
8368servers, regular expressions, and more.")
8369 (license license:zpl2.1)))
8370
8371(define-public python-zope-testrunner
8372 (package
8373 (name "python-zope-testrunner")
8374 (version "7.4")
8375 (source
8376 (origin
8377 (method git-fetch)
8378 (uri (git-reference
8379 (url "https://github.com/zopefoundation/zope.testrunner")
8380 (commit version)))
8381 (file-name (git-file-name name version))
8382 (sha256
8383 (base32 "0gd5rnzw6vzbx766jxqr4zc6qx7gk75r2c0nqqvhkb12hzk5ca2g"))))
8384 (build-system pyproject-build-system)
8385 (arguments
8386 (list
8387 #:phases
8388 #~(modify-phases %standard-phases
8389 (add-after 'unpack 'remove-problematic-test
8390 (lambda _
8391 ;; This test contains invalid syntax, which breaks bytecode
8392 ;; compilation. For simplicity just remove it.
8393 (delete-file
8394 "src/zope/testrunner/tests/testrunner-ex/sample2/badsyntax.py")))
8395 (replace 'check
8396 (lambda* (#:key tests? #:allow-other-keys)
8397 (if tests?
8398 (invoke "zope-testrunner" "--test-path=src")
8399 (format #t "test suite not run~%")))))))
8400 (native-inputs (list python-setuptools python-zope-testing))
8401 (propagated-inputs (list python-zope-exceptions python-zope-interface))
8402 (home-page "https://zopetestrunner.readthedocs.io")
8403 (synopsis "Zope testrunner script")
8404 (description "This package provides a script for running Python tests.")
8405 (license license:zpl2.1)))
8406
8407(define-public python-zope-testrunner-bootstrap
8408 (package
8409 (inherit (python-zope-bootstrap-package python-zope-testrunner))
8410 (propagated-inputs
8411 (list python-six python-zope-exceptions-bootstrap))
8412 (properties `((hidden? . #t)))))
8413
8414(define-public python-zope-i18nmessageid
8415 (package
8416 (name "python-zope-i18nmessageid")
8417 (version "7.0")
8418 (source
8419 (origin
8420 (method git-fetch)
8421 (uri (git-reference
8422 (url "https://github.com/zopefoundation/zope.i18nmessageid")
8423 (commit version)))
8424 (file-name (git-file-name name version))
8425 (sha256
8426 (base32 "192ixj8r9n467avbxrmhakmqiaflc1vw37k08z096ajcjgbfrm5d"))))
8427 (build-system pyproject-build-system)
8428 (arguments
8429 (list
8430 #:phases
8431 #~(modify-phases %standard-phases
8432 (replace 'check
8433 (lambda* (#:key tests? #:allow-other-keys)
8434 (if tests?
8435 (invoke "zope-testrunner" "--test-path=src")
8436 (format #t "test suite not run~%")))))))
8437 (native-inputs (list python-setuptools python-zope-testrunner))
8438 (home-page "https://zopei18nmessageid.readthedocs.io")
8439 (synopsis "Message identifiers for internationalization")
8440 (description "Zope.i18nmessageid provides facilities for declaring
8441internationalized messages within program source text.")
8442 (license license:zpl2.1)))
8443
8444(define-public python-zope-schema
8445 (package
8446 (name "python-zope-schema")
8447 (version "7.0.1")
8448 (source
8449 (origin
8450 (method git-fetch)
8451 (uri (git-reference
8452 (url "https://github.com/zopefoundation/zope.schema")
8453 (commit version)))
8454 (file-name (git-file-name name version))
8455 (sha256
8456 (base32 "1hj6j0gqgvv9a5pyaz54wbn8n7wf9lyg4njb2cfs980z0d5faj39"))))
8457 (build-system pyproject-build-system)
8458 (arguments
8459 (list
8460 #:phases
8461 #~(modify-phases %standard-phases
8462 (replace 'check
8463 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
8464 (add-installed-pythonpath inputs outputs)
8465 (if tests?
8466 (invoke "zope-testrunner" "--test-path=src")
8467 (format #t "test suite not run.~%")))))))
8468 (propagated-inputs (list python-zope-event python-zope-interface))
8469 (native-inputs (list python-zope-i18nmessageid python-zope-testing
8470 python-zope-testrunner python-setuptools))
8471 (home-page "https://zopeschema.readthedocs.io")
8472 (synopsis "Zope data schemas")
8473 (description "Zope.scheme provides extensions to zope.interface for
8474defining data schemas.")
8475 (license license:zpl2.1)))
8476
8477(define-public python-zope-sqlalchemy
8478 (package
8479 (name "python-zope-sqlalchemy")
8480 (version "1.6")
8481 (source
8482 (origin
8483 (method git-fetch)
8484 (uri (git-reference
8485 (url "https://github.com/zopefoundation/zope.sqlalchemy")
8486 (commit version)))
8487 (file-name (git-file-name name version))
8488 (sha256
8489 (base32 "1z4gw4i95dyqxsvrahk4fav008045n8kyxpn3fa887snmpvcjhng"))))
8490 (build-system pyproject-build-system)
8491 (arguments
8492 (list
8493 #:phases
8494 #~(modify-phases %standard-phases
8495 (replace 'check
8496 (lambda* (#:key tests? #:allow-other-keys)
8497 (if tests?
8498 (invoke "zope-testrunner" "--test-path=src")
8499 (format #t "test suite not run~%")))))))
8500 (propagated-inputs (list python-sqlalchemy python-transaction
8501 python-zope-interface))
8502 (native-inputs (list python-zope-testing python-zope-testrunner
8503 python-setuptools))
8504 (home-page "https://github.com/zopefoundation/zope.sqlalchemy")
8505 (synopsis "Minimal SQLAlchemy transaction integration for Zope")
8506 (description
8507 "The aim of this package is to unify the plethora of existing packages
8508integrating SQLAlchemy with Zope's transaction management. As such,it only
8509provides a data manager and makes no attempt to define a @i{zopeish} way to
8510configure engines.")
8511 (license license:zpl2.1)))
8512
8513(define-public python-zope-configuration
8514 (package
8515 (name "python-zope-configuration")
8516 (version "7.0")
8517 (source
8518 (origin
8519 (method git-fetch)
8520 (uri (git-reference
8521 (url "https://github.com/zopefoundation/zope.configuration")
8522 (commit version)))
8523 (file-name (git-file-name name version))
8524 (sha256
8525 (base32 "11lr6z3jpz9835a1if89g3x7k31sviq2d0xvvic5xi4c980dbkhv"))))
8526 (build-system pyproject-build-system)
8527 (arguments
8528 (list
8529 #:phases
8530 #~(modify-phases %standard-phases
8531 (replace 'check
8532 (lambda* (#:key tests? #:allow-other-keys)
8533 (if tests?
8534 (invoke "zope-testrunner" "--test-path=src")
8535 (format #t "test suite not run~%")))))))
8536 (native-inputs (list python-manuel python-setuptools python-zope-testing
8537 python-zope-testrunner))
8538 (propagated-inputs (list python-zope-i18nmessageid python-zope-interface
8539 python-zope-schema))
8540 (home-page "https://zopeconfiguration.readthedocs.io")
8541 (synopsis "Zope Configuration Markup Language")
8542 (description "Zope.configuration implements ZCML, the Zope Configuration
8543Markup Language.")
8544 (license license:zpl2.1)))
8545
8546(define-public python-zope-configuration-bootstrap
8547 (python-zope-bootstrap-package python-zope-configuration))
8548
8549(define-public python-zope-copy
8550 (package
8551 (name "python-zope-copy")
8552 (version "6.0")
8553 (source
8554 (origin
8555 (method git-fetch)
8556 (uri (git-reference
8557 (url "https://github.com/zopefoundation/zope.copy")
8558 (commit version)))
8559 (file-name (git-file-name name version))
8560 (sha256
8561 (base32 "1ym82p9scpfi3rflxnlv55v0a7hra3rq4rrlw759maq05i8qp1w5"))))
8562 (build-system pyproject-build-system)
8563 (arguments
8564 (list
8565 #:phases
8566 #~(modify-phases %standard-phases
8567 (replace 'check
8568 (lambda* (#:key tests? #:allow-other-keys)
8569 (if tests?
8570 (invoke "zope-testrunner" "--test-path=src")
8571 (format #t "test suite not run~%")))))))
8572 (propagated-inputs (list python-zope-interface))
8573 (native-inputs
8574 (list python-zodbpickle
8575 python-zope-component-bootstrap
8576 python-zope-location-bootstrap
8577 python-zope-proxy
8578 python-zope-schema
8579 python-zope-testing
8580 python-zope-testrunner
8581 python-setuptools))
8582 (home-page "https://zopecopy.readthedocs.io")
8583 (synopsis "Pluggable object copying mechanism")
8584 (description
8585 "This package provides a pluggable mechanism for copying persistent objects.")
8586 (license license:zpl2.1)))
8587
8588(define-public python-zope-proxy
8589 (package
8590 (name "python-zope-proxy")
8591 (version "7.0")
8592 (source
8593 (origin
8594 (method git-fetch)
8595 (uri (git-reference
8596 (url "https://github.com/zopefoundation/zope.proxy")
8597 (commit version)))
8598 (file-name (git-file-name name version))
8599 (sha256
8600 (base32 "00r9f4n0cl3fyc5gyf5l43zh95cmzx1gz6wr04k17d7wm2gmivyn"))))
8601 (build-system pyproject-build-system)
8602 (arguments
8603 (list
8604 #:phases
8605 #~(modify-phases %standard-phases
8606 (replace 'check
8607 (lambda* (#:key tests? #:allow-other-keys)
8608 (if tests?
8609 (invoke "zope-testrunner" "--test-path=src")
8610 (format #t "test suite not run~%")))))))
8611 (native-inputs
8612 (list python-zope-location-bootstrap
8613 python-zope-security-bootstrap
8614 python-zope-testrunner
8615 python-setuptools))
8616 (propagated-inputs (list python-zope-interface))
8617 (home-page "https://zopeproxy.readthedocs.io")
8618 (synopsis "Generic, transparent proxies")
8619 (description
8620 "Zope.proxy provides generic, transparent proxies for Python. Proxies are
8621special objects which serve as mostly-transparent wrappers around another
8622object, intervening in the apparent behavior of the wrapped object only when
8623necessary to apply the policy (e.g., access checking, location brokering,
8624etc.) for which the proxy is responsible.")
8625 (license license:zpl2.1)))
8626
8627(define-public python-zope-proxy-bootstrap
8628 (python-zope-bootstrap-package python-zope-proxy))
8629
8630(define-public python-zope-hookable
8631 (package
8632 (name "python-zope-hookable")
8633 (version "7.0")
8634 (source
8635 (origin
8636 (method git-fetch)
8637 (uri (git-reference
8638 (url "https://github.com/zopefoundation/zope.hookable")
8639 (commit version)))
8640 (file-name (git-file-name name version))
8641 (sha256
8642 (base32 "1l94xzzpyslpgv2ghvl5qzpfcsq02kp04fmvl95d6jcmivmmr4m8"))))
8643 (build-system pyproject-build-system)
8644 (arguments
8645 (list
8646 #:phases
8647 #~(modify-phases %standard-phases
8648 (replace 'check
8649 (lambda* (#:key tests? #:allow-other-keys)
8650 (if tests?
8651 (invoke "zope-testrunner" "--test-path=src")
8652 (format #t "test suite not run~%")))))))
8653 (native-inputs (list python-zope-testing python-zope-testrunner
8654 python-setuptools))
8655 (home-page "https://zopehookable.readthedocs.io")
8656 (synopsis "Zope hookable")
8657 (description
8658 "This package supports the efficient creation of hookable objects, which
8659are callable objects that are meant to be optionally replaced. The idea is
8660that you create a function that does some default thing and make i hookable.
8661Later, someone can modify what it does by calling its sethook method and
8662changing its implementation. All users of the function, including those that
8663imported it, will see the change.")
8664 (license license:zpl2.1)))
8665
8666(define-public python-zope-location
8667 (package
8668 (name "python-zope-location")
8669 (version "6.0")
8670 (source
8671 (origin
8672 (method git-fetch)
8673 (uri (git-reference
8674 (url "https://github.com/zopefoundation/zope.location")
8675 (commit version)))
8676 (file-name (git-file-name name version))
8677 (sha256
8678 (base32 "1jfsmbxj6hz7kmk5b0351b63ssm7qfkgqmz9v7xb7wwlmxsxkcdk"))))
8679 (build-system pyproject-build-system)
8680 (arguments
8681 (list
8682 #:phases
8683 #~(modify-phases %standard-phases
8684 (replace 'check
8685 (lambda* (#:key tests? #:allow-other-keys)
8686 (if tests?
8687 (invoke "zope-testrunner" "--test-path=src")
8688 (format #t "test suite not run~%")))))))
8689 (native-inputs (list python-zope-testrunner python-setuptools))
8690 (propagated-inputs (list python-zope-interface python-zope-proxy
8691 python-zope-schema))
8692 (home-page "https://zopelocation.readthedocs.io")
8693 (synopsis "Zope location library")
8694 (description
8695 "Zope.location implements the concept of \"locations\" in Zope3, which
8696are are special objects that have a structural location.")
8697 (license license:zpl2.1)))
8698
8699(define-public python-zope-location-bootstrap
8700 (python-zope-bootstrap-package python-zope-location))
8701
8702(define-public python-zope-security
8703 (package
8704 (name "python-zope-security")
8705 (version "7.3")
8706 (source
8707 (origin
8708 (method git-fetch)
8709 (uri (git-reference
8710 (url "https://github.com/zopefoundation/zope.security")
8711 (commit version)))
8712 (file-name (git-file-name name version))
8713 (sha256
8714 (base32 "06x6qcls2mdl05xnsyy5h70mbgij8xb6ksxbawzrc23cq04nkvx7"))))
8715 (build-system pyproject-build-system)
8716 (arguments
8717 (list
8718 #:phases
8719 #~(modify-phases %standard-phases
8720 (replace 'check
8721 (lambda* (#:key tests? #:allow-other-keys)
8722 (if tests?
8723 (invoke "zope-testrunner" "--test-path=src")
8724 (format #t "test suite not run~%")))))))
8725 (propagated-inputs
8726 (list python-zope-component
8727 python-zope-i18nmessageid
8728 python-zope-interface
8729 python-zope-location
8730 python-zope-proxy
8731 python-zope-schema))
8732 (native-inputs
8733 (list python-btrees
8734 python-zope-component-bootstrap
8735 python-zope-configuration-bootstrap
8736 python-zope-location-bootstrap
8737 python-zope-testing
8738 python-zope-testrunner
8739 python-setuptools))
8740 (home-page "https://zopesecurity.readthedocs.io")
8741 (synopsis "Zope security framework")
8742 (description "Zope.security provides a generic mechanism to implement
8743security policies on Python objects.")
8744 (license license:zpl2.1)))
8745
8746(define-public python-zope-security-bootstrap
8747 (package
8748 (inherit (python-zope-bootstrap-package python-zope-security))
8749 (propagated-inputs
8750 (list python-zope-i18nmessageid
8751 python-zope-interface
8752 python-zope-proxy-bootstrap
8753 python-zope-schema))))
8754
8755(define-public python-zope-component
8756 (package
8757 (name "python-zope-component")
8758 (version "7.0")
8759 (source
8760 (origin
8761 (method git-fetch)
8762 (uri (git-reference
8763 (url "https://github.com/zopefoundation/zope.component")
8764 (commit version)))
8765 (file-name (git-file-name name version))
8766 (sha256
8767 (base32 "1jygzhcg9rppsrd8cwvm0944naq1ldjf0vcpgsz0glwcdnr7cyfw"))))
8768 (build-system pyproject-build-system)
8769 (arguments
8770 (list
8771 #:phases
8772 #~(modify-phases %standard-phases
8773 (replace 'check
8774 (lambda* (#:key tests? #:allow-other-keys)
8775 (if tests?
8776 (invoke "zope-testrunner" "--test-path=src")
8777 (format #t "test suite not run~%")))))))
8778 (native-inputs
8779 (list python-persistent
8780 python-zope-configuration-bootstrap
8781 python-zope-i18nmessageid
8782 python-zope-location-bootstrap
8783 python-zope-proxy-bootstrap
8784 python-zope-security-bootstrap
8785 python-zope-testing
8786 python-zope-testrunner
8787 python-setuptools))
8788 (propagated-inputs
8789 (list python-zope-deferredimport python-zope-deprecation
8790 python-zope-event python-zope-hookable python-zope-interface))
8791 (home-page "https://zopecomponent.readthedocs.io")
8792 (synopsis "Zope Component Architecture")
8793 (description
8794 "Zope.component represents the core of the Zope Component Architecture.
8795Together with the zope.interface package, it provides facilities for defining,
8796registering and looking up components.")
8797 (license license:zpl2.1)))
8798
8799(define-public python-zope-component-bootstrap
8800 (python-zope-bootstrap-package python-zope-component))
8801
8802(define-public python-zope-deferredimport
8803 (package
8804 (name "python-zope-deferredimport")
8805 (version "6.0")
8806 (source
8807 (origin
8808 (method git-fetch)
8809 (uri (git-reference
8810 (url "https://github.com/zopefoundation/zope.deferredimport")
8811 (commit version)))
8812 (file-name (git-file-name name version))
8813 (sha256
8814 (base32 "08j728nn1la570nny1xz1xvxcm9hf2mcc3im1bzcxxrrxh4kw3zd"))))
8815 (build-system pyproject-build-system)
8816 (arguments
8817 (list
8818 #:phases
8819 #~(modify-phases %standard-phases
8820 (replace 'check
8821 (lambda* (#:key tests? #:allow-other-keys)
8822 (if tests?
8823 (invoke "zope-testrunner" "--test-path=src")
8824 (format #t "test suite not run~%")))))))
8825 (propagated-inputs (list python-zope-proxy))
8826 (native-inputs (list python-zope-testrunner python-setuptools))
8827 (home-page "https://zopedeferredimport.readthedocs.io")
8828 (synopsis "Defer imports until used by code")
8829 (description
8830 "Often, especially for package modules, you want to import names for
8831convenience, but not actually perform the imports until necessary. The
8832@code{zope.deferredimport} package provided facilities for defining names in
8833modules that will be imported from somewhere else when used. You can also cause
8834deprecation warnings to be issued when a variable is used.")
8835 (license license:zpl2.1)))
8836
8837(define-public python-ndg-httpsclient
8838 (package
8839 (name "python-ndg-httpsclient")
8840 (version "0.5.1")
8841 (source
8842 (origin
8843 (method git-fetch)
8844 (uri (git-reference
8845 (url "https://github.com/cedadev/ndg_httpsclient/")
8846 (commit version)))
8847 (file-name (git-file-name name version))
8848 (sha256
8849 (base32 "0lhsgs4am4xyjssng5p0vkfwqncczj1dpa0vss4lrhzq86mnn5rz"))))
8850 (build-system pyproject-build-system)
8851 (arguments
8852 (list
8853 #:tests? #f)) ;Tests appear to require networking.
8854 (native-inputs (list python-setuptools))
8855 (propagated-inputs (list python-pyasn1 python-pyopenssl))
8856 (synopsis "HTTPS support for Python's httplib and urllib2")
8857 (description
8858 "This is a HTTPS client implementation for httplib and urllib2 based on
8859PyOpenSSL. PyOpenSSL provides a more fully-featured SSL implementation over
8860the default provided with Python and, importantly, enables full verification
8861of the SSL peer.")
8862 (home-page "https://github.com/cedadev/ndg_httpsclient/")
8863 (license license:bsd-3)))
8864
8865(define-public python-netaddr
8866 (package
8867 (name "python-netaddr")
8868 (version "1.3.0")
8869 (source
8870 (origin
8871 (method url-fetch)
8872 (uri (pypi-uri "netaddr" version))
8873 (sha256
8874 (base32 "12p4ysgawhgkka0sz1dkwgwc2za80dxdp9wvfxivfldmjnc3sg2w"))))
8875 (build-system pyproject-build-system)
8876 (native-inputs (list python-poetry-core
8877 python-pytest
8878 python-setuptools
8879 python-wheel))
8880 (home-page "https://netaddr.readthedocs.io")
8881 (synopsis "Pythonic manipulation of network addresses")
8882 (description
8883 "A Python library for representing and manipulating IPv4, IPv6, CIDR, EUI
8884and MAC network addresses.")
8885 (license license:bsd-3)))
8886
8887(define-public python-nh3
8888 (package
8889 (name "python-nh3")
8890 (version "0.2.20")
8891 (source
8892 (origin
8893 (method url-fetch)
8894 (uri (pypi-uri "nh3" version))
8895 (sha256
8896 (base32 "1mcf3y5294glji9lhzh57wymw4srbvzdg0kcakm0p2pqgwnw81cp"))))
8897 (build-system pyproject-build-system)
8898 (arguments
8899 (list
8900 #:imported-modules `(,@%cargo-build-system-modules
8901 ,@%pyproject-build-system-modules)
8902 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
8903 (guix build pyproject-build-system)
8904 (guix build utils))
8905 #:phases
8906 #~(modify-phases %standard-phases
8907 (add-after 'unpack 'prepare-cargo-build-system
8908 (lambda args
8909 (for-each
8910 (lambda (phase)
8911 (format #t "Running cargo phase: ~a~%" phase)
8912 (apply (assoc-ref cargo:%standard-phases phase)
8913 #:cargo-target #$(cargo-triplet)
8914 args))
8915 '(unpack-rust-crates
8916 configure
8917 check-for-pregenerated-files
8918 patch-cargo-checksums)))))))
8919 (native-inputs
8920 (append
8921 (list maturin python-pytest rust `(,rust "cargo"))
8922 (or (and=> (%current-target-system)
8923 (compose list make-rust-sysroot))
8924 '())))
8925 (inputs (cargo-inputs 'python-nh3))
8926 (home-page "https://nh3.readthedocs.io")
8927 (synopsis "Python bindings to Ammonia HTML sanitization library")
8928 (description "This package provides Python bindings to Ammonia HTML
8929sanitizer Rust crate.")
8930 (license license:expat)))
8931
8932(define-public python-noiseprotocol
8933 (package
8934 (name "python-noiseprotocol")
8935 (version "0.3.1")
8936 (source
8937 (origin
8938 (method git-fetch)
8939 (uri (git-reference
8940 (url "https://github.com/plizonczyk/noiseprotocol")
8941 (commit (string-append "v" version))))
8942 (file-name (git-file-name name version))
8943 (sha256
8944 (base32 "1mk0rqpjifdv3v1cjwkdnjbrfmzzjm9f3qqs1r8vii4j2wvhm6am"))))
8945 (build-system pyproject-build-system)
8946 (propagated-inputs (list python-cryptography))
8947 (native-inputs (list python-setuptools python-pytest))
8948 (home-page "https://github.com/plizonczyk/noiseprotocol")
8949 (synopsis "Implementation of Noise Protocol Framework")
8950 (description
8951 "This package provides an implementation of Noise Protocol Framework.")
8952 (license license:expat)))
8953
8954(define-public python-webrtcvad-wheels
8955 (package
8956 (name "python-webrtcvad-wheels")
8957 (version "2.0.14")
8958 (source
8959 (origin
8960 (method git-fetch)
8961 (uri (git-reference
8962 (url "https://github.com/daanzu/py-webrtcvad-wheels")
8963 (commit (string-append "v" version))))
8964 (file-name (git-file-name name version))
8965 (sha256
8966 (base32 "0sqgg8jmg2j14f4h96h0rs42kr460v65lhanps6lhdvj5zp81cbh"))))
8967 (build-system pyproject-build-system)
8968 (native-inputs (list python-psutil python-pytest python-setuptools))
8969 (home-page "https://github.com/daanzu/py-webrtcvad-wheels")
8970 (synopsis "Python interface to the WebRTC Voice Activity Detector (VAD)")
8971 (description
8972 "This package provides a Python interface to the Google
8973@url{https://webrtc.org/, WebRTC} @acronym{VAD, Voice Activity Detector}.")
8974 (license license:expat)))
8975
8976(define-public python-websocket-client
8977 (package
8978 (name "python-websocket-client")
8979 (version "1.8.0")
8980 (source
8981 (origin
8982 (method url-fetch)
8983 (uri (pypi-uri "websocket_client" version))
8984 (sha256
8985 (base32 "1nn3qi5g59j55wfy2z02j6lq2cm281fq0wi406b2yqys8jgxyf9j"))))
8986 (build-system pyproject-build-system)
8987 (arguments
8988 (list
8989 #:test-flags
8990 ;; This test requires networking.
8991 '(list "-k" "not testConnect")))
8992 (native-inputs
8993 (list python-pysocks
8994 python-pytest
8995 python-setuptools
8996 python-websockets
8997 python-wheel))
8998 (home-page "https://github.com/websocket-client/websocket-client")
8999 (synopsis "WebSocket client for Python")
9000 (description "The Websocket-client module provides the low level APIs for
9001WebSocket usage in Python programs.")
9002 (license license:lgpl2.1+)))
9003
9004(define-public python-websocket-client-0.59
9005 (package
9006 (inherit python-websocket-client)
9007 (version "0.59.0")
9008 (source
9009 (origin
9010 (method url-fetch)
9011 (uri (pypi-uri "websocket-client" version))
9012 (sha256
9013 (base32 "0p0cz2mdissq7iw1n7jrmsfir0jfmgs1dvnpnrx477ffx9hbsxnk"))))
9014 (native-inputs
9015 (modify-inputs native-inputs
9016 (append python-six)))))
9017
9018(define-public python-purl
9019 (package
9020 (name "python-purl")
9021 (version "1.6")
9022 (source
9023 (origin
9024 (method git-fetch)
9025 (uri (git-reference
9026 (url "https://github.com/codeinthehole/purl")
9027 (commit version)))
9028 (file-name (git-file-name name version))
9029 (sha256
9030 (base32 "01zngf0s0qfsrsk0skn57frbzyscwv8467pfjk6hxdfgdx2wkg95"))))
9031 (build-system pyproject-build-system)
9032 (arguments
9033 (list
9034 #:test-flags #~(list "--pyargs" "./tests")))
9035 (native-inputs (list python-pytest python-setuptools))
9036 (propagated-inputs (list python-six))
9037 (home-page "https://github.com/codeinthehole/purl")
9038 (synopsis "Python package for URL manipulation")
9039 (description "Purl is a Python package for handling URLs.")
9040 (license license:expat)))
9041
9042(define-public python-requests
9043 (package
9044 (name "python-requests")
9045 (version "2.34.2")
9046 (source (origin
9047 (method url-fetch)
9048 (uri (pypi-uri "requests" version))
9049 (sha256
9050 (base32
9051 "1vdrc3lq9x848760n7mdhn8whsfslk30pmnnk0v4caafmr69527j"))))
9052 (build-system pyproject-build-system)
9053 (arguments
9054 (list #:test-flags
9055 ;; These require internet access
9056 '(list "--ignore=tests/test_requests.py"
9057 "-k" (string-append "not test_use_proxy_from_environment"
9058 " and not requests.sessions.Session"
9059 " and not requests.models.PreparedRequest"
9060 " and not requests.api.request")
9061 "tests/")))
9062 (propagated-inputs
9063 (list python-certifi
9064 python-charset-normalizer
9065 python-idna
9066 python-urllib3))
9067 (native-inputs
9068 (list python-pytest
9069 python-pytest-mock
9070 python-setuptools))
9071 (home-page "https://requests.readthedocs.io/")
9072 (synopsis "Python HTTP library")
9073 (description
9074 "Requests is a Python HTTP client library. It aims to be easier to use
9075than Python’s urllib2 library.")
9076 (license license:asl2.0)))
9077
9078(define-public python-requests-kerberos
9079 (package
9080 (name "python-requests-kerberos")
9081 (version "0.14.0")
9082 ;; No tests in the PyPI tarball.
9083 (source
9084 (origin
9085 (method git-fetch)
9086 (uri (git-reference
9087 (url "https://github.com/requests/requests-kerberos")
9088 (commit (string-append "v" version))))
9089 (file-name (git-file-name name version))
9090 (sha256
9091 (base32 "0s30pcnlir3j2jmf7yh065f294cf3x0x5i3ldskn8mm0a3657mv3"))))
9092 (build-system pyproject-build-system)
9093 (propagated-inputs (list python-cryptography
9094 python-pyspnego
9095 python-requests))
9096 (native-inputs (list python-pytest python-pytest-mock python-setuptools
9097 python-wheel))
9098 (home-page "https://github.com/requests/requests-kerberos")
9099 (synopsis "Kerberos authentication handler for python-requests")
9100 (description "This package provides a Kerberos authentication handler for
9101python-requests.")
9102 (license license:isc)))
9103
9104(define-public python-requests-unixsocket2
9105 (package
9106 (name "python-requests-unixsocket2")
9107 (version "1.0.1")
9108 (source
9109 (origin
9110 (method git-fetch)
9111 (uri (git-reference
9112 (url "https://gitlab.com/thelabnyc/requests-unixsocket2")
9113 (commit (string-append "v" version))))
9114 (sha256
9115 (base32 "0wb8ckagal9d6lfyl3pf9m45xn1krq6vg8kzciwv12chq9wwh0ra"))))
9116 (build-system pyproject-build-system)
9117 (native-inputs
9118 (list nss-certs-for-test
9119 python-hatchling
9120 python-pytest
9121 python-waitress))
9122 (propagated-inputs
9123 (list python-requests
9124 python-urllib3))
9125 (home-page "https://gitlab.com/thelabnyc/requests-unixsocket2")
9126 (synopsis "Talk HTTP via a UNIX domain socket")
9127 (description
9128 "This Python package lets you use the @code{requests} library to talk
9129HTTP via a UNIX domain socket.")
9130 (license license:asl2.0)))
9131
9132(define-public python-requests-ntlm
9133 (package
9134 (name "python-requests-ntlm")
9135 (version "1.3.0")
9136 (source
9137 (origin
9138 (method git-fetch)
9139 (uri (git-reference
9140 (url "https://github.com/requests/requests-ntlm")
9141 (commit (string-append "v" version))))
9142 (file-name (git-file-name name version))
9143 (sha256
9144 (base32 "0snsk66zdihdlyfjz2zgpyfgdyjg814m3cc4g3my09hdnb5xvagv"))))
9145 (build-system pyproject-build-system)
9146 (arguments
9147 (list
9148 #:test-flags
9149 ;; XXX: Connection refused.
9150 #~(list "-k" (string-join
9151 (list "not test_ntlm_http_with_cbt"
9152 "test_ntlm_http_without_cbt"
9153 "test_ntlm_https_with_cbt"
9154 "test_ntlm_https_without_cbt")
9155 " and not "))
9156 #:phases
9157 #~(modify-phases %standard-phases
9158 (add-before 'check 'spawn-test-server
9159 (lambda _
9160 ;; Taken from .github/workflows/ci.yml.
9161 (spawn "python"
9162 (list "python" "-m" "tests.test_server")))))))
9163 (propagated-inputs
9164 (list python-cryptography python-pyspnego python-requests))
9165 (native-inputs (list python-flask python-pytest python-setuptools))
9166 (home-page "https://github.com/requests/requests-ntlm")
9167 (synopsis "NTLM authentication support for Requests")
9168 (description
9169 "This package allows for HTTP NTLM authentication using the requests
9170library.")
9171 (license license:isc)))
9172
9173(define-public python-requests-mock
9174 (package
9175 (name "python-requests-mock")
9176 (version "1.12.1")
9177 (source
9178 (origin
9179 (method url-fetch)
9180 (uri (pypi-uri "requests-mock" version))
9181 (sha256
9182 (base32 "008l6xysgs6ax56lairg1li5i4bb04i2z19w5bl5claj7crjxqg9"))))
9183 (build-system pyproject-build-system)
9184 (native-inputs
9185 (list python-purl
9186 python-pytest
9187 python-requests-futures
9188 python-setuptools
9189 python-setuptools-scm
9190 python-testtools))
9191 (propagated-inputs
9192 (list python-requests))
9193 (home-page "https://requests-mock.readthedocs.org/")
9194 (synopsis "Mock out responses from the requests package")
9195 (description
9196 "This module provides a building block to stub out the HTTP requests
9197portions of your testing code.")
9198 (license license:asl2.0)))
9199
9200(define-public python-requests-toolbelt
9201 (package
9202 (name "python-requests-toolbelt")
9203 (version "1.0.0")
9204 (source
9205 (origin
9206 (method url-fetch)
9207 (uri (pypi-uri "requests-toolbelt" version))
9208 (sha256
9209 (base32 "1ijvip427ki177ycrblcn1mfgsq7ixzpvqqfvidjn0a7s2is10bn"))))
9210 (build-system pyproject-build-system)
9211 (arguments
9212 (list
9213 #:test-flags
9214 ;; Requiring networking or fail due not valid certs: AttributeError:
9215 ;; 'MockHTTPResponse' object has no attribute 'close'
9216 #~(list "-k" (string-append "not test_dump_all"
9217 " and not test_dump_response"
9218 " and not test_prepared_request_override_base"
9219 " and not test_prepared_request_with_base"
9220 " and not test_request_override_base"
9221 " and not test_request_with_base"))))
9222 (native-inputs
9223 (list python-betamax
9224 python-mock
9225 python-pyopenssl
9226 python-pytest
9227 python-setuptools
9228 python-trustme
9229 python-wheel))
9230 (propagated-inputs
9231 (list python-requests))
9232 (synopsis "Extensions to python-requests")
9233 (description "This is a toolbelt of useful classes and functions to be used
9234with python-requests.")
9235 (home-page "https://github.com/requests/toolbelt/")
9236 (license license:asl2.0)))
9237
9238(define-public python-requests-ftp
9239 (package
9240 (name "python-requests-ftp")
9241 (version "0.3.1")
9242 (source
9243 (origin
9244 (method git-fetch)
9245 (uri (git-reference
9246 (url "https://github.com/Lukasa/requests-ftp")
9247 (commit (string-append "v" version))))
9248 (file-name (git-file-name name version))
9249 (sha256
9250 (base32 "1c7xbz2fxb12ldaw2pkfg5qd29g6slf4a2gavhqvz26cd1r82ny7"))))
9251 (build-system pyproject-build-system)
9252 (arguments
9253 ;; XXX: No connection adapters found.
9254 (list #:test-flags #~(list "--ignore=tests/test_ftp_proxy.py")))
9255 (native-inputs
9256 (list python-pyftpdlib python-pytest python-setuptools python-six))
9257 (propagated-inputs (list python-requests))
9258 (home-page "https://github.com/Lukasa/requests-ftp")
9259 (synopsis "FTP Transport Adapter for Requests")
9260 (description "Requests-FTP is an implementation of a simple FTP transport
9261adapter for use with the Requests library.")
9262 (license license:asl2.0)))
9263
9264(define-public python-mohawk
9265 (let ((commit "b7899166880e890f01cf2531b5686094ba08df8f")
9266 (revision "0"))
9267 (package
9268 (name "python-mohawk")
9269 (version (git-version "1.1.0" revision commit))
9270 (source
9271 (origin
9272 (method git-fetch)
9273 (uri (git-reference
9274 (url "https://github.com/kumar303/mohawk")
9275 (commit commit)))
9276 (file-name (git-file-name name version))
9277 (sha256
9278 (base32 "00y9fimcj851rk2770wqk61fac9pnxfnzca4fvsci57zw18i50m6"))
9279 (patches
9280 (search-patches "python-mohawk-pytest.patch"))))
9281 (build-system pyproject-build-system)
9282 (arguments
9283 (list #:test-flags #~(list "mohawk/tests.py")))
9284 (native-inputs (list python-pytest python-setuptools))
9285 (propagated-inputs (list python-six)) ;TODO: remove python-mohawk when
9286 ;python-six is removed?
9287 (home-page "https://github.com/kumar303/mohawk")
9288 (synopsis "Library for Hawk HTTP authorization")
9289 (description
9290 "Mohawk is an alternate Python implementation of the Hawk HTTP
9291authorization scheme.")
9292 (license license:bsd-3))))
9293
9294(define-public python-msal
9295 (package
9296 (name "python-msal")
9297 (version "1.34.0")
9298 (home-page
9299 "https://github.com/AzureAD/microsoft-authentication-library-for-python")
9300 (source
9301 (origin
9302 (method git-fetch)
9303 (uri (git-reference
9304 (url home-page)
9305 (commit version)))
9306 (file-name (git-file-name name version))
9307 (sha256
9308 (base32 "1xcyiv742ihnzypjw7syamnhqffdy6wsvvv0f5jcl3pap0apbk0z"))
9309 (patches (search-patches "python-msal-requests.patch"))))
9310 (build-system pyproject-build-system)
9311 (arguments
9312 (list
9313 #:test-flags
9314 #~(list
9315 "--ignore=tests/test_benchmark.py"
9316 ;; XXX: Ignoring cryptography version scheme tests.
9317 "-k"
9318 "not test_ceiling_should_be_latest_cryptography_version_plus_three"
9319 ;; XXX: These tests try to access the network.
9320 "--ignore=tests/test_application.py"
9321 "--ignore=tests/test_ccs.py"
9322 ;; XXX: These tests assume they are run on Windows.
9323 "--ignore=tests/test_mi.py")
9324 #:phases
9325 #~(modify-phases %standard-phases
9326 (add-after 'unpack 'set-cryptography-version
9327 (lambda _
9328 (substitute* "tests/test_cryptography.py"
9329 (("^latest_cryptography_version = @version@")
9330 (format #f "latest_cryptography_version = ~s"
9331 #$(package-version
9332 (this-package-input "python-cryptography")))))))
9333 (add-before 'check 'configure-tests
9334 (lambda* (#:key tests? #:allow-other-keys)
9335 (when tests?
9336 (setenv "TRAVIS_TAG" "1")))))))
9337 (native-inputs
9338 (list nss-certs-for-test python-mock python-pytest python-setuptools))
9339 (propagated-inputs (list python-cryptography python-pyjwt python-requests))
9340 (synopsis "Microsoft Authentication Library (MSAL) for Python")
9341 (description
9342 "The Microsoft Authentication Library for Python enables applications to
9343integrate with the Microsoft identity platform. It allows you to sign in
9344users or apps with Microsoft identities (Azure AD, Microsoft Accounts and
9345Azure AD B2C accounts) and obtain tokens to call Microsoft APIs such as
9346Microsoft Graph or your own APIs registered with the Microsoft identity
9347platform. It is built using industry standard OAuth2 and OpenID Connect
9348protocols.")
9349 (license license:expat)))
9350
9351(define-public python-oauthlib
9352 (package
9353 (name "python-oauthlib")
9354 (version "3.3.1")
9355 (source
9356 (origin
9357 (method git-fetch)
9358 (uri (git-reference
9359 (url "https://github.com/oauthlib/oauthlib")
9360 (commit (string-append "v" version))))
9361 (file-name (git-file-name name version))
9362 (sha256
9363 (base32 "0aa38lpa6s1k56v7w7kw2w4l159kaz4gn03m698a8hfdjkx92fb5"))))
9364 (build-system pyproject-build-system)
9365 (native-inputs (list python-pytest python-mock python-setuptools))
9366 (propagated-inputs (list python-cryptography python-pyjwt python-blinker))
9367 (home-page "https://github.com/oauthlib/oauthlib")
9368 (synopsis "OAuth implementation for Python")
9369 (description
9370 "Oauthlib is a generic, spec-compliant, thorough implementation of the
9371OAuth request-signing logic.")
9372 (license license:bsd-3)))
9373
9374(define-public python-urllib3
9375 (package
9376 (name "python-urllib3")
9377 (version "2.7.0")
9378 (source
9379 (origin
9380 (method url-fetch)
9381 (uri (pypi-uri "urllib3" version))
9382 (sha256
9383 (base32
9384 "0k2za0kdl4y8mdhay0wbnf6522n4ybr61gk7gik19srwnv1hw7i3"))))
9385 (build-system pyproject-build-system)
9386 (arguments `(#:tests? #f))
9387 (native-inputs
9388 (list python-hatch-vcs
9389 python-hatchling
9390 python-setuptools-scm))
9391 (propagated-inputs
9392 (append
9393 ;; These 5 inputs are used to build urrlib3[secure]
9394 (list python-certifi
9395 python-idna
9396 python-pysocks)
9397 (if (member (%current-system)
9398 (package-transitive-supported-systems python-cryptography))
9399 (list python-cryptography)
9400 '())
9401 (if (member (%current-system)
9402 (package-transitive-supported-systems python-pyopenssl))
9403 (list python-pyopenssl)
9404 '())))
9405 (home-page "https://urllib3.readthedocs.io/")
9406 (synopsis "HTTP library with thread-safe connection pooling")
9407 (description
9408 "Urllib3 supports features left out of urllib and urllib2 libraries. It
9409can reuse the same socket connection for multiple requests, it can POST files,
9410supports url redirection and retries, and also gzip and deflate decoding.")
9411 (license license:expat)))
9412
9413(define-public python-urllib3-1.26
9414 (package
9415 (inherit python-urllib3)
9416 (version "1.26.17")
9417 (source
9418 (origin
9419 (method url-fetch)
9420 (uri (pypi-uri "urllib3" version))
9421 (sha256
9422 (base32
9423 "08fzhaf77kbjj5abpl9xag6fpfxkdp1k5s7sqd3ayacdq91a5mi4"))))
9424 (native-inputs
9425 (list python-setuptools
9426 python-wheel))))
9427
9428(define-public python-wsgiproxy2
9429 (package
9430 (name "python-wsgiproxy2")
9431 (version "0.5.1")
9432 (source
9433 (origin
9434 (method git-fetch)
9435 (uri (git-reference
9436 (url "https://github.com/gawel/WSGIProxy2/")
9437 (commit version)))
9438 (file-name (git-file-name name version))
9439 (sha256
9440 (base32 "0aw9ibla2cqzlbm3vzyk1yk3d8pccpbpdkqx99q30hq1fz1izsm2"))))
9441 (build-system pyproject-build-system)
9442 (arguments (list #:test-backend #~'unittest))
9443 (native-inputs (list python-webtest python-setuptools))
9444 (propagated-inputs (list python-requests python-six python-urllib3
9445 python-webob))
9446 (home-page "https://github.com/gawel/WSGIProxy2/")
9447 (synopsis "WSGI Proxy with various http client backends")
9448 (description
9449 "WSGI turns HTTP requests into WSGI function calls. WSGIProxy turns WSGI
9450function calls into HTTP requests. It also includes code to sign requests and
9451pass private data, and to spawn subprocesses to handle requests.")
9452 (license license:expat)))
9453
9454(define-public python-pastedeploy
9455 (package
9456 (name "python-pastedeploy")
9457 (version "3.1.0")
9458 (source
9459 (origin
9460 (method url-fetch)
9461 (uri (pypi-uri "PasteDeploy" version))
9462 (sha256
9463 (base32 "15as15mgz9xn33abwrp0x0mbj537ib3q47z8ky5475c05wasznwx"))))
9464 (build-system pyproject-build-system)
9465 (native-inputs (list python-pytest python-setuptools))
9466 (home-page "https://pylonsproject.org/")
9467 (synopsis "Load, configure, and compose WSGI applications and servers")
9468 (description
9469 "This tool provides code to load WSGI applications and servers from URIs;
9470these URIs can refer to Python Eggs for INI-style configuration files. Paste
9471Script provides commands to serve applications based on this configuration
9472file.")
9473 (license license:expat)))
9474
9475(define-public python-webtest
9476 (package
9477 (name "python-webtest")
9478 (version "3.0.6")
9479 (source
9480 (origin
9481 (method url-fetch)
9482 (uri (pypi-uri "webtest" version))
9483 (sha256
9484 (base32 "0jwl8i9xvm5xim1h2jrwfbqac1g3fpiazfdwfp2md3s4899gsmj2"))))
9485 (build-system pyproject-build-system)
9486 (arguments
9487 ;; Tests require python-pyquery, which creates a circular dependency.
9488 `(#:tests? #f))
9489 (native-inputs
9490 (list python-setuptools))
9491 (propagated-inputs
9492 (list python-beautifulsoup4
9493 python-waitress
9494 python-webob))
9495 (home-page "https://docs.pylonsproject.org/projects/webtest/")
9496 (synopsis "Helper to test WSGI applications")
9497 (description
9498 "Webtest allows you to test your Python web applications without
9499starting an HTTP server. It supports anything that supports the minimum of
9500WSGI.")
9501 (license license:expat)))
9502
9503(define-public python-flask
9504 (package
9505 (name "python-flask")
9506 (version "3.1.3")
9507 (source
9508 (origin
9509 (method git-fetch)
9510 (uri (git-reference
9511 (url "https://github.com/pallets/flask")
9512 (commit version)))
9513 (file-name (git-file-name name version))
9514 (sha256
9515 (base32 "006s5rm4syg48ymmwlnrkx8f8j758waksvhdsfiqx51zv52c0p8l"))))
9516 (build-system pyproject-build-system)
9517 (arguments
9518 (list
9519 #:test-flags
9520 ;; assert 404 == 400
9521 ;; This test is removed on master branch.
9522 #~(list (string-append "--deselect=tests/test_reqctx.py"
9523 "::test_bad_environ_raises_bad_request"))))
9524 (native-inputs
9525 (list python-flit-core
9526 python-pytest))
9527 (propagated-inputs
9528 (list python-blinker
9529 python-click
9530 python-itsdangerous
9531 python-jinja2
9532 python-markupsafe
9533 python-werkzeug
9534 ;; [optional]
9535 python-asgiref
9536 python-dotenv))
9537 (home-page "https://palletsprojects.com/p/flask/")
9538 (synopsis "Microframework based on Werkzeug, Jinja2 and good intentions")
9539 (description "Flask is a micro web framework based on the Werkzeug toolkit
9540and Jinja2 template engine. It is called a micro framework because it does not
9541presume or force a developer to use a particular tool or library.")
9542 (license license:bsd-3)))
9543
9544(define-public python-flask-compress
9545 (package
9546 (name "python-flask-compress")
9547 (version "1.24")
9548 (source
9549 (origin
9550 (method git-fetch)
9551 (uri (git-reference
9552 (url "https://github.com/colour-science/flask-compress")
9553 (commit (string-append "v" version))))
9554 (file-name (git-file-name name version))
9555 (sha256
9556 (base32 "0mid5c34r75vax1r7l2l5sjjhs6bl8rbsdmhc7kz39snq6xw3cr5"))))
9557 (build-system pyproject-build-system)
9558 (native-inputs
9559 (list python-flask-caching
9560 python-pytest
9561 python-setuptools
9562 python-setuptools-scm))
9563 (propagated-inputs
9564 (list python-backports-zstd
9565 python-brotli
9566 python-flask))
9567 (home-page "https://github.com/colour-science/flask-compress")
9568 (synopsis "Compress responses in a Flask app")
9569 (description
9570 "This package lets you compress Flask application responses and static
9571files with gzip, deflate or brotli. Flask-Compress both adds the various
9572headers required for a compressed response and compresses the response data.")
9573 (license license:expat)))
9574
9575(define-public python-flask-seasurf
9576 (package
9577 (name "python-flask-seasurf")
9578 (version "2.0.0")
9579 (source (origin
9580 (method url-fetch)
9581 (uri (pypi-uri "Flask-SeaSurf" version))
9582 (sha256
9583 (base32
9584 "0g5dsm2ikv8q4qcrb2446pbs972l5wkxyfmxsriqdsl02nz06h4f"))))
9585 (build-system pyproject-build-system)
9586 (arguments
9587 (list #:tests? #false)) ;there are none
9588 (propagated-inputs (list python-flask))
9589 (native-inputs (list python-setuptools python-wheel))
9590 (home-page "https://github.com/maxcountryman/flask-seasurf/")
9591 (synopsis "CSRF extension for Flask")
9592 (description "SeaSurf is a Flask extension for preventing cross-site
9593request forgery (CSRF). CSRF attacks are problematic because the mechanism
9594they use is relatively easy to exploit. This extension attempts to aid you in
9595securing your application from such attacks. This extension is based on the
9596Django middleware.")
9597 (license license:bsd-3)))
9598
9599(define-public python-flask-wtf
9600 (package
9601 (name "python-flask-wtf")
9602 (version "1.2.2")
9603 (source
9604 (origin
9605 (method url-fetch)
9606 (uri (pypi-uri "Flask-WTF" version))
9607 (sha256
9608 (base32
9609 "0sv6hjva1fdizb7sr46230pplx8qz8rnb4bxrfy71xbc8cgfxlkr"))))
9610 (build-system pyproject-build-system)
9611 (propagated-inputs
9612 (list python-flask python-flask python-itsdangerous python-wtforms))
9613 (native-inputs
9614 (list python-hatchling python-pytest))
9615 (home-page "https://github.com/lepture/flask-wtf")
9616 (synopsis "Simple integration of Flask and WTForms")
9617 (description "Flask-WTF integrates Flask and WTForms, including CSRF, file
9618upload, and reCAPTCHA.")
9619 (license license:bsd-3)))
9620
9621(define-public python-flask-multistatic
9622 (package
9623 (name "python-flask-multistatic")
9624 (version "1.0")
9625 (source
9626 (origin
9627 (method url-fetch)
9628 (uri (pypi-uri "flask-multistatic" version))
9629 (sha256
9630 (base32
9631 "0p4v50rwv64wcd0zlq7rzl4waprwr4hj19s3cgf1isywa7jcisgm"))))
9632 (build-system pyproject-build-system)
9633 (arguments (list #:tests? #f)) ; No tests upstream.
9634 (native-inputs (list python-setuptools))
9635 (propagated-inputs (list python-flask))
9636 (home-page "https://pagure.io/flask-multistatic")
9637 (synopsis "Flask plugin to allow overriding static files")
9638 (description "@code{flask-multistatic} is a flask plugin that adds support
9639for overriding static files.")
9640 (license license:gpl3+)))
9641
9642(define-public python-responses
9643 (package
9644 (name "python-responses")
9645 (version "0.25.3")
9646 (source (origin
9647 (method url-fetch)
9648 (uri (pypi-uri "responses" version))
9649 (sha256
9650 (base32
9651 "1fld6lsa143md4lxccwxq9iyqm9d8a05i9sp7lqjibnrmd3r4yv1"))))
9652 (build-system pyproject-build-system)
9653 (native-inputs
9654 (list python-pytest
9655 python-pytest-asyncio
9656 python-pytest-httpserver
9657 python-setuptools
9658 python-tomli
9659 python-tomli-w
9660 python-wheel))
9661 (propagated-inputs
9662 (list python-requests
9663 python-pyyaml
9664 python-urllib3))
9665 (home-page "https://github.com/getsentry/responses")
9666 (synopsis "Utility for mocking out the `requests` Python library")
9667 (description "A utility library for mocking out the `requests` Python
9668library.")
9669 (license license:asl2.0)))
9670
9671(define-public python-grequests
9672 (let ((commit "60f70e99e942a2df378b4e4f6202dcf862754c2d")
9673 (revision "0"))
9674 (package
9675 (name "python-grequests")
9676 (version (git-version "0.7.0" revision commit))
9677 (source
9678 (origin
9679 (method git-fetch)
9680 (uri (git-reference
9681 (url "https://github.com/kennethreitz/grequests")
9682 (commit commit)))
9683 (file-name (git-file-name name version))
9684 (sha256
9685 (base32 "0132yv1rr4pmrmwasrnasqbnd80pi6rgy52608731p7lidkmxz9a"))))
9686 (build-system pyproject-build-system)
9687 (arguments
9688 (list
9689 ;; XXX: Most failing tests seem to be caused by network access,
9690 ;; but there is no easy/flag way to disable tests selectively.
9691 #:tests? #f
9692 #:test-backend #~'unittest
9693 #:test-flags #~(list "tests.py")))
9694 (propagated-inputs (list python-gevent python-requests))
9695 (native-inputs (list python-setuptools))
9696 (home-page "https://github.com/kennethreitz/grequests")
9697 (synopsis "Python library for asynchronous HTTP requests")
9698 (description
9699 "GRequests is a Python library that allows you to use @code{Requests}
9700with @code{Gevent} to make asynchronous HTTP Requests easily.")
9701 (license license:bsd-2))))
9702
9703(define-public python-gwebsockets
9704 (package
9705 (name "python-gwebsockets")
9706 (version "0.7")
9707 (source
9708 (origin
9709 (method git-fetch)
9710 (uri (git-reference
9711 (url "https://github.com/sugarlabs/gwebsockets")
9712 (commit (string-append "v" version))))
9713 (file-name (git-file-name name version))
9714 (sha256
9715 (base32 "0w422yz0qdix5xb6aqrrci1s1hy4whncspwb03m9ankqww0s1yv2"))))
9716 (build-system pyproject-build-system)
9717 (arguments (list #:tests? #f)) ; No tests upstream.
9718 (native-inputs (list python-setuptools))
9719 (propagated-inputs (list python-pygobject))
9720 (home-page "https://github.com/sugarlabs/gwebsockets")
9721 (synopsis "GLib based websockets server")
9722 (description
9723 "This package provides a websocket server written in Python. It uses GIO
9724for network communication and hence it easily integrates with the GLib
9725mainloop.")
9726 (license license:asl2.0)))
9727
9728(define-public python-geventhttpclient
9729 (package
9730 (name "python-geventhttpclient")
9731 (version "2.3.9")
9732 (source (origin
9733 (method git-fetch)
9734 (uri (git-reference
9735 (url "https://github.com/geventhttpclient/geventhttpclient")
9736 (commit version)
9737 (recursive? #true)))
9738 (file-name (git-file-name name version))
9739 (sha256
9740 (base32
9741 "1diq6n9sr92rsqbpxlbhbn1d22hrlzp6swykz9bfzh7sxpywa6j8"))))
9742 (build-system pyproject-build-system)
9743 (arguments
9744 (list
9745 #:test-flags
9746 ;; Disable network tests.
9747 '(list "-k"
9748 (string-append "not test_client_simple"
9749 " and not test_client_ssl"
9750 " and not test_client_with_default_headers"
9751 " and not test_client_without_leading_slash"
9752 " and not test_download"
9753 " and not test_fail_invalid_ca_certificate"
9754 " and not test_httpbin_multipart"
9755 " and not test_multi_queries_greenlet_safe"
9756 " and not test_no_form_encode_header"
9757 " and not test_no_form_encoded_header"
9758 " and not test_request_with_headers"
9759 " and not test_response_context_manager"
9760 " and not test_urllib_request"))))
9761 (native-inputs (list nss-certs-for-test
9762 python-dpkt python-pytest python-requests
9763 python-setuptools python-wheel))
9764 (propagated-inputs (list python-brotli python-certifi python-gevent
9765 python-urllib3))
9766 (home-page "https://github.com/geventhttpclient/geventhttpclient")
9767 (synopsis "HTTP client library for gevent")
9768 (description "@code{python-geventhttpclient} is a high performance,
9769concurrent HTTP client library for python using @code{gevent}.")
9770 (license license:expat)))
9771
9772(define-public python-gevent-websocket
9773 (package
9774 (name "python-gevent-websocket")
9775 (version "0.10.1")
9776 (source
9777 (origin
9778 (method url-fetch)
9779 (uri (pypi-uri "gevent-websocket" version))
9780 (sha256
9781 (base32 "1c2zv2rahp1gil3cj66hfsqgy0n35hz9fny3ywhr2319d0lz7bky"))))
9782 (build-system pyproject-build-system)
9783 (arguments
9784 (list #:tests? #f)) ; no tests in PyPI or git
9785 (native-inputs
9786 (list python-setuptools
9787 python-wheel))
9788 (propagated-inputs
9789 (list python-gevent))
9790 (home-page "https://gitlab.com/noppo/gevent-websocket")
9791 (synopsis "Websocket handler for the gevent pywsgi server")
9792 (description
9793 "Websocket handler for the gevent pywsgi server, a Python network
9794library.
9795
9796Features include:
9797@itemize
9798@item integration on both socket level or using an abstract interface
9799@item RPC and PubSub framework using @acronym{WebSocket Application Messaging
9800Protocol, WAMP}
9801@item easily extendible using a simple WebSocket protocol plugin API
9802@end itemize")
9803 (license license:asl2.0)))
9804
9805(define-public python-requests-oauthlib
9806 (package
9807 (name "python-requests-oauthlib")
9808 (version "2.0.0")
9809 (source
9810 (origin
9811 (method git-fetch)
9812 (uri (git-reference (url
9813 "https://github.com/requests/requests-oauthlib")
9814 (commit (string-append "v" version))))
9815 (file-name (git-file-name name version))
9816 (sha256 (base32 "0i0vnanxqilnf2rgng7n96rl8fzq0dbcl3rpl7zkxj50kv66nqwl"))))
9817 (build-system pyproject-build-system)
9818 (arguments
9819 (list
9820 #:test-flags
9821 #~(list
9822 "--ignore=tests/test_core.py" ; requires network access.
9823 "--ignore=tests/examples/test_native_spa_pkce_auth0.py"
9824 "-k" "not test_fetch_access_token"))) ; flaky tests.
9825 (native-inputs
9826 (list python-requests-mock python-pytest python-setuptools))
9827 (propagated-inputs
9828 (list python-oauthlib python-requests))
9829 (home-page "https://github.com/requests/requests-oauthlib")
9830 (synopsis "OAuthlib authentication support for Requests")
9831 (description
9832 "Requests-OAuthlib uses the Python Requests and OAuthlib libraries to
9833provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
9834 (license license:isc)))
9835
9836(define-public python-s3fs
9837 (package
9838 (name "python-s3fs")
9839 (version "2026.1.0")
9840 (source
9841 (origin
9842 (method url-fetch)
9843 (uri (pypi-uri "s3fs" version))
9844 (sha256
9845 (base32 "17fhx4qnpcwhrfckn27wdjvlxink1kcpaiganxij4fjmp7gm58xp"))))
9846 (build-system pyproject-build-system)
9847 ;; TODO: Many tests fail with "No such file or directory" raised by the
9848 ;; HTTP client.
9849 (arguments (list #:tests? #false))
9850 (native-inputs
9851 (list python-setuptools))
9852 (propagated-inputs
9853 (list python-aiobotocore
9854 python-aiohttp
9855 python-fsspec))
9856 (home-page "https://github.com/fsspec/s3fs/")
9857 (synopsis "Convenient filesystem interface over S3")
9858 (description "This package provides a convenient filesystem interface over
9859S3.")
9860 (license license:bsd-3)))
9861
9862(define-public python-s3transfer
9863 (package
9864 (name "python-s3transfer")
9865 (version "0.16.0")
9866 (source
9867 (origin
9868 (method url-fetch)
9869 (uri (pypi-uri "s3transfer" version))
9870 (sha256
9871 (base32 "087rmdwsn9drkh5rwwbfym5p8qvirc8gllnd54i7j9c04q9hz6cf"))))
9872 (build-system pyproject-build-system)
9873 (arguments
9874 (list
9875 ;; tests: 630 passed, 51 skipped
9876 #:test-flags
9877 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
9878 ;; Tests require networking.
9879 "--ignore" "tests/integration")))
9880 (native-inputs
9881 (list python-pytest
9882 python-pytest-xdist
9883 python-setuptools))
9884 (propagated-inputs
9885 (list python-botocore))
9886 (home-page "https://github.com/boto/s3transfer")
9887 (synopsis "Amazon S3 Transfer Manager")
9888 (description
9889 "S3transfer is a Python library for managing Amazon S3 transfers.")
9890 (license license:asl2.0)))
9891
9892(define-public python-flask-restful
9893 (package
9894 (name "python-flask-restful")
9895 (version "0.3.10")
9896 (source
9897 (origin
9898 (method url-fetch)
9899 (uri (pypi-uri "Flask-RESTful" version))
9900 (sha256
9901 (base32
9902 "0dzckjjz3aw8nmisr5g9mnv02s2nqlhblykr9ydqzpr703pz4jpy"))))
9903 (build-system pyproject-build-system)
9904 (arguments
9905 ;; See <https://github.com/flask-restful/flask-restful/issues/980>.
9906 (list #:tests? #f))
9907 (propagated-inputs
9908 (list python-aniso8601 python-flask python-pytz))
9909 (native-inputs
9910 (list python-blinker
9911 python-mock
9912 python-pytest
9913 python-setuptools
9914 python-six))
9915 (home-page "https://github.com/flask-restful/flask-restful/")
9916 (synopsis "Flask module for creating REST APIs")
9917 (description
9918 "This package contains a Flask module for creating REST APIs.")
9919 (license license:bsd-3)))
9920
9921(define-public python-flask-sqlalchemy
9922 (package
9923 (name "python-flask-sqlalchemy")
9924 ;; Released version fails tests in Python 3.12.
9925 (properties '((commit . "168cb4b7b50fe5176307a10d873781bfafc6eeda")
9926 (revision . "0")))
9927 (version (git-version "3.1.1"
9928 (assoc-ref properties 'revision)
9929 (assoc-ref properties 'commit)))
9930 (source
9931 (origin
9932 (method git-fetch)
9933 (uri (git-reference
9934 (url "https://github.com/pallets-eco/flask-sqlalchemy")
9935 (commit (assoc-ref properties 'commit))))
9936 (file-name (git-file-name name version))
9937 (sha256
9938 (base32
9939 "0xw8v1540m21x9crpgb0i3rxyhh1d24ldg354vndw9cif74ls5p6"))))
9940 (build-system pyproject-build-system)
9941 (arguments
9942 (list
9943 #:test-flags
9944 #~(list "-k" (string-append "not test_explicit_table[db2]"
9945 " and not test_explicit_table[db4]")
9946 "-W" "ignore::DeprecationWarning")))
9947 (native-inputs
9948 (list python-flit-core
9949 python-pytest))
9950 (propagated-inputs
9951 (list python-flask
9952 python-sqlalchemy-2))
9953 (home-page "https://github.com/mitsuhiko/flask-sqlalchemy")
9954 (synopsis "Module adding SQLAlchemy support to your Flask application")
9955 (description
9956 "This package adds SQLAlchemy support to your Flask application.")
9957 (license license:bsd-3)))
9958
9959(define-public python-flask-restful-swagger
9960 (package
9961 (name "python-flask-restful-swagger")
9962 (version "0.20.1")
9963 ;; XXX: Unbundle minified javascript.
9964 (source
9965 (origin
9966 (method git-fetch)
9967 (uri (git-reference
9968 (url "https://github.com/rantav/flask-restful-swagger")
9969 (commit version)))
9970 (file-name (git-file-name name version))
9971 (sha256
9972 (base32 "1ppdwn25ijf8b3zchxkvwj4ipc68v3p522i8mm51jm0w6mg5bvsh"))))
9973 (build-system pyproject-build-system)
9974 (arguments (list #:tests? #f)) ; No tests.
9975 (native-inputs (list python-setuptools))
9976 (propagated-inputs (list python-flask-restful python-six))
9977 (home-page "https://github.com/rantav/flask-restful-swagger")
9978 (synopsis "Extract Swagger specs from Flask-Restful projects")
9979 (description "This package lets you extract Swagger API documentation
9980specs from your Flask-Restful projects.")
9981 (license license:expat)))
9982
9983(define-public python-htmlmin
9984 (package
9985 (name "python-htmlmin")
9986 (version "0.1.12")
9987 (source
9988 (origin
9989 (method url-fetch)
9990 (uri (pypi-uri "htmlmin" version))
9991 (sha256
9992 (base32
9993 "0y51xhabw6x8jk8k93xl8vznshpz3jb6l28075r5sjip613fzhah"))))
9994 (build-system pyproject-build-system)
9995 (arguments
9996 (list #:tests? #f)) ; no tests
9997 (native-inputs (list python-setuptools))
9998 (home-page "https://htmlmin.readthedocs.org/en/latest/")
9999 (synopsis "HTML minifier")
10000 (description "@code{htmlmin} is an HTML minifier that just works.
10001It comes with safe defaults and easily configurable options.")
10002 (license license:bsd-3)))
10003
10004;; XXX: Forked renamed and updated version.
10005(define-public python-htmlmin2
10006 (package/inherit python-htmlmin
10007 (name "python-htmlmin2")
10008 (version "0.1.13")
10009 (source
10010 (origin
10011 (method git-fetch)
10012 (uri (git-reference
10013 (url "https://github.com/wilhelmer/htmlmin")
10014 (commit (string-append "v" version))))
10015 (file-name (git-file-name name version))
10016 (sha256
10017 (base32 "1y7mcx8d451hwa1wrg2lffg7ccdy3w5m7xwb5xqp8h2852pypfh2"))))
10018 (build-system pyproject-build-system)
10019 (arguments (list #:test-backend #~'unittest))
10020 (native-inputs (list python-setuptools))
10021 (home-page "https://github.com/wilhelmer/htmlmin")
10022 (description
10023 "@code{htmlmin2} is an HTML minifier that just works. It comes with safe
10024defaults and easily configurable options. This variant is an updated fork of
10025the original @code{python-htmlmin}.")
10026 (license license:bsd-3)))
10027
10028(define-public python-flask-htmlmin
10029 (package
10030 (name "python-flask-htmlmin")
10031 (version "3.0.0")
10032 (source
10033 (origin
10034 (method git-fetch)
10035 (uri (git-reference
10036 (url "https://github.com/hamidfzm/Flask-HTMLmin")
10037 (commit (string-append "v" version))))
10038 (file-name (git-file-name name version))
10039 (sha256
10040 (base32 "0ybqssnqwa9zgv61azp5r1grgnq28ypfhr80p9rp61x2z0y0zl32"))))
10041 (build-system pyproject-build-system)
10042 (native-inputs (list python-pytest python-setuptools))
10043 (propagated-inputs (list python-cssmin python-flask python-htmlmin2))
10044 (home-page "https://github.com/hamidfzm/Flask-HTMLmin")
10045 (synopsis "HTML response minifier for Flask")
10046 (description
10047 "Minify @code{text/html} MIME type responses when using @code{Flask}.")
10048 (license license:bsd-3)))
10049
10050(define-public python-jsmin
10051 (package
10052 (name "python-jsmin")
10053 (version "3.0.1")
10054 (source
10055 (origin
10056 (method url-fetch)
10057 (uri (pypi-uri "jsmin" version))
10058 (sha256
10059 (base32
10060 "1z1brjsvni0260bypldkl8a05sgp0qk18x560zl44igr3q99m5f0"))))
10061 (build-system pyproject-build-system)
10062 (arguments (list #:test-backend #~'unittest))
10063 (native-inputs
10064 (list python-setuptools))
10065 (home-page "https://github.com/tikitu/jsmin/")
10066 (synopsis "Python JavaScript minifier")
10067 (description
10068 "@code{jsmin} is a JavaScript minifier, usable from both Python code and
10069on the command line.")
10070 (license license:expat)))
10071
10072(define-public python-flask-login
10073 (let ((commit "c8bba84b9ba6768e878317fc46c54bd13fa1ac07")
10074 (revision "0"))
10075 (package
10076 (name "python-flask-login")
10077 (version (git-version "0.6.3" revision commit))
10078 (source
10079 (origin
10080 (method git-fetch)
10081 (uri (git-reference
10082 (url "https://github.com/maxcountryman/flask-login")
10083 (commit commit)))
10084 (file-name (git-file-name name version))
10085 (sha256
10086 (base32 "0q0ga1zwm06kvpnsf50ckmsc77959i1spx7z2y3jkbwaa4klsyli"))))
10087 (build-system pyproject-build-system)
10088 (propagated-inputs
10089 (list python-flask))
10090 (native-inputs
10091 ;; For tests.
10092 (list python-blinker
10093 python-flit-core
10094 python-mock
10095 python-pytest
10096 python-semantic-version
10097 python-werkzeug))
10098 (home-page "https://github.com/maxcountryman/flask-login")
10099 (synopsis "User session management for Flask")
10100 (description
10101 "@code{Flask-Login} provides user session management for Flask. It
10102handles the common tasks of logging in, logging out, and remembering your
10103users' sessions over extended periods of time.")
10104 (license license:expat))))
10105
10106(define-public python-oauth2client
10107 (package
10108 (name "python-oauth2client")
10109 (version "4.1.3")
10110 (source
10111 (origin
10112 (method git-fetch)
10113 (uri (git-reference
10114 (url "https://github.com/google/oauth2client/")
10115 (commit (string-append "v" version))))
10116 (file-name (git-file-name name version))
10117 (sha256
10118 (base32 "0xm19dv5kmi82zzrx3d4mp326irr3x37q818hlspz514dzjq2ad1"))))
10119 (build-system pyproject-build-system)
10120 (arguments
10121 (list #:tests? #f))
10122 (native-inputs
10123 (list python-setuptools))
10124 (propagated-inputs
10125 (list python-httplib2
10126 python-pyasn1
10127 python-pyasn1-modules
10128 python-pyparsing
10129 python-rsa
10130 python-six))
10131 (home-page "https://github.com/google/oauth2client/")
10132 (synopsis "OAuth 2.0 client library")
10133 (description "@code{python-oauth2client} provides an OAuth 2.0 client
10134library for Python")
10135 (license license:asl2.0)))
10136
10137(define-public python-flask-oidc
10138 ;; XXX: Project is unmaintained since 2022, see:
10139 ;; <https://github.com/puiterwijk/flask-oidc/issues/146>.
10140 (package
10141 (name "python-flask-oidc")
10142 (version "2.4.0")
10143 (source
10144 (origin
10145 (method url-fetch)
10146 (uri (pypi-uri "flask_oidc" version))
10147 (sha256
10148 (base32
10149 "0lr15s5y61qkgic54pln1j82l2c32wgscdj8hymwr44gxby7h8z7"))))
10150 (build-system pyproject-build-system)
10151 (arguments
10152 (list
10153 #:test-flags
10154 #~(list (string-append "--deselect=tests/test_flask_oidc.py"
10155 "::test_accept_token_no_token"))))
10156 (propagated-inputs
10157 (list python-authlib
10158 python-blinker
10159 python-flask
10160 python-requests
10161 python-responses))
10162 (native-inputs
10163 (list python-pytest python-poetry-core))
10164 (home-page "https://github.com/puiterwijk/flask-oidc")
10165 (synopsis "OpenID Connect extension for Flask")
10166 (description "@code{python-flask-oidc} provides an OpenID Connect extension
10167for Flask.")
10168 (license license:bsd-2)))
10169
10170(define-public python-webassets
10171 (package
10172 (name "python-webassets")
10173 (version "3.0.0")
10174 (source
10175 (origin
10176 (method git-fetch)
10177 (uri (git-reference
10178 (url "https://github.com/miracle2k/webassets")
10179 (commit version)))
10180 (file-name (git-file-name name version))
10181 (sha256
10182 (base32 "11hxvdqw86q6r665iryjzwx21ys8jh2c63mw016ldr6j49l0zyyh"))))
10183 (build-system pyproject-build-system)
10184 (propagated-inputs (list python-pyyaml python-zope-dottedname))
10185 (native-inputs (list python-hatchling python-pytest))
10186 (home-page "https://github.com/miracle2k/webassets")
10187 (synopsis "Media asset management")
10188 (description
10189 "This package provides utilities to merge, minify and compress Javascript
10190and CSS files,supporting a variety of different filters, including YUI, jsmin,
10191jspacker or CSS tidy. It also supports URL rewriting in CSS files.")
10192 (license license:bsd-2)))
10193
10194(define-public python-flask-migrate
10195 (package
10196 (name "python-flask-migrate")
10197 (version "4.1.0")
10198 (home-page "https://github.com/miguelgrinberg/flask-migrate/")
10199 (source (origin
10200 (method git-fetch)
10201 (uri (git-reference (url home-page)
10202 (commit (string-append "v" version))))
10203 (file-name (git-file-name name version))
10204 (sha256
10205 (base32
10206 "09qw1hhyssa5gahm199x67d55c55m3k9m23xp2bdacwsiv8jw57g"))))
10207 (build-system pyproject-build-system)
10208 (propagated-inputs
10209 (list python-flask python-alembic python-flask-sqlalchemy))
10210 (native-inputs
10211 (list python-pytest python-setuptools python-wheel))
10212 (synopsis "SQLAlchemy database migrations for Flask programs using
10213Alembic")
10214 (description "This package contains SQLAlchemy database migration tools
10215for Flask programs that are using @code{python-alembic}.")
10216 (license license:expat)))
10217
10218(define-public python-genshi
10219 (package
10220 (name "python-genshi")
10221 (version "0.7.10")
10222 (source
10223 (origin
10224 (method git-fetch)
10225 (uri (git-reference
10226 (url "https://github.com/edgewall/genshi")
10227 (commit version)))
10228 (file-name (git-file-name name version))
10229 (sha256
10230 (base32 "1dmf0ggp0s3371jv483kjriw9jscawxcik6q70a0wqjdfh5383i6"))))
10231 (build-system pyproject-build-system)
10232 (arguments (list #:test-backend #~'unittest))
10233 (native-inputs (list python-setuptools))
10234 (propagated-inputs (list python-six))
10235 (home-page "https://genshi.edgewall.org/")
10236 (synopsis "Toolkit for generation of output for the web")
10237 (description "Genshi is a Python library that provides an integrated set
10238of components for parsing, generating, and processing HTML, XML or other
10239textual content for output generation on the web.")
10240 (license license:bsd-3)))
10241
10242(define-public python-flask-principal
10243 (package
10244 (name "python-flask-principal")
10245 (version "0.4.0")
10246 (source
10247 (origin
10248 (method git-fetch)
10249 (uri (git-reference
10250 (url "https://github.com/pallets-eco/flask-principal")
10251 (commit version)))
10252 (file-name (git-file-name name version))
10253 (sha256
10254 (base32 "0hcqcj768inmyfsw1y2vk6pa9p22dh138ll809rhpz9vjz6spnqk"))))
10255 (build-system pyproject-build-system)
10256 (propagated-inputs (list python-blinker))
10257 (native-inputs (list python-flask python-pynose python-setuptools))
10258 (home-page "https://github.com/pallets-eco/flask-principal")
10259 (synopsis "Identity management for Flask")
10260 (description
10261 "@code{flask_principal} is a identity management library for Flask. It
10262supports managing both authentication and authorization data in a thread-local
10263variable.")
10264 (license license:expat)))
10265
10266(define-public python-flask-httpauth
10267 (package
10268 (name "python-flask-httpauth")
10269 (version "4.8.0")
10270 (source
10271 (origin
10272 (method url-fetch)
10273 (uri (pypi-uri "Flask-HTTPAuth" version))
10274 (sha256
10275 (base32
10276 "0yh9fn6pak64has89pcy03f1cn198vkil872y5jjr53kph2qlmk6"))))
10277 (build-system pyproject-build-system)
10278 (propagated-inputs (list python-flask))
10279 (native-inputs
10280 (list nss-certs-for-test
10281 python-pytest
10282 python-setuptools
10283 python-wheel))
10284 (home-page "https://github.com/miguelgrinberg/flask-httpauth/")
10285 (synopsis "Basic and Digest HTTP authentication for Flask routes")
10286 (description "@code{flask_httpauth} provides Basic and Digest HTTP
10287authentication for Flask routes.")
10288 (license license:expat)))
10289
10290(define-public python-uritemplate
10291 (package
10292 (name "python-uritemplate")
10293 (version "4.2.0")
10294 (source
10295 (origin
10296 (method url-fetch)
10297 (uri (pypi-uri "uritemplate" version))
10298 (sha256
10299 (base32
10300 "03lxxkk0kjn6z7z1f9hqvsaqfrny1qds7vi36f35b2c7h38jw328"))))
10301 (build-system pyproject-build-system)
10302 (native-inputs (list python-pytest python-setuptools))
10303 (home-page "https://uritemplate.readthedocs.io/")
10304 (synopsis "Library to deal with URI Templates")
10305 (description "@code{uritemplate} provides Python library to deal with URI
10306Templates.")
10307 ;; The software is made available under the terms of *either* of the
10308 ;; licenses found in LICENSE.APACHE or LICENSE.BSD. Contributions
10309 ;; are made under *both* licenses (excerpt from the LICENSE file).
10310 (license (list license:bsd-2 license:asl2.0))))
10311
10312(define-public python-uritemplate-3
10313 (package
10314 (inherit python-uritemplate)
10315 (name "python-uritemplate")
10316 (version "3.0.1")
10317 (source (origin
10318 (method url-fetch)
10319 (uri (pypi-uri "uritemplate" version))
10320 (sha256
10321 (base32 "1bkwmgr0ia9gcn4bszs2xlvml79f0bi2s4a87xg22ky9rq8avy2s"))))))
10322
10323(define-public python-publicsuffix2
10324 (package
10325 (name "python-publicsuffix2")
10326 (version "2.2019-12-21")
10327 (source
10328 (origin
10329 (method git-fetch)
10330 (uri (git-reference
10331 (url "https://github.com/pombredanne/python-publicsuffix2")
10332 (commit (string-append "release-" version))))
10333 (file-name (git-file-name name version))
10334 (sha256
10335 (base32 "1dkvfvl0izq9hqzilnw8ipkbgjs9xyad9p21i3864hzinbh0wp9r"))))
10336 (build-system pyproject-build-system)
10337 (arguments
10338 (list
10339 #:tests? #f ;the test suite requires network access
10340 #:phases
10341 #~(modify-phases %standard-phases
10342 (add-after 'unpack 'ignore-maintainer-inputs
10343 (lambda _
10344 ;; Comment out a demand for python-requests, which is used only by
10345 ;; the unused ‘update_psl’ helper command.
10346 (substitute* "setup.py"
10347 (("'requests " match)
10348 (format #f "# ~a" match))))))))
10349 (native-inputs (list python-setuptools))
10350 (home-page "https://github.com/pombredanne/python-publicsuffix2")
10351 (synopsis
10352 "Get a public suffix for a domain name using the Public Suffix List")
10353 (description
10354 "Get a public suffix for a domain name using the Public Suffix List.
10355Forked from and using the same API as the publicsuffix package.")
10356 (license (list license:expat license:mpl2.0))))
10357
10358(define-public python-werkzeug
10359 (package
10360 (name "python-werkzeug")
10361 (version "3.1.8")
10362 (source
10363 (origin
10364 (method git-fetch)
10365 (uri (git-reference
10366 (url "https://github.com/pallets/werkzeug")
10367 (commit version)))
10368 (file-name (git-file-name name version))
10369 (sha256
10370 (base32 "1jwrrjv50n5rcfzax4qf0237znkcpcafd17hx0r77f997yv3ghlv"))))
10371 (build-system pyproject-build-system)
10372 (arguments
10373 (list
10374 #:test-flags
10375 #~(list "-m" "not dev_server")))
10376 (native-inputs
10377 (list python-ephemeral-port-reserve
10378 python-flit-core
10379 python-pytest
10380 python-pytest-timeout
10381 python-watchdog))
10382 (propagated-inputs
10383 (list python-markupsafe))
10384 (home-page "https://palletsprojects.com/p/werkzeug/")
10385 (synopsis "Utilities for WSGI applications")
10386 (description "One of the most advanced WSGI utility modules. It includes a
10387powerful debugger, full-featured request and response objects, HTTP utilities to
10388handle entity tags, cache control headers, HTTP dates, cookie handling, file
10389uploads, a powerful URL routing system and a bunch of community-contributed
10390addon modules.")
10391 (license license:x11)))
10392
10393(define-public python-werkzeug-1.0
10394 (package
10395 (inherit python-werkzeug)
10396 (version "1.0.1")
10397 (source (origin
10398 (method url-fetch)
10399 (uri (pypi-uri "Werkzeug" version))
10400 (sha256
10401 (base32
10402 "0z74sa1xw5h20yin9faj0vvdbq713cgbj84klc72jr9nmpjv303c"))
10403 (patches (search-patches "python-werkzeug-tests.patch"))))
10404 (arguments
10405 (list
10406 #:phases
10407 '(modify-phases %standard-phases
10408 (add-after 'unpack 'ignore-warnings
10409 (lambda _
10410 (substitute* "setup.cfg"
10411 ((" error.*") "")))))))
10412 (propagated-inputs
10413 (list python-requests))
10414 (native-inputs
10415 (list python-pytest python-pytest-timeout python-setuptools
10416 python-wheel))))
10417
10418(define-public python-wtforms
10419 (package
10420 (name "python-wtforms")
10421 (version "3.2.2")
10422 (source
10423 (origin
10424 (method url-fetch)
10425 (uri (pypi-uri "wtforms" version))
10426 (sha256
10427 (base32 "14qbayp2gfmahaqn5migwyz2h1cq3gcdr4q2vd75vwvhhqzwf03v"))))
10428 (build-system pyproject-build-system)
10429 (native-inputs
10430 (list python-babel
10431 python-email-validator
10432 python-hatchling
10433 python-pytest
10434 python-setuptools))
10435 (propagated-inputs (list python-markupsafe))
10436 (home-page "https://wtforms.readthedocs.io/")
10437 (synopsis
10438 "Form validation and rendering library for Python web development")
10439 (description
10440 "WTForms is a flexible forms validation and rendering library
10441for Python web development. It is very similar to the web form API
10442available in Django, but is a standalone package.")
10443 (license license:bsd-3)))
10444
10445(define-public python-wtforms-sqlalchemy
10446 (package
10447 (name "python-wtforms-sqlalchemy")
10448 (version "0.4.1")
10449 (source
10450 (origin
10451 (method url-fetch)
10452 (uri (pypi-uri "WTForms-SQLAlchemy" version))
10453 (sha256
10454 (base32 "1nx4x0ifanlbrzh3f9ns8ihnchlkzf54ilvqmgcgcz2j72vm43rp"))))
10455 (build-system pyproject-build-system)
10456 (native-inputs (list python-pytest python-setuptools python-wheel))
10457 (propagated-inputs (list python-sqlalchemy python-wtforms))
10458 (home-page "https://github.com/wtforms/wtforms-sqlalchemy/")
10459 (synopsis "SQLAlchemy tools for WTForms")
10460 (description
10461 "WTForms-SQLAlchemy is a fork of the @code{wtforms.ext.sqlalchemy}
10462package from WTForms. The package has been renamed to
10463@code{wtforms_sqlalchemy} but otherwise should function the same as
10464@code{wtforms.ext.sqlalchemy} did.")
10465 (license license:bsd-3)))
10466
10467(define-public python-urlgrabber
10468 (package
10469 (name "python-urlgrabber")
10470 (version "4.1.0")
10471 (source
10472 (origin
10473 (method url-fetch)
10474 (uri (pypi-uri "urlgrabber" version))
10475 (sha256
10476 (base32 "0fg16zlw49cw7pjq9dhpc5vd35d5zz1mlki55m464qxfmfpzhnh7"))))
10477 (build-system pyproject-build-system)
10478 (arguments
10479 (list
10480 #:tests? #f ; Most tests require network access.
10481 #:phases
10482 #~(modify-phases %standard-phases
10483 (replace 'check
10484 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
10485 (when tests?
10486 (invoke "python" "test/runtests.py")))))))
10487 (native-inputs (list python-setuptools))
10488 (propagated-inputs
10489 (list python-pycurl python-setuptools python-six))
10490 (home-page "http://urlgrabber.baseurl.org/") ; no HTTPS
10491 (synopsis "High-level cross protocol url-grabber")
10492 (description
10493 "@code{urlgrabber} is a library that unifies access to files available on
10494the web, FTP or locally. It supports HTTP, FTP and file:// protocols, it
10495supports features like HTTP keep-alive, reget, throttling and more.")
10496 (license license:lgpl2.1+)))
10497
10498(define-public python-pycares
10499 (package
10500 (name "python-pycares")
10501 (version "4.11.0")
10502 (source
10503 (origin
10504 (method git-fetch)
10505 (uri (git-reference
10506 (url "https://github.com/saghul/pycares")
10507 (commit (string-append "v" version))))
10508 (file-name (git-file-name name version))
10509 (sha256
10510 (base32 "18syxp9bpm70zfiw427p7cpp6wg0ybrw6b32c1zvdp2i8jgd82xl"))
10511 (snippet #~(begin
10512 (rmdir "deps/c-ares")))))
10513 (build-system pyproject-build-system)
10514 (arguments
10515 (list
10516 ;; XXX: Half of the tests require internet access
10517 ;; There is currently no markers to avoid running them.
10518 #:tests? #f
10519 #:phases
10520 #~(modify-phases %standard-phases
10521 (add-after 'unpack 'configure-system-lib
10522 (lambda _
10523 (setenv "PYCARES_USE_SYSTEM_LIB" "1"))))))
10524 (native-inputs (list python-pytest python-setuptools))
10525 (inputs (list c-ares))
10526 (propagated-inputs (list python-cffi))
10527 (home-page "https://github.com/saghul/pycares")
10528 (synopsis "Python interface for @code{c-ares}")
10529 (description
10530 "@code{pycares} is a Python module which provides an interface to
10531@code{c-ares}, a C library that performs DNS requests and name resolutions
10532asynchronously.")
10533 (license license:expat)))
10534
10535(define-public python-yarl
10536 (package
10537 (name "python-yarl")
10538 (version "1.18.3")
10539 (source
10540 (origin
10541 (method url-fetch)
10542 (uri (pypi-uri "yarl" version))
10543 (sha256
10544 (base32
10545 "1qfj6kvdxr8bzka4lp0bh0xfgr5mzx7zzvj2jb4vcxxzbk20265c"))))
10546 (build-system pyproject-build-system)
10547 (arguments
10548 (list
10549 #:test-flags '(list "--ignore-glob=tests/test_*_benchmarks.py")
10550 #:phases
10551 '(modify-phases %standard-phases
10552 (add-after 'unpack 'avoid-pytest-cov-preload
10553 (lambda _
10554 (substitute* "pytest.ini"
10555 (("-p pytest_cov") ""))))
10556 (add-after 'unpack 'patch-build-system
10557 (lambda _
10558 ;; XXX: I don't know how to tell it to build the extensions in
10559 ;; place.
10560 (substitute* "packaging/pep517_backend/_backend.py"
10561 (("build_inplace=False") "build_inplace=True")))))))
10562 (native-inputs
10563 (list python-cython
10564 python-expandvars
10565 python-pytest
10566 python-pytest-xdist
10567 python-setuptools
10568 python-tomli))
10569 (propagated-inputs
10570 (list python-packaging python-idna python-multidict python-propcache))
10571 (home-page "https://github.com/aio-libs/yarl/")
10572 (synopsis "Yet another URL library")
10573 (description "@code{yarl} module provides handy @code{URL} class
10574for URL parsing and changing.")
10575 (license license:asl2.0)))
10576
10577(define-public python-google
10578 (package
10579 (name "python-google")
10580 (version "3.0.0")
10581 (source
10582 (origin
10583 (method url-fetch)
10584 (uri (pypi-uri "google" version))
10585 (sha256
10586 (base32 "1gncv3l11za0mpxvmpaf5n5j3jzp282rz62yml4ha4z55q930d8l"))))
10587 (build-system pyproject-build-system)
10588 (arguments (list #:tests? #f)) ;There are no tests.
10589 (native-inputs (list python-setuptools))
10590 (propagated-inputs (list python-beautifulsoup4))
10591 (home-page "https://breakingcode.wordpress.com/")
10592 (synopsis "Python bindings to the Google search engine")
10593 (description
10594 "This package provides Python bindings for using the Google search
10595engine. Its module is called @code{googlesearch}.")
10596 (license license:bsd-3)))
10597
10598(define-public python-google-api-client
10599 (package
10600 (name "python-google-api-client")
10601 (version "2.198.0")
10602 (source
10603 (origin
10604 (method git-fetch)
10605 (uri (git-reference
10606 (url "https://github.com/google/google-api-python-client")
10607 (commit (string-append "v" version))))
10608 (file-name (git-file-name name version))
10609 (sha256
10610 (base32 "1adjr3ylp8bwbvywxm11hs4y913pvaga0dn6nwmb3622y62zxfhg"))))
10611 (build-system pyproject-build-system)
10612 (arguments
10613 (list
10614 #:test-flags
10615 #~(list
10616 "-k"
10617 (string-join
10618 (list
10619 ;; XXX: Deprecated behavior.
10620 "not test_client_options_universe_configured_with_mtls"
10621 "test_universe_env_var_configured_with_mtls"
10622 ;; XXX: Requires CA certificates.
10623 "test_credentials_and_credentials_file_mutually_exclusive")
10624 " and not ")
10625 "tests")))
10626 (native-inputs
10627 (list python-parameterized
10628 python-pytest
10629 python-setuptools))
10630 (propagated-inputs
10631 (list python-google-api-core
10632 python-google-auth
10633 python-google-auth-httplib2
10634 python-httplib2
10635 python-pyparsing
10636 python-uritemplate-3))
10637 (home-page "https://github.com/google/google-api-python-client")
10638 (synopsis "Core Python library for accessing Google APIs")
10639 (description "Python client library for Google's discovery based APIs")
10640 (license license:asl2.0)))
10641
10642(define-public python-google-auth-httplib2
10643 (package
10644 (name "python-google-auth-httplib2")
10645 (version "0.4.0")
10646 (source (origin
10647 (method url-fetch)
10648 (uri (pypi-uri "google_auth_httplib2" version))
10649 (sha256
10650 (base32 "0dgdzy2ps3z71dc2b4s1fhmyx094nq0sg75sagav995p0ji31c6m"))))
10651 (build-system pyproject-build-system)
10652 (propagated-inputs
10653 (list python-google-auth python-httplib2))
10654 (native-inputs
10655 (list python-pytest
10656 python-pyparsing
10657 python-pytest-localserver
10658 python-flask
10659 python-setuptools))
10660 (home-page "https://github.com/googleapis/google-cloud-python")
10661 (synopsis "Google Authentication Library: httplib2 transport")
10662 (description "This package provides a Google Authentication Library plugin
10663for httplib2 transport.")
10664 (license license:asl2.0)))
10665
10666(define-public python-google-auth-oauthlib
10667 (package
10668 (name "python-google-auth-oauthlib")
10669 (version "1.2.4")
10670 (home-page
10671 "https://github.com/GoogleCloudPlatform/\
10672google-auth-library-python-oauthlib")
10673 (source
10674 (origin
10675 (method git-fetch)
10676 (uri (git-reference
10677 (url home-page)
10678 (commit (string-append "v" version))))
10679 (file-name (git-file-name name version))
10680 (sha256
10681 (base32 "1j25kdbs2j1x23pdv4n49xl9pz2ppn55vsav65ir796kq4lf9nca"))))
10682 (build-system pyproject-build-system)
10683 (propagated-inputs (list python-google-auth python-requests-oauthlib))
10684 (native-inputs
10685 (list python-click python-mock python-pytest python-setuptools))
10686 (synopsis "Google Authentication Library: oauthlib")
10687 (description "This package provides a Google Authentication Library plugin
10688with oauthlib.")
10689 (license license:asl2.0)))
10690
10691(define-public whoogle-search
10692 (package
10693 (name "whoogle-search")
10694 (version "0.8.4")
10695 (source (origin
10696 (method url-fetch)
10697 (uri (pypi-uri "whoogle-search" version))
10698 (sha256
10699 (base32
10700 "0hsy4l98nzj6i1lf63wvqd0yharkaz44zsxh863ymy47rxnwimz7"))))
10701 (build-system pyproject-build-system)
10702 (arguments
10703 (list
10704 ;; The tests need network access
10705 #:tests? #f))
10706 (propagated-inputs
10707 (list python-beautifulsoup4
10708 python-brotli
10709 python-cryptography
10710 python-cssutils
10711 python-defusedxml
10712 python-flask
10713 python-dotenv
10714 python-requests
10715 python-stem
10716 python-validators
10717 python-waitress))
10718 (native-inputs (list python-setuptools python-wheel))
10719 (home-page "https://github.com/benbusby/whoogle-search")
10720 (synopsis "Self-hosted, ad-free, privacy-respecting metasearch engine")
10721 (description
10722 "Get Google results, but without any ads, javascript, AMP links,
10723cookies, or IP address tracking. Quick and simple to implement as a primary
10724search engine replacement on both desktop and mobile.")
10725 (license license:expat)))
10726
10727(define-public python-hawkauthlib
10728 (package
10729 (name "python-hawkauthlib")
10730 (version "2.0.0")
10731 (source
10732 (origin
10733 (method git-fetch)
10734 (uri (git-reference
10735 (url "https://github.com/mozilla-services/hawkauthlib")
10736 (commit (string-append "v" version))))
10737 (file-name (git-file-name name version))
10738 (sha256
10739 (base32 "0pdpk3fp87ngfsyp4lm2z7z8b203jxsmvbz59q6r6xgg9sp4cl3l"))))
10740 (build-system pyproject-build-system)
10741 (arguments
10742 (list
10743 #:test-backend #~'unittest
10744 #:phases
10745 #~(modify-phases %standard-phases
10746 (add-after 'unpack 'fix-python-incompatibilities
10747 (lambda _
10748 (substitute* (find-files "hawkauthlib/tests" "\\.py$")
10749 (("assertEquals") "assertEqual")))))))
10750 (native-inputs (list python-setuptools))
10751 (propagated-inputs (list python-requests python-webob))
10752 (home-page "https://github.com/mozilla-services/hawkauthlib")
10753 (synopsis "Hawk Access Authentication protocol")
10754 (description
10755 "This is a low-level Python library for implementing Hawk Access
10756Authentication, a simple HTTP request-signing scheme.")
10757 (license license:mpl2.0)))
10758
10759(define-public python-pybrowserid
10760 (package
10761 (name "python-pybrowserid")
10762 (version "0.14.0")
10763 (source
10764 (origin
10765 (method git-fetch)
10766 (uri (git-reference
10767 (url "https://github.com/mozilla/PyBrowserID")
10768 (commit version)))
10769 (file-name (git-file-name name version))
10770 (sha256
10771 (base32 "0in0sbj56wrz5mlrj6wkd3h7rrp7714c5rkxvkfwp60s2hr6ynj6"))))
10772 (build-system pyproject-build-system)
10773 (arguments
10774 (list
10775 #:test-backend #~'unittest
10776 #:phases
10777 #~(modify-phases %standard-phases
10778 (add-after 'unpack 'python-3.12-compatibility
10779 (lambda _
10780 (substitute* (find-files "browserid/tests" "\\.py")
10781 (("assertEquals") "assertEqual")))))))
10782 (propagated-inputs (list python-requests))
10783 (native-inputs (list python-mock python-setuptools))
10784 (home-page "https://github.com/mozilla/PyBrowserID")
10785 (synopsis "Python library for the BrowserID protocol")
10786 (description
10787 "This is a Python client library for the BrowserID protocol that
10788underlies Mozilla Persona.")
10789 (license license:mpl2.0)))
10790
10791(define-public python-pyfxa
10792 (package
10793 (name "python-pyfxa")
10794 (version "0.8.1")
10795 (source
10796 (origin
10797 (method git-fetch)
10798 (uri (git-reference
10799 (url "https://github.com/mozilla/PyFxA")
10800 (commit (string-append "v" version))))
10801 (file-name (git-file-name name version))
10802 (sha256
10803 (base32 "11iaw50x5ic9cqp3jwkvhk8mz00dhg8xhl1kkx45zrb8nnrfw2vs"))))
10804 (build-system pyproject-build-system)
10805 (arguments
10806 (list
10807 ;; These tests require network access
10808 #:test-flags #~(list "--ignore=fxa/tests/test_core.py")))
10809 (propagated-inputs
10810 (list python-cryptography
10811 python-pyjwt
10812 python-parameterized
10813 python-hawkauthlib
10814 python-requests))
10815 (native-inputs
10816 (list python-grequests
10817 python-hatchling
10818 python-mock
10819 python-pytest
10820 python-responses))
10821 (home-page "https://github.com/mozilla/PyFxA")
10822 (synopsis "Firefox Accounts client library for Python")
10823 (description
10824 "This is a Python library for interacting with the Firefox Accounts
10825ecosystem.")
10826 (license license:mpl2.0)))
10827
10828(define-public python-hyperlink
10829 (package
10830 (name "python-hyperlink")
10831 (version "21.0.0")
10832 (source
10833 (origin
10834 (method url-fetch)
10835 (uri (pypi-uri "hyperlink" version))
10836 (sha256
10837 (base32
10838 "0sx50lkivsfjxx9zr4yh7l9gll2l9kvl0v0w8w4wk2x5v9bzjyj2"))))
10839 (build-system pyproject-build-system)
10840 (arguments
10841 (list #:phases
10842 #~(modify-phases %standard-phases
10843 (add-before 'check 'pretend-to-be-CI
10844 (lambda _
10845 ;; Pretend to be a CI system to skip flaky tests.
10846 (setenv "CI" "true"))))))
10847 (native-inputs
10848 (list python-pytest python-setuptools python-wheel))
10849 (propagated-inputs
10850 (list python-idna))
10851 (home-page "https://github.com/python-hyper/hyperlink")
10852 (synopsis "Python module to create immutable URLs according to spec")
10853 (description "This package provides a Python module to create immutable, and
10854correct URLs for Python according to RFCs 3986 and 3987.")
10855 (license license:expat)))
10856
10857(define-public python-treq
10858 (package
10859 (name "python-treq")
10860 (version "24.9.1")
10861 (source
10862 (origin
10863 (method url-fetch)
10864 (uri (pypi-uri "treq" version))
10865 (sha256
10866 (base32
10867 "1a7yrq2m7hf77fia4fc0c6zanvwnykpgirdbs1cyvr7k0k27znhm"))))
10868 (build-system pyproject-build-system)
10869 (native-inputs
10870 (list python-httpbin
10871 python-pytest
10872 python-service-identity
10873 python-setuptools
10874 python-wheel))
10875 (propagated-inputs
10876 (list python-attrs
10877 python-hyperlink
10878 python-incremental
10879 python-requests
10880 python-twisted
10881 python-typing-extensions))
10882 (home-page "https://github.com/twisted/treq")
10883 (synopsis "Requests-like API built on top of twisted.web's Agent")
10884 (description "This package provides an HTTP library inspired by
10885@code{requests} but written on top of Twisted's @code{Agents}. It offers a
10886high level API for making HTTP requests when using Twisted.")
10887 (license license:expat)))
10888
10889(define-public python-ws4py
10890 (package
10891 (name "python-ws4py")
10892 (version "0.6.0")
10893 (source
10894 (origin
10895 (method git-fetch)
10896 (uri (git-reference
10897 (url "https://github.com/Lawouach/WebSocket-for-Python")
10898 (commit version)))
10899 (file-name (git-file-name name version))
10900 (sha256
10901 (base32
10902 "00y6s8gk20936njqbxr8vjliviiz7r7pqrlwg7xi8zzs6903xvv6"))))
10903 (build-system pyproject-build-system)
10904 (arguments
10905 (list
10906 #:phases
10907 #~(modify-phases %standard-phases
10908 (add-after 'unpack 'remove-cherrypy-support
10909 (lambda _
10910 (delete-file "ws4py/server/cherrypyserver.py")
10911 (delete-file "test/test_cherrypy.py"))))))
10912 (native-inputs (list python-setuptools python-pytest))
10913 (propagated-inputs
10914 (list python-gevent python-tornado))
10915 (home-page "https://github.com/Lawouach/WebSocket-for-Python")
10916 (synopsis "WebSocket client and server library")
10917 (description
10918 "This package provides a WebSocket client and server library for Python.")
10919 (license license:bsd-3)))
10920
10921(define-public python-slowapi
10922 (package
10923 (name "python-slowapi")
10924 (version "0.1.9")
10925 (source
10926 (origin
10927 (method git-fetch)
10928 (uri (git-reference
10929 (url "https://github.com/laurents/slowapi")
10930 (commit (string-append "v" version))))
10931 (file-name (git-file-name name version))
10932 (sha256
10933 (base32 "1lc1n6lvh01dhhrc507qri9rz1w72l2riii03ixh7n7n1gwjpws7"))))
10934 (build-system pyproject-build-system)
10935 (arguments
10936 (list
10937 #:test-flags
10938 ;; These tests fail because the timestamp contains more decimal points
10939 ;; than expected, so a simple equality comparison fails.
10940 '(list "-k" (string-append "not test_headers_no_breach"
10941 " and not test_headers_breach"))))
10942 (propagated-inputs (list python-limits python-redis))
10943 (native-inputs
10944 (list python-fastapi
10945 python-hiro
10946 python-mock
10947 python-poetry-core
10948 python-pytest))
10949 (home-page "https://github.com/laurents/slowapi")
10950 (synopsis "Rate limiting extension for Starlette and Fastapi")
10951 (description
10952 "This package provides a rate limiting extension for Starlette and
10953Fastapi.")
10954 (license license:expat)))
10955
10956(define-public python-slugify
10957 (package
10958 (name "python-slugify")
10959 (version "8.0.4")
10960 (source
10961 (origin
10962 (method git-fetch)
10963 (uri (git-reference
10964 (url "https://github.com/un33k/python-slugify")
10965 (commit (string-append "v" version))))
10966 (file-name (git-file-name name version))
10967 (sha256
10968 (base32 "0z83nwy7acc72mb2jv3516nfplah1wm61wkmnzl71dh8i4q985yd"))))
10969 (build-system pyproject-build-system)
10970 (arguments (list #:test-backend #~'unittest))
10971 (native-inputs (list python-setuptools))
10972 (propagated-inputs (list python-unidecode python-text-unidecode))
10973 (home-page "https://github.com/un33k/python-slugify")
10974 (synopsis "Python Slugify application that handles Unicode")
10975 (description "This package provides a @command{slufigy} command and
10976library to create slugs from unicode strings while keeping it DRY.")
10977 (license license:expat)))
10978
10979(define-public python-tinycss2
10980 (package
10981 (name "python-tinycss2")
10982 (version "1.5.1")
10983 (source
10984 (origin
10985 (method git-fetch)
10986 (uri (git-reference
10987 (url "https://github.com/Kozea/tinycss2")
10988 (commit (string-append "v" version))
10989 (recursive? #true)))
10990 (file-name (git-file-name name version))
10991 (sha256
10992 (base32 "1ww5m8rmpva9mq04cz1h9rx76vg2h5nnijzi0vprf5wzp8g9snb5"))))
10993 (build-system pyproject-build-system)
10994 (native-inputs
10995 (list python-flit-core
10996 python-pytest))
10997 (propagated-inputs
10998 (list python-webencodings))
10999 (home-page "https://doc.courtbouillon.org/tinycss2/stable/")
11000 (synopsis "Low-level CSS parser for Python")
11001 (description "@code{tinycss2} can parse strings, return Python objects
11002representing tokens and blocks, and generate CSS strings corresponding to
11003these objects.
11004
11005Based on the CSS Syntax Level 3 specification, @code{tinycss2} knows the
11006grammar of CSS but doesn’t know specific rules, properties or values supported
11007in various CSS modules.")
11008 (license license:bsd-3)))
11009
11010(define-public python-tinyhtml5
11011 (package
11012 (name "python-tinyhtml5")
11013 (version "2.1.0")
11014 (source
11015 (origin
11016 (method git-fetch)
11017 (uri (git-reference
11018 (url "https://github.com/CourtBouillon/tinyhtml5")
11019 (commit version)))
11020 (file-name (git-file-name name version))
11021 (sha256
11022 (base32 "1q8z2ym2q6083ky0f9vwf73k3gimffnbfwlpmd69bp6anc4fa81x"))))
11023 (build-system pyproject-build-system)
11024 (propagated-inputs
11025 (list python-webencodings))
11026 (native-inputs
11027 (list python-flit-core
11028 python-pytest))
11029 (home-page "https://github.com/CourtBouillon/tinyhtml5")
11030 (synopsis "Small HTML parser based on the WHATWG HTML specification")
11031 (description "This Python module is a HTML5 parser that transforms a
11032possibly malformed HTML document into an ElementTree tree. This module is a
11033simplified fork of html5lib.")
11034 (license license:expat)))
11035
11036(define-public python-uvloop
11037 (package
11038 (name "python-uvloop")
11039 (version "0.22.1")
11040 (source
11041 (origin
11042 (method git-fetch)
11043 (uri (git-reference
11044 (url "https://github.com/MagicStack/uvloop")
11045 (commit (string-append "v" version))))
11046 (file-name (git-file-name name version))
11047 (sha256
11048 (base32 "1qbykwwz4ac3f7472g22z4i5rrd5kcr8hmxn5kswmja57j1nxlpl"))
11049 (modules '((guix build utils)))
11050 (snippet
11051 '(begin
11052 (delete-file-recursively "vendor")))))
11053 (build-system pyproject-build-system)
11054 (arguments
11055 (list
11056 ;; tests: 470 passed, 32 skipped, 8 deselected, 5 warnings, 104 subtests passed
11057 #:test-flags
11058 ;; The tests are prone to get stuck. Use pytest-timeout’s --timeout flag
11059 ;; to get a meaningful idea about where.
11060 #~(list "--timeout=300"
11061 "--timeout-method=thread"
11062 "-k" (string-join
11063 (list
11064 ;; Timeout, because SIGINT cannot be sent to child.
11065 "not test_signals_sigint_pycode_continue"
11066 "test_signals_sigint_pycode_stop"
11067 "test_signals_sigint_uvcode"
11068 "test_signals_sigint_uvcode_two_loop_runs"
11069 #$@(if (target-riscv64?)
11070 `("test_renegotiation")
11071 `()))
11072 " and not "))
11073 #:phases
11074 #~(modify-phases %standard-phases
11075 (add-after 'unpack 'preparations
11076 (lambda _
11077 ;; Use packaged libuv.
11078 (substitute* "setup.py" (("self.use_system_libuv = False")
11079 "self.use_system_libuv = True"))
11080 ;; Replace hardcoded shell command.
11081 (substitute* "uvloop/loop.pyx"
11082 (("b'/bin/sh'") (string-append "b'" (which "sh") "'")))
11083 (substitute* "tests/test_process.py"
11084 (("'env'") (string-append "'" (which "env") "'")))))
11085 #$@(if (target-riscv64?)
11086 `((add-after 'unpack 'adjust-test-timeouts
11087 (lambda _
11088 (substitute* '("tests/test_tcp.py"
11089 "tests/test_unix.py")
11090 (("SSL_HANDSHAKE_TIMEOUT = 15\\.0")
11091 "SSL_HANDSHAKE_TIMEOUT = 30.0")))))
11092 '())
11093 (add-before 'check 'pre-check
11094 (lambda* (#:key tests? #:allow-other-keys)
11095 (when tests?
11096 ;; Remove Python module, which conflicts with the installed
11097 ;; version, but lacks the built C module.
11098 (delete-file-recursively "uvloop")))))))
11099 (native-inputs
11100 (list python-aiohttp
11101 python-cython
11102 python-psutil
11103 python-pyopenssl
11104 python-pytest
11105 python-pytest-timeout
11106 python-setuptools))
11107 (inputs
11108 (list libuv))
11109 (home-page "https://github.com/MagicStack/uvloop")
11110 (synopsis "Fast implementation of asyncio event loop on top of libuv")
11111 (description
11112 "@code{uvloop} is a fast, drop-in replacement of the built-in asyncio
11113event loop. It is implemented in Cython and uses libuv under the hood.")
11114 (license license:expat)))
11115
11116(define-public python-httptools
11117 (package
11118 (name "python-httptools")
11119 (version "0.7.1")
11120 (source
11121 (origin
11122 ;; PyPI tarball comes with a vendored http-parser and no tests.
11123 (method git-fetch)
11124 (uri (git-reference
11125 (url "https://github.com/MagicStack/httptools")
11126 (commit (string-append "v" version))))
11127 (file-name (git-file-name name version))
11128 (sha256
11129 (base32 "0j9c1av3y1smg6lgh0i031l07i9plzbvv14jj53vpzm35sy7kbl7"))
11130 (modules '((guix build utils)))
11131 (snippet
11132 #~(begin (delete-file-recursively "vendor")))))
11133 (build-system pyproject-build-system)
11134 (arguments
11135 (list
11136 #:test-flags
11137 ;; XXX: AssertionError: HttpParserError not raised.
11138 #~(list "-k" "not test_parser_response_leninent_headers_1")
11139 #:phases
11140 #~(modify-phases %standard-phases
11141 (add-after 'unpack 'configure-build-ext
11142 (lambda _
11143 (with-output-to-file "setup.cfg"
11144 (lambda ()
11145 (display "\
11146[build_ext]
11147use_system_llhttp = true
11148use_system_http_parser = true
11149cython_always = true"))))))))
11150 (native-inputs
11151 (list python-cython
11152 python-pytest
11153 python-setuptools))
11154 (inputs
11155 (list http-parser
11156 llhttp))
11157 (home-page "https://github.com/MagicStack/httptools")
11158 (synopsis "Collection of framework independent HTTP protocol utils")
11159 (description
11160 "@code{httptools} is a Python binding for the nodejs HTTP parser.")
11161 (license license:expat)))
11162
11163(define-public python-uvicorn
11164 (package
11165 (name "python-uvicorn")
11166 ;; 0.49.0 (2026-06-03), release does not work with python-websockets 16.0,
11167 ;; see: <https://github.com/Kludex/uvicorn/pull/2985>.
11168 (properties '((commit . "e8a31bca03254b8457c4c89596e310282cc33edc")
11169 (revision . "0")))
11170 (version (git-version "0.49.0"
11171 (assoc-ref properties 'revision)
11172 (assoc-ref properties 'commit)))
11173 (source
11174 (origin
11175 (method git-fetch)
11176 (uri (git-reference
11177 (url "https://github.com/encode/uvicorn")
11178 (commit (assoc-ref properties 'commit))))
11179 (file-name (git-file-name name version))
11180 (sha256
11181 (base32 "1vd1680a1k3jcdgc3jd5p3a6zmhz4r8bgzb7v7zhpxrkkdsisrxj"))))
11182 (build-system pyproject-build-system)
11183 (arguments
11184 (list
11185 #:test-flags
11186 #~(list "--ignore=tests/benchmarks"
11187 #$@(cond
11188 ((or (target-aarch64?)
11189 (target-riscv64?))
11190 '("-k not test_send_binary_data_to_server_bigger_than_default_on_websockets"))
11191 (#t '())))))
11192 (native-inputs
11193 (list nss-certs-for-test
11194 python-a2wsgi
11195 python-hatchling
11196 python-httpx-bootstrap
11197 python-pytest
11198 python-pytest-asyncio
11199 python-pytest-mock
11200 python-pytest-xdist
11201 python-requests
11202 python-trustme
11203 python-wsproto))
11204 (propagated-inputs
11205 (list python-a2wsgi
11206 python-click
11207 python-dotenv
11208 python-h11
11209 python-httptools
11210 python-pyyaml
11211 python-uvloop
11212 python-watchfiles
11213 python-websockets))
11214 (home-page "https://github.com/encode/uvicorn")
11215 (synopsis "Fast ASGI server implementation")
11216 (description
11217 "@code{uvicorn} is a fast ASGI server implementation, using @code{uvloop}
11218and @code{httptools}. It currently supports HTTP/1.1 and WebSockets. Support
11219for HTTP/2 is planned.")
11220 (license license:bsd-3)))
11221
11222(define-public python-translation-finder
11223 (package
11224 (name "python-translation-finder")
11225 (version "2.22")
11226 (source
11227 (origin
11228 (method url-fetch)
11229 (uri (pypi-uri "translation_finder" version))
11230 (sha256
11231 (base32 "1hav99ccijvk2w8wpvba2pc7ba1z150vja2wvaimd069mc08pjd2"))))
11232 (build-system pyproject-build-system)
11233 (arguments
11234 (list
11235 #:test-flags
11236 ;; AssertionError: 31 != 30 : Mismatched count of results
11237 #~(list "--deselect=translation_finder/test_api.py::APITest::test_discover_file")))
11238 (native-inputs
11239 (list python-pytest
11240 python-setuptools))
11241 (propagated-inputs
11242 (list python-charset-normalizer
11243 python-ruamel.yaml
11244 python-weblate-language-data))
11245 (home-page "https://weblate.org/")
11246 (synopsis "Translation file finder for Weblate")
11247 (description "This package provides a function to find translation file in
11248the source code of a project. It supports many translation file formats and
11249is part of the Weblate translation platform.")
11250 (license license:gpl3+)))
11251
11252(define-public python-gitlab
11253 (package
11254 (name "python-gitlab")
11255 (version "7.0.0")
11256 (source
11257 (origin
11258 (method git-fetch)
11259 (uri (git-reference
11260 (url "https://github.com/python-gitlab/python-gitlab")
11261 (commit (string-append "v" version))))
11262 (file-name (git-file-name name version))
11263 (sha256
11264 (base32 "0rf1hz5n724f8sfc7g3fzfz96jsv9y145pi6gc8qscsjq3z4vi37"))))
11265 (build-system pyproject-build-system)
11266 (arguments
11267 (list
11268 #:test-flags
11269 #~(list "--ignore=tests/unit/test_graphql.py"
11270 ;; XXX: Missing helper script.
11271 "-k" "not test_data_from_helper" "tests/unit")))
11272 (native-inputs
11273 (list python-anyio
11274 python-pytest
11275 python-responses
11276 python-setuptools))
11277 (propagated-inputs (list python-requests python-requests-toolbelt))
11278 (home-page "https://github.com/python-gitlab/python-gitlab")
11279 (synopsis "Interact with GitLab API")
11280 (description "This package provides an extended library for interacting
11281with GitLab instances through their API.")
11282 (license license:lgpl3+)))
11283
11284(define-public python-path-and-address
11285 (package
11286 (name "python-path-and-address")
11287 (version "2.0.1")
11288 (source
11289 (origin
11290 (method git-fetch)
11291 (uri (git-reference
11292 (url "https://github.com/joeyespo/path-and-address")
11293 (commit (string-append "v" version))))
11294 (file-name (git-file-name name version))
11295 (sha256
11296 (base32 "0b0afpsaim06mv3lhbpm8fmawcraggc11jhzr6h72kdj1cqjk5h6"))))
11297 (build-system pyproject-build-system)
11298 (native-inputs
11299 (list python-pytest python-setuptools))
11300 (home-page "https://github.com/joeyespo/path-and-address")
11301 (synopsis "Functions for command-line server tools used by humans")
11302 (description "Path-and-address resolves ambiguities of command-line
11303interfaces, inferring which argument is the path, and which is the address.")
11304 (license license:expat)))
11305
11306(define-public python-port-for
11307 (package
11308 (name "python-port-for")
11309 (version "0.7.4")
11310 (source
11311 (origin
11312 (method url-fetch)
11313 (uri (pypi-uri "port_for" version))
11314 (sha256
11315 (base32 "13826s2d4hzzmv69wws6a7ryhminclv2bqaw6cpl929gnbki6xzw"))))
11316 (build-system pyproject-build-system)
11317 (propagated-inputs
11318 (list python-urllib3))
11319 (native-inputs
11320 (list python-pytest python-setuptools python-wheel))
11321 (home-page "https://github.com/kmike/port-for/")
11322 (synopsis "TCP localhost port finder and association manager")
11323 (description
11324 "This package provides a utility that helps with local TCP ports
11325management. It can find an unused TCP localhost port and remember the
11326association.")
11327 (license license:expat)))
11328
11329(define-public python-livereload
11330 (package
11331 (name "python-livereload")
11332 (version "2.7.1")
11333 (source
11334 (origin
11335 (method git-fetch)
11336 (uri (git-reference
11337 (url "https://github.com/lepture/python-livereload")
11338 (commit (string-append "v" version))))
11339 (file-name (git-file-name name version))
11340 (sha256
11341 (base32 "19wkdd1grw6mcd4qi8iaw4jdr207h3m24951vgy69j7g904lynjq"))))
11342 (build-system pyproject-build-system)
11343 (arguments (list #:test-backend #~'unittest))
11344 (native-inputs (list python-django-minimal python-setuptools))
11345 (propagated-inputs (list python-tornado))
11346 (home-page "https://github.com/lepture/python-livereload")
11347 (synopsis "Python LiveReload")
11348 (description
11349 "Python LiveReload provides a command line utility, @command{livereload},
11350for starting a web server in a directory. It can trigger arbitrary commands
11351and serve updated contents upon changes to the directory.")
11352 (license license:bsd-3)))
11353
11354(define-public python-vf-1
11355 (package
11356 (name "python-vf-1")
11357 (version "1.0.0")
11358 (source
11359 (origin
11360 (method git-fetch)
11361 (uri (git-reference
11362 (url "https://git.sr.ht/~solderpunk/VF-1")
11363 (commit (string-append "v" version))))
11364 (file-name (git-file-name name version))
11365 (sha256
11366 (base32 "1j8l4xivm6rs8jms1ixx0i9fz4yxr84hbz1pdc498jgkgzy1v8ih"))))
11367 (build-system pyproject-build-system)
11368 (arguments (list #:tests? #f)) ; No tests.
11369 (native-inputs (list python-setuptools))
11370 (home-page "https://git.sr.ht/~solderpunk/VF-1")
11371 (synopsis "Command line gopher client")
11372 (description "@code{VF-1} is a command line gopher client with
11373@acronym{TLS, Transport Layer Security} support.")
11374 (license license:bsd-2)))
11375
11376(define-public python-httpcore
11377 (package
11378 (name "python-httpcore")
11379 (version "1.0.9")
11380 (source
11381 (origin
11382 ;; PyPI tarball does not contain tests.
11383 (method git-fetch)
11384 (uri (git-reference
11385 (url "https://github.com/encode/httpcore")
11386 (commit version)))
11387 (file-name (git-file-name name version))
11388 (sha256
11389 (base32 "0yhm2n8qflpwjsjggyj757m0gw3n68al0my0ljybndwp933ipl32"))))
11390 (build-system pyproject-build-system)
11391 (native-inputs
11392 (list nss-certs-for-test
11393 python-hatch-fancy-pypi-readme
11394 python-hatchling
11395 python-pytest
11396 python-pytest-asyncio
11397 python-pytest-httpbin
11398 python-pytest-trio
11399 python-uvicorn
11400 python-trustme))
11401 (propagated-inputs
11402 (list python-anyio
11403 python-certifi
11404 python-h11
11405 python-h2
11406 python-sniffio
11407 python-socksio
11408 python-trio
11409 python-trio-typing))
11410 (home-page "https://github.com/encode/httpcore")
11411 (synopsis "Minimal, low-level HTTP client")
11412 (description
11413 "HTTP Core provides a minimal and low-level HTTP client, which does one
11414thing only: send HTTP requests.
11415
11416Some things HTTP Core does do:
11417
11418@itemize
11419@item Sending HTTP requests.
11420@item Provides both sync and async interfaces.
11421@item Supports HTTP/1.1 and HTTP/2.
11422@item Async backend support for asyncio and trio.
11423@item Automatic connection pooling.
11424@item HTTP(S) proxy support.
11425@end itemize")
11426 (license license:bsd-3)))
11427
11428;;; Variant used to break a cycle between python-httpx and python-uvicorn.
11429(define-public python-httpcore-bootstrap
11430 (hidden-package
11431 (package/inherit python-httpcore
11432 (name "python-httpcore-bootstrap")
11433 (arguments (list #:tests? #f))
11434 (native-inputs (list python-hatchling
11435 python-hatch-fancy-pypi-readme)))))
11436
11437(define-public python-httpx
11438 (package
11439 (name "python-httpx")
11440 (version "0.28.1")
11441 (source
11442 (origin
11443 ;; PyPI tarball does not contain tests.
11444 (method git-fetch)
11445 (uri (git-reference
11446 (url "https://github.com/encode/httpx")
11447 (commit version)))
11448 (file-name (git-file-name name version))
11449 (sha256
11450 (base32 "00d6rb21xwazwb0sj68zhra0qxxcwkd0vv7bg3k1jg94dmk2w7xl"))))
11451 (build-system pyproject-build-system)
11452 (arguments
11453 (list
11454 ;; 1401 passed, 1 skipped, 5 deselected
11455 #:test-flags
11456 #~(list "-o" "asyncio_mode=auto"
11457 ;; CLI tests are broken.
11458 "--ignore=tests/test_main.py"
11459 "-k" (string-join
11460 ;; These tests try to open an outgoing connection.
11461 (list "not test_async_proxy_close"
11462 "test_sync_proxy_clos"
11463 "test_write_timeout")
11464 " and not "))))
11465 (native-inputs
11466 (list nss-certs-for-test
11467 python-chardet
11468 python-cryptography
11469 python-hatch-fancy-pypi-readme
11470 python-hatchling
11471 python-pytest
11472 python-pytest-asyncio
11473 python-pytest-trio
11474 python-setuptools
11475 python-trio
11476 python-trustme
11477 python-uvicorn))
11478 (propagated-inputs
11479 (list python-anyio
11480 python-certifi
11481 python-httpcore
11482 python-idna
11483 ;; [brotli]
11484 python-brotli
11485 ;; [http2]
11486 python-h2
11487 ;; [socks]
11488 python-socksio
11489 ;; [zstd]
11490 python-zstandard
11491 ;; For trio, see:
11492 ;; <https://github.com/python-trio/trio/issues/2802>.
11493 python-sniffio))
11494 (home-page "https://www.python-httpx.org/")
11495 (synopsis "HTTP client for Python")
11496 (description
11497 "HTTPX is a fully featured HTTP client for Python 3, which provides sync
11498and async APIs, and support for both HTTP/1.1 and HTTP/2.
11499
11500HTTPX builds on the well-established usability of requests, and gives you:
11501
11502@itemize
11503@item A broadly requests-compatible API.
11504@item Standard synchronous interface, but with async support if you need it.
11505@item HTTP/1.1 and HTTP/2 support.
11506@item Ability to make requests directly to WSGI applications or ASGI applications.
11507@item Strict timeouts everywhere.
11508@item Fully type annotated.
11509@item 99% test coverage.
11510@end itemize
11511
11512Plus all the standard features of requests:
11513
11514@itemize
11515@item International Domains and URLs
11516@item Keep-Alive & Connection Pooling
11517@item Sessions with Cookie Persistence
11518@item Browser-style SSL Verification
11519@item Basic/Digest Authentication
11520@item Elegant Key/Value Cookies
11521@item Automatic Decompression
11522@item Automatic Content Decoding
11523@item Unicode Response Bodies
11524@item Multipart File Uploads
11525@item HTTP(S) Proxy Support
11526@item Connection Timeouts
11527@item Streaming Downloads
11528@item .netrc Support
11529@item Chunked Requests
11530@end itemize")
11531 (license license:bsd-3)))
11532
11533;;; Variant used to break a cycle with python-uvicorn.
11534(define-public python-httpx-bootstrap
11535 (hidden-package
11536 (package/inherit python-httpx
11537 (name "python-httpx-bootstrap")
11538 (arguments (list #:tests? #f))
11539 (native-inputs
11540 (list python-hatchling
11541 python-hatch-fancy-pypi-readme))
11542 (propagated-inputs
11543 (modify-inputs propagated-inputs
11544 (replace "python-httpcore" python-httpcore-bootstrap))))))
11545
11546(define-public python-httpx-sse
11547 (package
11548 (name "python-httpx-sse")
11549 (version "0.4.3")
11550 (source
11551 (origin
11552 (method git-fetch)
11553 (uri (git-reference
11554 (url "https://github.com/florimondmanca/httpx-sse")
11555 (commit version)))
11556 (file-name (git-file-name name version))
11557 (sha256
11558 (base32 "0zliqd1rkvc0mjppscvqmg8j17hsiwvxn439yhn6qbjvk5ydncz8"))))
11559 (build-system pyproject-build-system)
11560 (native-inputs
11561 (list python-pytest
11562 python-pytest-asyncio
11563 python-setuptools
11564 python-setuptools-scm
11565 python-sse-starlette))
11566 (propagated-inputs (list python-httpx))
11567 (home-page "https://github.com/florimondmanca/httpx-sse")
11568 (synopsis "Consume Server-Sent Event (SSE) messages with HTTPX.")
11569 (description "Consume Server-Sent Event (SSE) messages with HTTPX.")
11570 (license license:expat)))
11571
11572(define-public python-httpx-ws
11573 (package
11574 (name "python-httpx-ws")
11575 (version "0.9.0")
11576 (source
11577 (origin
11578 (method git-fetch)
11579 (uri (git-reference
11580 (url "https://github.com/frankie567/httpx-ws")
11581 (commit (string-append "v" version))))
11582 (file-name (git-file-name name version))
11583 (sha256
11584 (base32 "1hin6fndvfnx3mjgy30x0ghgjalikxavyj24klcknnly9sqzg83v"))))
11585 (build-system pyproject-build-system)
11586 (propagated-inputs
11587 (list python-anyio
11588 python-httpcore
11589 python-httpx
11590 python-wsproto))
11591 (native-inputs
11592 (list nss-certs-for-test
11593 python-hatch-regex-commit
11594 python-hatchling
11595 python-pytest
11596 python-pytest-cov
11597 python-starlette
11598 python-uvicorn))
11599 (home-page "https://github.com/frankie567/httpx-ws")
11600 (synopsis "WebSockets support for HTTPX")
11601 (description "This package provides @code{WebSockets} support for HTTPX.")
11602 (license license:expat)))
11603
11604(define-public python-wsgiprox
11605 (package
11606 (name "python-wsgiprox")
11607 (version "1.5.2")
11608 (source
11609 (origin
11610 (method url-fetch)
11611 (uri (pypi-uri "wsgiprox" version))
11612 (sha256
11613 (base32 "11fsm199pvwbmqx2lccznvws65aam1rqqv0w79gal8hispwgd5rs"))))
11614 (build-system pyproject-build-system)
11615 (arguments
11616 ;; The test suite hangs (see:
11617 ;; https://github.com/webrecorder/wsgiprox/issues/6).
11618 (list
11619 #:tests? #f
11620 #:phases
11621 #~(modify-phases %standard-phases
11622 (add-after 'unpack 'fix-pytest-argument
11623 (lambda _
11624 ;; See: https://github.com/webrecorder/wsgiprox/issues/7.
11625 (substitute* "setup.py"
11626 (("--doctest-module")
11627 "--doctest-modules")))))))
11628 (propagated-inputs
11629 (list python-certauth
11630 python-gevent
11631 python-six
11632 python-websocket-client))
11633 (native-inputs
11634 (list python-mock python-waitress python-setuptools))
11635 (home-page "https://github.com/webrecorder/wsgiprox")
11636 (synopsis "HTTP/S proxy with WebSockets over WSGI")
11637 (description
11638 "@code{wsgiprox} is a Python WSGI (Web Server Gateway Interface)
11639middle-ware for adding HTTP and HTTPS proxy support to a WSGI application.
11640The library accepts HTTP and HTTPS proxy connections, and routes them to a
11641designated prefix.")
11642 (license license:asl2.0)))
11643
11644(define-public python-warcio
11645 ;; The PyPI release is missing some test support files (see:
11646 ;; https://github.com/webrecorder/warcio/issues/132).
11647 (package
11648 (name "python-warcio")
11649 (version "1.8.1")
11650 (source
11651 (origin
11652 (method git-fetch)
11653 (uri (git-reference
11654 (url "https://github.com/webrecorder/warcio")
11655 (commit (string-append "v" version))))
11656 (file-name (git-file-name name version))
11657 (sha256
11658 (base32
11659 "19wwg7zmx33c942dbahdkng1byiwr4c9cd1ayrsh13f818n17zps"))))
11660 (build-system pyproject-build-system)
11661 (arguments
11662 (list
11663 #:test-flags ; These tests fail due to networking requirements.
11664 '(list "-k" (format #f "not ~a"
11665 (string-join
11666 '("test_post_chunked"
11667 "test_remote"
11668 "test_capture_http_proxy"
11669 "test_capture_https_proxy"
11670 "test_capture_https_proxy_same_session")
11671 " and not "))
11672 ; The following test requires the hookdns package.
11673 "--ignore=test/test_capture_http_proxy.py")))
11674 (native-inputs
11675 (list python-httpbin
11676 python-pytest
11677 python-requests
11678 python-setuptools
11679 python-wsgiprox))
11680 (home-page "https://github.com/webrecorder/warcio")
11681 (synopsis "Streaming web archival archive (WARC) library")
11682 (description "warcio is a Python library to read and write the WARC format
11683commonly used in Web archives. It is designed for fast, low-level access to
11684web archival content, oriented around a stream of WARC records rather than
11685files.")
11686 (license license:asl2.0)))
11687
11688(define-public python-websockets
11689 (package
11690 (name "python-websockets")
11691 (version "16.0")
11692 (source
11693 (origin
11694 (method git-fetch)
11695 (uri (git-reference
11696 (url "https://github.com/aaugustin/websockets")
11697 (commit version)))
11698 (file-name (git-file-name name version))
11699 (sha256
11700 (base32
11701 "1f71siwmjxn8b671x8lkkxx56q3xm99f2kmjqpzfcv3air9n94gg"))))
11702 (build-system pyproject-build-system)
11703 (arguments
11704 (list #:test-backend #~'unittest
11705 #:phases
11706 #~(modify-phases %standard-phases
11707 (add-before 'check 'extend-test-timeout
11708 (lambda _
11709 ;; Some architectures need an even longer timeout. Make it
11710 ;; long enough that it should never fail due to timeout.
11711 #$@(if (target-riscv64?)
11712 #~((setenv "WEBSOCKETS_TESTS_TIMEOUT_FACTOR" "100"))
11713 #~((setenv "WEBSOCKETS_TESTS_TIMEOUT_FACTOR" "10"))))))))
11714 (native-inputs
11715 (list python-setuptools))
11716 (home-page "https://github.com/aaugustin/websockets")
11717 (synopsis
11718 "Python implementation of the WebSocket Protocol (RFC 6455 & 7692)")
11719 (description
11720 "@code{websockets} is a library for building WebSocket servers and clients
11721in Python with a focus on correctness and simplicity.
11722
11723Built on top of @code{asyncio}, Python's standard asynchronous I/O framework,
11724it provides an elegant coroutine-based API.")
11725 (license license:bsd-3)))
11726
11727(define-public selenium-manager
11728 (package
11729 (name "selenium-manager")
11730 (version "4.34.2")
11731 (source
11732 (origin
11733 (method git-fetch)
11734 (uri (git-reference
11735 (url "https://github.com/SeleniumHQ/selenium")
11736 (commit (string-append "selenium-" version "-python"))))
11737 (file-name (git-file-name name version))
11738 (sha256
11739 (base32 "14fg8r4rm9d7169rlm29l5yn08wgllmqk1zc6six3dlrzzf5mxil"))))
11740 (build-system cargo-build-system)
11741 (arguments
11742 (list
11743 ;; XXX: Almost all tests require either browsers or network access.
11744 #:tests? #f
11745 #:install-source? #f ; Most likely intended as a leaf.
11746 #:phases
11747 #~(modify-phases %standard-phases
11748 (add-after 'unpack 'chdir
11749 (lambda _
11750 (chdir "rust"))))))
11751 (native-inputs (list pkg-config))
11752 (inputs (cons* (list zstd "lib") xz
11753 (cargo-inputs 'selenium-manager)))
11754 (home-page "https://www.selenium.dev")
11755 (synopsis "CLI tool to manager the browser test infrastructure")
11756 (description
11757 "Selenium simplifies web browser automation. It specifically provides
11758infrastructure for the W3C WebDriver specification — a platform and
11759language-neutral coding interface compatible with all major web browsers.
11760
11761Selenium Manager is a CLI tool that automatically manages the browser/driver
11762infrastructure required by Selenium.")
11763 (license license:asl2.0)))
11764
11765(define-public python-selenium
11766 (package/inherit selenium-manager
11767 (name "python-selenium")
11768 (build-system pyproject-build-system)
11769 (arguments
11770 (list
11771 ;; XXX: Disable failing tests.
11772 #:test-flags
11773 #~(list "--ignore-glob=test/selenium/webdriver/*"
11774 ;; Probably requires those.
11775 "--ignore-glob=test/unit/selenium/webdriver/chrome/*"
11776 "--ignore-glob=test/unit/selenium/webdriver/firefox/*"
11777 ;; XXX: SSL certificates access.
11778 "--ignore=test/unit/selenium/webdriver/remote/remote_connection_tests.py"
11779 "-k" "not test_missing_cdp_devtools_version_falls_back")
11780 #:phases
11781 #~(modify-phases %standard-phases
11782 (add-after 'unpack 'chdir
11783 (lambda _
11784 (chdir "py")))
11785 (add-after 'chdir 'inject-selenium-manager-binary
11786 (lambda* (#:key inputs #:allow-other-keys)
11787 (substitute* "selenium/webdriver/common/selenium_manager.py"
11788 (("compiled_path = Path.*")
11789 (format #f "return Path(~s)~%"
11790 (search-input-file inputs "bin/selenium-manager"))))
11791 (substitute* "pyproject.toml"
11792 (("\\[\\[tool\\.setuptools-rust\\.bins\\]\\]")
11793 "")
11794 (("target = \"selenium\\.webdriver\\.common.*\"")
11795 ""))))
11796 (add-after 'chdir 'relax-requirements
11797 (lambda _
11798 (substitute* "pyproject.toml"
11799 (("\"(typing_extensions|trio|urllib3.*)~=.*\"," _ target)
11800 (format #f "~s," target))))))))
11801 (propagated-inputs (list python-certifi
11802 python-trio
11803 python-trio-websocket
11804 python-typing-extensions
11805 python-urllib3
11806 python-websocket-client))
11807 (inputs (list selenium-manager))
11808 (native-inputs (list python-filetype
11809 python-pytest
11810 python-pytest-mock
11811 python-pytest-trio
11812 python-setuptools
11813 python-setuptools-rust))
11814 (synopsis "Python bindings for Selenium")
11815 (description
11816 "Selenium enables web browser automation. It specifically provides
11817infrastructure for the W3C WebDriver specification — a platform and
11818language-neutral coding interface compatible with all major web browsers.")))
11819
11820(define-public python-rapidjson
11821 (package
11822 (name "python-rapidjson")
11823 (version "1.23")
11824 (source
11825 (origin
11826 (method git-fetch)
11827 (uri (git-reference
11828 (url "https://github.com/python-rapidjson/python-rapidjson")
11829 (commit (string-append "v" version))))
11830 (file-name (git-file-name name version))
11831 (sha256
11832 (base32 "0ajf919gg3qmi68jb0m6v80al2n65cn2ac36qz46s0h6zh92cl86"))
11833 (modules '((guix build utils)))
11834 (snippet
11835 '(delete-file-recursively "rapidjson"))))
11836 (build-system pyproject-build-system)
11837 (arguments
11838 (list
11839 #:test-flags '(list "tests")
11840 #:phases
11841 #~(modify-phases %standard-phases
11842 ;; We cannot seem to use #:configure-flags with the
11843 ;; pyproject-build-system to override rj_include_dir.
11844 (add-after 'unpack 'override-rapidjson-sources
11845 (lambda _
11846 (substitute* "setup.py"
11847 (("^rj_include_dir =.*")
11848 (string-append "rj_include_dir = '"
11849 #$(this-package-native-input "rapidjson")
11850 "/include/rapidjson" "'"))
11851 (("if not os.path.isdir.*") "if False:")))))))
11852 (native-inputs
11853 (list rapidjson python-pytest python-pytz python-setuptools))
11854 (home-page "https://github.com/python-rapidjson/python-rapidjson")
11855 (synopsis "Python wrapper around rapidjson")
11856 (description "This package provides a python wrapper around rapidjson.")
11857 (license license:expat)))
11858
11859(define-public python-venusian
11860 (package
11861 (name "python-venusian")
11862 (version "3.1.1")
11863 (source
11864 (origin
11865 (method url-fetch)
11866 (uri (pypi-uri "venusian" version))
11867 (sha256
11868 (base32 "0h8cdwx5x6i1ydc9s0hxwvy73l6iwlqijn2l77mq74k6anrv6ksk"))))
11869 (build-system pyproject-build-system)
11870 (native-inputs
11871 (list python-pytest
11872 python-setuptools))
11873 (home-page "https://docs.pylonsproject.org/projects/venusian")
11874 (synopsis "Library for deferring decorator actions")
11875 (description
11876 "Venusian is a library which allows framework authors to defer decorator
11877actions. Instead of taking actions when a function (or class) decorator is
11878executed at import time, you can defer the action usually taken by the
11879decorator until a separate scan phase.")
11880 (license license:repoze)))
11881
11882(define-public python-zope-deprecation
11883 (package
11884 (name "python-zope-deprecation")
11885 (version "6.0")
11886 (source (origin
11887 (method url-fetch)
11888 (uri (pypi-uri "zope_deprecation" version))
11889 (sha256
11890 (base32
11891 "0pzimp7xr8m0836bbsrx8wa9ybl58s5hwacas95nsfp6m2ypwwhq"))))
11892 (build-system pyproject-build-system)
11893 (arguments
11894 (list #:tests? #f)) ;no tests in PyPI
11895 (native-inputs
11896 (list python-setuptools))
11897 (home-page "https://zopedeprecation.readthedocs.io/")
11898 (synopsis "Function for marking deprecations")
11899 (description "The @code{zope.deprecation} module provides a function for
11900marking modules, classes, functions, methods and properties as deprecated,
11901displaying warnings when usaged in application code.")
11902 (license license:zpl2.1)))
11903
11904(define-public python-translationstring
11905 (package
11906 (name "python-translationstring")
11907 (version "1.4")
11908 (source (origin
11909 (method url-fetch)
11910 (uri (pypi-uri "translationstring" version))
11911 (sha256
11912 (base32
11913 "1wvncdzi1wj37x226qcf0yycz7js6l83na0pmc9blsbfsww7b55z"))))
11914 (build-system pyproject-build-system)
11915 (native-inputs
11916 (list python-pytest
11917 python-setuptools))
11918 (home-page "https://docs.pylonsproject.org/projects/translationstring")
11919 (synopsis "Internationalization tooling for the Pylons project")
11920 (description "This package provides a library used by various Pylons
11921project packages for internationalization (i18n) duties related to
11922translation.")
11923 (license license:repoze)))
11924
11925(define-public python-plaster
11926 (package
11927 (name "python-plaster")
11928 (version "1.1.2")
11929 (source (origin
11930 (method url-fetch)
11931 (uri (pypi-uri "plaster" version))
11932 (sha256
11933 (base32
11934 "167gfh0ahdll9m96ypgasji6yry2hkn9f0ml1b0lf4ccpxagrgpq"))))
11935 (build-system pyproject-build-system)
11936 (native-inputs
11937 (list python-pytest
11938 python-setuptools))
11939 (home-page "https://docs.pylonsproject.org/projects/plaster/en/latest/")
11940 (synopsis "Configuration loader for multiple config file formats")
11941 (description
11942 "Plaster is a loader interface around multiple config file formats. It
11943exists to define a common API for applications to use when they wish to load
11944configuration. The library itself does not aim to handle anything except a
11945basic API that applications may use to find and load configuration settings.
11946Any specific constraints should be implemented in a pluggable loader which can
11947be registered via an entrypoint.")
11948 (license license:repoze)))
11949
11950(define-public python-plaster-pastedeploy
11951 (package
11952 (name "python-plaster-pastedeploy")
11953 (version "1.0.1")
11954 (source (origin
11955 (method url-fetch)
11956 (uri (pypi-uri "plaster_pastedeploy" version))
11957 (sha256
11958 (base32
11959 "04hl71p76wnwiy195p5w51bn3c6ba0lgx8nsfm42d9s15rnjw9my"))))
11960 (build-system pyproject-build-system)
11961 (native-inputs
11962 (list python-pytest
11963 python-setuptools))
11964 (propagated-inputs
11965 (list python-plaster python-pastedeploy))
11966 (home-page "https://github.com/Pylons/plaster_pastedeploy")
11967 (synopsis "Plugin for python-plaster adding PasteDeploy syntax")
11968 (description
11969 "This plugin for @code{python-plaster} adds support for PasteDeploy
11970syntax, it provides a plaster @code{Loader} object that can parse ini files
11971according to the standard set by PasteDeploy")
11972 (license license:expat)))
11973
11974(define-public python-hupper
11975 (package
11976 (name "python-hupper")
11977 (version "1.12.1")
11978 (source
11979 (origin
11980 (method url-fetch)
11981 (uri (pypi-uri "hupper" version))
11982 (sha256
11983 (base32 "1srj7sqxdgxr0nnhh9lw8jmp64chwgg8iwfm9b4g9v7l1wbm9gq6"))))
11984 (build-system pyproject-build-system)
11985 (arguments
11986 (list
11987 ;; RuntimeError: timeout waiting for change to
11988 ;; file=/tmp/guix-build-python-hupper-1.12.1.drv-0/tmpm9n4697p
11989 #:test-flags #~(list "--ignore=tests/test_it.py")))
11990 (native-inputs
11991 (list python-pytest python-setuptools python-wheel))
11992 (propagated-inputs
11993 (list python-watchdog))
11994 (home-page "https://readthedocs.org/projects/hupper")
11995 (synopsis "Integrated process monitor tracking changes to imported Python files")
11996 (description
11997 "Hupper is an integrated process monitor that will track changes to any
11998imported Python files in sys.modules as well as custom paths. When files are
11999changed the process is restarted.")
12000 (license license:expat)))
12001
12002(define-public python-pyowm
12003 (package
12004 (name "python-pyowm")
12005 (version "3.3.0")
12006 (source
12007 (origin
12008 (method git-fetch)
12009 (uri (git-reference
12010 (url "https://github.com/csparpa/pyowm")
12011 (commit version)))
12012 (file-name (git-file-name name version))
12013 (sha256
12014 (base32
12015 "1ha4pp96y3jk33qnyir5851cnj4dc06q6wqn1b0w54l3fsds28vi"))))
12016 (build-system pyproject-build-system)
12017 (arguments (list #:test-flags #~(list "tests/unit")))
12018 (native-inputs (list python-pytest python-setuptools python-wheel))
12019 (propagated-inputs
12020 (list python-geojson-for-pyowm
12021 python-pysocks
12022 python-requests))
12023 (home-page "https://github.com/csparpa/pyowm")
12024 (synopsis "Python wrapper around OpenWeatherMap web APIs")
12025 (description
12026 "This package provides a Python wrapper around OpenWeatherMap web APIs.")
12027 (license license:expat)))
12028
12029(define-public python-pyramid
12030 (package
12031 (name "python-pyramid")
12032 (version "2.1")
12033 (source
12034 (origin
12035 (method git-fetch)
12036 (uri (git-reference
12037 (url "https://github.com/Pylons/pyramid")
12038 (commit version)))
12039 (file-name (git-file-name name version))
12040 (sha256
12041 (base32 "0my03b81009w9zqx5cdn9qixh0jah49hr0379n98kx2j3b8cfk1p"))))
12042 (build-system pyproject-build-system)
12043 (native-inputs
12044 (list python-pytest
12045 python-setuptools
12046 python-webtest
12047 python-zope-component))
12048 (propagated-inputs
12049 (list python-hupper
12050 python-plaster
12051 python-plaster-pastedeploy
12052 python-translationstring
12053 python-venusian
12054 python-webob
12055 python-zope-deprecation
12056 python-zope-interface))
12057 (home-page "https://trypyramid.com/")
12058 (synopsis "Python web-framework suitable for small and large sites")
12059 (description
12060 "Pyramid makes it easy to write web applications. From minimal
12061request/response web apps to larger, grown applications.")
12062 (license license:repoze)))
12063
12064(define-public python-pyramid-chameleon
12065 ;; PyPI lacks a fresh release, use the latest commit associated with
12066 ;; unrleased version, see:
12067 ;; <https://github.com/Pylons/pyramid_chameleon/issues/27>
12068 (let ((commit "956c77ba37120c430e871c834d3cd4ed5ac8dccf")
12069 (revision "0"))
12070 (package
12071 (name "python-pyramid-chameleon")
12072 (version (git-version "0.4.dev0" revision commit))
12073 (source
12074 (origin
12075 (method git-fetch)
12076 (uri (git-reference
12077 (url "https://github.com/Pylons/pyramid_chameleon")
12078 (commit commit)))
12079 (file-name (git-file-name name version))
12080 (sha256
12081 (base32 "0rsb921xi7736h1xikc904bq2zzmrj1g8qgyimjw5wxdcd8927b1"))))
12082 (build-system pyproject-build-system)
12083 (native-inputs
12084 (list python-pytest
12085 python-setuptools))
12086 (propagated-inputs
12087 (list python-chameleon
12088 python-pyramid))
12089 (home-page "https://github.com/Pylons/pyramid_chameleon")
12090 (synopsis "Chameleon template compiler for pyramid")
12091 (description
12092 "These package provides bindings for the Chameleon templating system
12093 for the Pyramid web framework.")
12094 (license license:repoze))))
12095
12096(define-public python-pyramid-debugtoolbar
12097 (package
12098 (name "python-pyramid-debugtoolbar")
12099 (version "4.12.1")
12100 (source
12101 (origin
12102 (method git-fetch)
12103 (uri (git-reference
12104 (url "https://github.com/Pylons/pyramid_debugtoolbar")
12105 (commit version)))
12106 (file-name (git-file-name name version))
12107 (sha256
12108 (base32 "0kalb5rsrlcz62zv9a39kp28mvwg9j6gymvzxbybdnvk51v9if56"))))
12109 (build-system pyproject-build-system)
12110 (arguments
12111 (list
12112 #:test-flags
12113 ;; Large diff assertion not equal faileurs.
12114 #~(list #$@(map (lambda (test)
12115 (string-append "--deselect=tests"
12116 "/test_panels/test_sqla.py::" test))
12117 (list "TestSimpleSelect::test_panel"
12118 "TestTransactionCommit::test_panel"
12119 "TestTransactionRollback::test_panel")))))
12120 (native-inputs
12121 (list python-pytest
12122 python-setuptools
12123 python-webtest))
12124 (propagated-inputs
12125 (list python-pyramid
12126 python-pyramid-chameleon
12127 python-pyramid-jinja2
12128 python-pyramid-mako
12129 python-selenium
12130 python-sqlalchemy
12131 python-waitress))
12132 (home-page "https://github.com/Pylons/pyramid_debugtoolbar")
12133 (synopsis "Pyramid debug toolbar")
12134 (description
12135 "This package provides an interactive HTML debugger for Pyramid
12136application development.")
12137 (license license:bsd-3)))
12138
12139(define-public python-pyramid-jinja2
12140 (package
12141 (name "python-pyramid-jinja2")
12142 (version "2.10.1")
12143 (source
12144 (origin
12145 (method url-fetch)
12146 (uri (pypi-uri "pyramid_jinja2" version))
12147 (sha256
12148 (base32 "0xqnqbqhx9bkrg2ic3blflsk8xc8kh7i2dm2kha9apqkbjrqql4c"))))
12149 (build-system pyproject-build-system)
12150 (arguments
12151 (list
12152 #:test-flags
12153 ;; Two tests failed with assertion not equal.
12154 #~(list "-k" "not test_it_relative_to_package and not test_options")))
12155 (native-inputs
12156 (list python-pytest
12157 python-setuptools
12158 python-webtest))
12159 (propagated-inputs
12160 (list python-jinja2
12161 python-markupsafe
12162 python-pyramid
12163 python-zope-deprecation))
12164 (home-page "https://github.com/Pylons/pyramid_jinja2")
12165 (synopsis "Jinja2 template bindings for the Pyramid web framework")
12166 (description "This package provides Jinja2 template bindings for the
12167Pyramid web framework.")
12168 (license license:repoze)))
12169
12170(define-public python-pyramid-mako
12171 ;; 1.1.0 was released in 2019, there a lot of compatibility changes on
12172 ;; master, us the latest commit for now.
12173 (let ((commit "1a6f4c00c7134530d2975f34d904b64a41b28b21")
12174 (revision "0"))
12175 (package
12176 (name "python-pyramid-mako")
12177 (version (git-version "1.1.0" revision commit))
12178 (source
12179 (origin
12180 (method git-fetch)
12181 (uri (git-reference
12182 (url "https://github.com/Pylons/pyramid_mako")
12183 (commit commit)))
12184 (file-name (git-file-name name version))
12185 (sha256
12186 (base32 "0v0571z2gby4apsalkdk83gs0d5mw79d56518h3bwwxzbq32kkns"))))
12187 (build-system pyproject-build-system)
12188 (native-inputs
12189 (list python-pytest
12190 python-setuptools))
12191 (propagated-inputs
12192 (list python-mako
12193 python-pyramid))
12194 (home-page "https://github.com/Pylons/pyramid_mako")
12195 (synopsis "Mako template bindings for the Pyramid web framework")
12196 (description
12197 "This package provides Mako template bindings for the Pyramid web
12198framework.")
12199 (license license:repoze))))
12200
12201(define-public python-pyramid-retry
12202 (package
12203 (name "python-pyramid-retry")
12204 (version "2.1.1")
12205 (source
12206 (origin
12207 (method url-fetch)
12208 (uri (pypi-uri "pyramid_retry" version))
12209 (sha256
12210 (base32 "1jf07v6zhli0abgm2qajzfwg68bl9zy4xygjwl4svawbwrm2ga5s"))))
12211 (build-system pyproject-build-system)
12212 (native-inputs
12213 (list python-pytest
12214 python-setuptools
12215 python-webtest))
12216 (propagated-inputs
12217 (list python-pyramid
12218 python-zope-interface))
12219 (home-page "https://github.com/Pylons/pyramid_retry")
12220 (synopsis "Pyramid execution policy supporting retrying failed requests")
12221 (description
12222 "@code{pyramid_retry} is an execution policy for Pyramid that wraps requests
12223and can retry them a configurable number of times under certain \"retryable\"
12224error conditions before indicating a failure to the client.")
12225 (license license:expat)))
12226
12227(define-public python-pyramid-tm
12228 (package
12229 (name "python-pyramid-tm")
12230 (version "2.6")
12231 (source
12232 (origin
12233 (method url-fetch)
12234 (uri (pypi-uri "pyramid_tm" version))
12235 (sha256
12236 (base32 "173hg16hldfh5n3mn482xx64nldk308dzri31jd0qa4528cx4j41"))))
12237 (build-system pyproject-build-system)
12238 (native-inputs
12239 (list python-pytest
12240 python-setuptools
12241 python-webtest))
12242 (propagated-inputs
12243 (list python-pyramid
12244 python-transaction))
12245 (home-page "https://github.com/Pylons/pyramid_tm")
12246 (synopsis "Centralized transaction management for Pyramid")
12247 (description
12248 "@code{pyramid_tm} is a package which allows Pyramid requests to join the
12249active @url{https://pypi.org/project/transaction/, transaction} as provided by
12250the Python transaction package.")
12251 (license license:repoze)))
12252
12253(define-public python-random-user-agent
12254 (package
12255 (name "python-random-user-agent")
12256 (version "1.0.1")
12257 (source
12258 (origin
12259 (method url-fetch)
12260 (uri (pypi-uri "random_user_agent" version))
12261 (sha256
12262 (base32 "04nhzdh2ki7ybhjrmghxci6hcm6i03vvin2q2ynj87fbr1pa534g"))))
12263 (build-system pyproject-build-system)
12264 (arguments (list #:tests? #f)) ; No tests.
12265 (native-inputs (list python-setuptools))
12266 (home-page "https://github.com/Luqman-Ud-Din/random_user_agent")
12267 (synopsis "List of user agents")
12268 (description
12269 "This package provides a list of user agents, from a collection of more
12270than 326,000 known user-agents. Users can pick a random one, or select one
12271based on filters.")
12272 (license license:expat)))
12273
12274(define-public python-rangehttpserver
12275 (package
12276 (name "python-rangehttpserver")
12277 (version "1.4.0")
12278 (source
12279 (origin
12280 (method git-fetch)
12281 (uri (git-reference
12282 (url "https://github.com/danvk/RangeHTTPServer")
12283 (commit version)))
12284 (file-name (git-file-name name version))
12285 (sha256
12286 (base32 "1dx533fsbq1mbz3by7qkm5bh2c253nwvm8214pqbwbfq07kqkwf2"))))
12287 (build-system pyproject-build-system)
12288 (native-inputs
12289 (list python-pytest
12290 python-requests
12291 python-setuptools))
12292 (home-page "https://github.com/danvk/RangeHTTPServer")
12293 (synopsis "SimpleHTTPServer with support for range requests")
12294 (description
12295 "This tool provides a simple HTTP server with support for Range
12296requests.")
12297 (license license:asl2.0)))
12298
12299(define-public python-flask-restx
12300 (package
12301 (name "python-flask-restx")
12302 (version "1.3.0")
12303 (source
12304 (origin
12305 (method git-fetch) ;no tests in PyPI archive
12306 (uri (git-reference
12307 (url "https://github.com/python-restx/flask-restx")
12308 (commit version)))
12309 (file-name (git-file-name name version))
12310 (sha256
12311 (base32 "1qmm3i1cdv0bvzsc1gn4ql2dsf1fbx85fk69vcmzpsdxzczmw508"))))
12312 (build-system pyproject-build-system)
12313 (arguments
12314 (list
12315 ;; 1214 passed, 6 skipped, 16 deselected, 3 warnings
12316 #:test-flags
12317 #~(list "--benchmark-skip"
12318 ;; ValueError: http://www.google.com is not a valid URL. Domain
12319 ;; does not exists.
12320 "--deselect=tests/test_inputs.py::URLTest::test_check"
12321 "-k" (string-join
12322 ;; See: <https://github.com/python-restx/flask-restx/issues/620>.
12323 (list "not test_rfc822_value"
12324 "test_iso8601_value"
12325 ;; assert 404 == 2000
12326 "test_specs_endpoint_host_and_subdomain"
12327 ;; ValueError: [email protected] is not a valid email
12328 "test_valid_value_check")
12329 " and not "))))
12330 (native-inputs
12331 (list python-blinker
12332 python-faker
12333 python-pytest
12334 python-pytest-benchmark
12335 python-pytest-flask
12336 python-pytest-mock
12337 python-setuptools))
12338 (propagated-inputs
12339 (list python-aniso8601
12340 python-flask
12341 python-importlib-resources
12342 python-jsonschema
12343 python-pytz
12344 python-werkzeug))
12345 (home-page "https://github.com/python-restx/flask-restx")
12346 (synopsis
12347 "Framework for fast, easy and documented API development with Flask")
12348 (description
12349 "Flask-RESTX is an extension for Flask that adds support for quickly building
12350REST APIs. Flask-RESTX encourages best practices with minimal setup. If you are familiar
12351 with Flask, Flask-RESTX should be easy to pick up. It provides a coherent collection of
12352decorators and tools to describe your API and expose its documentation properly using
12353Swagger.")
12354 (license license:bsd-3)))
12355
12356(define-public python-flask-socketio
12357 (package
12358 (name "python-flask-socketio")
12359 (version "5.6.1")
12360 (source
12361 (origin
12362 (method git-fetch)
12363 (uri (git-reference
12364 (url "https://github.com/miguelgrinberg/Flask-SocketIO/")
12365 (commit (string-append "v" version))))
12366 (file-name (git-file-name name version))
12367 (sha256
12368 (base32 "1bs594bxggwn78yhf86whv6bcs8gb7mhrm5dnk5x4c3jb20nhfmm"))))
12369 (build-system pyproject-build-system)
12370 (native-inputs
12371 (list python-pytest
12372 python-redis
12373 python-setuptools))
12374 (propagated-inputs
12375 (list python-flask
12376 python-socketio))
12377 (home-page "https://github.com/miguelgrinberg/Flask-SocketIO/")
12378 (synopsis "Socket.IO integration for Flask applications")
12379 (description "Socket.IO integration for Flask applications")
12380 (license license:expat)))
12381
12382(define-public python-manuel
12383 (package
12384 (name "python-manuel")
12385 (version "1.13.0")
12386 (source
12387 (origin
12388 (method url-fetch)
12389 (uri (pypi-uri "manuel" version))
12390 (sha256
12391 (base32 "0nl8psji3fizbxw34gdg22dndlg9lf5f56mnh1vr4vgsx06i4qsx"))))
12392 (build-system pyproject-build-system)
12393 (arguments
12394 (list
12395 ;; FIXME: Tests are broken, see: <https://github.com/benji-york/manuel/pull/32>.
12396 #:tests? #f))
12397 (propagated-inputs
12398 (list python-setuptools)) ;install requires
12399 (home-page "https://pypi.org/project/manuel/")
12400 (synopsis "Build tested documentation")
12401 (description
12402 "Manuel lets you mix and match traditional doctests with custom test syntax.")
12403 (license license:asl2.0)))
12404
12405(define-public python-marshmallow-jsonapi
12406 (package
12407 (name "python-marshmallow-jsonapi")
12408 (version "0.26.0")
12409 (source
12410 (origin
12411 (method git-fetch)
12412 (uri (git-reference
12413 ;; XXX: Deprecated upstream: This repository has been archived
12414 ;; by the owner on Jun 6, 2024. It is now read-only.
12415 ;; Using a maintained fork. The pypi name of this fork
12416 ;; is marshmallow-jsonapi-minfork.
12417 (url "https://github.com/tadams42/marshmallow-jsonapi")
12418 (commit version)))
12419 (file-name (git-file-name name version))
12420 (sha256
12421 (base32 "07sizh4m03rrk1139ci3psh5npk42cdsdfsdp574pz1fd5ncrq91"))))
12422 (build-system pyproject-build-system)
12423 (native-inputs
12424 (list python-faker
12425 python-flask
12426 python-pytest
12427 python-setuptools))
12428 (propagated-inputs (list python-marshmallow))
12429 (home-page "https://github.com/marshmallow-code/marshmallow-jsonapi")
12430 (synopsis "JSON:API 1.0 formatting with Marshmallow")
12431 (description
12432 "The marshmallow-jsonapi package provides a simple way to produce
12433@uref{https://jsonapi.org, JSON:API}-compliant data in any Python Web
12434framework. It includes optional utilities to integrate with Flask. This is a
12435forked version whose pypi name is @code{marshmallow_jsonapi_minfork}.")
12436 (license license:expat)))
12437
12438(define-public python-pecan
12439 (package
12440 (name "python-pecan")
12441 (version "1.8.0")
12442 (source
12443 (origin
12444 (method git-fetch)
12445 (uri (git-reference
12446 (url "https://github.com/pecan/pecan")
12447 (commit version)))
12448 (file-name (git-file-name name version))
12449 (sha256
12450 (base32 "0w693jpnjy358992f3jrrlf31knkqn0jvz2jx0iz7ziikprc61p8"))))
12451 (build-system pyproject-build-system)
12452 (arguments
12453 (list
12454 #:test-flags '(list "--pyargs" "pecan")))
12455 (native-inputs
12456 (list gunicorn
12457 python-genshi
12458 python-jinja2
12459 python-pytest
12460 python-sqlalchemy-2
12461 python-webtest))
12462 (propagated-inputs
12463 (list python-mako
12464 python-webob))
12465 (home-page "http://github.com/pecan/pecan")
12466 (synopsis "WSGI object-dispatching web framework")
12467 (description "This package provides a WSGI object-dispatching web
12468framework, designed to be lean and fast, with few dependencies.")
12469 (license license:bsd-3)))
12470
12471(define-public python-persistent
12472 (package
12473 (name "python-persistent")
12474 (version "6.1.1")
12475 (source
12476 (origin
12477 (method git-fetch)
12478 (uri (git-reference
12479 (url "https://github.com/zopefoundation/persistent/")
12480 (commit version)))
12481 (file-name (git-file-name name version))
12482 (sha256
12483 (base32 "19qwqg49zql2c8l4vjxjb9haw0bzd6lk8p4v3hip2irch6a4578a"))))
12484 (build-system pyproject-build-system)
12485 (arguments
12486 (list
12487 #:phases
12488 #~(modify-phases %standard-phases
12489 (replace 'check
12490 (lambda* (#:key tests? #:allow-other-keys)
12491 (if tests?
12492 (invoke "zope-testrunner" "--test-path=src"
12493 ;; XXX: Ignore doc tests.
12494 "!persistent.tests.test_docs")
12495 (format #t "test suite not run~%")))))))
12496 (propagated-inputs
12497 (list python-cffi
12498 python-zope-deferredimport
12499 python-zope-interface
12500 python-zope-testrunner))
12501 (native-inputs
12502 (list python-manuel python-zope-testrunner python-setuptools))
12503 (home-page "https://github.com/zopefoundation/persistent/")
12504 (synopsis "Translucent persistent objects")
12505 (description
12506 "This package contains a generic persistence implementation for Python.
12507It forms the core protocol for making objects interact \"transparently\" with
12508a database such as the ZODB.")
12509 (license license:zpl2.1)))
12510
12511(define-public python-transaction
12512 (package
12513 (name "python-transaction")
12514 (version "5.0")
12515 (source
12516 (origin
12517 (method url-fetch)
12518 (uri (pypi-uri "transaction" version))
12519 (sha256
12520 (base32 "0x0i5graxb93aa8bwf5rmm9zq7d7r6q2b4pw358wph5whbbpnvhh"))))
12521 (build-system pyproject-build-system)
12522 (native-inputs
12523 (list python-pytest
12524 python-setuptools))
12525 (propagated-inputs
12526 (list python-zope-interface))
12527 (home-page "https://github.com/zopefoundation/transaction")
12528 (synopsis "Transaction management for Python")
12529 (description "This package contains a generic transaction implementation
12530for Python. It is mainly used by the ZODB.")
12531 (license license:zpl2.1)))
12532
12533(define-public python-truststore
12534 (package
12535 (name "python-truststore")
12536 (version "0.10.4")
12537 (source
12538 (origin
12539 (method url-fetch)
12540 (uri (pypi-uri "truststore" version))
12541 (sha256
12542 (base32 "00f3xc7720rkddsn291yrw871kfnimi6d9xbwi75xbb3ci1vv4cx"))))
12543 (build-system pyproject-build-system)
12544 (arguments
12545 (list #:tests? #f)) ;all tests require Internet access
12546 (native-inputs
12547 (list python-flit-core))
12548 (home-page "https://github.com/sethmlarson/truststore")
12549 (synopsis "Verify certificates using native system trust stores")
12550 (description
12551 "Truststore is a library which exposes native system certificate stores (ie
12552\"trust stores\") through an @code{ssl.SSLContext-like} API. This means that
12553Python applications no longer need to rely on certifi as a root certificate
12554store.")
12555 (license license:expat)))
12556
12557(define-public python-robot-detection
12558 (package
12559 (name "python-robot-detection")
12560 (version "0.4.0")
12561 (source
12562 (origin
12563 (method git-fetch)
12564 (uri (git-reference
12565 (url "https://github.com/rory/robot-detection")
12566 (commit (string-append "v" version))))
12567 (file-name (git-file-name name version))
12568 (sha256
12569 (base32 "1gxk13rn0gw5pfc4abhfnzg8qi05xa0ygs26pgkp0swygkzq6wsq"))))
12570 (build-system pyproject-build-system)
12571 (arguments (list #:test-backend #~'unittest))
12572 (native-inputs (list python-setuptools))
12573 (propagated-inputs (list python-six))
12574 (home-page "https://github.com/rory/robot-detection")
12575 (synopsis "Detect web crawlers")
12576 (description
12577 "@code{robot_detection} is a python module to detect if a given HTTP User
12578Agent is a web crawler. It uses the list of registered robots from
12579@url{http://www.robotstxt.org}.")
12580 (license license:gpl3+)))
12581
12582(define-public python-robotframework-requests
12583 (package
12584 (name "python-robotframework-requests")
12585 (version "0.9.7")
12586 (source
12587 (origin
12588 (method git-fetch) ; no tests in PyPI release
12589 (uri (git-reference
12590 (url "https://github.com/MarketSquare/robotframework-requests")
12591 (commit (string-append "v" version))))
12592 (file-name (git-file-name name version))
12593 (sha256
12594 (base32 "077j8p5k41v53slyv8h32fcmqfi7m6z3r4gmyqqaawm5szfmy61m"))))
12595 (build-system pyproject-build-system)
12596 (native-inputs
12597 (list python-pytest
12598 python-setuptools
12599 python-wheel))
12600 (propagated-inputs
12601 (list python-requests
12602 python-robotframework))
12603 (home-page "https://github.com/MarketSquare/robotframework-requests")
12604 (synopsis "Robot Framework keyword library wrapper around requests")
12605 (description
12606 "@code{RequestsLibrary} is a @url{https://robotframework.org/, Robot
12607Framework} library aimed to provide HTTP API testing functionalities by
12608wrapping the @code{requests} Python library.")
12609 (license license:expat)))
12610
12611(define-public python-pysolr
12612 (package
12613 (name "python-pysolr")
12614 (version "3.10.0")
12615 (source
12616 (origin
12617 (method url-fetch)
12618 (uri (pypi-uri "pysolr" version))
12619 (sha256
12620 (base32 "02gl1sma5cnpd7srpri1g68lpsg3s5n3lr462p5ll8v9s4nllyqj"))))
12621 (build-system pyproject-build-system)
12622 (arguments
12623 '(#:tests? #f)) ; Tests require network access.
12624 (native-inputs
12625 (list python-setuptools
12626 python-setuptools-scm
12627 python-wheel))
12628 (propagated-inputs
12629 (list python-requests))
12630 (home-page "https://github.com/django-haystack/pysolr/")
12631 (synopsis "Lightweight python wrapper for Apache Solr")
12632 (description
12633 "This module provides an interface that queries the Apache Solr server
12634using a pure Python implementation.")
12635 (license license:bsd-3)))
12636
12637(define-public python-pyjsparser
12638 ;; XXX: This project is potentially abandonware, consider to remove in next
12639 ;; refresh cycle, see:
12640 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/28>,
12641 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/39>, and
12642 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/40>.
12643 (package
12644 (name "python-pyjsparser")
12645 (version "2.7.1")
12646 (source
12647 (origin
12648 (method url-fetch)
12649 (uri (pypi-uri "pyjsparser" version))
12650 (sha256
12651 (base32 "0ycmf9fsvwliqmm1n6sfz7x71y7i2kbfgn39d8lsbiccfxmxlq5y"))))
12652 (build-system pyproject-build-system)
12653 (arguments
12654 '(#:tests? #f)) ;no tests in PyPI
12655 (native-inputs (list python-setuptools))
12656 (home-page "https://github.com/PiotrDabkowski/pyjsparser")
12657 (synopsis "Fast JavaScript parser")
12658 (description
12659 "This package provides a fast JavaScript parser (based on esprima.js)")
12660 (license license:expat)))
12661
12662(define-public python-js2py
12663 (package
12664 (name "python-js2py")
12665 (properties '((commit . "2e017b86e2f18a6c8a842293b1687f2ce7baa12e")
12666 (revision . "0")))
12667 (version (git-version "0.74"
12668 (assoc-ref properties 'revision)
12669 (assoc-ref properties 'commit)))
12670 (source
12671 (origin
12672 (method git-fetch)
12673 (uri (git-reference
12674 (url "https://github.com/PiotrDabkowski/Js2Py")
12675 (commit (assoc-ref properties 'commit))))
12676 (file-name (git-file-name name version))
12677 (sha256
12678 (base32 "0rsac03shkm0yxq91hzxdvhb96wy168bxdw8azi25bvlm8s3l27p"))
12679 (patches
12680 (list
12681 (origin
12682 (method url-fetch)
12683 (uri (string-append "https://github.com/PiotrDabkowski/Js2Py/commit"
12684 "/fd7df4a91fb08060914c7b1d9e94583d18f3371b"
12685 ".patch"))
12686 (file-name (string-append name "-" version "-pull-327.patch"))
12687 (sha256
12688 (base32 "14v89v8qqrsq0d63xbilkvx19l1rk59mlrbxvd4sj138lk7160ki")))))))
12689 (build-system pyproject-build-system)
12690 (arguments
12691 (list #:tests? #f)) ; tests require Node
12692 (native-inputs
12693 (list python-setuptools))
12694 (propagated-inputs
12695 (list python-pyjsparser
12696 python-six
12697 python-tzlocal))
12698 (home-page "https://github.com/PiotrDabkowski/Js2Py")
12699 (synopsis "JavaScript to Python translator")
12700 (description
12701 "This package provides a JavaScript to Python translator and a JavaScript
12702interpreter written in pure Python.")
12703 (license license:expat)))
12704
12705(define-public python-http-ece
12706 (package
12707 (name "python-http-ece")
12708 (version "1.2.1")
12709 (source
12710 (origin
12711 (method git-fetch)
12712 (uri (git-reference
12713 (url "https://github.com/web-push-libs/encrypted-content-encoding")
12714 (commit (string-append "v" version))))
12715 (file-name (git-file-name name version))
12716 (sha256
12717 (base32 "16kd9dsfpyfvq4iw6bbrrqrvsnf5lwgwa6p9f3b1y56ab18y0kzx"))))
12718 (build-system pyproject-build-system)
12719 (arguments
12720 `(#:phases
12721 (modify-phases %standard-phases
12722 (add-after 'unpack 'change-directory
12723 (lambda _ (chdir "python") #t)))))
12724 (native-inputs
12725 (list python-pytest python-setuptools))
12726 (propagated-inputs
12727 (list python-cryptography))
12728 (home-page "https://github.com/web-push-libs/encrypted-content-encoding")
12729 (synopsis "Encrypted Content Encoding for HTTP")
12730 (description
12731 "This package provides a simple implementation of Encrypted Content
12732Encoding for HTTP.")
12733 (license license:expat)))
12734
12735(define-public python-imap-tools
12736 (package
12737 (name "python-imap-tools")
12738 (version "1.9.0")
12739 (source
12740 (origin
12741 (method git-fetch) ; no tests in PyPI release
12742 (uri (git-reference
12743 (url "https://github.com/ikvk/imap_tools")
12744 (commit (string-append "v" version))))
12745 (file-name (git-file-name name version))
12746 (sha256
12747 (base32 "0iawc6shxn8p0ysiqiahfic5rp1r16f7rfn11c8y2fl8falckynr"))))
12748 (arguments
12749 (list
12750 #:test-flags
12751 ;; Tests require a network connection
12752 #~(list "-k" (string-append "not test_action"
12753 " and not test_attributes"
12754 " and not test_connection"
12755 " and not test_folders"
12756 " and not test_idle"
12757 " and not test_live"))))
12758 (build-system pyproject-build-system)
12759 (native-inputs
12760 (list python-pytest python-setuptools python-wheel))
12761 (home-page "https://github.com/ikvk/imap_tools")
12762 (synopsis "Work with email and mailbox by IMAP")
12763 (description
12764 "This Python library provides tools to deal with email and mailboxes
12765over IMAP:
12766
12767@itemize
12768@item Parsed email message attributes
12769@item Query builder for searching emails
12770@item Work with emails in folders (copy, delete, flag, move, seen)
12771@item Work with mailbox folders (list, set, get, create, exists, rename, delete, status)
12772@end itemize")
12773 (license license:asl2.0)))
12774
12775(define-public python-giturlparse
12776 (package
12777 (name "python-giturlparse")
12778 (version "0.12.0")
12779 (source
12780 (origin
12781 (method git-fetch)
12782 (uri (git-reference
12783 (url "https://github.com/nephila/giturlparse")
12784 (commit version)))
12785 (file-name (git-file-name name version))
12786 (sha256
12787 (base32 "1fdbxp176p17sn5xc1418mz2vk00hlcsd5qmi2fdcfphqal6raan"))))
12788 (build-system pyproject-build-system)
12789 (native-inputs (list python-pytest python-setuptools))
12790 (home-page "https://github.com/nephila/giturlparse")
12791 (synopsis "Git URL parsing module")
12792 (description
12793 "This package provides a git URL parsing module which supports parsing
12794and rewriting of remote git URLs from various hosting providers.")
12795 (license license:asl2.0)))
12796
12797(define-public python-hstspreload
12798 (package
12799 (name "python-hstspreload")
12800 (version "2025.1.1")
12801 (source
12802 (origin
12803 (method git-fetch)
12804 (uri (git-reference
12805 (url "https://github.com/sethmlarson/hstspreload")
12806 (commit version)))
12807 (file-name (git-file-name name version))
12808 (sha256
12809 (base32 "02mdzhgdz3sprgc26qb084zy639h2zw2yc8d2vm1r18ap9k51ayq"))))
12810 (build-system pyproject-build-system)
12811 (arguments (list #:tests? #f)) ; tests require external resources.
12812 (native-inputs (list python-setuptools))
12813 (home-page "https://github.com/sethmlarson/hstspreload")
12814 (synopsis "Chromium HSTS Preload list as a Python package")
12815 (description
12816 "@code{python-hstspreload} contains Chromium HSTS Preload list
12817as a Python package.")
12818 (license license:bsd-3)))
12819
12820(define-public python-sanic-routing
12821 (package
12822 (name "python-sanic-routing")
12823 (version "23.12.0")
12824 (source
12825 (origin
12826 (method url-fetch)
12827 (uri (pypi-uri "sanic-routing" version))
12828 (sha256
12829 (base32 "014bhkharcgyprdvlk7wjxhjp1pr0cva1nwj4f2qrr23qiidrjhx"))))
12830 (build-system pyproject-build-system)
12831 (arguments
12832 ;; PyPi sources does not contain tests, recursive dependency on
12833 ;; python-sanic.
12834 (list #:tests? #f))
12835 (native-inputs (list python-setuptools python-wheel))
12836 (home-page "https://github.com/sanic-org/sanic-routing/")
12837 (synopsis "Routing component for Sanic")
12838 (description "Internal package for @code{python-sanic}, which provides
12839the @code{BasicRouter}.")
12840 (license license:expat)))
12841
12842(define-public python-sanic-testing
12843 (package
12844 (name "python-sanic-testing")
12845 (version "24.6.0")
12846 (source
12847 (origin
12848 (method git-fetch)
12849 (uri (git-reference
12850 (url "https://github.com/sanic-org/sanic-testing/")
12851 (commit (string-append "v" version))))
12852 (file-name (git-file-name name version))
12853 (sha256
12854 (base32 "0jk8ji3zjkb0jz15jxmn98yydvzk8djqm2iwcg0d281cmp2j09bf"))))
12855 (build-system pyproject-build-system)
12856 (propagated-inputs (list python-httpx))
12857 (native-inputs
12858 (list python-pytest
12859 python-pytest-asyncio
12860 python-sanic-minimal
12861 python-setuptools))
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;; A bare minimal package, mainly to use in tests and reduce closure size.
12969;; Tests are left out in the main package to slim down native-inputs and
12970;; propagated-inputs.
12971(define-public python-sanic-minimal
12972 (package/inherit python-sanic
12973 (name "python-sanic-minimal")
12974 (arguments (list #:tests? #f))
12975 (native-inputs (list python-setuptools))
12976 (propagated-inputs
12977 (list python-aiofiles
12978 python-html5tagger
12979 python-httptools
12980 python-multidict
12981 python-sanic-routing
12982 python-tracerite
12983 python-typing-extensions
12984 python-ujson
12985 python-uvloop
12986 python-websockets))))
12987
12988;;; Deprecated on <2026-10-08>.
12989(define-deprecated-package python-sanic-bootstrap python-sanic-minimal)
12990
12991(define-public python-socketio
12992 (package
12993 (name "python-socketio")
12994 (version "5.16.4")
12995 (source
12996 (origin
12997 (method git-fetch)
12998 (uri (git-reference
12999 (url "https://github.com/miguelgrinberg/python-socketio/")
13000 (commit (string-append "v" version))))
13001 (file-name (git-file-name name version))
13002 (sha256
13003 (base32 "0695mq1nijlljkmpgn3nk6gfv34rzpgxrdsld1l1vix6gxyxna0y"))))
13004 (build-system pyproject-build-system)
13005 (arguments
13006 (list
13007 ;; tests: 642 passed, 5 warnings
13008 #:test-flags
13009 ;; Tests freeze.
13010 #~(list "--ignore=tests/async/test_admin.py"
13011 "--ignore=tests/common/test_admin.py")))
13012 (native-inputs
13013 (list python-msgpack
13014 python-pytest
13015 python-pytest-asyncio
13016 python-pytest-timeout
13017 python-redis
13018 python-setuptools
13019 python-uvicorn
13020 python-valkey))
13021 (propagated-inputs
13022 (list python-bidict
13023 python-engineio
13024 ;; [optional]
13025 python-aiohttp
13026 python-requests
13027 python-websocket-client))
13028 (home-page "https://github.com/miguelgrinberg/python-socketio/")
13029 (synopsis "Python Socket.IO server")
13030 (description
13031 "This package provides a Python implementation of the @code{Socket.IO}
13032realtime client and server.")
13033 (license license:expat)))
13034
13035(define-public python-socks
13036 (package
13037 (name "python-socks")
13038 (version "2.8.1")
13039 (source
13040 (origin
13041 (method git-fetch)
13042 (uri (git-reference
13043 (url "https://github.com/romis2012/python-socks")
13044 (commit (string-append "v" version))))
13045 (file-name (git-file-name name version))
13046 (sha256
13047 (base32 "1x95i9w3izivdgz6hadh5kiil12i4ljk4ashgh3g0rjv2rw33vhj"))))
13048 (build-system pyproject-build-system)
13049 (propagated-inputs (list python-trio))
13050 (native-inputs
13051 (list python-anyio
13052 python-flask
13053 python-pytest
13054 python-pytest-asyncio
13055 python-pytest-trio
13056 python-setuptools
13057 python-tiny-proxy
13058 python-trustme
13059 python-yarl))
13060 (home-page "https://github.com/romis2012/python-socks")
13061 (synopsis
13062 "Core proxy (SOCKS4, SOCKS5, HTTP tunneling) functionality for Python")
13063 (description
13064 "Socks is a library providing core proxy (SOCKS4, SOCKS5, HTTP tunneling)
13065 functionality.")
13066 (license license:asl2.0)))
13067
13068(define-public python-socksio
13069 (package
13070 (name "python-socksio")
13071 (version "1.0.0")
13072 (source
13073 (origin
13074 (method url-fetch)
13075 (uri (pypi-uri "socksio" version))
13076 (sha256
13077 (base32 "1b64j45w35jzhjhnq44bnyad9ydh1iyyd7a6j2c8phxmllyyp2zq"))))
13078 (build-system pyproject-build-system)
13079 (native-inputs
13080 (list python-flit-core python-pytest))
13081 (home-page "https://github.com/sethmlarson/socksio")
13082 (synopsis "Sans-I/O implementation of SOCKS4, SOCKS4A, and SOCKS5")
13083 (description "The @code{socksio} Python module is a client-side sans-I/O
13084SOCKS proxy implementation. It supports SOCKS4, SOCKS4A, and SOCKS5.
13085@code{socksio} is a sans-I/O library similar to @code{h11} or @code{h2}; this
13086means the library itself does not handle the actual sending of the bytes
13087through the network, it only deals with the implementation details of the
13088SOCKS protocols. It can be paired with any I/O library.")
13089 (license license:expat)))
13090
13091(define-public python-simple-websocket
13092 (package
13093 (name "python-simple-websocket")
13094 (version "1.1.0")
13095 (source
13096 (origin
13097 (method url-fetch)
13098 (uri (pypi-uri "simple_websocket" version))
13099 (sha256
13100 (base32 "1r1all55d5dimiw3qwdhj53cxj9yjgnskcysmcscarx0g9726fbr"))))
13101 (build-system pyproject-build-system)
13102 (arguments
13103 ;; Requires Internet access to resolve example.com
13104 (list #:test-flags '(list "--ignore=tests/test_client.py")))
13105 (propagated-inputs (list python-wsproto))
13106 (native-inputs (list python-pytest
13107 python-setuptools))
13108 (home-page "https://github.com/miguelgrinberg/simple-websocket")
13109 (synopsis "Simple WebSocket server and client for Python")
13110 (description "This package provides a simple @code{WebSocket} server and
13111client for Python.")
13112 (license license:expat)))
13113
13114(define-public python-siosocks
13115 (package
13116 (name "python-siosocks")
13117 (version "0.3.0")
13118 (source
13119 (origin
13120 (method git-fetch)
13121 (uri (git-reference
13122 (url "https://github.com/pohmelie/siosocks")
13123 (commit (string-append "v" version))))
13124 (file-name (git-file-name name version))
13125 (sha256
13126 (base32 "0zcib4j5bfxlryfa412wmlkk8ivsiwxrfbpij5s7ag839ii2lxa5"))))
13127 (build-system pyproject-build-system)
13128 (native-inputs
13129 (list python-pytest
13130 python-pytest-asyncio
13131 python-pytest-trio
13132 python-setuptools))
13133 (propagated-inputs (list python-trio))
13134 (home-page "https://github.com/pohmelie/siosocks")
13135 (synopsis "SOCKSv4 & SOCKSv5 TCP proxy protocol implementation in Python")
13136 (description
13137 "This package provides a Python module and framework for sans-io socks proxy
13138client/server with couple io backends.
13139
13140Features:
13141@itemize
13142@item Only TCP connect (no BIND, no UDP)
13143@item Both client and server
13144@item SOCKS versions: 4, 4a, 5
13145@item SOCKSv5 auth: no auth, username/password
13146@item Couple io backends: @code{asyncio}, @code{trio}, @code{socketserver}
13147@item One-shot socks server (@code{python -m siosocks})
13148@end itemize")
13149 (license license:expat)))
13150
13151(define-public python-tiny-proxy
13152 (package
13153 (name "python-tiny-proxy")
13154 (version "0.2.1")
13155 (source
13156 (origin
13157 (method url-fetch)
13158 (uri (pypi-uri "tiny_proxy" version))
13159 (sha256
13160 (base32 "05nq62fn3p7s1a6dkdvnrzmk39d9ddrzb3pqbbli025qs3m9j1bq"))))
13161 (build-system pyproject-build-system)
13162 ;; There are only a handful of tests and they require the as yet
13163 ;; unpackaged httpx_socks.
13164 (arguments (list #:tests? #false))
13165 (propagated-inputs (list python-anyio))
13166 (native-inputs
13167 (list python-httpx
13168 python-pytest
13169 python-setuptools
13170 python-wheel))
13171 (home-page "https://github.com/romis2012/tiny-proxy")
13172 (synopsis "Simple proxy server (SOCKS4(a), SOCKS5(h), HTTP tunnel)")
13173 (description "This package provides a simple proxy server (SOCKS4(a),
13174SOCKS5(h), HTTP tunnel).")
13175 (license license:asl2.0)))
13176
13177(define-public python-google-auth
13178 (package
13179 (name "python-google-auth")
13180 (version "2.56.0")
13181 (source
13182 (origin
13183 (method url-fetch)
13184 (uri (pypi-uri "google_auth" version))
13185 (sha256
13186 (base32 "0lx5cw49lfjqvd9vx1vlslrxyh9q0xd6d46np5a2dab9nlqa03zr"))))
13187 (build-system pyproject-build-system)
13188 (propagated-inputs
13189 (list python-aiohttp
13190 python-cryptography
13191 python-pyasn1-modules
13192 python-requests
13193 python-rsa
13194 python-urllib3))
13195 (native-inputs
13196 (list nss-certs-for-test
13197 python-aiohttp
13198 python-aioresponses
13199 python-flask
13200 python-freezegun
13201 python-grpcio
13202 python-oauth2client
13203 python-packaging
13204 python-pyjwt
13205 python-pyopenssl
13206 python-pytest
13207 python-pytest-asyncio
13208 python-pytest-localserver
13209 python-pyu2f
13210 python-requests
13211 python-responses
13212 python-rsa
13213 python-setuptools
13214 python-urllib3))
13215 (home-page "https://github.com/googleapis/google-auth-library-python")
13216 (synopsis "Google Authentication Library")
13217 (description "This library simplifies using Google's various
13218server-to-server authentication mechanisms to access Google APIs.")
13219 (license license:asl2.0)))
13220
13221(define-public python-google-resumable-media
13222 (package
13223 (name "python-google-resumable-media")
13224 (version "2.8.0")
13225 (source
13226 (origin
13227 (method git-fetch)
13228 (uri (git-reference
13229 (url
13230 "https://github.com/googleapis/google-resumable-media-python")
13231 (commit (string-append "v" version))))
13232 (file-name (git-file-name name version))
13233 (sha256
13234 (base32 "0ndida5yr06bal0m09yri80bvf8x7yy690b14ywnxl4ixi8rlh6s"))))
13235 (build-system pyproject-build-system)
13236 (arguments
13237 (list
13238 #:test-flags
13239 #~(list
13240 ;; XXX: Missing test_utils.retry.
13241 "--ignore-glob=tests*/system/"
13242 ;; XXX: md5_hash is not mock.sentinel.md5_hash
13243 "-k" (string-join
13244 (list "not test_brotli"
13245 "test_constructor"
13246 "test_decompress")
13247 " and not "))))
13248 (propagated-inputs (list python-google-crc32c))
13249 (native-inputs
13250 (list python-google-auth
13251 python-mock
13252 python-pytest
13253 python-pytest-asyncio
13254 python-setuptools
13255 python-test-utils))
13256 (home-page "https://github.com/googleapis/google-resumable-media-python")
13257 (synopsis "Utilities for Google Media Downloads and Resumable Uploads")
13258 (description "This package provides utilities for Google Media Downloads
13259and Resumable Uploads.")
13260 (license license:asl2.0)))
13261
13262(define-public python-googleapis-common-protos
13263 (package
13264 (name "python-googleapis-common-protos")
13265 (version "1.66.0")
13266 (source
13267 (origin
13268 (method git-fetch)
13269 (uri (git-reference
13270 (url "https://github.com/googleapis/python-api-common-protos")
13271 (commit (string-append "v" version))))
13272 (file-name (git-file-name name version))
13273 (sha256
13274 (base32 "1fb7bcmjngmwwhqrldslli6r5z3s6r2kj4ywjmdjj92d1i51c29r"))))
13275 (build-system pyproject-build-system)
13276 (propagated-inputs (list python-protobuf))
13277 (native-inputs (list python-pytest python-setuptools))
13278 (home-page "https://github.com/googleapis/python-api-common-protos")
13279 (synopsis "Common protobufs used in Google APIs")
13280 (description
13281 "This package contains Python classes generated from the common protos in
13282the @code{googleapis/api-common-protos} repository.")
13283 (license license:asl2.0)))
13284
13285(define-public python-google-api-core
13286 (package
13287 (name "python-google-api-core")
13288 (version "2.29.0")
13289 (source
13290 (origin
13291 (method git-fetch)
13292 (uri (git-reference
13293 (url "https://github.com/googleapis/python-api-core")
13294 (commit (string-append "v" version))))
13295 (file-name (git-file-name name version))
13296 (sha256
13297 (base32 "0ahs8abyl7719paarlnspqp8yds149w7vm3w7zz6f7q04sscd862"))))
13298 (build-system pyproject-build-system)
13299 (arguments
13300 (list
13301 #:test-flags
13302 ;; XXX: DeprecationWarning: datetime.datetime.utcfromtimestamp() is
13303 ;; deprecated and scheduled for removal in a future version. Use
13304 ;; timezone-aware objects to represent datetimes in UTC:
13305 ;; datetime.datetime.fromtimestamp(timestamp, datetime.UTC).
13306 #~(list "-W" "ignore::DeprecationWarning")))
13307 (propagated-inputs
13308 (list python-google-auth
13309 python-googleapis-common-protos
13310 python-protobuf
13311 python-proto-plus
13312 python-requests))
13313 (native-inputs
13314 (list python-mock
13315 python-pytest
13316 python-pytest-asyncio
13317 python-pytest-mock
13318 python-setuptools))
13319 (home-page "https://github.com/googleapis/python-api-core")
13320 (synopsis "Google API client core library")
13321 (description
13322 "This library defines common helpers used by all Google API clients.")
13323 (license license:asl2.0)))
13324
13325(define-public python-google-cloud-core
13326 (package
13327 (name "python-google-cloud-core")
13328 (version "2.5.0")
13329 (source
13330 (origin
13331 (method git-fetch)
13332 (uri (git-reference
13333 (url "https://github.com/googleapis/python-cloud-core")
13334 (commit (string-append "v" version))))
13335 (file-name (git-file-name name version))
13336 (sha256
13337 (base32 "1d7li74cakgl9vghxfir9nxwy36980alvxwgwjg0zyla3hgj07cq"))))
13338 (build-system pyproject-build-system)
13339 (arguments
13340 (list
13341 #:test-flags
13342 ;; XXX: DeprecationWarning: datetime.datetime.utcfromtimestamp() is
13343 ;; deprecated and scheduled for removal in a future version. Use
13344 ;; timezone-aware objects to represent datetimes in UTC:
13345 ;; datetime.datetime.fromtimestamp(timestamp, datetime.UTC).
13346 #~(list "-W" "ignore::DeprecationWarning")))
13347 (propagated-inputs (list python-google-api-core python-google-auth))
13348 (native-inputs
13349 (list python-grpcio
13350 python-grpcio-status
13351 python-pytest
13352 python-setuptools))
13353 (home-page "https://github.com/googleapis/python-cloud-core")
13354 (synopsis "Google Cloud API client core library")
13355 (description
13356 "This library defines common helpers (e.g. base @code{Client} classes)
13357used by all of the @code{google-cloud-*} packages.")
13358 (license license:asl2.0)))
13359
13360(define-public python-google-cloud-storage
13361 (package
13362 (name "python-google-cloud-storage")
13363 (version "2.19.0")
13364 (source
13365 (origin
13366 (method git-fetch)
13367 (uri (git-reference
13368 (url "https://github.com/googleapis/python-storage")
13369 (commit (string-append "v" version))))
13370 (file-name (git-file-name name version))
13371 (sha256
13372 (base32 "19w10v2j4ciwlf8j2ylm77f8z1b0kqzg8lkh9rvh2swv1zrhydpj"))))
13373 (build-system pyproject-build-system)
13374 (arguments
13375 (list
13376 #:test-flags
13377 #~(list
13378 ;; XXX: Missing test_utils.retry.
13379 "--ignore=tests/system/"
13380 ;; Needs docker.
13381 "--ignore=tests/conformance/"
13382 ;; XXX: Deprecations.
13383 "-k" (string-join
13384 (list "not test_set_api_request_attr"
13385 "test_create_bucket_w_custom_endpoint"
13386 "test_ctor_w_api_endpoint_override"
13387 "test_ctor_w_custom_endpoint_use_auth"
13388 "test_list_buckets_w_custom_endpoint")
13389 " and not ")
13390 "tests")))
13391 (native-inputs
13392 (list python-googleapis-common-protos
13393 python-mock
13394 python-pytest
13395 python-test-utils
13396 python-setuptools))
13397 (propagated-inputs
13398 (list python-google-api-core
13399 python-google-auth
13400 python-google-cloud-core
13401 python-google-resumable-media
13402 python-protobuf
13403 python-requests))
13404 (home-page "https://github.com/googleapis/python-storage")
13405 (synopsis "Google Cloud Storage API client library")
13406 (description
13407 "Google Cloud Storage allows you to store data on Google infrastructure,
13408and it can be used to distribute large data objects to users via direct
13409download. This package provides a Google Cloud Storage API client library for
13410Python.")
13411 (license license:asl2.0)))
13412
13413(define-public python-smart-open
13414 (package
13415 (name "python-smart-open")
13416 (version "7.3.0")
13417 (source
13418 (origin
13419 (method git-fetch) ;no tests in PyPI archive
13420 (uri (git-reference
13421 (url "https://github.com/piskvorky/smart_open")
13422 (commit (string-append "v" version))))
13423 (file-name (git-file-name name version))
13424 (sha256
13425 (base32 "1jk3dj0j7idv94g1ga5wyvybakj4l150g26cbsjkrjfpy017vxab"))))
13426 (build-system pyproject-build-system)
13427 (arguments
13428 (list
13429 #:test-flags
13430 #~(list "--ignore=ci_helpers/"
13431 "--ignore=integration-tests/"
13432 ;; FIXME: Enable when guix/guix#1436 is resolved.
13433 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri"
13434 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri_contains_question_mark"
13435 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri_contains_slash"
13436 "--deselect=tests/test_smart_open.py::ParseUriTest::test_scheme"
13437 "--ignore=tests/test_gcs.py")))
13438 (propagated-inputs
13439 (list python-azure-common
13440 python-azure-core
13441 python-azure-storage-blob
13442 python-boto3
13443 ;; python-google-cloud-storage ;see guix/guix#1436
13444 python-paramiko
13445 python-requests
13446 python-wrapt
13447 python-zstandard))
13448 (native-inputs
13449 (list python-numpy
13450 python-moto
13451 python-pytest
13452 python-pytest-rerunfailures
13453 python-responses
13454 python-setuptools
13455 python-setuptools-scm
13456 python-wheel))
13457 (home-page "https://github.com/piskvorky/smart_open")
13458 (synopsis "Utilities for streaming large files")
13459 (description
13460 "This package provides utilities for streaming large files (S3, HDFS,
13461GCS, Azure Blob Storage, gzip, bz2, etc.)")
13462 (license license:expat)))
13463
13464(define-public python-smart-open-6
13465 (package
13466 (inherit python-smart-open)
13467 (name "python-smart-open")
13468 (version "6.4.0")
13469 (source
13470 (origin
13471 (method git-fetch)
13472 (uri (git-reference
13473 (url "https://github.com/piskvorky/smart_open")
13474 (commit (string-append "v" version))))
13475 (file-name (git-file-name name version))
13476 (sha256
13477 (base32 "1vpx37b6lsb6iwi59776ywjrqk1czv8arlhaf9073lrsbilqvj3x"))))
13478 (arguments
13479 (list
13480 ;; XXX: Tests need some older native inputs, disable for now.
13481 #:tests? #f))))
13482
13483(define-public python-w3lib
13484 (package
13485 (name "python-w3lib")
13486 (version "2.3.1")
13487 (source
13488 (origin
13489 (method url-fetch)
13490 (uri (pypi-uri "w3lib" version))
13491 (sha256
13492 (base32
13493 "1929layzxwdnf43hhrz7rabv388b2yibj7mnq9s62mr760mc12jw"))))
13494 (build-system pyproject-build-system)
13495 (native-inputs
13496 (list python-pytest python-setuptools python-wheel))
13497 (home-page "https://github.com/scrapy/w3lib")
13498 (synopsis "Python library of web-related functions")
13499 (description
13500 "This is a Python library of web-related functions, such as: remove
13501comments, or tags from HTML snippets, extract base url from HTML snippets,
13502translate entities on HTML strings, among other things.")
13503 (license license:bsd-3)))
13504
13505(define-public python-webcolors
13506 (package
13507 (name "python-webcolors")
13508 (version "25.10.0")
13509 (source
13510 (origin
13511 (method git-fetch)
13512 (uri (git-reference
13513 (url "https://github.com/ubernostrum/webcolors")
13514 (commit version)))
13515 (sha256
13516 (base32 "1wknzir5252y30wcpwxb04ngmrdw1llzqmrpiajyhkm81x2lgrym"))))
13517 (build-system pyproject-build-system)
13518 (native-inputs
13519 (list python-pdm-backend python-pytest))
13520 (home-page "https://github.com/ubernostrum/webcolors")
13521 (synopsis "HTML/CSS color definitions library")
13522 (description "@code{python-webcolors} is a module for working with
13523HTML/CSS color definitions. Normalizing and converting between the following
13524formats is supported.
13525@itemize
13526@item Specification-defined color names
13527@item Six-digit hexadecimal
13528@item Three-digit hexadecimal
13529@item Integer rgb() triplet
13530@item Percentage rgb() triplet
13531@end itemize
13532Only the RGB colorspace is supported. Conversion to/from the HSL colorspace
13533can be handled by the @code{colorsys} module in the Python standard library.")
13534 (license license:bsd-3)))
13535
13536(define-public python-woob
13537 ;; TODO: woob requires backends which are currently installed on the fly in
13538 ;; ~/.local/share/woob/modules/3.7/woob_modules/ , perhaps we should install
13539 ;; them in the store instead. Many modules are included in the modules
13540 ;; directory in the source tree, but it is unclear how to install them.
13541 ;; Many modules require extra dependencies though, so maybe they should be
13542 ;; packaged independently of woob itself.
13543 (package
13544 (name "python-woob")
13545 (version "3.7")
13546 (source
13547 (origin
13548 (method git-fetch)
13549 (uri (git-reference
13550 (url "https://gitlab.com/woob/woob.git")
13551 (commit version)))
13552 (file-name (git-file-name name version))
13553 (sha256
13554 (base32 "1sy0aykff56xs4dnc7ak6m8is2zgz9fprf3i1pk8n861xz1z748i"))))
13555 (build-system pyproject-build-system)
13556 (arguments
13557 (list
13558 #:test-flags
13559 ;; Deselect tests that require DNS lookup.
13560 #~(list
13561 "--deselect=tests/browser/adapters.py::TestAdapter::test_ciphers"
13562 "--deselect=tests/browser/browsers.py::TestBrowser::test_verify")
13563 #:phases
13564 #~(modify-phases %standard-phases
13565 (add-before 'build 'relax-requirements
13566 (lambda _
13567 (substitute* "pyproject.toml"
13568 ;; packaging ~= 23.0
13569 (("\"packaging .*\",")
13570 "")
13571 ;; rich~=13.0
13572 (("\"rich .*\",")
13573 "\"rich\",")))))))
13574 (native-inputs
13575 (list nss-certs-for-test
13576 python-pytest
13577 python-setuptools))
13578 (propagated-inputs
13579 (list python-babel
13580 python-colorama
13581 python-cssselect
13582 python-dateutil
13583 python-feedparser
13584 python-html2text
13585 python-lxml
13586 python-packaging
13587 python-pillow
13588 python-prettytable
13589 python-pycountry
13590 python-pyyaml
13591 python-requests
13592 python-responses
13593 python-rich
13594 python-termcolor
13595 python-unidecode))
13596 (home-page "https://woob.tech/")
13597 (synopsis "Woob, Web Outside Of Browsers")
13598 (description
13599 "Woob is a collection of applications able to interact with
13600websites, without requiring the user to open them in a browser. It also
13601provides well-defined APIs to talk to websites lacking one.")
13602 (license license:lgpl3+)))
13603
13604(define-public python-flask-combo-jsonapi
13605 (let ((commit "3cfff98ecdbadc45d25a3fd443ad67d3743be6f5")
13606 (revision "0"))
13607 (package
13608 (name "python-flask-combo-jsonapi")
13609 (version (git-version "1.1.0" revision commit))
13610 (source
13611 (origin
13612 (method git-fetch)
13613 (uri (git-reference
13614 (url "https://github.com/AdCombo/flask-combo-jsonapi")
13615 (commit commit)))
13616 (file-name (git-file-name name version))
13617 (sha256
13618 (base32 "1lp81v96qh9hdj3c95kvfaq0vy5vd8cm55j03aszc93bs8z5jg7h"))))
13619 (build-system pyproject-build-system)
13620 (arguments
13621 (list
13622 #:test-flags
13623 #~(list
13624 "-k"
13625 (string-join
13626 (list
13627 ;; XXX: This tests a feature that doesn't make sense when dropping
13628 ;; marshmallow < 3 support.
13629 "not test_compute_schema_propagate_context"
13630 ;; The following tests fail for unknown reasons (see:
13631 ;; https://github.com/AdCombo/flask-combo-jsonapi/issues/66).
13632 "test_get_list_with_simple_filter_relationship_custom_qs_api"
13633 "test_get_list_with_simple_filter_relationship_error")
13634 " and not "))
13635 #:phases
13636 #~(modify-phases %standard-phases
13637 (add-after 'unpack 'loosen-requirements
13638 (lambda _
13639 ;; Don't pin specific versions of dependencies.
13640 (substitute* "requirements.txt"
13641 (("^(sqlalchemy|marshmallow|Flask)[=<>].*" _ dep)
13642 (string-append dep "\n"))
13643 (("^marshmallow_jsonapi[=<>].*")
13644 "marshmallow_jsonapi_minfork\n"))
13645 ;; Drop support for marshmallow < 3.
13646 (substitute* (list "flask_combo_jsonapi/data_layers/alchemy.py"
13647 "flask_combo_jsonapi/schema.py")
13648 (("from marshmallow\\.base import SchemaABC")
13649 "from marshmallow import Schema")
13650 (("if isinstance\\(related_schema_cls, SchemaABC\\):")
13651 "if isinstance(related_schema_cls, Schema):"))
13652 (substitute* "tests/test_sqlalchemy_data_layer.py"
13653 (("default=None")
13654 "dump_default=None")
13655 (("missing=")
13656 "load_default=")))))))
13657 (propagated-inputs
13658 (list python-flask
13659 python-marshmallow
13660 python-marshmallow-jsonapi
13661 python-simplejson
13662 python-sqlalchemy
13663 python-apispec
13664 python-simplejson
13665 python-six))
13666 (native-inputs
13667 (list python-pytest python-setuptools))
13668 (home-page "https://github.com/AdCombo/flask-combo-jsonapi")
13669 (synopsis "Flask extension to quickly create JSON:API 1.0 REST Web APIs")
13670 (description
13671 "Flask-COMBO-JSONAPI is a Python Flask extension for building REST Web
13672APIs compliant with the @uref{https://jsonapi.org, JSON:API 1.0}
13673specification.
13674
13675It tries to combine the power of Flask-Restless with the flexibility of
13676Flask-RESTful to quickly build APIs that fit the complexity of existing
13677real-life projects with legacy data and diverse storage providers.")
13678 (license license:expat))))
13679
13680(define-public python-mwparserfromhell
13681 (package
13682 (name "python-mwparserfromhell")
13683 (version "0.7.2")
13684 (source
13685 (origin
13686 (method git-fetch)
13687 (uri (git-reference
13688 (url "https://github.com/earwig/mwparserfromhell")
13689 (commit (string-append "v" version))))
13690 (file-name (git-file-name name version))
13691 (sha256
13692 (base32 "083ir0nccm14431mmn243862gq731ww98fwpd95zm1yccvpzdy68"))))
13693 (build-system pyproject-build-system)
13694 (native-inputs (list python-pytest python-setuptools))
13695 (home-page "https://github.com/earwig/mwparserfromhell")
13696 (synopsis "Python parser for MediaWiki wikicode")
13697 (description
13698 "The MediaWiki Parser From Hell is a python library package that provides
13699a parser for MediaWiki.
13700
13701It exposes parses as normal string objects with additional methods giving
13702access to the special Wikicode features it contains (hyperlinks, tags,
13703templates…). The parser doesn't interpolate strings at all, it remains at a
13704purely formal level.
13705
13706Full documentation may be found at
13707@uref{https://mwparserfromhell.readthedocs.io, ReadTheDocs}")
13708 (license license:expat)))
13709
13710(define-public python-tweepy
13711 (package
13712 (name "python-tweepy")
13713 (version "4.16.0")
13714 (source
13715 (origin
13716 (method git-fetch)
13717 (uri
13718 (git-reference
13719 (url "https://github.com/tweepy/tweepy")
13720 (commit (string-append "v" version))))
13721 (file-name (git-file-name name version))
13722 (sha256
13723 (base32 "1k99qf0h1ykz0c56wdnlsyvd6zrcsrc4rl7rnlaxrpjppxjnpcpn"))))
13724 (build-system pyproject-build-system)
13725 (arguments
13726 ;; tests: 149 passed, 3 skipped, 1 warning
13727 (list #:test-backend #~'unittest
13728 #:test-flags #~(list "discover" "tests")))
13729 (native-inputs
13730 (list nss-certs-for-test
13731 python-flit-core
13732 python-urllib3-1.26
13733 python-vcrpy))
13734 (propagated-inputs
13735 (list python-aiohttp
13736 python-async-lru
13737 python-oauthlib
13738 python-requests
13739 python-requests-oauthlib))
13740 (home-page "https://www.tweepy.org/")
13741 (synopsis "Twitter library for Python")
13742 (description
13743 "This package provides @code{Tweepy}, an easy-to-use Python library for
13744accessing the Twitter API.")
13745 (license license:expat)))
13746
13747(define-public python-quart
13748 (package
13749 (name "python-quart")
13750 (version "0.20.0")
13751 (source
13752 (origin
13753 (method git-fetch)
13754 (uri (git-reference
13755 (url "https://github.com/pallets/quart")
13756 (commit version)))
13757 (file-name (git-file-name name version))
13758 (sha256
13759 (base32 "1gk6vg2cwpn70aald3m50xibjqjamgpz7an11h82w1fig6zmw2il"))))
13760 (build-system pyproject-build-system)
13761 (arguments
13762 (list
13763 #:test-flags
13764 ;; Not sure why test fails; related to a change in dependencies.
13765 #~(list "-k" "not test_cli_blueprints[cli_group2-args2]")))
13766 (native-inputs
13767 (list python-flit-core
13768 python-pytest
13769 python-pytest-asyncio))
13770 (propagated-inputs
13771 (list hypercorn
13772 python-aiofiles
13773 python-blinker
13774 python-click
13775 python-dotenv
13776 python-flask
13777 python-itsdangerous
13778 python-jinja2
13779 python-markupsafe
13780 python-toml
13781 python-werkzeug))
13782 (home-page "https://gitlab.com/pgjones/quart/")
13783 (synopsis "Python ASGI web microframework with the same API as Flask")
13784 (description
13785 "This package provides a Python ASGI web microframework with the same API
13786as Flask.")
13787 (license license:expat)))
13788
13789(define-public python-quart-trio
13790 (package
13791 (name "python-quart-trio")
13792 (version "0.12.0")
13793 (source
13794 (origin
13795 (method url-fetch)
13796 (uri (pypi-uri "quart_trio" version))
13797 (sha256
13798 (base32 "130r8hdk7xxjp380z1r3m28lw86q2a6g9rf0mgp9gs6hk04q9v02"))))
13799 (build-system pyproject-build-system)
13800 (arguments
13801 (list
13802 #:phases
13803 #~(modify-phases %standard-phases
13804 (add-after 'unpack 'remove-coverage-pytest-options
13805 (lambda _
13806 (substitute* "pyproject.toml"
13807 (("--no-cov-on-fail") "")))))))
13808 (native-inputs
13809 (list python-pdm-backend
13810 python-pytest
13811 python-pytest-sugar
13812 python-pytest-trio))
13813 (propagated-inputs
13814 (list hypercorn
13815 python-quart
13816 python-trio))
13817 (home-page "https://github.com/pgjones/quart-trio")
13818 (synopsis "Extension for Quart to support the Trio event loop")
13819 (description
13820 "This package provides a Quart extension to provide Trio support. This
13821is an alternative to using the asyncio event loop present in the Python
13822standard library and supported by default in Quart.")
13823 (license license:expat)))
13824
13825(define-public python-protego
13826 (package
13827 (name "python-protego")
13828 (version "0.4.0")
13829 (source
13830 (origin
13831 (method url-fetch)
13832 (uri (pypi-uri "protego" version))
13833 (sha256
13834 (base32 "1xn2aska8v94jqnbyv4ywczb55gaqvr298q8ybhs168knrifd9ck"))))
13835 (build-system pyproject-build-system)
13836 (native-inputs (list python-pytest python-setuptools python-wheel))
13837 (home-page "https://github.com/scrapy/protego")
13838 (synopsis "Python robots.txt parser with support for modern conventions")
13839 (description "Protego is a pure-Python @file{robots.txt} parser with support
13840for modern conventions.")
13841 (license license:bsd-3)))
13842
13843(define-public python-parsel
13844 (package
13845 (name "python-parsel")
13846 (version "1.10.0")
13847 (source
13848 (origin
13849 (method url-fetch)
13850 (uri (pypi-uri "parsel" version))
13851 (sha256
13852 (base32 "1050v20gzijfcaxpm1d4bvxqw2l7xhyf9pxrawrv8lczanwpvw8l"))))
13853 (build-system pyproject-build-system)
13854 (propagated-inputs
13855 (list python-cssselect
13856 python-jmespath
13857 python-lxml
13858 python-typing-extensions
13859 python-w3lib))
13860 (native-inputs
13861 (list python-psutil python-pytest python-setuptools python-wheel))
13862 (home-page "https://github.com/scrapy/parsel")
13863 (synopsis "Extract data from HTML and XML using XPath and CSS selectors")
13864 (description "Parsel is a library to extract and remove data from
13865HTML and XML using XPath and CSS selectors, optionally combined with
13866regular expressions.")
13867 (license license:bsd-3)))
13868
13869(define-public python-scrapy
13870 (package
13871 (name "python-scrapy")
13872 (version "2.13.3")
13873 (source
13874 (origin
13875 (method url-fetch)
13876 (uri (pypi-uri "scrapy" version))
13877 (sha256
13878 (base32 "0k90pni6vkj7axx3cji0b2x7yg4yfh5kh1csqiq9ssp42265h5xz"))))
13879 (build-system pyproject-build-system)
13880 (arguments
13881 (list #:test-flags
13882 #~(list "--numprocesses" (number->string (parallel-job-count))
13883 "-k" (string-join
13884 ;; ConnectionRefusedError: [Errno 111] Connection
13885 ;; refused
13886 (list "not test_append"
13887 "test_append_active_mode"
13888 "test_overwrite"
13889 "test_overwrite_active_mode"
13890 "test_persist"
13891 ;; AssertionError
13892 "test_start_deprecated_super")
13893 " and not ")
13894 ;; Skip documentation testing.
13895 "--ignore=docs")
13896 #:phases
13897 #~(modify-phases %standard-phases
13898 (add-before 'check 'prepare-test-environment
13899 (lambda _
13900 (setenv "HOME" "/tmp"))))))
13901 (propagated-inputs
13902 (list python-cryptography
13903 python-cssselect
13904 python-defusedxml
13905 python-itemadapter
13906 python-itemloaders
13907 python-lxml
13908 python-packaging
13909 python-parsel
13910 python-protego
13911 python-pydispatcher
13912 python-pyopenssl
13913 python-pypydispatcher
13914 python-queuelib
13915 python-service-identity
13916 python-tldextract
13917 python-twisted
13918 python-w3lib
13919 python-zope-interface))
13920 (native-inputs
13921 (list nss-certs-for-test
13922 python-hatchling
13923 python-pexpect
13924 python-pytest
13925 python-pytest-xdist
13926 python-setuptools
13927 python-sybil
13928 python-testfixtures))
13929 (home-page "https://scrapy.org")
13930 (synopsis "High-level Web crawling and Web scraping framework")
13931 (description "Scrapy is a fast high-level web crawling and web
13932scraping framework, used to crawl websites and extract structured data
13933from their pages. It can be used for a wide range of purposes, from data
13934mining to monitoring and automated testing.")
13935 (license license:bsd-3)))
13936
13937(define sdmx-test-data
13938 (let* ((commit "cd7899341b46e179e9f19b638478d70197e12c74")
13939 (revision "1")
13940 (name "sdmx-test-data")
13941 (version (git-version "0" revision commit)))
13942 (origin
13943 (method git-fetch)
13944 (uri (git-reference
13945 (url "https://github.com/khaeru/sdmx-test-data")
13946 (commit commit)))
13947 (file-name (git-file-name name version))
13948 (sha256
13949 (base32 "1n9y83raxxpgljbi0wjj27lhmyn19fnc2325a6cchwsa3b65ywv7")))))
13950
13951(define-public python-sdmx1
13952 (package
13953 (name "python-sdmx1")
13954 (version "2.26.0")
13955 (source
13956 (origin
13957 (method git-fetch)
13958 (uri (git-reference
13959 (url "https://github.com/khaeru/sdmx")
13960 (commit (string-append "v" version))))
13961 (file-name (git-file-name name version))
13962 (sha256
13963 (base32 "096c60pxzcw71bc9fj3hpjprrdiia365rqalapxx56g6g1vkgka9"))))
13964 (build-system pyproject-build-system)
13965 (arguments
13966 (list
13967 #:test-flags
13968 #~(list
13969 ;; 804 passed, 122 skipped, 28 deselected, 23 xfailed, 1 xpassed, 3 warnings
13970 ;; XXX: 'Version' object has no attribute 'pre'
13971 "--ignore=sdmx/tests/model/test_version.py"
13972 ;; Most of these tests require network connection.
13973 "--ignore=sdmx/tests/test_client.py"
13974 "--ignore=sdmx/tests/test_sources.py"
13975 "--ignore=sdmx/tests/test_docs.py"
13976 "--ignore=sdmx/tests/test_session.py"
13977 "--ignore=sdmx/tests/writer/test_xml.py"
13978 "--ignore=sdmx/tests/reader/test_xml_v21.py"
13979 "--deselect=sdmx/tests/convert/test_pandas.py::test_dataset_constraint"
13980 ;; Wrong python-flaky version
13981 "--deselect=sdmx/tests/format/test_xml.py::test_install_schemas_in_user_cache"
13982 "--deselect=sdmx/tests/format/test_xml.py::test_install_schemas"
13983 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_from_v2_1_samples"
13984 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_from_v3_0_samples"
13985 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_invalid_doc"
13986 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_invalid_message_type"
13987 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_max_errors"
13988 ;; sqlite3.OperationalError
13989 "--deselect=sdmx/tests/util/test_requests.py::TestOfflineAdapter::test_raises")
13990 #:phases
13991 #~(modify-phases %standard-phases
13992 (add-after 'unpack 'fix-version
13993 (lambda _
13994 ;; versioningit needs git tags; patch pyproject.toml to use
13995 ;; static version and create _version.py directly.
13996 (substitute* "pyproject.toml"
13997 (("version.source = \"versioningit\"")
13998 "
13999[tool.hatch.version]
14000path = \"sdmx/_version.py\"")
14001 ((", \"versioningit\"")
14002 ""))
14003 (call-with-output-file "sdmx/_version.py"
14004 (lambda (port)
14005 (format port "__version__ = \"~a\"~%" #$version)))))
14006 (add-before 'check 'pre-check
14007 (lambda _
14008 (setenv "SDMX_TEST_DATA" #$sdmx-test-data)
14009 (setenv "HOME" (dirname (getcwd))))))))
14010 (propagated-inputs
14011 (list python-dateutil
14012 python-lxml
14013 python-pandas
14014 python-platformdirs
14015 python-requests))
14016 (native-inputs
14017 (list python-filelock
14018 python-flaky
14019 python-hatchling
14020 python-jinja2
14021 python-pyarrow
14022 python-pytest
14023 python-pytest-cov
14024 python-pytest-xdist
14025 python-requests-mock
14026 python-requests-cache
14027 python-responses))
14028 (home-page "https://sdmx1.readthedocs.io")
14029 (synopsis "Statistical Data and Metadata eXchange (SDMX) for Python")
14030 (description "This package provides a Python implementation of the
14031SDMX 2.1 and 3.0 standards for Statistical Data and Metadata eXchange.
14032These standards are developed and used by statistical agencies and
14033international organisations. This package can be used to:
14034@itemize
14035@item Explore and retrieve data available from SDMX-REST web services
14036operated by providers including the World Bank, International Monetary
14037Fund, Eurostat, OECD, and United Nations;
14038@item Read and write data and metadata in file formats including
14039SDMX-ML (XML), SDMX-JSON, and SDMX-CSV;
14040@item Convert data and metadata into @code{python-pandas} objects, for
14041use with the analysis, plotting, and other tools in the Python data
14042science ecosystem;
14043@item Apply the SDMX information model (IM) to structure and publish
14044your own data.
14045@end itemize")
14046 (license license:asl2.0)))
14047
14048(define-public python-jstyleson
14049 (let ((commit "8c47cc9e665b3b1744cccfaa7a650de5f3c575dd")
14050 (revision "0"))
14051 (package
14052 (name "python-jstyleson")
14053 (version (git-version "0.0.2" revision commit))
14054 (source
14055 (origin
14056 (method git-fetch)
14057 (uri (git-reference
14058 (url "https://github.com/linjackson78/jstyleson")
14059 (commit commit)))
14060 (file-name (git-file-name name version))
14061 (sha256
14062 (base32 "0r72mq7h294w5icpdbjd202w25kwr1dz7nh79f6m74xisc9cixia"))))
14063 (build-system pyproject-build-system)
14064 (native-inputs (list python-pytest python-setuptools))
14065 (home-page "https://github.com/linjackson78/jstyleson")
14066 (synopsis "JSON parser supporting js-style comments")
14067 (description
14068 "@code{jstyleson} is a Python library to parse JSON. Contrary to the
14069standard Python @code{json} library, it understands js-style comments.
14070Trailing comma is also supported.")
14071 (license license:expat))))
14072
14073(define-public python-html-text
14074 (package
14075 (name "python-html-text")
14076 (version "0.7.0")
14077 (source
14078 (origin
14079 (method url-fetch)
14080 (uri (pypi-uri "html_text" version))
14081 (sha256
14082 (base32 "10lixghras86av966ha9piqfl1iscf7nffg69dmz13sxjh371jrx"))))
14083 (build-system pyproject-build-system)
14084 (native-inputs
14085 (list python-pytest
14086 python-setuptools
14087 python-wheel))
14088 (propagated-inputs
14089 (list python-lxml
14090 python-lxml-html-clean))
14091 (home-page "https://github.com/TeamHG-Memex/html-text")
14092 (synopsis "Extract text from HTML")
14093 (description "HTML to Text is a Python library for extract text from HTML.
14094Contrary to other solution such as LXML or Beautiful Soup, the text extracted
14095with @code{html_text} does not contain elements such as JavaScript or inline
14096styles not normally visible to users. It also normalizes white space
14097characters in a smarter, more visually pleasing style.")
14098 (license license:expat)))
14099
14100(define-public python-mf2py
14101 (package
14102 (name "python-mf2py")
14103 (version "2.0.1")
14104 (source
14105 (origin
14106 (method git-fetch)
14107 (uri (git-reference
14108 (url "https://github.com/microformats/mf2py")
14109 (commit (string-append "v" version))))
14110 (file-name (git-file-name name version))
14111 (sha256
14112 (base32 "0ajnf0zrh1l48fvix9fbs1qvgbqhiljqnrm51rx44p7dbarpw4ls"))))
14113 (build-system pyproject-build-system)
14114 (native-inputs (list python-mock python-poetry-core python-pytest))
14115 (propagated-inputs
14116 (list python-beautifulsoup4 python-html5lib python-requests))
14117 (home-page "https://github.com/microformats/mf2py")
14118 (synopsis "Python Microformats2 parser")
14119 (description
14120 "This Python library provides a Microformats2 parser implementing the
14121full Microformats2 (mf2) specification, including backward compatibility with
14122Microformats1 (mf1).")
14123 (license license:expat)))
14124
14125(define-public python-wadllib
14126 (package
14127 (name "python-wadllib")
14128 (version "2.0.0")
14129 (source
14130 (origin
14131 (method url-fetch)
14132 (uri (pypi-uri "wadllib" version))
14133 (sha256
14134 (base32 "09vlfg4mzdmkqk6br7j8ms3116qk5am0nf4v1jkzwd7swhisznqy"))))
14135 (build-system pyproject-build-system)
14136 (arguments
14137 (list
14138 ;; XXX: Doctests are currently failing.
14139 #:tests? #f
14140 #:phases
14141 #~(modify-phases %standard-phases
14142 (replace 'check
14143 (lambda* (#:key tests? #:allow-other-keys)
14144 (if tests?
14145 (invoke "zope-testrunner" "--test-path=src")
14146 (format #t "test suite not run~%")))))))
14147 (native-inputs
14148 (list python-multipart python-setuptools python-zope-testrunner))
14149 (propagated-inputs (list python-lazr-uri))
14150 (home-page "https://launchpad.net/wadllib")
14151 (synopsis "Web Application Description Language (WADL) navigation library")
14152 (description "The @code{wadllib} Python library allows navigating HTTP
14153resources using Web Application Description Language (WADL) files as guides.")
14154 (license license:lgpl3)))
14155
14156(define-public python-zeep
14157 (package
14158 (name "python-zeep")
14159 (version "4.3.1")
14160 (source
14161 (origin
14162 (method url-fetch)
14163 (uri (pypi-uri "zeep" version))
14164 (sha256
14165 (base32 "0vm0asfak0pxfa9i753imcy72hk8gkxbj6pmw185b7dhw7lqalzl"))))
14166 (build-system pyproject-build-system)
14167 (arguments
14168 (list
14169 #:phases
14170 '(modify-phases %standard-phases
14171 (add-after 'unpack 'compatibility
14172 (lambda _
14173 ;; Relax requests-file requirement.
14174 (substitute* "pyproject.toml"
14175 (("\"requests-file.*\",")
14176 "\"requests-file\","))
14177 ;; httpx removed the "proxies" keyword. It's now either "mounts"
14178 ;; or "proxy". See https://github.com/encode/httpx/pull/2879.
14179 (substitute* "src/zeep/transports.py"
14180 (("proxies=") "proxy="))))
14181 ;; One test requires write access
14182 (add-before 'check 'set-HOME
14183 (lambda _ (setenv "HOME" (getcwd)))))))
14184 (propagated-inputs
14185 (list python-attrs
14186 python-isodate
14187 python-lxml
14188 python-platformdirs
14189 python-pytz
14190 python-requests
14191 python-requests-file
14192 python-requests-toolbelt))
14193 (native-inputs
14194 (list nss-certs-for-test
14195 python-freezegun
14196 python-pretend
14197 python-pytest
14198 python-pytest-asyncio
14199 python-pytest-httpx
14200 python-requests-mock
14201 python-setuptools
14202 python-wheel))
14203 (home-page "https://docs.python-zeep.org/en/stable/")
14204 (synopsis "Python SOAP client based on lxml / requests")
14205 (description "Zeep is a Python SOAP client. Highlights:
14206
14207@itemize
14208@item Build on top of @code{lxml} and @code{requests}.
14209@item Support for Soap 1.1, Soap 1.2 and HTTP bindings.
14210@item Support for WS-Addressing headers.
14211@item Support for WSSE (UserNameToken / x.509 signing).
14212@item Support for @code{asyncio} via @code{httpx}.
14213@item Experimental support for XOP messages.
14214@end itemize")
14215 (license license:expat)))
14216
14217(define-public python-http-client
14218 (package
14219 (name "python-http-client")
14220 (version "3.3.7")
14221 (source
14222 (origin
14223 (method git-fetch)
14224 (uri (git-reference
14225 (url "https://github.com/sendgrid/python-http-client")
14226 (commit version)))
14227 (file-name (git-file-name name version))
14228 (sha256
14229 (base32 "0z0ziw3f4zw5fj4spiwhhs2x8qs3i5999ry2p6a5sc8b1lkkj2zi"))))
14230 (build-system pyproject-build-system)
14231 (arguments
14232 (list
14233 #:test-backend #~'unittest
14234 #:phases
14235 #~(modify-phases %standard-phases
14236 (add-after 'unpack 'fix-tests
14237 (lambda _
14238 ;; The test expects the copyright to be updated each year.
14239 (substitute* "tests/test_daterange.py"
14240 (("time\\.strftime\\(\"%Y\"\\)") "2022")))))))
14241 (native-inputs
14242 (list python-setuptools))
14243 (home-page "https://github.com/sendgrid/python-http-client")
14244 (synopsis "HTTP REST client for Python")
14245 (description
14246 "This package provides access to any RESTful or RESTful-like API.")
14247 (license license:expat)))
14248
14249(define-public python-sendgrid
14250 (package
14251 (name "python-sendgrid")
14252 (version "6.9.7")
14253 (source
14254 (origin
14255 (method git-fetch)
14256 (uri (git-reference
14257 (url "https://github.com/sendgrid/sendgrid-python")
14258 (commit version)))
14259 (file-name (git-file-name name version))
14260 (sha256
14261 (base32 "0kvp4gm3bpcsj2mkv05pgvlcv1jlsfhcljcv61wz5kq9d273h7rg"))))
14262 (build-system pyproject-build-system)
14263 (arguments
14264 (list
14265 #:test-flags
14266 #~(list "--ignore=test/integ"
14267 ;; Network access is required.
14268 "--ignore=live_test.py")))
14269 (native-inputs
14270 (list python-pytest
14271 python-setuptools))
14272 (propagated-inputs
14273 (list python-cryptography
14274 python-http-client
14275 python-flask
14276 python-pyyaml
14277 python-six ;hard dependency
14278 python-starkbank-ecdsa
14279 python-werkzeug))
14280 (home-page "https://github.com/sendgrid/sendgrid-python/")
14281 (synopsis "SendGrid API library for Python")
14282 (description
14283 "The @code{sendgrid} Python library allows access to the
14284SendGrid Web API v3. Version 3+ of the library provides full support for all
14285SendGrid Web API v3 endpoints, including the new v3 /mail/send.")
14286 (license license:expat)))
14287
14288(define-public python-sse-starlette
14289 (package
14290 (name "python-sse-starlette")
14291 (version "3.4.4")
14292 (source
14293 (origin
14294 (method git-fetch)
14295 (uri (git-reference
14296 (url "https://github.com/sysid/sse-starlette")
14297 (commit (string-append "v" version))))
14298 (file-name (git-file-name name version))
14299 (sha256
14300 (base32 "0jzy3mjszl7fr524cggyf8k97x6jpykvmxldmm2ckmrqjpyj8jmz"))))
14301 (build-system pyproject-build-system)
14302 (arguments
14303 (list
14304 #:test-flags
14305 #~(list
14306 ;; XXX: Server fails to start.
14307 "--ignore=tests/experimentation/test_multiple_consumers_asyncio.py"
14308 "--ignore=tests/experimentation/test_multiple_consumers_threads.py"
14309 ;; XXX: Missing test dependency - testcontainers, Docker is required.
14310 "--ignore=tests/integration/test_multiple_consumers.py")))
14311 (native-inputs
14312 (list python-asgi-lifespan
14313 python-httpx
14314 python-portend
14315 python-pytest
14316 python-pytest-asyncio
14317 python-psutil
14318 python-setuptools
14319 python-tenacity
14320 python-uvicorn))
14321 (propagated-inputs
14322 (list python-anyio
14323 python-starlette))
14324 (home-page "https://github.com/sysid/sse-starlette")
14325 (synopsis "SSE plugin for Starlette")
14326 (description
14327 "This package provides SSE plugin for Starlette.")
14328 (license license:bsd-3)))
14329
14330(define-public python-sseclient-py
14331 (package
14332 (name "python-sseclient-py")
14333 (version "1.9.0")
14334 (source
14335 (origin
14336 (method git-fetch)
14337 (uri (git-reference
14338 (url "https://github.com/mpetazzoni/sseclient")
14339 (commit (string-append "sseclient-py-" version))))
14340 (file-name (git-file-name name version))
14341 (sha256
14342 (base32 "1yi2v8z89mygsr1vzyc4r3j7flr3jrh6a6kzqfdh86i5a5j5v280"))))
14343 (build-system pyproject-build-system)
14344 (native-inputs (list python-hatchling python-pytest))
14345 (arguments
14346 (list
14347 #:test-backend #~'unittest
14348 #:test-flags #~'("discover" "--verbose" "tests")))
14349 (home-page "https://github.com/mpetazzoni/sseclient")
14350 (synopsis "Pure-Python Server Side Events (SSE) client")
14351 (description
14352 "This package provides a Python client for SSE event sources that
14353seamlessly integrates with @code{urllib3} and @code{requests}.")
14354 (license license:asl2.0)))
14355
14356(define-public python-starlette
14357 (package
14358 (name "python-starlette")
14359 (version "0.49.1")
14360 (source (origin
14361 (method git-fetch)
14362 (uri (git-reference
14363 (url "https://github.com/encode/starlette")
14364 (commit version)))
14365 (file-name (git-file-name name version))
14366 (sha256
14367 (base32
14368 "0w9cyaxpc2p99hqrfw164iypacx3i1gsmn2z0xywgd21alva82ji"))))
14369 (build-system pyproject-build-system)
14370 (propagated-inputs (list python-anyio
14371 python-typing-extensions
14372 ;; [all] extra dependencies:
14373 python-itsdangerous
14374 python-jinja2
14375 python-multipart
14376 python-pyyaml
14377 python-requests))
14378 (native-inputs (list python-hatchling
14379 python-httpx
14380 python-pytest
14381 python-typing-extensions))
14382 (home-page "https://github.com/encode/starlette")
14383 (synopsis "Little ASGI library")
14384 (description
14385 "Starlette is a lightweight ASGI (Asynchronous Server Gateway
14386Interface) framework/toolkit for building async web services in Python.")
14387 (license license:bsd-3)))
14388
14389(define-public python-starsessions
14390 (package
14391 (name "python-starsessions")
14392 (version "1.3.0")
14393 (source (origin
14394 (method git-fetch)
14395 (uri (git-reference
14396 (url "https://github.com/alex-oleshkevich/starsessions")
14397 (commit (string-append "v" version))))
14398 (file-name (git-file-name name version))
14399 (sha256
14400 (base32
14401 "00dkdhp22vfmcn0w4y7f2ii8m1xj5i7409x58g3l8lvk6v5ng2nf"))))
14402 (build-system pyproject-build-system)
14403 (arguments
14404 (list
14405 #:test-flags
14406 ;; These tests require a running redis server
14407 '(list "--ignore=tests/backends/test_redis.py"
14408 ;; XXX: this failure indicates a real compatibility problem, but
14409 ;; it seems restricted to the tests only.
14410 ;; AttributeError: 'Cookies' object has no attribute
14411 ;; 'clear_session_cookies'
14412 "-k"
14413 (string-append "not test_session_clears_on_tab_close"
14414 ;; This fails because an error is not raised.
14415 " and not test_session_wants_secret_key"))
14416 #:phases
14417 '(modify-phases %standard-phases
14418 (add-after 'unpack 'compatibilitiy
14419 (lambda _
14420 ;; aioredis has been renamed
14421 (substitute* "starsessions/backends/redis.py"
14422 (("aioredis") "redis")))))))
14423 (propagated-inputs
14424 (list python-redis
14425 python-itsdangerous
14426 python-starlette))
14427 (native-inputs
14428 (list python-httpx
14429 python-poetry-core
14430 python-pytest
14431 python-pytest-asyncio
14432 python-requests))
14433 (home-page "https://github.com/alex-oleshkevich/starsessions")
14434 (synopsis "Pluggable session support for Starlette and FastAPI")
14435 (description
14436 "This package adds pluggable session backends and ships default
14437@code{InMemoryBackend} and @code{CookieBackend} implementations for Starlette
14438and FastAPI.")
14439 (license license:expat)))
14440
14441(define-public python-whereismyip
14442 (package
14443 (name "python-whereismyip")
14444 (version "0.1.0")
14445 (source
14446 (origin
14447 (method url-fetch)
14448 (uri (pypi-uri "whereismyip" version))
14449 (sha256
14450 (base32 "0psrlvax8249ccs2rvgdygpckzz22vxjcyzr2pql06d48k61gk54"))))
14451 (build-system pyproject-build-system)
14452 (arguments (list #:tests? #false)) ; There are no tests.
14453 (native-inputs (list python-setuptools))
14454 (home-page "https://pypi.org/project/whereismyip/")
14455 (synopsis "Queries multiple geolocation services until one succeeds")
14456 (description
14457 "This package provides a simple Python library that queries multiple geolocation
14458services until one succeeds.")
14459 (license license:gpl3)))
14460
14461(define-public python-whitenoise
14462 (package
14463 (name "python-whitenoise")
14464 (version "6.12.0")
14465 (source
14466 (origin
14467 (method git-fetch)
14468 (uri (git-reference
14469 (url "https://github.com/evansd/whitenoise")
14470 (commit version)))
14471 (file-name (git-file-name name version))
14472 (sha256
14473 (base32 "1v4hdglf0zhvc1d6h836myz8pnxyp3x2r6j1amvqvxq8gbzrmp58"))))
14474 (build-system pyproject-build-system)
14475 (arguments
14476 (list
14477 #:test-flags #~(list "-k" "not test_modified"))) ; HTTP 304 error
14478 (native-inputs
14479 (list python-brotli
14480 python-django-minimal
14481 python-requests
14482 python-pytest
14483 python-setuptools))
14484 (home-page "https://github.com/evansd/whitenoise")
14485 (synopsis "Static file serving for WSGI applications")
14486 (description
14487 "WhiteNoise allows your web app to serve its own static files, making it
14488a self-contained unit that can be deployed anywhere without relying on nginx,
14489Amazon S3 or any other external service.")
14490 (license license:expat)))
14491
14492(define-public python-suds
14493 (package
14494 (name "python-suds")
14495 (version "1.2.0")
14496 (source
14497 (origin
14498 (method url-fetch)
14499 (uri (pypi-uri "suds" version))
14500 (sha256
14501 (base32 "1byyg7b2ixpr8hc849a6dd0qn5daxqawz6lb3php8lrmsb1n5cc3"))))
14502 (build-system pyproject-build-system)
14503 (arguments
14504 (list #:phases
14505 #~(modify-phases %standard-phases
14506 ;; XXX: chirp expects suds instead of suds_community
14507 (add-after 'install 'add-custom-dist-info
14508 (lambda _
14509 (for-each
14510 (lambda (dir)
14511 (with-directory-excursion (dirname dir)
14512 (symlink
14513 (basename dir)
14514 (string-append "suds-" #$version ".dist-info"))))
14515 (find-files #$output
14516 (lambda (file stat)
14517 (string-suffix? ".dist-info" file))
14518 #:directories? #t)))))))
14519 (native-inputs
14520 (list python-pytest
14521 python-setuptools
14522 python-wheel))
14523 (home-page "https://github.com/suds-community/suds")
14524 (synopsis "Lightweight SOAP python client for consuming Web Services")
14525 (description
14526 "Suds is a lightweight SOAP-based web service client for Python.")
14527 (license license:lgpl3+)))
14528
14529(define-public python-fastapi
14530 (package
14531 (name "python-fastapi")
14532 (version "0.137.1")
14533 (source
14534 (origin
14535 (method url-fetch)
14536 (uri (pypi-uri "fastapi" version))
14537 (sha256
14538 (base32 "072lzn48rwf9rjix4nqb5ym6hnaj2fb3jxclilym7n9h89q608w2"))))
14539 (build-system pyproject-build-system)
14540 (arguments
14541 (list
14542 ;; tests: 1126 passed, 12 skipped, 2 deselected
14543 #:test-backend #~'custom
14544 #:test-flags
14545 #~(list
14546 ;; Cannot import 'scripts' with just 'pytest'.
14547 "-m" "pytest"
14548 ;; Needs strawberry and sqlmodel.
14549 "--ignore=tests/test_tutorial/"
14550 ;; Fails due to failure to capture stdout.
14551 "--ignore=tests/test_fastapi_cli.py")))
14552 (native-inputs
14553 (list python-anyio
14554 python-dirty-equals
14555 python-flask
14556 python-inline-snapshot
14557 python-pdm-backend
14558 ;; python-pwdlib
14559 python-pyjwt
14560 python-pytest
14561 python-pytest-timeout
14562 python-pytest-xdist
14563 python-sqlalchemy-2
14564 ;; python-sqlmodel
14565 python-types-orjson
14566 python-types-ujson))
14567 (propagated-inputs
14568 (list python-starlette
14569 python-pydantic
14570 python-typing-extensions
14571 python-annotated-doc
14572 ;; [optional]
14573 python-email-validator
14574 python-fastapi-cli
14575 ;; python-fastar
14576 python-httpx
14577 python-itsdangerous
14578 python-jinja2
14579 python-multipart
14580 python-orjson
14581 python-pydantic
14582 python-pydantic-extra-types
14583 python-pydantic-settings
14584 python-pyyaml
14585 python-ujson
14586 python-uvicorn))
14587 (home-page "https://github.com/fastapi/fastapi")
14588 (synopsis "Web framework based on type hints")
14589 (description "FastAPI provides a web API framework based on pydantic and
14590starlette.")
14591 (license license:expat)))
14592
14593;; A bare minimal package, mainly to use in tests and reduce closure size.
14594;; Tests are left out in the main package to slim down native-inputs and
14595;; propagated-inputs.
14596(define-public python-fastapi-minimal
14597 (package/inherit python-fastapi
14598 (name "python-fastapi-minimal")
14599 (arguments
14600 (substitute-keyword-arguments arguments
14601 ((#:tests? #t #t) #f)))
14602 (native-inputs
14603 (list python-pdm-backend))
14604 (propagated-inputs
14605 (list python-annotated-doc
14606 python-opentelemetry-api
14607 python-pydantic
14608 python-starlette
14609 python-typing-extensions
14610 python-typing-inspection))))
14611
14612(define-public python-fastapi-csrf-protect
14613 (package
14614 (name "python-fastapi-csrf-protect")
14615 (version "0.3.3")
14616 (source (origin
14617 (method git-fetch)
14618 (uri (git-reference
14619 (url "https://github.com/aekasitt/fastapi-csrf-protect")
14620 (commit (string-append "v" version))))
14621 (file-name (git-file-name name version))
14622 (sha256
14623 (base32
14624 "181yawlbpd4709mamsradr9zj0jrbp4qvwfvmggs80pd36iiwyy8"))))
14625 (build-system pyproject-build-system)
14626 (propagated-inputs
14627 (list python-fastapi python-itsdangerous
14628 python-pydantic))
14629 (native-inputs
14630 (list python-poetry-core
14631 python-pytest))
14632 (home-page "https://github.com/aekasitt/fastapi-csrf-protect")
14633 (synopsis "Cross-Site Request Forgery (XSRF) protection")
14634 (description
14635 "This package provides a stateless implementation of @dfn{Cross-Site
14636Request Forgery} (XSRF) Protection by using the Double Submit Cookie mitigation
14637pattern.")
14638 (license license:expat)))
14639
14640(define-public python-fastapi-pagination-minimal
14641 (package
14642 (name "python-fastapi-pagination-minimal")
14643 (version "0.15.15")
14644 (source (origin
14645 (method git-fetch)
14646 (uri (git-reference
14647 (url "https://github.com/uriyyo/fastapi-pagination")
14648 (commit version)))
14649 (file-name (git-file-name name version))
14650 (sha256
14651 (base32
14652 "0jfmk5m2yrki9rw9izci2fxamam45mk36gl77rwbd5hnngkqbahv"))))
14653 (build-system pyproject-build-system)
14654 ;; We run the tests in python-fastapi-pagination only.
14655 (arguments (list #:tests? #false))
14656 ;; These are the only required dependencies,
14657 ;; please add all optional dependencies to the
14658 ;; full python-fastapi-pagination below.
14659 (propagated-inputs (list python-fastapi python-pydantic))
14660 (native-inputs (list python-hatchling))
14661 (home-page "https://github.com/uriyyo/fastapi-pagination")
14662 (synopsis "FastAPI pagination library")
14663 (description "@code{fastapi-pagination} is a Python library designed to
14664simplify pagination in FastAPI applications. It provides a set of utility
14665functions and data models to help you paginate your database queries and
14666return paginated responses to your clients.")
14667 (license license:expat)))
14668
14669(define-public python-fastapi-pagination
14670 (package
14671 (inherit python-fastapi-pagination-minimal)
14672 (name "python-fastapi-pagination")
14673 (arguments
14674 (list
14675 #:test-flags
14676 #~(list "--asyncio-mode=auto"
14677 "--ignore=tests/ext"
14678 ;; Netwok access is required.
14679 "-k" (string-join
14680 (list "not test_optional_params[postgres-default]"
14681 "test_optional_params[postgres-limit-offset]"
14682 "test_optional_params[sqlite-default]"
14683 "test_optional_params[sqlite-limit-offset]")
14684 " and not "))
14685 #:phases
14686 '(modify-phases %standard-phases
14687 (add-after 'unpack 'patch-tests
14688 (lambda _
14689 ;; We don't have a package for python-cassandra or motor, but we
14690 ;; also don't need them as we only run the unit tests anyway.
14691 (substitute* "tests/conftest.py"
14692 (("from cassandra.*") "")
14693 (("from motor.*") "")))))))
14694 (propagated-inputs
14695 (modify-inputs (package-propagated-inputs
14696 python-fastapi-pagination-minimal)
14697 (prepend python-asyncpg
14698 python-databases
14699 python-django
14700 python-fastapi
14701 python-pydantic
14702 python-sqlalchemy
14703 (package
14704 (inherit python-tortoise-orm)
14705 (arguments
14706 (substitute-keyword-arguments (package-arguments
14707 python-tortoise-orm)
14708 ((#:phases phases '%standard-phases)
14709 `(modify-phases ,phases
14710 (delete 'sanity-check)))))
14711 (propagated-inputs
14712 (modify-inputs propagated-inputs
14713 (replace "python-aiosqlite" python-aiosqlite)))))))
14714 (native-inputs
14715 (list python-aiosqlite
14716 python-asgi-lifespan
14717 python-asyncpg
14718 python-dirty-equals
14719 python-faker
14720 python-hatchling
14721 python-httpx
14722 python-pytest
14723 python-pytest-asyncio
14724 python-sqlalchemy
14725 python-typing-extensions))
14726 (description
14727 (string-append (package-description python-fastapi-pagination-minimal)
14728 "
14729
14730This package, as opposed to @code{python-fastapi-pagination-minimal}, depends on
14731all available optional dependencies supported by mainline
14732@code{fastapi-pagination}."))))
14733
14734(define-public python-fastapi-cli
14735 (package
14736 (name "python-fastapi-cli")
14737 (version "0.0.7")
14738 (source
14739 (origin
14740 (method url-fetch)
14741 (uri (pypi-uri "fastapi_cli" version))
14742 (sha256
14743 (base32 "0pk0ldmymc25ys4v6mslzd5vsjh9r69hfylh2ljl29pmarcvdcq2"))))
14744 (build-system pyproject-build-system)
14745 ;; Tests require fastapi, which depends on this package.
14746 (arguments (list #:tests? #false))
14747 (propagated-inputs (list python-rich-toolkit python-typer python-uvicorn))
14748 (native-inputs
14749 (list python-inline-snapshot python-pdm-backend python-pytest))
14750 (home-page "https://pypi.org/project/fastapi-cli/")
14751 (synopsis
14752 "Run and manage FastAPI apps from the command line with FastAPI CLI")
14753 (description
14754 "FastAPI CLI is a command line program fastapi that you can use to serve
14755your FastAPI app, manage your FastAPI project, and more.")
14756 (license license:expat)))
14757
14758(define-public python-pyactiveresource
14759 (package
14760 (name "python-pyactiveresource")
14761 (version "2.2.2")
14762 (source
14763 (origin
14764 (method git-fetch)
14765 (uri (git-reference
14766 (url "https://github.com/Shopify/pyactiveresource")
14767 (commit (string-append "v" version))))
14768 (file-name (git-file-name name version))
14769 (sha256
14770 (base32 "03pw6fwqjn09fbd6xmng0arlz75pp6ykw25c8d1snp4bxlzkrwqf"))))
14771 (build-system pyproject-build-system)
14772 ;; XXX: The package is fine, but the tests started failing on [email protected].
14773 ;; The package is not actively maintained, consider removing it once leaf.
14774 (arguments (list #:tests? #f))
14775 (native-inputs
14776 (list python-dateutil python-pytest python-pyyaml python-setuptools))
14777 (propagated-inputs (list python-six))
14778 (home-page "https://github.com/Shopify/pyactiveresource/")
14779 (synopsis "ActiveResource for Python")
14780 (description
14781 "This package provides a Python port of the ActiveResource project.
14782
14783Active Resource attempts to provide a coherent wrapper object-relational
14784mapping for REST web services. It follows the same philosophy as Active
14785Record, in that one of its prime aims is to reduce the amount of code needed
14786to map to these resources. This is made possible by relying on a number of
14787code- and protocol-based conventions that make it easy for Active Resource to
14788infer complex relations and structures.")
14789 (license license:expat)))
14790
14791(define-public python-shopifyapi
14792 (package
14793 (name "python-shopifyapi")
14794 (version "12.7.0")
14795 (source
14796 (origin
14797 (method git-fetch)
14798 (uri (git-reference
14799 (url "https://github.com/Shopify/shopify_python_api")
14800 (commit (string-append "v" version))))
14801 (file-name (git-file-name name version))
14802 (sha256
14803 (base32 "11zjm3aspb247wwlmfmq6wwk6lv3xyv3lqnd78sczjg9anba3779"))))
14804 (build-system pyproject-build-system)
14805 (arguments
14806 (list
14807 #:test-flags
14808 #~'("-k"
14809 ;; Disable a failing test.
14810 "not test_raises_if_aud_doesnt_match_api_key")))
14811 (native-inputs (list python-mock python-pytest python-setuptools))
14812 (propagated-inputs (list python-pyactiveresource python-pyjwt
14813 python-pyyaml python-six))
14814 (home-page "https://github.com/Shopify/shopify_python_api")
14815 (synopsis "Shopify API for Python")
14816 (description
14817 "This package provides the Shopify API for Python.
14818
14819The ShopifyAPI library allows Python developers to programmatically access the
14820admin section of stores using an ActiveResource-like interface similar the
14821ruby Shopify API gem. The library makes HTTP requests to Shopify in order to
14822list, create, update, or delete resources (e.g. Order, Product, Collection).")
14823 (license license:expat)))
14824
14825(define-public python-pybadges
14826 (package
14827 (name "python-pybadges")
14828 (version "3.0.1")
14829 (source (origin
14830 (method git-fetch)
14831 (uri (git-reference
14832 (url "https://github.com/google/pybadges")
14833 (commit version)))
14834 (file-name (git-file-name name version))
14835 (sha256
14836 "1zgb9idz7m3mzf8wvik0gwmyrxp753axqjv2pab326cr5myj1s4b")))
14837 (build-system pyproject-build-system)
14838 (arguments
14839 (list
14840 #:test-flags
14841 #~'("-k"
14842 ;; Disable network dependent tests.
14843 "not test_changes and not test_not_image_url and not test_http_url")))
14844 (propagated-inputs (list python-jinja2 python-requests python-setuptools))
14845 (native-inputs (list python-flask
14846 python-fonttools
14847 python-pillow
14848 python-pytest
14849 python-wheel
14850 python-xmldiff))
14851 (home-page "https://github.com/google/pybadges")
14852 (synopsis "Generate Github-style badges on the command-line")
14853 (description
14854 "This package provides @code{python-pybadges}: a library and command-line
14855tool for generating Github-style badges as SVG images.")
14856 (license license:asl2.0)))
14857
14858(define-public python-grid5000
14859 (package
14860 (name "python-grid5000")
14861 (version "1.2.4")
14862 (source (origin
14863 (method git-fetch)
14864 (uri (git-reference
14865 (url "https://gitlab.inria.fr/msimonin/python-grid5000")
14866 (commit (string-append "v" version))))
14867 (file-name (git-file-name name version))
14868 (sha256
14869 "0px5dr6kn7i5dyy4g42vqap1zpkc4hdvg7prrxdkkl57lfhz5w61")))
14870 (build-system pyproject-build-system)
14871 (arguments
14872 (list #:tests? #f)) ; No tests.
14873 (native-inputs (list python-setuptools))
14874 (propagated-inputs (list python-requests python-ipython python-pyyaml))
14875 (home-page "https://pypi.org/project/python-grid5000/")
14876 (synopsis "Grid5000 python client")
14877 (description
14878 "python-grid5000 is a python package wrapping the Grid5000 REST API.
14879You can use it as a library in your python project or you can explore the
14880Grid5000 resources interactively using the embedded shell.")
14881 (license license:gpl3+)))
14882
14883(define-public python-pynetbox
14884 (package
14885 (name "python-pynetbox")
14886 (version "7.4.1")
14887 (source (origin
14888 (method url-fetch)
14889 (uri (pypi-uri "pynetbox" version))
14890 (sha256
14891 (base32
14892 "1hq0mqykwdsmcrj61fxxzdkpc7wnld4grhkcxy560ym79jbbb0iz"))))
14893 (build-system pyproject-build-system)
14894 (arguments
14895 (list
14896 #:test-flags
14897 ;; Integration tests depend on docker.
14898 '(list "--ignore=tests/integration")))
14899 (propagated-inputs (list python-packaging python-requests))
14900 (native-inputs
14901 (list python-pytest
14902 python-setuptools
14903 python-setuptools-scm
14904 python-wheel))
14905 (home-page "https://github.com/netbox-community/pynetbox")
14906 (synopsis "NetBox API client library")
14907 (description "Python module to query and edit data stored in a
14908@url{https://netbox.dev,NetBox} instance.")
14909 (license license:asl2.0)))
14910
14911(define-public python-waybackpack
14912 (package
14913 (name "python-waybackpack")
14914 (version "0.6.4")
14915 (source
14916 (origin
14917 (method url-fetch)
14918 (uri (pypi-uri "waybackpack" version))
14919 (sha256
14920 (base32 "16lcr2hv7gmp199fh3psrnv68j20pfxria8v6gchrpl1jqx9f923"))))
14921 (build-system pyproject-build-system)
14922 (arguments
14923 (list #:tests? #f)) ; would require network (and SSL certificates)
14924 (propagated-inputs (list python-requests))
14925 (native-inputs (list python-pytest python-setuptools python-wheel))
14926 (home-page "https://github.com/jsvine/waybackpack")
14927 (synopsis
14928 "Download the entire Wayback Machine archive for a given URL")
14929 (description
14930 "This package provides a library and a command-line tool that lets
14931you download the entire Wayback Machine archive for a given URL.")
14932 (license license:expat)))
14933
14934(define-public python-xyzservices
14935 (package
14936 (name "python-xyzservices")
14937 (version "2025.4.0")
14938 (source
14939 (origin
14940 (method url-fetch)
14941 (uri (pypi-uri "xyzservices" version))
14942 (sha256
14943 (base32 "1n096zg9bd4n6w6axcm16m9sxdkc6qy1mipva0scbyj86rqn9rvg"))))
14944 (build-system pyproject-build-system)
14945 (arguments
14946 (list
14947 #:test-flags #~(list "-m" "not request")))
14948 (native-inputs
14949 (list python-pytest
14950 python-mercantile
14951 python-requests
14952 python-setuptools
14953 python-setuptools-scm))
14954 (home-page "https://github.com/geopandas/xyzservices")
14955 (synopsis "Source of XYZ tiles providers")
14956 (description "@code{xyzservices} is a lightweight library providing a
14957repository of available XYZ services offering raster basemap tiles. The
14958repository is provided via Python API and as a compressed JSON file.")
14959 (license license:bsd-3)))
14960
14961(define-public s3cmd
14962 (package
14963 (name "s3cmd")
14964 (version "2.4.0")
14965 (source
14966 (origin
14967 (method git-fetch)
14968 (uri (git-reference
14969 (url "https://github.com/s3tools/s3cmd")
14970 (commit (string-append "v" version))))
14971 (file-name (git-file-name name version))
14972 (sha256
14973 (base32 "168c49d1v8r7azv66zz0w07jalf434c2jpg2xzads5jnxzmiy73k"))))
14974 (build-system pyproject-build-system)
14975 (arguments
14976 (list
14977 #:tests? #f ; XXX: Tests require network access.
14978 #:phases
14979 #~(modify-phases %standard-phases
14980 (add-after 'unpack 'hide-wrapping
14981 (lambda _
14982 (substitute* "S3/MultiPart.py"
14983 (("sys\\.argv\\[0\\]")
14984 "\"s3cmd\""))
14985 (substitute* "s3cmd"
14986 (("optparser\\.get_prog_name\\(\\)")
14987 "\"s3cmd\"")))))))
14988 (native-inputs (list python-setuptools))
14989 (inputs (list python-dateutil python-magic))
14990 (home-page "https://s3tools.org/s3cmd")
14991 (synopsis "Command line tool for S3-compatible storage services")
14992 (description
14993 "S3cmd is a command line tool for uploading, retrieving and managing data
14994in storage services that are compatible with the Amazon Simple Storage
14995Service (S3) protocol, including S3 itself. It supports rsync-like backup,
14996GnuPG encryption, and more. It also supports management of Amazon's
14997CloudFront content delivery network.")
14998 (license license:gpl2+)))