projects/guix·blob tex-team · refs

14907 lines · 539.3 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2015 Eric Dvorsak <[email protected]>
3;;; Copyright © 2015-2025 Efraim Flashner <[email protected]>
4;;; Copyright © 2017 Christopher Baines <[email protected]>
5;;; Copyright © 2017 Muriithi Frederick Muriuki <[email protected]>
6;;; Copyright © 2016, 2017 Danny Milosavljevic <[email protected]>
7;;; Copyright © 2013, 2014, 2015, 2016, 2020, 2023 Andreas Enge <[email protected]>
8;;; Copyright © 2016-2023 Marius Bakke <[email protected]>
9;;; Copyright © 2015-2025 Ricardo Wurmus <[email protected]>
10;;; Copyright © 2017, 2021 Roel Janssen <[email protected]>
11;;; Copyright © 2016, 2017, 2020 Julien Lepiller <[email protected]>
12;;; Copyright © 2016, 2017 Nikita <[email protected]>
13;;; Copyright © 2014, 2017, 2021 Eric Bavier <[email protected]>
14;;; Copyright © 2014, 2015 Mark H Weaver <[email protected]>
15;;; Copyright © 2015 Cyril Roelandt <[email protected]>
16;;; Copyright © 2015, 2016, 2017, 2019 Leo Famulari <[email protected]>
17;;; Copyright © 2016, 2019, 2022, 2025 Hartmut Goebel <[email protected]>
18;;; Copyright © 2016–2021 Tobias Geerinckx-Rice <[email protected]>
19;;; Copyright © 2015, 2017 Ben Woodcroft <[email protected]>
20;;; Copyright © 2015, 2016 Christine Lemmer-Webber <[email protected]>
21;;; Copyright © 2017 Adriano Peluso <[email protected]>
22;;; Copyright © 2016 Dylan Jeffers <sapientech@[email protected]>
23;;; Copyright © 2016 David Craven <[email protected]>
24;;; Copyright © 2017 Oleg Pykhalov <[email protected]>
25;;; Copyright © 2015, 2016 David Thompson <[email protected]>
26;;; Copyright © 2017 Mark Meyer <[email protected]>
27;;; Copyright © 2018 Clément Lassieur <[email protected]>
28;;; Copyright © 2018 Tomáš Čech <[email protected]>
29;;; Copyright © 2018, 2019, 2021, 2024 Nicolas Goaziou <[email protected]>
30;;; Copyright © 2018 Mathieu Othacehe <[email protected]>
31;;; Copyright © 2018, 2020, 2021, 2022, 2023 Maxim Cournoyer <[email protected]>
32;;; Copyright © 2018 swedebugia <[email protected]>
33;;; Copyright © 2019 Vagrant Cascadian <[email protected]>
34;;; Copyright © 2019, 2023 Brendan Tildesley <[email protected]>
35;;; Copyright © 2019 Pierre Langlois <[email protected]>
36;;; Copyright © 2019, 2020 Tanguy Le Carrour <[email protected]>
37;;; Copyright © 2020 Jakub Kądziołka <[email protected]>
38;;; Copyright © 2020 Josh Marshall <[email protected]>
39;;; Copyright © 2020 Evan Straw <[email protected]>
40;;; Copyright © 2020 Alexandros Theodotou <[email protected]>
41;;; Copyright © 2020 Holger Peters <[email protected]>
42;;; Copyright © 2020 Noisytoot <[email protected]>
43;;; Copyright © 2020 Edouard Klein <[email protected]>
44;;; Copyright © 2020, 2021, 2022, 2023, 2025 Vinicius Monego <[email protected]>
45;;; Copyright © 2020 Konrad Hinsen <[email protected]>
46;;; Copyright © 2020, 2022, 2024 Giacomo Leidi <[email protected]>
47;;; Copyright © 2020 Raghav Gururajan <[email protected]>
48;;; Copyright © 2021 Ekaitz Zarraga <[email protected]>
49;;; Copyright © 2021 Greg Hogan <[email protected]>
50;;; Copyright © 2021 Maxime Devos <[email protected]>
51;;; Copyright © 2021 Pradana Aumars <[email protected]>
52;;; Copyright © 2021, 2022, 2024, 2026 Arun Isaac <[email protected]>
53;;; Copyright © 2021-2022, 2024-2025 jgart <[email protected]>
54;;; Copyright © 2021 Alice Brenon <[email protected]>
55;;; Copyright © 2021 Mekeor Melire <[email protected]>
56;;; Copyright © 2022 John Kehayias <[email protected]>
57;;; Copyright © 2022 Denis 'GNUtoo' Carikli <[email protected]>
58;;; Copyright © 2022, 2023, 2025 Felix Gruber <[email protected]>
59;;; Copyright © 2022 Peter Polidoro <[email protected]>
60;;; Copyright © 2022 Antero Mejr <[email protected]>
61;;; Copyright © 2022 Luis Henrique Gomes Higino <[email protected]>
62;;; Copyright © 2022, 2025 Nicolas Graves <[email protected]>
63;;; Copyright © 2022 Tomasz Jeneralczyk <[email protected]>
64;;; Copyright © 2022 msimonin <[email protected]>
65;;; Copyright © 2022 Michael Rohleder <[email protected]>
66;;; Copyright © 2022 Baptiste Strazzulla <[email protected]>
67;;; Copyright © 2023 dan <[email protected]>
68;;; Copyright © 2023 John Kehayias <[email protected]>
69;;; Copyright © 2023 Juliana Sims <[email protected]>
70;;; Copyright © 2023 Ivan Vilata-i-Balaguer <[email protected]>
71;;; Copyright © 2024 Fabio Natali <[email protected]>
72;;; Copyright © 2024 Steve George <[email protected]>
73;;; Copyright © 2024 Troy Figiel <[email protected]>
74;;; Copyright © 2024, 2025 Sharlatan Hellseher <[email protected]>
75;;; Copyright © 2024 normally_js <[email protected]>
76;;; Copyright © 2024 Markku Korkeala <[email protected]>
77;;; Copyright © 2024 Nguyễn Gia Phong <[email protected]>
78;;; Copyright © 2024 Zheng Junjie <[email protected]>
79;;; Copyright © 2024 Spencer King <[email protected]>
80;;; Copyright © 2024 Attila Lendvai <[email protected]>
81;;; Copyright © 2025 Daniel Ziltener <[email protected]>
82;;; Copyright © 2025 gemmaro <[email protected]>
83;;; Copyright © 2025 Sergio Pastor Pérez <[email protected]>
84;;; Copyright © 2025 Jake Forster <[email protected]>
85;;; Copyright © 2025 Janneke Nieuwenhuizen <[email protected]>
86;;; Copyright © 2025 Hugo Buddelmeijer <[email protected]>
87;;; Copyright © 2025-2026 Artur Wroblewski <[email protected]>
88;;; Copyright © 2025, 2026 Allan Adair <[email protected]>
89;;; Copyright © 2025 Aaron Covrig <[email protected]>
90;;; Copyright © 2026 Daniel Khodabakhsh <[email protected]>
91;;; Copyright © 2026 mst <[email protected]>
92;;; Copyright © 2026 Goran Vukoman <[email protected]>
93;;;
94;;; This file is part of GNU Guix.
95;;;
96;;; GNU Guix is free software; you can redistribute it and/or modify it
97;;; under the terms of the GNU General Public License as published by
98;;; the Free Software Foundation; either version 3 of the License, or (at
99;;; your option) any later version.
100;;;
101;;; GNU Guix is distributed in the hope that it will be useful, but
102;;; WITHOUT ANY WARRANTY; without even the implied warranty of
103;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
104;;; GNU General Public License for more details.
105;;;
106;;; You should have received a copy of the GNU General Public License
107;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
108
109(define-module (gnu packages python-web)
110 #:use-module (gnu packages admin)
111 #:use-module (gnu packages base)
112 #:use-module (gnu packages bash)
113 #:use-module (gnu packages build-tools)
114 #:use-module (gnu packages check)
115 #:use-module (gnu packages cmake)
116 #:use-module (gnu packages compression)
117 #:use-module (gnu packages curl)
118 #:use-module (gnu packages databases)
119 #:use-module (gnu packages django)
120 #:use-module (gnu packages dns)
121 #:use-module (gnu packages freedesktop)
122 #:use-module (gnu packages glib)
123 #:use-module (gnu packages gnupg)
124 #:use-module (gnu packages graphviz)
125 #:use-module (gnu packages groff)
126 #:use-module (gnu packages iso-codes)
127 #:use-module (gnu packages libevent)
128 #:use-module (gnu packages libffi)
129 #:use-module (gnu packages libidn)
130 #:use-module (gnu packages linux)
131 #:use-module (gnu packages lsof)
132 #:use-module (gnu packages node)
133 #:use-module (gnu packages nss)
134 #:use-module (gnu packages openstack)
135 #:use-module (gnu packages pcre)
136 #:use-module (gnu packages pkg-config)
137 #:use-module (gnu packages protobuf)
138 #:use-module (gnu packages python)
139 #:use-module (gnu packages python-build)
140 #:use-module (gnu packages python-check)
141 #:use-module (gnu packages python-compression)
142 #:use-module (gnu packages python-crypto)
143 #:use-module (gnu packages python-science)
144 #:use-module (gnu packages python-xyz)
145 #:use-module (gnu packages qt)
146 #:use-module (gnu packages rdf)
147 #:use-module (gnu packages rpc)
148 #:use-module (gnu packages rust)
149 #:use-module (gnu packages serialization)
150 #:use-module (gnu packages sphinx)
151 #:use-module (gnu packages texinfo)
152 #:use-module (gnu packages time)
153 #:use-module (gnu packages tls)
154 #:use-module (gnu packages version-control)
155 #:use-module (gnu packages web)
156 #:use-module (gnu packages xml)
157 #:use-module (gnu packages)
158 #:use-module (guix build-system cargo)
159 #:use-module (guix build-system copy)
160 #:use-module (guix build-system pyproject)
161 #:use-module (guix deprecation)
162 #:use-module (guix download)
163 #:use-module (guix gexp)
164 #:use-module (guix git-download)
165 #:use-module ((guix licenses) #:prefix license:)
166 #:use-module (guix packages)
167 #:use-module (guix utils)
168 #:use-module (srfi srfi-1))
169
170(define-public awscli
171 (package
172 ;; Note: updating awscli typically requires updating botocore as well.
173 (name "awscli")
174 (version "1.43.11")
175 (source
176 (origin
177 (method git-fetch)
178 (uri (git-reference
179 (url "https://github.com/aws/aws-cli")
180 (commit version)))
181 (file-name (git-file-name name version))
182 (sha256
183 (base32 "1idvcnc6jw7xr1jqpza472ksj3i2kyk0bv8wr7acz3xnba1v8xmi"))))
184 (build-system pyproject-build-system)
185 (arguments
186 (list
187 ;; tests: 2715 passed, 32 warnings
188 #:test-flags
189 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
190 ;; Complete test suite is huge and compute hungry, run just unit
191 ;; tests.
192 "--ignore=tests/dependencies"
193 "--ignore=tests/functional"
194 "--ignore=tests/integration"
195 ;; TypeError: 'Mock' object is not subscriptable.
196 "-k" "not test_no_groff_or_mandoc_exists")
197 #:phases
198 #~(modify-phases %standard-phases
199 (add-after 'unpack 'fix-reference-to-groff
200 (lambda _
201 ;; XXX: Consider to use wrap-program instead, it tries to parse
202 ;; the PATH.
203 (substitute* "awscli/help.py"
204 (("if self._exists_on_path\\('groff'\\):") "if 'groff':")
205 (("raise ExecutableNotFoundError\\('groff'\\)") "")
206 (("cmdline = \\['groff'")
207 (format #f "cmdline = ['~a/bin/groff'"
208 #$(this-package-input "groff-minimal"))))))
209 (add-before 'check 'set-environment
210 (lambda _
211 ;; PermissionError: [Errno 13] Permission denied:
212 ;; '/homeless-shelter'
213 (setenv "HOME" "/tmp"))))))
214 (native-inputs
215 (list python-pytest
216 python-pytest-xdist
217 python-setuptools
218 python-wheel))
219 (inputs
220 (list groff-minimal
221 python-botocore
222 python-colorama
223 python-docutils-0.19
224 python-pyyaml
225 python-rsa-for-awscli-1
226 python-s3transfer))
227 (home-page "https://aws.amazon.com/cli/")
228 (synopsis "Command line client for AWS")
229 (description
230 "AWS CLI provides a unified command line interface to the Amazon Web
231Services (AWS) API.")
232 (license license:asl2.0)))
233
234(define-public awscli-2
235 (package
236 (inherit awscli)
237 ;; Note: updating awscli-2 typically requires updating python-awscrt.
238 (name "awscli")
239 ;; Upstream practices a very rapid (1h-1d) release cycles try to select
240 ;; any fresh one compatible with current state of dependencies in Guix.
241 (version "2.36.20")
242 (source
243 (origin
244 (method git-fetch)
245 (uri (git-reference
246 (url "https://github.com/aws/aws-cli")
247 (commit version)))
248 (file-name (git-file-name name version))
249 (sha256
250 (base32
251 "1hv2zs5pm86b5bd66j2kfb9r8gz13cqnf8x5hmfv0ddszf9vnfgp"))))
252 (build-system pyproject-build-system)
253 (arguments
254 (list
255 ;; When updating and checking locally be very patient as build phase may
256 ;; hang for 6-8 minutes but eventually passes through.
257 ;;
258 ;; tests: 4189 passed, 1 skipped, 2 warnings
259 #:test-flags
260 '(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
261 ;; Full test suite contains more than 70k tests; ignore network
262 ;; dependent, slow and compute intense tests, keep just unit
263 ;; tests.
264 "--ignore=tests/backends"
265 "--ignore=tests/dependencies"
266 "--ignore=tests/functional"
267 "--ignore=tests/integration"
268 "--ignore=tests/unit/botocore"
269 ;; Flaky, something to do with PATH disappearing from os.environ?
270 ;; Passes when run on its own, so maybe something else is
271 ;; modifying this during the test run.
272 "--ignore=tests/unit/customizations/emr/test_emr_utils.py"
273 ;; TypeError: 'Mock' object is not subscriptable
274 "-k" "not test_no_groff_or_mandoc_exists")
275 #:phases
276 #~(modify-phases %standard-phases
277 (add-after 'unpack 'ignore-deprecations
278 (lambda _
279 (substitute* "pyproject.toml"
280 (("\"error::") "\"ignore::"))))
281 (add-after 'unpack 'fix-reference-to-groff
282 (lambda* (#:key inputs #:allow-other-keys)
283 (substitute* "awscli/help.py"
284 (("if self._exists_on_path\\('groff'\\):") "if True:")
285 (("cmdline = \\['groff'")
286 (string-append "cmdline = ['"
287 (search-input-file inputs "bin/groff")
288 "'")))))
289 (add-before 'check 'pre-check
290 (lambda _ (setenv "HOME" "/tmp"))))))
291 (inputs
292 (list groff
293 ;; less
294 nss-certs-for-test
295 python-awscrt
296 python-colorama
297 python-dateutil
298 python-distro
299 python-docutils
300 python-jmespath
301 python-prompt-toolkit
302 python-ruamel.yaml
303 python-ruamel.yaml.clib
304 python-urllib3
305 python-wcwidth))
306 (native-inputs
307 (list python-flit-core
308 python-pytest
309 python-pytest-xdist))))
310
311;; XXX: This project missed maintainer upstream, see
312;; <https://github.com/joeyespo/grip/issues/387>.
313;; Consider to remove if it keeps failing to build.
314(define-public grip
315 (package
316 (name "grip")
317 (version "4.6.1")
318 (source
319 (origin
320 (method git-fetch)
321 (uri (git-reference
322 (url "https://github.com/joeyespo/grip")
323 (commit (string-append "v" version))))
324 (file-name (git-file-name name version))
325 (sha256
326 (base32 "0vhimd99zw7s1fihwr6yfij6ywahv9gdrfcf5qljvzh75mvzcwh8"))))
327 (build-system pyproject-build-system)
328 (arguments
329 (list
330 #:test-flags
331 ;; All tests fail requiring network access, ignore the whole file.
332 #~(list "--ignore=tests/test_github.py")
333 #:phases
334 #~(modify-phases %standard-phases
335 ;; This fixes the removal of `charset` attribute of requests from
336 ;; Werkzeug 2.3.0.
337 ;; Fixed in grip's commit <2784eb2c1515f1cdb1554d049d48b3bff0f42085>.
338 (add-after 'unpack 'fix-response-encoding
339 (lambda _
340 (substitute* "grip/app.py"
341 (("response.charset")
342 "getattr(response, 'charset', 'utf-8')")))))))
343 (native-inputs
344 (list nss-certs-for-test
345 python-pytest
346 python-responses
347 python-setuptools
348 python-wheel))
349 (propagated-inputs
350 (list python-docopt
351 python-flask
352 python-markdown
353 python-path-and-address
354 python-pygments
355 python-requests))
356 (home-page "https://github.com/joeyespo/grip")
357 (synopsis "Preview Markdown files using the GitHub API")
358 (description
359 "Grip is a command-line server application written in Python that uses
360the GitHub Markdown API to render a local Markdown file. The styles and
361rendering come directly from GitHub, so you'll know exactly how it will
362appear. Changes you make to the file will be instantly reflected in the
363browser without requiring a page refresh.")
364 (license license:expat)))
365
366(define-public gunicorn
367 (package
368 (name "gunicorn")
369 (version "25.3.0")
370 (source
371 (origin
372 (method url-fetch)
373 (uri (pypi-uri "gunicorn" version))
374 (sha256
375 (base32
376 "12g85w735s4dszjfidi4vh786rfxsa5rd60il0fcvxknkwpinkpp"))))
377 (outputs '("out" "doc"))
378 (build-system pyproject-build-system)
379 (arguments
380 `(#:test-flags
381 ;; Disable the geventlet tests because eventlet uses dnspython, which
382 ;; does not work in the build container due to lack of /etc/resolv.conf
383 '("--ignore=tests/workers/test_geventlet.py")
384 #:phases (modify-phases %standard-phases
385 ;; XXX: The wrap phase includes native inputs on PYTHONPATH, (see
386 ;; <https://bugs.gnu.org/25235>), leading to an inflated closure
387 ;; size. Override it to only add the essential entries.
388 (replace 'wrap
389 (lambda* (#:key native-inputs inputs outputs
390 #:allow-other-keys)
391 (let* ((out (assoc-ref outputs "out"))
392 (python (assoc-ref (or native-inputs inputs)
393 "python"))
394 (sitedir (string-append "/lib/python"
395 (python-version python)
396 "/site-packages")))
397 (wrap-program (string-append out "/bin/gunicorn")
398 `("PYTHONPATH" ":" prefix
399 ,(map (lambda (output)
400 (string-append output sitedir))
401 (list python out))))))))))
402 (inputs (list bash-minimal))
403 (native-inputs
404 (list binutils ;for ctypes.util.find_library()
405 python-eventlet
406 python-gevent
407 python-h2
408 python-httpx
409 python-pytest
410 python-pytest-asyncio
411 python-setuptools
412 python-uvloop))
413 (propagated-inputs
414 (list python-packaging
415 python-setuptools
416 python-wheel))
417 (home-page "https://gunicorn.org/")
418 (synopsis "Python WSGI HTTP Server for UNIX")
419 (description
420 "Gunicorn ‘Green Unicorn’ is a Python WSGI HTTP
421Server for UNIX. It’s a pre-fork worker model ported from Ruby’s
422Unicorn project. The Gunicorn server is broadly compatible with
423various web frameworks, simply implemented, light on server resources,
424and fairly speedy.")
425 (license license:expat)))
426
427;; break cyclic dependency for python-aiohttp, which depends on gunicorn for
428;; its tests
429(define-public gunicorn-bootstrap
430 (package
431 (inherit gunicorn)
432 (name "gunicorn")
433 (arguments `(#:tests? #f))
434 (properties '((hidden? . #t)))
435 (native-inputs `())))
436
437(define-public oauth2ms
438 (let ((commit "a1ef0cabfdea57e9309095954b90134604e21c08")
439 (revision "0"))
440 (package
441 (name "oauth2ms")
442 (version (git-version "0.0.0" revision commit))
443 (source (origin
444 (method git-fetch)
445 (uri (git-reference
446 (url "https://github.com/harishkrupo/oauth2ms")
447 (commit commit)))
448 (file-name (git-file-name name version))
449 (sha256
450 (base32
451 "0dqi6n4npdrvb42r672n4sl1jl8z5lsk554fwiiihpj0faa9dx64"))))
452 (build-system copy-build-system)
453 (arguments
454 (list #:install-plan #~`(("oauth2ms" "bin/oauth2ms")
455 ("." #$(string-append "share/doc/" name "-"
456 version "/")
457 #:include-regexp ("\\.org$")))
458 #:phases #~(modify-phases %standard-phases
459 (add-after 'install 'wrap-pythonpath
460 (lambda* (#:key inputs outputs #:allow-other-keys)
461 (let ((path (getenv "GUIX_PYTHONPATH")))
462 (wrap-program (string-append #$output
463 "/bin/oauth2ms")
464 `("GUIX_PYTHONPATH" ":" prefix
465 (,path)))))))))
466 (inputs (list bash-minimal python python-gnupg python-msal python-pyxdg))
467 (home-page "https://github.com/harishkrupo/oauth2ms")
468 (synopsis "XOAUTH2 compatible Microsoft Office 365 token fetcher")
469 (description
470 "Oauth2ms can be used to fetch OAuth 2.0 tokens from the Microsoft Identity
471endpoint. Additionally, it can encode the token in the XOAUTH2 format to be
472used as authentication in IMAP mail servers.")
473 (license license:asl2.0))))
474
475(define-public python-a2wsgi
476 (package
477 (name "python-a2wsgi")
478 (version "1.10.7")
479 (source (origin
480 (method url-fetch)
481 (uri (pypi-uri "a2wsgi" version))
482 (sha256
483 (base32
484 "13ikyfmkx7hlrbg5rpcdm6kw4wcsy00giil3f72hpb6sw7vjyinf"))))
485 (build-system pyproject-build-system)
486 (arguments
487 (list
488 #:test-flags
489 #~(list "-k" (string-join
490 (list "not test_starlette_stream_response"
491 "test_starlette_base_http_middleware"
492 "test_baize_stream_response"
493 ;; Fails because of harmless whitespace differences.
494 "test_wsgi_post")
495 " and not "))
496 #:build-backend "pdm.backend"))
497 (native-inputs
498 (list python-pdm-backend
499 python-pytest
500 ;; python-baize ; not packed yet
501 python-httpx-bootstrap
502 ;; Cycle: python-a2wsgi->python-uvicorn->
503 ;; python-httpx->python-starlette->python-a2wsgi
504 ;; python-starlette
505 python-pytest-asyncio))
506 (home-page "https://github.com/abersheeran/a2wsgi")
507 (synopsis "Convert WSGI to ASGI or vice versa")
508 (description
509 "This program converts a WSGI program to an ASGI program or the other
510way around. It depends only on the Python standard library.")
511 (license license:asl2.0)))
512
513(define-public python-aioboto3
514 (package
515 (name "python-aioboto3")
516 (version "15.5.0")
517 (source
518 (origin
519 (method git-fetch)
520 (uri (git-reference
521 (url "https://github.com/terricain/aioboto3")
522 (commit (string-append "v" version))))
523 (file-name (git-file-name name version))
524 (sha256
525 (base32 "05644x17f9sl8mv9bp8l0rjcmw5x2ssyd5z1v3xmgcspk5qs6qn8"))))
526 (build-system pyproject-build-system)
527 (arguments
528 (list
529 #:tests? #f ;XXX: all tests faild
530 #:phases
531 #~(modify-phases %standard-phases
532 (add-after 'unpack 'relax-requirements
533 (lambda _
534 (substitute* "pyproject.toml"
535 (("aiobotocore\\[boto3\\]==2.25.1")
536 "aiobotocore >= 2.25.1")))))))
537 (native-inputs
538 (list python-setuptools
539 python-setuptools-scm))
540 (propagated-inputs
541 (list python-aiobotocore
542 python-aiofiles
543 ;; [optional]
544 python-boto3
545 python-cryptography))
546 (home-page "https://github.com/terricain/aioboto3")
547 (synopsis "Async boto3 wrapper")
548 (description
549 "This package is mostly just a wrapper combining the great work of boto3
550and aiobotocore.")
551 (license license:asl2.0)))
552
553(define-public python-aiobotocore
554 (package
555 (name "python-aiobotocore")
556 (version "3.0.0")
557 (source
558 (origin
559 (method url-fetch)
560 (uri (pypi-uri "aiobotocore" version))
561 (sha256
562 (base32 "0bcmnbm30hwaks8l895j8xy08cil0dpjcfpidg2qjawbs4a9s0ra"))))
563 (build-system pyproject-build-system)
564 (arguments
565 ;; TODO: Tests need some setupt, see Makefile.
566 (list #:tests? #f))
567 (native-inputs
568 (list python-setuptools))
569 (propagated-inputs
570 (list python-aiohttp
571 python-aioitertools
572 python-botocore
573 python-dateutil
574 python-jmespath
575 python-multidict
576 python-typing-extensions
577 python-wrapt))
578 (home-page "https://github.com/aio-libs/aiobotocore")
579 (synopsis "Async client for AWS services using botocore and aiohttp")
580 (description "This package provides an async client for Amazon services
581using botocore and aiohttp/asyncio. This library is a mostly full featured
582asynchronous version of botocore.")
583 (license license:asl2.0)))
584
585(define-public python-aiocoap
586 (package
587 (name "python-aiocoap")
588 (version "0.4.14")
589 (source
590 (origin
591 (method git-fetch) ; tests miss data and module files in PyPI release
592 (uri (git-reference
593 (url "https://github.com/chrysn/aiocoap")
594 (commit version)))
595 (file-name (git-file-name name version))
596 (sha256
597 (base32 "0yxvcg5llgmccv0a9hfm4nr7zxv9al4wh257m95a06g5c52v6hxz"))))
598 (build-system pyproject-build-system)
599 (arguments
600 (list
601 #:test-flags
602 ;; OSError: [Errno 98] error while attempting to bind on address ('::1',
603 ;; 8683, 0, 0): address already in use
604 #~(list "--ignore=tests/test_server.py"
605 "-k" (string-join
606 ;; TypeError: can only concatenate str (not "NoneType") to
607 ;; str
608 (list "not test_options"
609 "test_uri_parser"
610 "test_help" ; returned non-zero exit status 1.
611 "test_routing" ; address already in use
612 "test_tls")
613 " and not "))))
614 (native-inputs
615 (list openssl ;for tests/test_tls.py
616 python-pytest
617 python-setuptools
618 python-wheel))
619 (propagated-inputs
620 (list ;; python-cbor-diag
621 python-cbor2
622 python-cryptography
623 ;; python-dtlssocket
624 python-filelock
625 ;; python-ge25519
626 python-pygments
627 python-termcolor
628 python-websockets))
629 (home-page "https://github.com/chrysn/aiocoap")
630 (synopsis "Python CoAP library")
631 (description
632 "The aiocoap package is an implementation of @url{@acronym{CoAP, the
633Constrained Application Protocol}, http://coap.space/}. It facilitates
634writing applications that talk to network enabled embedded
635@acronym{IoT,Internet of Things} devices.")
636 (license license:expat)))
637
638(define-public python-aiodns
639 (package
640 (name "python-aiodns")
641 (version "3.5.0")
642 (source
643 (origin
644 (method git-fetch)
645 (uri (git-reference
646 (url "https://github.com/saghul/aiodns")
647 (commit (string-append "v" version))))
648 (file-name (git-file-name name version))
649 (sha256
650 (base32 "1as7l48962dpk3r4zdsifj761dks5nyr35hxs7m8crvkyb1dg9m9"))))
651 (build-system pyproject-build-system)
652 (arguments
653 (list
654 #:tests? #f)) ;tests require internet access
655 (native-inputs
656 (list python-pytest python-pytest-asyncio python-setuptools))
657 (propagated-inputs (list python-pycares))
658 (home-page "https://github.com/saghul/aiodns")
659 (synopsis "Simple DNS resolver for asyncio")
660 (description
661 "@code{aiodns} provides a simple way for doing asynchronous DNS
662resolutions with a synchronous looking interface by using
663@url{https://github.com/saghul/pycares,pycares}.")
664 (license license:expat)))
665
666(define-public python-aioftp
667 (package
668 (name "python-aioftp")
669 (version "0.27.2")
670 (source
671 (origin
672 (method git-fetch)
673 (uri (git-reference
674 (url "https://github.com/aio-libs/aioftp")
675 (commit version)))
676 (file-name (git-file-name name version))
677 (sha256
678 (base32 "1lshyac5zk1w4x7ygkim3726f8gbkvpvlyiqkn9cs6qjxhxn5bxc"))))
679 (build-system pyproject-build-system)
680 (arguments
681 (list
682 #:phases
683 #~(modify-phases %standard-phases
684 (add-after 'unpack 'use-default-asyncio
685 ;; async_timeout is deprecated, upstream recommends to use
686 ;; asyncio, available since Python 3.11.
687 (lambda _
688 (substitute* "tests/conftest.py"
689 (("async_timeout") "asyncio")))))))
690 (native-inputs
691 (list python-pytest
692 python-pytest-mock
693 python-pytest-asyncio
694 python-setuptools
695 python-siosocks
696 python-trustme))
697 (home-page "https://aioftp.readthedocs.io/")
698 (synopsis "FTP client/server for asyncio in Python")
699 (description
700 "FTP client and server for asyncio (Python 3) Library implementing FTP
701protocol, both client and server for Python asyncio module.
702
703 Supported commands as client: USER, PASS, ACCT, PWD, CWD, CDUP, MKD, RMD,
704 MLSD, MLST, RNFR, RNTO, DELE, STOR, APPE, RETR, TYPE, PASV, ABOR, QUIT,
705 REST, LIST (as fallback).
706
707 Supported commands as server: USER, PASS, QUIT, PWD, CWD, CDUP, MKD, RMD,
708 MLSD, LIST (non-standard), MLST, RNFR, RNTO, DELE, STOR, RETR,
709 TYPE (\"I\" and \"A\"), PASV, ABOR, APPE, REST.")
710 (license license:asl2.0)))
711
712(define-public python-aiohappyeyeballs
713 (package
714 (name "python-aiohappyeyeballs")
715 (properties '((commit . "cc53cf8a1d31f7b460a0114214aac66956f0e2ed")
716 (revision . "0")))
717 (version (git-version "2.6.1"
718 (assoc-ref properties 'revision)
719 (assoc-ref properties 'commit)))
720 (source
721 (origin
722 (method git-fetch)
723 (uri (git-reference
724 (url "https://github.com/aio-libs/aiohappyeyeballs")
725 (commit (assoc-ref properties 'commit))))
726 (file-name (git-file-name name version))
727 (sha256
728 (base32 "0nc723f4sxryg5h9z8paysmy9dnqw2jy4srxp9axrxkv9qrawa7n"))))
729 (build-system pyproject-build-system)
730 (native-inputs
731 (list python-poetry-core
732 python-pytest
733 python-pytest-asyncio))
734 (home-page "https://github.com/aio-libs/aiohappyeyeballs")
735 (synopsis "Happy Eyeballs for asyncio")
736 (description "This library exists to allow connecting with Happy
737Eyeballs (RFC 8305) when you already have a list of @code{addrinfo} and not a
738DNS name.")
739 (license license:psfl)))
740
741(define-public python-aiohttp
742 (package
743 (name "python-aiohttp")
744 (version "3.13.5")
745 (source
746 (origin
747 (method git-fetch)
748 (uri (git-reference
749 (url "https://github.com/aio-libs/aiohttp/")
750 (commit (string-append "v" version))))
751 (file-name (git-file-name name version))
752 (sha256
753 (base32 "0l9jcmhqd2v97gy1bxvimwi3aajxhxqn6jkzzgg7cf42mpyza0vc"))
754 (snippet
755 #~(begin
756 (use-modules ((guix build utils)))
757 (delete-file-recursively "vendor")))))
758 (build-system pyproject-build-system)
759 (arguments
760 (list
761 ;; tests: 4003 passed, 80 skipped, 31 xfailed, 2 subtests passed
762 #:test-flags
763 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
764 ;; This tests requires the 'proxy.py' module, not yet packaged.
765 "--ignore=tests/test_proxy_functional.py"
766 ;; No benchamrks.
767 "--ignore-glob=tests/test_benchmarks_*"
768 "-k"
769 (string-join
770 ;; Combinatin of tests failing with similar errors:
771 ;; - Cannot connect to host example.com:443 ssl:default [Could
772 ;; not contact DNS servers].
773 ;; - aiohttp.http_exceptions.ContentEncodingError: 400.
774 ;; - Can not decode content-encoding: br
775 (list "not test_add_static_path_resolution"
776 "test_empty_header_name"
777 "test_http_payload_brotli"
778 "test_http_payload_zstandard"
779 "test_invalid_header_spacing"
780 "test_payload_decompress_size_limit_brotli"
781 "test_reject_obsolete_line_folding"
782 "test_response_with_precompressed_body_brotli"
783 "test_static_file_custom_content_type_compress"
784 "test_static_file_with_encoding_and_enable_compression"
785 "test_tcp_connector_ssl_shutdown_timeout_nonzero_passed"
786 "test_tcp_connector_ssl_shutdown_timeout_passed_to_"
787 "test_tcp_connector_ssl_shutdown_timeout_zero_not_")
788 " and not "))
789 #:phases
790 #~(modify-phases %standard-phases
791 (add-after 'unpack 'set-libllhtp-pkgconfig
792 (lambda _
793 ;; pkg-config can't find the libllhttp library.
794 (if (getenv "PKG_CONFIG_PATH")
795 (setenv "PKG_CONFIG_PATH"
796 (string-append
797 #$(this-package-input "llhttp") "/lib/pkgconfig"
798 (getenv "PKG_CONFIG_PATH")))
799 (setenv "PKG_CONFIG_PATH"
800 (string-append
801 #$(this-package-input "llhttp") "/lib/pkgconfig")))))
802 (add-after 'unpack 'fix-pytest-config
803 (lambda _
804 (substitute* "setup.cfg"
805 (("--numprocesses=auto") "")
806 (("-p pytest_cov") "")
807 (("--cov=aiohttp") "")
808 (("--cov=tests/") ""))))
809 (add-after 'unpack 'fix-tests
810 (lambda _
811 ;; Make sure the timestamp of this file is > 1990, because a few
812 ;; tests like test_static_file_if_modified_since_past_date
813 ;; depend on it.
814 (let ((late-90s (* 60 60 24 365 30)))
815 (utime "tests/data.unknown_mime_type" late-90s late-90s))))
816 (add-before 'build 'pre-build
817 (lambda _
818 (setenv "USE_SYSTEM_DEPS" "true")
819 ;; Help setup.py to determine project's root.
820 (with-output-to-file ".git"
821 (lambda () (display "")))
822 (substitute* "Makefile"
823 (("cythonize: .install-cython") "cythonize:"))
824 (invoke "make" "cythonize")))
825 (add-before 'check 'remove-local-source
826 (lambda _
827 (delete-file-recursively "aiohttp"))))))
828 (native-inputs
829 (list gunicorn-bootstrap
830 python-freezegun
831 python-cython
832 python-pkgconfig
833 ;; python-proxy-py ;not packaged yet in Guix
834 python-pytest
835 python-pytest-mock
836 python-pytest-xdist
837 python-re-assert
838 python-setuptools
839 python-zlib-ng))
840 (inputs
841 (list llhttp))
842 (propagated-inputs
843 (list python-aiohappyeyeballs
844 python-aiosignal
845 python-attrs
846 python-frozenlist
847 python-multidict
848 python-propcache
849 python-yarl
850 ;; [optional]
851 python-aiodns
852 python-backports-zstd ;Python version < 3.14
853 python-brotli))
854 (home-page "https://github.com/aio-libs/aiohttp/")
855 (synopsis "Async HTTP client/server framework (asyncio)")
856 (description "@code{aiohttp} is an asynchronous HTTP client/server
857framework.
858
859Its main features are:
860@itemize
861@item Supports both client and server side of HTTP protocol.
862@item Supports both client and server Web-Sockets out-of-the-box without the
863Callback Hell.
864@item Web-server has middlewares and pluggable routing.
865@end itemize")
866 (license license:asl2.0)))
867
868(define-public python-aiohttp-client-cache
869 (package
870 (name "python-aiohttp-client-cache")
871 (version "0.14.3")
872 (source
873 (origin
874 (method git-fetch)
875 (uri (git-reference
876 (url "https://github.com/requests-cache/aiohttp-client-cache")
877 (commit (string-append "v" version))))
878 (file-name (git-file-name name version))
879 (sha256
880 (base32
881 "13xbmjjvcbzh3yh5z92mc0gwicwfjfq2av5jbqv09sbfzhggs92y"))))
882 (build-system pyproject-build-system)
883 (arguments
884 (list
885 #:test-flags #~(list "--ignore=test/integration/")))
886 (native-inputs
887 (list python-brotli
888 python-faker
889 python-hatchling
890 python-pytest
891 python-pytest-aiohttp
892 python-pytest-asyncio
893 python-types-aiofiles))
894 (propagated-inputs
895 (list python-aiohttp
896 python-attrs
897 python-itsdangerous
898 python-url-normalize
899 ;; [optional]
900 python-aioboto3
901 python-aiobotocore
902 python-aiofiles
903 python-aiosqlite
904 python-pymongo
905 python-redis))
906 (home-page "https://github.com/requests-cache/aiohttp-client-cache")
907 (synopsis "Persistent cache for aiohttp requests")
908 (description
909 "This package is an asynchronous persistent caching library specifically
910designed for @samp{aiohttp} requests in Python. With support for various
911storage backends, it offers flexibility in how and where the cache is stored.
912Please note that MongoDB and DynamoDB backends are not currently supported due
913to the absence of the @samp{motor} and @samp{aioboto3} package dependencies.")
914 (license license:expat)))
915
916(define-public python-aiohttp-cors
917 (package
918 (name "python-aiohttp-cors")
919 (version "0.8.1")
920 (source
921 (origin
922 (method url-fetch)
923 (uri (pypi-uri "aiohttp_cors" version))
924 (sha256
925 (base32 "00qlzc2y65bkl1a5f5v83mmjlrhzmx3a2ngq2pm3jjdnhk5zkb6c"))))
926 (build-system pyproject-build-system)
927 (arguments
928 (list
929 #:tests? #f)) ; network access is required to run tests
930 (native-inputs
931 (list python-setuptools
932 python-wheel))
933 (propagated-inputs
934 (list python-aiohttp))
935 (home-page "https://github.com/aio-libs/aiohttp-cors")
936 (synopsis "CORS support for aiohttp")
937 (description
938 "This library implements @acronym{CORS, Cross Origin Resource Sharing}
939support for aiohttp asyncio-powered asynchronous HTTP server.")
940 (license license:asl2.0)))
941
942(define-public python-aiohttp-oauthlib
943 (package
944 (name "python-aiohttp-oauthlib")
945 (version "0.1.0")
946 (source
947 (origin
948 (method url-fetch)
949 (uri (pypi-uri "aiohttp-oauthlib" version))
950 (sha256
951 (base32 "1dwk0gby27xm7384qyz2p7zw9dqhjx7m8fhfk172w36xknjx2g49"))))
952 (build-system pyproject-build-system)
953 (arguments (list #:tests? #f)) ; none included
954 (propagated-inputs (list python-aiohttp python-oauthlib))
955 (native-inputs (list python-setuptools python-setuptools-scm))
956 (home-page "https://git.sr.ht/~whynothugo/aiohttp-oauthlib")
957 (synopsis "OAuthlib authentication support for aiohttp")
958 (description "Aiohttp-oauthlib uses the Python aiohttp and OAuthlib libraries to
959provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
960 (license license:isc)))
961
962(define-public python-aiohttp-retry
963 (package
964 (name "python-aiohttp-retry")
965 (version "2.9.1")
966 (source
967 (origin
968 (method git-fetch)
969 (uri (git-reference
970 (url "https://github.com/inyutin/aiohttp_retry")
971 (commit (string-append "v" version))))
972 (file-name (git-file-name name version))
973 (sha256
974 (base32 "0r5lxnxc4s8js7l86pfmdxl455v9lg3m41nz6m1xg4kwwf6j0bpi"))))
975 (build-system pyproject-build-system)
976 (native-inputs
977 (list python-pytest
978 python-pytest-aiohttp
979 python-setuptools))
980 (propagated-inputs
981 (list python-aiohttp))
982 (home-page "https://github.com/inyutin/aiohttp_retry")
983 (synopsis "Simple retry client for aiohttp")
984 (description
985 "This package implements @code{RetryClient} for @code{aiohttp} to retry
986connection to provided endpoint with timeouts logic or use:
987
988@itemize
989@item @code{ExponentialRetry} with exponential backoff
990@item @code{RandomRetry} for random backoff
991@item @code{ListRetry} with backoff you predefine by list
992@item @code{FibonacciRetry} with backoff that looks like fibonacci sequence
993@item @code{JitterRetry} exponential retry with a bit of randomness
994@end itemize")
995 (license license:expat)))
996
997(define-public python-aiohttp-socks
998 (package
999 (name "python-aiohttp-socks")
1000 (version "0.10.1")
1001 (source
1002 (origin
1003 (method url-fetch)
1004 (uri (pypi-uri "aiohttp_socks" version))
1005 (sha256
1006 (base32
1007 "0s70jpcr9wc8ld2v1w309cz7r8mm2bipf6zbkdqqaa0z0pwf3wj9"))))
1008 (build-system pyproject-build-system)
1009 (arguments (list #:tests? #false)) ;none included
1010 (propagated-inputs
1011 (list python-aiohttp python-socks))
1012 (native-inputs (list python-setuptools python-wheel))
1013 (home-page "https://github.com/romis2012/aiohttp-socks")
1014 (synopsis "SOCKS proxy connector for aiohttp")
1015 (description "This package provides a SOCKS proxy connector for
1016aiohttp. It supports SOCKS4(a) and SOCKS5.")
1017 (license license:asl2.0)))
1018
1019(define-public python-aioitertools
1020 (package
1021 (name "python-aioitertools")
1022 (version "0.12.0")
1023 (source
1024 (origin
1025 (method url-fetch)
1026 (uri (pypi-uri "aioitertools" version))
1027 (sha256
1028 (base32 "0syxv2r90d6410hc68jxhk610pdgx19n1n5rc7shaxxv9xdhbaf2"))))
1029 (build-system pyproject-build-system)
1030 (arguments
1031 (list #:test-backend #~'custom
1032 #:test-flags #~(list "-m" "aioitertools.tests")))
1033 (native-inputs
1034 (list python-flit-core))
1035 (home-page "https://pypi.org/project/aioitertools/")
1036 (synopsis "Itertools and builtins for AsyncIO and mixed iterables")
1037 (description
1038 "This package provides an implementation of itertools, builtins, and more
1039for AsyncIO and mixed-type iterables.")
1040 (license license:expat)))
1041
1042(define-public python-aioquic
1043 (package
1044 (name "python-aioquic")
1045 (version "1.3.0")
1046 (source
1047 (origin
1048 (method git-fetch)
1049 (uri (git-reference
1050 (url "https://github.com/aiortc/aioquic")
1051 (commit version)))
1052 (file-name (git-file-name name version))
1053 (sha256
1054 (base32 "0dyzh8xipxbd7fcykfz8g5bgri38prwg050szqawq2p0pg538dgb"))))
1055 (build-system pyproject-build-system)
1056 (native-inputs
1057 (list nss-certs-for-test
1058 python-pytest
1059 python-setuptools))
1060 (inputs
1061 (list openssl))
1062 (propagated-inputs
1063 (list python-certifi
1064 python-cryptography
1065 python-pylsqpack
1066 python-pyopenssl
1067 python-service-identity))
1068 (home-page "https://github.com/aiortc/aioquic")
1069 (synopsis "QUIC and HTTP3 implementation in Python")
1070 (description
1071 "@code{aioquic} is a library for the QUIC network protocol in Python.
1072It features a minimal TLS 1.3 implementation, a QUIC stack and an HTTP/3 stack.")
1073 (license license:bsd-3)))
1074
1075(define-public python-aiorpcx
1076 (package
1077 (name "python-aiorpcx")
1078 (version "0.25.0")
1079 (source
1080 (origin
1081 (method git-fetch)
1082 ;; PyPI misses the util.py file used for tests.
1083 (uri (git-reference
1084 (url "https://github.com/kyuupichan/aiorpcX")
1085 (commit version)))
1086 (file-name (git-file-name name version))
1087 (sha256
1088 (base32
1089 "0sn4xxlpy0kb5b25bqrjzh2m6bskdyydc6cq8bigb7g5dacksn4q"))))
1090 (build-system pyproject-build-system)
1091 (arguments
1092 (list
1093 #:test-flags
1094 ;; This test opens a remote connection.
1095 #~(list "-k" "not test_create_connection_resolve_good")))
1096 (native-inputs (list python-pytest
1097 python-pytest-asyncio-0.26
1098 python-setuptools))
1099 (propagated-inputs
1100 (list python-attrs python-websockets))
1101 (home-page "https://github.com/kyuupichan/aiorpcX")
1102 (synopsis "Generic asyncio RPC implementation")
1103 (description
1104 "The aiorpcX library is a generic asyncio implementation of RPC suitable
1105for an application that is a client, server or both.
1106
1107The package includes a module with full coverage of JSON RPC versions 1.0 and
11082.0, JSON RPC protocol auto-detection, and arbitrary message framing. It also
1109comes with a SOCKS proxy client.")
1110 (license (list license:expat license:bsd-2))))
1111
1112(define-public python-aiosignal
1113 (package
1114 (name "python-aiosignal")
1115 (version "1.4.0")
1116 (source
1117 (origin
1118 (method url-fetch)
1119 (uri (pypi-uri "aiosignal" version))
1120 (sha256
1121 (base32 "1isin9bp256scp59lbr35h48nw5p5i84b6f9kh1c50w08vcyqzpl"))))
1122 (build-system pyproject-build-system)
1123 (arguments
1124 (list
1125 #:phases
1126 #~(modify-phases %standard-phases
1127 (add-after 'unpack 'avoid-pytest-cov-preload
1128 (lambda _
1129 (substitute* "pytest.ini"
1130 (("-p pytest_cov") "")))))))
1131 (native-inputs
1132 (list python-pytest
1133 python-pytest-asyncio
1134 python-setuptools))
1135 (propagated-inputs
1136 (list python-frozenlist))
1137 (home-page "https://github.com/aio-libs/aiosignal")
1138 (synopsis "Callback manager for Python @code{asyncio} projects")
1139 (description "This Python module provides @code{Signal}, an abstraction to
1140register asynchronous callbacks. The @code{Signal} abstraction can be used
1141for adding, removing and dropping callbacks.")
1142 (license license:asl2.0)))
1143
1144(define-public python-aiostream
1145 (package
1146 (name "python-aiostream")
1147 (version "0.7.0")
1148 (source
1149 (origin
1150 (method git-fetch) ;no tests in PyPI archive
1151 (uri (git-reference
1152 (url "https://github.com/vxgmichel/aiostream")
1153 (commit (string-append "v" version))))
1154 (file-name (git-file-name name version))
1155 (sha256
1156 (base32 "1wf89l9f0ivlv796pklpgykx6j6ksfqrmvzikd8w5j6ldln7bv50"))))
1157 (build-system pyproject-build-system)
1158 (native-inputs
1159 (list python-pytest python-pytest-asyncio python-setuptools))
1160 (propagated-inputs
1161 (list python-typing-extensions))
1162 (home-page "https://github.com/vxgmichel/aiostream")
1163 (synopsis "Generator-based operators for asynchronous iteration")
1164 (description "@code{aiostream} provides a collection of stream operators that can
1165be combined to create asynchronous pipelines of operations. It can be seen as an
1166asynchronous version of @code{itertools}, although some aspects are slightly
1167different. All the provided operators return a unified interface called a stream. A
1168stream is an enhanced asynchronous iterable.")
1169 (license license:gpl3)))
1170
1171(define-public python-ajsonrpc
1172 (package
1173 (name "python-ajsonrpc")
1174 (version "1.2.0")
1175 (source
1176 (origin
1177 (method git-fetch)
1178 (uri (git-reference
1179 (url "https://github.com/pavlov99/ajsonrpc")
1180 (commit version)))
1181 (file-name (git-file-name name version))
1182 (sha256
1183 (base32 "0c7jxfkv5q2m95j54dn650gcvdbpag2qcki7phvmrwsgb36w09kd"))))
1184 (build-system pyproject-build-system)
1185 (arguments
1186 (list
1187 #:phases
1188 #~(modify-phases %standard-phases
1189 (add-after 'unpack 'set-version
1190 (lambda _
1191 (substitute* "ajsonrpc/__init__.py"
1192 (("^__version__ = .*")
1193 (string-append "__version__ = \"" #$version "\"\n"))))))))
1194 (native-inputs
1195 (list python-pytest
1196 python-setuptools))
1197 (propagated-inputs
1198 (list python-quart
1199 python-sanic
1200 python-tornado))
1201 (home-page "https://github.com/pavlov99/ajsonrpc")
1202 (synopsis "Async JSON-RPC 2.0 protocol and server")
1203 (description
1204 "This package provides a Python JSON-RPC 2.0 protocol and server powered
1205by asyncio.")
1206 (license license:expat)))
1207
1208(define-public python-alpaca-py
1209 (package
1210 (name "python-alpaca-py")
1211 (version "0.43.5")
1212 (source
1213 (origin
1214 (method git-fetch)
1215 (uri (git-reference
1216 (url "https://github.com/alpacahq/alpaca-py")
1217 (commit (string-append "v" version))))
1218 (file-name (git-file-name name version))
1219 (sha256
1220 (base32 "1kiq8b1v58yj7fypmnfn4mij1n96ym1i9lxsd4gmbv0cgpn10nqv"))))
1221 (build-system pyproject-build-system)
1222 (native-inputs
1223 (list python-poetry-core
1224 python-poetry-dynamic-versioning
1225 python-pytest
1226 python-pytest-asyncio
1227 python-requests-mock))
1228 (propagated-inputs
1229 (list python-msgpack
1230 python-pandas
1231 python-pydantic
1232 python-pytz
1233 python-requests
1234 python-sseclient-py
1235 python-websockets))
1236 (home-page "https://alpaca.markets/sdks/python/")
1237 (synopsis "Alpaca API official Python SDK")
1238 (description
1239 "Alpaca-py provides an interface to REST, WebSocket and SSE endpoints
1240that allow interaction with the @url{https://alpaca.markets/, Alpaca} API.")
1241 (license license:asl2.0)))
1242
1243(define-public python-anaconda-client
1244 (package
1245 (name "python-anaconda-client")
1246 (version "1.13.1")
1247 (source
1248 (origin
1249 (method git-fetch)
1250 (uri (git-reference
1251 (url "https://github.com/Anaconda-Platform/anaconda-client")
1252 (commit version)))
1253 (file-name (git-file-name name version))
1254 (sha256
1255 (base32 "06nn3cwhrrajsbn9pils2539lzplfnyhn9java3xrpm3ksxq9g72"))))
1256 (build-system pyproject-build-system)
1257 (arguments
1258 (list
1259 #:test-flags
1260 #~(list "--deselect=tests/utils/test_conda.py::test_find_conda"
1261 "--deselect=tests/utils/test_conda.py::test_conda_vars")
1262 #:phases
1263 #~(modify-phases %standard-phases
1264 (add-after 'unpack 'fix-pytest-config
1265 (lambda _
1266 (substitute* "setup.cfg"
1267 (("addopts=.*") "addopts=\n")))))))
1268 (native-inputs
1269 (list python-freezegun
1270 python-pytest
1271 python-setuptools))
1272 (propagated-inputs
1273 (list python-anaconda-cli-base
1274 python-conda-package-handling
1275 python-conda-package-streaming
1276 python-dateutil
1277 python-defusedxml
1278 python-nbformat
1279 python-pillow
1280 python-platformdirs
1281 python-pytz
1282 python-pyyaml
1283 python-requests
1284 python-requests-toolbelt
1285 python-setuptools
1286 python-tqdm
1287 python-urllib3))
1288 (home-page "https://github.com/Anaconda-Platform/anaconda-client")
1289 (synopsis "Anaconda Cloud command line client library")
1290 (description
1291 "Anaconda Cloud command line client library provides an interface to
1292Anaconda Cloud. Anaconda Cloud is useful for sharing packages, notebooks and
1293environments.")
1294 (license license:bsd-3)))
1295
1296(define-public python-apiron
1297 (package
1298 (name "python-apiron")
1299 (version "5.1.0")
1300 (source
1301 (origin
1302 (method url-fetch)
1303 (uri (pypi-uri "apiron" version))
1304 (sha256
1305 (base32 "1qwbqn47sf0aqznj1snbv37v8ijx476qqkjf5l9pac7xjkxsr8qk"))))
1306 (build-system pyproject-build-system)
1307 (arguments
1308 (list #:test-flags '(list "-k" "not test_call")))
1309 (propagated-inputs
1310 (list python-requests))
1311 (native-inputs
1312 (list python-pytest
1313 python-setuptools
1314 python-wheel))
1315 (home-page "https://github.com/ithaka/apiron")
1316 (synopsis "Python wrapper for interacting with RESTful APIs")
1317 (description
1318 "@code{apiron} provides a declarative, structured configuration of
1319services and endpoints with a unified interface for interacting with RESTful
1320APIs.")
1321 (license license:expat)))
1322
1323(define-public python-apprise
1324 (package
1325 (name "python-apprise")
1326 (version "1.9.4")
1327 (source
1328 (origin
1329 (method url-fetch)
1330 (uri (pypi-uri "apprise" version))
1331 (sha256
1332 (base32 "126951n9lnlqrw5lbsvs9xs7jzg33bqqxm7cfnqag2csw6p24ca8"))))
1333 (build-system pyproject-build-system)
1334 (arguments
1335 (list
1336 ;; These tests used to be ran with --numprocesses, but that seems to have
1337 ;; made them non-deterministic.
1338 #:test-flags
1339 #~(list "--ignore=tests/test_plugin_macosx.py"
1340 "-k" "not test_plugin_glib_send_raises_generic")))
1341 (native-inputs
1342 (list python-babel
1343 python-pytest
1344 python-pytest-mock
1345 python-setuptools))
1346 (propagated-inputs
1347 (list python-certifi
1348 python-click
1349 python-markdown
1350 python-pygobject
1351 python-pyyaml
1352 python-requests
1353 python-requests-oauthlib))
1354 (home-page "https://github.com/caronc/apprise")
1355 (synopsis "Push notification library")
1356 (description
1357 "Apprise is a Python library that allows sending push notifications to a
1358broad range of notification services, such as Telegram, Discord, Slack, Amazon
1359SNS, Gotify, etc.")
1360 (license license:bsd-2)))
1361
1362(define-public python-arxiv
1363 (package
1364 (name "python-arxiv")
1365 (version "4.0.0")
1366 (source
1367 (origin
1368 (method git-fetch)
1369 (uri (git-reference
1370 (url "https://github.com/lukasschwab/arxiv.py")
1371 (commit version)))
1372 (file-name (git-file-name name version))
1373 (sha256
1374 (base32 "13363igvv3q5aj04jcrrc0cfliinlk8js84h2a9xhpwizsq96l4j"))))
1375 (build-system pyproject-build-system)
1376 (arguments
1377 (list #:test-flags
1378 #~(list "-k" ;to skip intenet connection tests
1379 (string-append "not (TestAPIBugs "
1380 "or TestClient "
1381 "or TestResult "
1382 "or TestDownload)"))
1383 #:phases
1384 #~(modify-phases %standard-phases
1385 (add-after 'unpack 'relax-dependencies
1386 (lambda _
1387 (substitute* "pyproject.toml"
1388 ;; pyproject.toml wants 6.10, guix has 6.02, seems fine
1389 (("\"lxml.*\"") "\"lxml\"")
1390 ;; artificial capped at <2.34 by dependabot
1391 (("\"requests.*\"") "\"requests\"")))))))
1392 (native-inputs
1393 (list python-pytest
1394 python-hatch-vcs
1395 python-hatchling))
1396 (propagated-inputs
1397 (list python-feedparser
1398 python-lxml
1399 python-requests))
1400 (home-page "https://github.com/lukasschwab/arxiv.py")
1401 (synopsis "Python wrapper for the arXiv API")
1402 (description "Python wrapper for the @code{arXiv} API.")
1403 (license license:expat)))
1404
1405(define-public python-asgi-csrf
1406 (package
1407 (name "python-asgi-csrf")
1408 (version "0.11")
1409 (source (origin
1410 (method git-fetch) ;for tests
1411 (uri (git-reference
1412 (url "https://github.com/simonw/asgi-csrf")
1413 (commit version)))
1414 (file-name (git-file-name name version))
1415 (sha256
1416 (base32
1417 "1dn9v47z2b599cnwahxvzsll2w28940ycgh5skxgq04vcqqssf29"))
1418 (patches
1419 (search-patches "python-asgi-csrf-fix-formparser.patch"))))
1420 (build-system pyproject-build-system)
1421 (propagated-inputs (list python-itsdangerous python-multipart))
1422 (native-inputs (list python-asgi-lifespan
1423 python-httpx
1424 python-pytest
1425 python-pytest-asyncio
1426 python-starlette
1427 python-setuptools
1428 python-wheel))
1429 (home-page "https://github.com/simonw/asgi-csrf")
1430 (synopsis "ASGI middleware for protecting against CSRF attacks")
1431 (description "This Asynchronous Server Gateway Interface (ASGI)
1432middleware protects against Cross-site request forgery (CSRF) attacks.
1433It implements the Double Submit Cookie pattern, where a cookie is set
1434that is then compared to a @code{csrftoken} hidden form field or a
1435@code{x-csrftoken} HTTP header.")
1436 (license license:asl2.0)))
1437
1438(define-public python-asgi-lifespan
1439 (package
1440 (name "python-asgi-lifespan")
1441 (version "2.1.0")
1442 (source (origin
1443 (method git-fetch) ;for tests
1444 (uri (git-reference
1445 (url "https://github.com/florimondmanca/asgi-lifespan")
1446 (commit version)))
1447 (file-name (git-file-name name version))
1448 (sha256
1449 (base32
1450 "0iqa3h61gsq1qd6j9v68k989596m9n9k1dx8zv6135rmhzzrs296"))))
1451 (build-system pyproject-build-system)
1452 (arguments
1453 (list
1454 #:test-flags
1455 '(list "-k"
1456 (string-append
1457 ;; XXX: Some tests fail because of "Exceptions from Trio nursery"
1458 "not (test_lifespan_manager[trio-None-None-StartupFailed]"
1459 " or test_lifespan_manager[trio-None-BodyFailed-None]"
1460 " or test_lifespan_manager[trio-None-BodyFailed-StartupFailed]"
1461 " or test_lifespan_manager[trio-ShutdownFailed-None-None]"
1462 " or test_lifespan_manager[trio-ShutdownFailed-None-StartupFailed]"
1463 " or test_lifespan_manager[trio-ShutdownFailed-BodyFailed-StartupFailed]"
1464 " or test_lifespan_timeout[trio-slow_shutdown]"
1465 " or test_lifespan_not_supported[trio-http_only]"
1466 " or test_lifespan_not_supported[trio-http_no_assert]"
1467 " or test_lifespan_not_supported[trio-http_no_assert_before_receive_request]"
1468 ")"))
1469 #:phases
1470 '(modify-phases %standard-phases
1471 (add-after 'unpack 'compatibility
1472 (lambda _
1473 ;; httpx version 0.28.0 removed the "app" shortcut.
1474 (substitute* "tests/test_manager.py"
1475 (("app=manager.app")
1476 "transport=httpx.ASGITransport(manager.app)")))))))
1477 (native-inputs (list python-httpx
1478 python-pytest
1479 python-pytest-asyncio
1480 python-pytest-trio
1481 python-starlette
1482 python-setuptools
1483 python-wheel))
1484 (propagated-inputs (list python-sniffio))
1485 (home-page "https://github.com/florimondmanca/asgi-lifespan")
1486 (synopsis "Programmatic startup/shutdown of ASGI apps")
1487 (description "Programmatically send startup/shutdown lifespan events
1488into Asynchronous Server Gateway Interface (ASGI) applications. When
1489used in combination with an ASGI-capable HTTP client such as HTTPX, this
1490allows mocking or testing ASGI applications without having to spin up an
1491ASGI server.")
1492 (license license:expat)))
1493
1494(define-public python-asgiref
1495 (package
1496 (name "python-asgiref")
1497 (version "3.11.1")
1498 (source
1499 (origin
1500 (method git-fetch)
1501 (uri (git-reference
1502 (url "https://github.com/django/asgiref/")
1503 (commit version)))
1504 (file-name (git-file-name name version))
1505 (sha256
1506 (base32 "19l03mx81dqhnnqa98073x1q243ndlknax0kva7azr9g12ixl69j"))))
1507 (build-system pyproject-build-system)
1508 (native-inputs
1509 (list python-pytest
1510 python-pytest-asyncio
1511 python-setuptools))
1512 (home-page "https://github.com/django/asgiref/")
1513 (synopsis "ASGI specs, helper code, and adapters")
1514 (description
1515 "ASGI is a standard for Python asynchronous web apps and servers to
1516communicate with each other, and positioned as an asynchronous successor to
1517WSGI. This package includes libraries for implementing ASGI servers.")
1518 (license license:bsd-3)))
1519
1520(define-public python-asyncer
1521 (package
1522 (name "python-asyncer")
1523 (version "0.0.17")
1524 (source
1525 (origin
1526 (method git-fetch)
1527 (uri (git-reference
1528 (url "https://github.com/fastapi/asyncer")
1529 (commit version)))
1530 (file-name (git-file-name name version))
1531 (sha256
1532 (base32 "1f4ids6sxwmz89yj98z0qc4qvfkklh0psbxv5px39k807g9aq7p2"))))
1533 (build-system pyproject-build-system)
1534 (native-inputs
1535 (list python-pdm-backend
1536 python-pytest))
1537 (propagated-inputs
1538 (list python-anyio
1539 python-sniffio
1540 python-typing-extensions))
1541 (home-page "https://asyncer.tiangolo.com/")
1542 (synopsis "Asyncer, async and await, focused on developer experience")
1543 (description
1544 "Asyncer is a small library built on top of
1545@url{https://anyio.readthedocs.io/en/stable/, AnyIO}.
1546
1547The main goal of Asyncer is to improve developer experience by providing
1548better support for autocompletion and inline errors in the editor, and more
1549certainty that the code is bug-free by providing better support for type
1550checking tools like mypy.")
1551 (license license:expat)))
1552
1553(define-public python-asyncudp
1554 (package
1555 (name "python-asyncudp")
1556 (version "0.11.0")
1557 (source
1558 (origin
1559 (method git-fetch)
1560 (uri (git-reference
1561 (url "https://github.com/eerimoq/asyncudp")
1562 (commit version)))
1563 (file-name (git-file-name name version))
1564 (sha256
1565 (base32 "1i2s8mmmggzq6vk5aldz3g85jnqfbgxfqi60wl58jpn2lbr8fqlr"))))
1566 (build-system pyproject-build-system)
1567 (native-inputs (list python-pytest python-setuptools))
1568 (home-page (git-reference-url (origin-uri source)))
1569 (synopsis "High level UDP sockets for asyncio")
1570 (description
1571 "This package provides a Python library offering high level UDP sockets
1572for asyncio. Import it alongside asyncio and use its API to send and receive
1573UDP packets.")
1574 (license license:expat)))
1575
1576(define-public python-authlib
1577 (package
1578 (name "python-authlib")
1579 (version "1.5.1")
1580 (source
1581 (origin
1582 (method url-fetch)
1583 (uri (pypi-uri "authlib" version))
1584 (sha256
1585 (base32 "0blpvz2v2r8yvsgm1yr3n61mhwxvh1b0kyf2rp0i4wv6n3n8bg2w"))))
1586 (build-system pyproject-build-system)
1587 ;; No tests target.
1588 (arguments (list #:tests? #false))
1589 (propagated-inputs
1590 (list python-cryptography
1591 python-django
1592 python-flask
1593 python-httpx
1594 python-requests
1595 python-sqlalchemy-2
1596 python-starlette
1597 python-werkzeug))
1598 (native-inputs (list python-pytest python-setuptools python-wheel))
1599 (home-page "https://pypi.org/project/Authlib/1")
1600 (synopsis "Build OAuth and OpenID Connect servers and clients")
1601 (description
1602 "This is a Python library for building OAuth and OpenID Connect servers
1603and clients.")
1604 (license license:bsd-3)))
1605
1606(define-public python-autobahn
1607 (package
1608 (name "python-autobahn")
1609 (version "25.11.1")
1610 (source
1611 (origin
1612 (method url-fetch)
1613 (uri (pypi-uri "autobahn" version))
1614 (sha256
1615 (base32
1616 "1w9wyyqzg1dil8jsjm08n2pnk6jws87scli932drhghcr2f2prjj"))))
1617 (build-system pyproject-build-system)
1618 (arguments
1619 (list
1620 ;; The tests fail to run:
1621 ;; https://github.com/crossbario/autobahn-python/issues/1117
1622 #:tests? #f
1623 #:phases #~(modify-phases %standard-phases
1624 (add-after 'unpack 'relax-zope-interface
1625 (lambda _
1626 ;; python-zope-interface is a world rebuild package
1627 ;; and our one-digit lower minor version seems to be
1628 ;; fine.
1629 (substitute* "setup.py"
1630 (("zope.interface>=5.2.0")
1631 "zope.interface>=5.1.0"))))
1632 (add-after 'unpack 'strip-xbr
1633 (lambda _
1634 ;; Strip new XBR feature which isn't available in Guix.
1635 (setenv "AUTOBAHN_STRIP_XBR" "1"))))))
1636 (native-inputs (list python-setuptools python-wheel))
1637 (propagated-inputs (list python-cbor2
1638 python-cryptography
1639 python-hyperlink
1640 python-msgpack
1641 python-py-ubjson
1642 python-twisted
1643 python-txaio
1644 python-ujson))
1645 (home-page "https://github.com/crossbario/autobahn-python/")
1646 (synopsis "Web Application Messaging Protocol implementation")
1647 (description "This package provides an implementation of the @dfn{Web Application
1648Messaging Protocol} (WAMP). WAMP connects components in distributed
1649applications using Publish and Subscribe (PubSub) and routed Remote Procedure
1650Calls (rRPC). It is ideal for distributed, multi-client and server applications
1651such as IoT applications or multi-user database-driven business applications.")
1652 (license license:expat)))
1653
1654(define-public python-aws-sam-translator
1655 (package
1656 (name "python-aws-sam-translator")
1657 (version "1.107.0")
1658 (source
1659 (origin
1660 (method git-fetch) ; no tests in PyPI release
1661 (uri (git-reference
1662 (url "https://github.com/aws/serverless-application-model")
1663 (commit (string-append "v" version))))
1664 (file-name (git-file-name name version))
1665 (sha256
1666 (base32 "0bx9ha9k6zx6gl1hsgm6cpq4xrfn604v2g1d5dh2d5zq0463gwfq"))))
1667 (build-system pyproject-build-system)
1668 (arguments
1669 (list
1670 #:test-flags
1671 #~(list "--numprocesses" (number->string (parallel-job-count))
1672 "--ignore=tests/bin/test_public_interface.py"
1673 "tests")
1674 #:phases
1675 #~(modify-phases %standard-phases
1676 (add-before 'check 'pre-check
1677 (lambda _
1678 (setenv "AWS_DEFAULT_REGION" "eu-west-3"))))))
1679 (native-inputs
1680 (list python-pytest
1681 python-pytest-rerunfailures
1682 python-pytest-xdist
1683 python-parameterized
1684 python-pyyaml
1685 python-setuptools))
1686 (propagated-inputs
1687 (list python-boto3
1688 python-jsonschema
1689 python-pydantic
1690 python-typing-extensions))
1691 (home-page "https://github.com/aws/serverless-application-model")
1692 (synopsis "Transform AWS SAM templates into AWS CloudFormation templates")
1693 (description
1694 "AWS SAM Translator is a library that transform @dfn{Serverless Application
1695Model} (SAM) templates into AWS CloudFormation templates.")
1696 (license license:asl2.0)))
1697
1698(define-public python-aws-xray-sdk
1699 (package
1700 (name "python-aws-xray-sdk")
1701 (version "2.14.0")
1702 (home-page "https://github.com/aws/aws-xray-sdk-python")
1703 (source (origin
1704 (method git-fetch)
1705 (uri (git-reference (url home-page) (commit version)))
1706 (file-name (git-file-name name version))
1707 (sha256
1708 (base32
1709 "0khm86218rfjmgfw0azk7gnq6y9gkj95i0i30wa5v2li1z4z8qxd"))))
1710 (build-system pyproject-build-system)
1711 (arguments
1712 (list
1713 #:test-flags
1714 '(list ;; Tries to connect to external network resources
1715 "--ignore=tests/ext/aiohttp/test_client.py"
1716 "--ignore=tests/ext/httplib/test_httplib.py"
1717 "--ignore=tests/ext/httpx"
1718 "--ignore=tests/ext/requests/test_requests.py"
1719 ;; TODO: How to configure Django for these tests?
1720 "--ignore=tests/ext/django"
1721 ;; These tests require packages not yet in Guix.
1722 "--ignore=tests/ext/aiobotocore/test_aiobotocore.py"
1723 "--ignore=tests/ext/aiohttp/test_middleware.py"
1724 "--ignore=tests/ext/pg8000/test_pg8000.py"
1725 "--ignore=tests/ext/psycopg2/test_psycopg2.py"
1726 "--ignore=tests/ext/pymysql/test_pymysql.py"
1727 "--ignore=tests/ext/pynamodb/test_pynamodb.py"
1728 "--ignore=tests/ext/sqlalchemy_core/test_postgres.py"
1729 "--ignore=tests/ext/sqlalchemy_core/test_dburl.py"
1730 "--ignore=tests/test_async_recorder.py"
1731 ;; FIXME: module 'sqlalchemy.orm' has no attribute 'DeclarativeBase'.
1732 "--ignore-glob=tests/ext/sqlalchemy*"
1733 "--ignore=tests/ext/flask_sqlalchemy/test_query.py"
1734 ;; FIXME: Why is this failing?
1735 "--ignore=tests/test_patcher.py"
1736 "--ignore=tests/test_lambda_context.py")
1737 #:phases
1738 '(modify-phases %standard-phases
1739 (add-before 'check 'pre-check
1740 (lambda _
1741 ;; Allow "import tests.utils" to work as expected.
1742 (setenv "PYTHONPATH" (getcwd)))))))
1743 (native-inputs
1744 (list ;; These are required for the test suite.
1745 python-aiohttp
1746 python-bottle
1747 python-flask
1748 python-flask-sqlalchemy
1749 python-httpx
1750 python-mock
1751 python-pymysql
1752 python-pytest
1753 python-pytest-asyncio-0.26
1754 python-pytest-benchmark
1755 python-setuptools
1756 python-sqlalchemy
1757 python-webtest))
1758 (propagated-inputs
1759 (list python-botocore
1760 python-jsonpickle
1761 python-requests
1762 python-wrapt))
1763 (synopsis "Profile applications on AWS X-Ray")
1764 (description
1765 "The AWS X-Ray SDK for Python enables Python developers to record and
1766emit information from within their applications to the AWS X-Ray service.")
1767 (license license:asl2.0)))
1768
1769(define-public python-awscrt
1770 (package
1771 (name "python-awscrt")
1772 (version "0.36.0")
1773 (source
1774 (origin
1775 (method url-fetch)
1776 (uri (pypi-uri "awscrt" version))
1777 (sha256
1778 (base32 "0jh6niq9kgv0canm11ad8zibywwirdfxg4bqyd8jhaiv3x39h8dd"))))
1779 (build-system pyproject-build-system)
1780 (arguments
1781 (list
1782 #:test-backend #~'unittest
1783 #:test-flags #~(list "discover" "--verbose")
1784 #:phases
1785 #~(modify-phases %standard-phases
1786 (add-after 'unpack 'disable-broken-tests
1787 (lambda _
1788 ;; Disable broken tests. These tests fail because they depend on
1789 ;; specific DNS configuration and/or AWS credentials, which isn't
1790 ;; available in this context.
1791 (substitute* "test/test_auth.py"
1792 (("def test_default_provider")
1793 "def _test_default_provider"))
1794 (substitute* "test/test_aiohttp_client.py"
1795 (("def test_h2_remote_end_stream_ordering")
1796 "def _test_h2_remote_end_stream_ordering")
1797 (("def test_cross_thread_http2_client")
1798 "def _test_cross_thread_http2_client")
1799 (("def test_h2_client")
1800 "def _test_h2_client")
1801 (("def test_h2_manual_write_exception")
1802 "def _test_h2_manual_write_exception"))
1803 (substitute* "test/test_http_client.py"
1804 (("def test_h2_client")
1805 "def _test_h2_client")
1806 (("def test_h2_remote_end_stream_ordering")
1807 "def _test_h2_remote_end_stream_ordering")
1808 (("def test_h2_manual_write_exception")
1809 "def _test_h2_manual_write_exception"))
1810 (substitute* "test/test_s3.py"
1811 (("def test_sanity")
1812 "def _test_sanity")
1813 (("def test_sanity_secure")
1814 "def _test_sanity_secure")
1815 (("def test_wait_shutdown")
1816 "def _test_wait_shutdown"))
1817 (substitute* "test/test_io.py"
1818 ;; This test seems specifically broken. It waits for a shutdown event
1819 ;; from a group of singletons that will never occur because several of
1820 ;; the singleton references are held beyond the lifetime of this test.
1821 (("def test_shutdown_complete_singleton")
1822 "def _test_shutdown_complete_singleton"))))
1823 (add-after 'unpack 'override-cert-bundle-location
1824 (lambda* (#:key inputs #:allow-other-keys)
1825 (let ((bundle (search-input-file inputs
1826 "/etc/ssl/certs/ca-certificates.crt")))
1827 (setenv "SSL_CERT_FILE" bundle)
1828 (substitute* "awscrt/io.py"
1829 (("( +)opt = TlsContextOptions\\(\\)" m indent)
1830 (string-append m "\n"
1831 indent "import os\n"
1832 indent "\
1833opt.override_default_trust_store_from_path(None, os.getenv('SSL_CERT_FILE')) if os.getenv('SSL_CERT_FILE') else None\n"))
1834 (("^( +)self\\.no_certificate_revocation = False" all indent)
1835 (string-append all "\n"
1836 indent "import os as _os\n"
1837 indent "_ca_file = _os.environ.get('SSL_CERT_FILE')\n"
1838 indent "if _ca_file:\n"
1839 indent " self.override_default_trust_store(_read_binary_file(_ca_file))\n")))
1840 (substitute* "test/appexit_http.py"
1841 (("( +)tls_ctx_opt = awscrt.io.TlsContextOptions.*" m indent)
1842 (string-append m indent
1843 "tls_ctx_opt.override_default_trust_store_from_path(None, '"
1844 bundle "')\n")))
1845 (substitute* "test/test_io.py"
1846 (("( +)opt = TlsContextOptions\\(\\).*" m indent)
1847 (string-append m indent
1848 "opt.override_default_trust_store_from_path(None, '"
1849 bundle "')\n"))))))
1850 (add-after 'unpack 'use-system-libraries
1851 (lambda _
1852 (setenv "AWS_CRT_BUILD_USE_SYSTEM_LIBCRYPTO" "1"))))))
1853 (inputs (list openssl))
1854 (native-inputs (list cmake-minimal
1855 nss-certs-for-test
1856 python-boto3
1857 python-setuptools
1858 python-websockets
1859 python-h2))
1860 (home-page "https://github.com/awslabs/aws-crt-python")
1861 (synopsis "Common runtime for AWS Python projects")
1862 (description
1863 "This package provides a common runtime for AWS Python projects.")
1864 (license license:asl2.0)))
1865
1866(define-public python-azure-common
1867 (package
1868 (name "python-azure-common")
1869 (version "1.1.28")
1870 (source
1871 (origin
1872 (method url-fetch)
1873 (uri (pypi-uri "azure-common" version ".zip"))
1874 (sha256
1875 (base32 "18q4cy1xl2zly3rk7a1sc14w932x59r8c9j4d8dnlsz32hrcvh2a"))))
1876 (build-system pyproject-build-system)
1877 (arguments
1878 (list #:tests? #f)) ;no tests in PyPI archive
1879 (propagated-inputs (list python-azure-nspkg))
1880 (native-inputs (list python-setuptools unzip))
1881 (home-page "https://github.com/Azure/azure-sdk-for-python")
1882 (synopsis "Microsoft Azure Client library for Python")
1883 (description "This package provides the Microsoft Azure Client library for
1884Python.")
1885 (license license:expat)))
1886
1887(define-public python-azure-core
1888 (package
1889 (name "python-azure-core")
1890 (version "1.32.0")
1891 (source
1892 (origin
1893 (method url-fetch)
1894 (uri (pypi-uri "azure_core" version))
1895 (sha256
1896 (base32 "1r9hqyqr5fxiiai0irr0n98gwgzj5f8y46vc1yci9bidddfw7cr2"))))
1897 (build-system pyproject-build-system)
1898 (arguments
1899 (list
1900 #:test-flags
1901 `(list ;; This fails because devtools_testutils doesn't exist.
1902 "--ignore=tests/test_connection_string_parsing.py"
1903 ;; These all need network access.
1904 "--ignore=samples"
1905 "--ignore=tests/async_tests/test_streaming_async.py"
1906 "--ignore=tests/test_streaming.py"
1907 "-m" "not asyncio and not live_test_only"
1908 "-k" ,(string-append
1909 "not test_decompress_plain_no_header"
1910 " and not test_compress_plain_no_header"
1911 " and not test_decompress_compressed_no_header"
1912 " and not test_requests_socket_timeout"))
1913 #:phases
1914 #~(modify-phases %standard-phases
1915 (add-before 'check 'add-test-pythonpath
1916 (lambda* (#:key tests? #:allow-other-keys)
1917 (when tests?
1918 (setenv "PYTHONPATH"
1919 (string-append
1920 (getcwd) "/tests/testserver_tests/coretestserver:"
1921 (getenv "GUIX_PYTHONPATH")))))))))
1922 (propagated-inputs
1923 (list python-aiohttp
1924 python-requests
1925 python-six
1926 python-typing-extensions))
1927 (native-inputs
1928 (list python-flask
1929 python-pytest-8
1930 python-pytest-aiohttp
1931 python-pytest-asyncio
1932 python-pytest-trio
1933 python-setuptools
1934 python-wheel))
1935 (home-page "https://github.com/Azure/azure-sdk-for-python")
1936 (synopsis "Microsoft Azure Core library for Python")
1937 (description "This package provides the Microsoft Azure Core library for
1938Python.")
1939 (license license:expat)))
1940
1941(define-public python-azure-nspkg
1942 (package
1943 (name "python-azure-nspkg")
1944 (version "3.0.2")
1945 (source
1946 (origin
1947 (method url-fetch)
1948 (uri (pypi-uri "azure-nspkg" version ".zip"))
1949 (sha256
1950 (base32
1951 "1l4xwdh0fcnvrv0mzig4g2kgqkfbsy64zjm1ggc6grk3mykcxlz7"))))
1952 (build-system pyproject-build-system)
1953 (arguments (list #:tests? #f)) ;no tests in package
1954 (native-inputs (list unzip python-setuptools))
1955 (home-page "https://github.com/Azure/azure-sdk-for-python")
1956 (synopsis "Azure namespace internals")
1957 (description
1958 "This package is an internal Azure namespace package.")
1959 (license license:expat)))
1960
1961(define-public python-azure-storage-blob
1962 (package
1963 (name "python-azure-storage-blob")
1964 (version "12.27.0")
1965 (source
1966 (origin
1967 (method url-fetch)
1968 (uri (pypi-uri "azure_storage_blob" version))
1969 (sha256
1970 (base32 "16nb17f6bi0k53qlxybwqxdld3nj742hmsk4qcq3jwka5b6y5s4r"))))
1971 (build-system pyproject-build-system)
1972 (arguments
1973 ;; XXX: devtools_testutils is not provided as a proper package on PyPI,
1974 ;; Git does not contains setup.py, setup.cfg or pyproject.toml which makes
1975 ;; it hard to package in Guix.
1976 ;; <https://raw.githubusercontent.com/Azure/azure-sdk-for-python/refs/
1977 ;; heads/main/tools/azure-sdk-tools/devtools_testutils/README.md>.
1978 (list #:tests? #f))
1979 (native-inputs
1980 (list python-setuptools))
1981 (propagated-inputs
1982 (list python-azure-core
1983 python-cryptography
1984 python-isodate
1985 python-typing-extensions))
1986 (home-page "https://github.com/Azure/azure-sdk-for-python/")
1987 (synopsis "Microsoft Azure Blob Storage client library for Python")
1988 (description "This package provides the Microsoft Azure Blob Storage
1989Client Library for Python.")
1990 (license license:expat)))
1991
1992(define-public python-azure-storage-file-datalake
1993 (package
1994 (name "python-azure-storage-file-datalake")
1995 (version "12.22.0")
1996 (source
1997 (origin
1998 (method url-fetch)
1999 (uri (pypi-uri "azure_storage_file_datalake" version))
2000 (sha256
2001 (base32 "0xxg94684b630p8jrz38sg7mdcwp1wa0p5di27mswyrjycshvvcs"))))
2002 (build-system pyproject-build-system)
2003 (arguments
2004 ;; XXX: devtools_testutils is not provided as a proper package on PyPI,
2005 ;; Git does not contains setup.py, setup.cfg or pyproject.toml which makes
2006 ;; it hard to package in Guix.
2007 ;; <https://raw.githubusercontent.com/Azure/azure-sdk-for-python/refs/
2008 ;; heads/main/tools/azure-sdk-tools/devtools_testutils/README.md>.
2009 (list #:tests? #f))
2010 (native-inputs
2011 (list python-setuptools))
2012 (propagated-inputs
2013 (list python-azure-core
2014 python-azure-storage-blob
2015 python-isodate
2016 python-typing-extensions))
2017 (home-page "https://github.com/Azure/azure-sdk-for-python")
2018 (synopsis "Microsoft Azure File DataLake Storage Client Library for Python")
2019 (description
2020 "This package provides the Microsoft Azure File @code{DataLake} Storage
2021Client Library for Python.")
2022 (license license:expat)))
2023
2024(define-public python-azure-storage-nspkg
2025 (package
2026 (name "python-azure-storage-nspkg")
2027 (version "3.1.0")
2028 (source
2029 (origin
2030 (method url-fetch)
2031 (uri (pypi-uri "azure-storage-nspkg" version))
2032 (sha256
2033 (base32 "049qcmgshz7dj9yaqma0fwcgbxwddgwyfcw4gmv45xfmaa3bwfvg"))))
2034 (build-system pyproject-build-system)
2035 (arguments
2036 (list #:tests? #f)) ;no tests in PyPI archive
2037 (native-inputs (list python-setuptools))
2038 (propagated-inputs (list python-azure-nspkg))
2039 (home-page "https://github.com/Azure/azure-storage-python")
2040 (synopsis "Microsoft Azure Storage Namespace package")
2041 (description
2042 "This project provides a client library in Python that makes it easy to
2043communicate with Microsoft Azure Storage services.")
2044 (license license:expat)))
2045
2046(define-public python-behave-web-api
2047 (package
2048 (name "python-behave-web-api")
2049 (version "2.3.0")
2050 (source
2051 (origin
2052 (method git-fetch)
2053 (uri (git-reference
2054 (url "https://github.com/jefersondaniel/behave-web-api")
2055 (commit (string-append "v" version))))
2056 (file-name (git-file-name name version))
2057 (sha256
2058 (base32 "1r8yx8gb5m599cpdqfvk6z9ax3qj26fpvczdr84z8jya0dxfch4p"))))
2059 (build-system pyproject-build-system)
2060 (native-inputs
2061 (list python-pytest
2062 python-setuptools))
2063 (propagated-inputs
2064 (list behave
2065 python-requests))
2066 (home-page "https://github.com/jefersondaniel/behave-web-api")
2067 (synopsis "Provides testing for JSON APIs with Behave for Python")
2068 (description "This package provides testing utility modules for testing
2069JSON APIs with Behave.")
2070 (license license:expat)))
2071
2072(define-public python-beren
2073 (package
2074 (name "python-beren")
2075 (version "0.7.0")
2076 (source
2077 (origin
2078 (method git-fetch)
2079 (uri (git-reference
2080 (url "https://github.com/teffalump/beren")
2081 (commit (string-append "v" version))))
2082 (file-name (git-file-name name version))
2083 (sha256
2084 (base32 "19nnvbjx2wypslqklqi0j9fiwypk1a5qwfw1jcabjw03awm1yyrx"))))
2085 (build-system pyproject-build-system)
2086 (arguments
2087 ;; The test tries to open a connection to a remote server.
2088 `(#:tests? #f))
2089 (native-inputs (list python-setuptools))
2090 (propagated-inputs (list python-apiron))
2091 (home-page "https://github.com/teffalump/beren")
2092 (synopsis "REST client for Orthanc DICOM servers")
2093 (description
2094 "@code{beren} provides a REST client for Orthanc, a DICOM server.")
2095 (license license:gpl3+)))
2096
2097(define-public python-betamax
2098 (package
2099 (name "python-betamax")
2100 (version "0.9.0")
2101 (source
2102 (origin
2103 (method url-fetch)
2104 (uri (pypi-uri "betamax" version))
2105 (sha256
2106 (base32
2107 "152zil1j4gl1whnldi08zwjr4z2bnlbd061kr3ipjs5wg4b6wcc2"))))
2108 (build-system pyproject-build-system)
2109 (arguments
2110 (list
2111 #:test-flags
2112 #~(list "-k" (string-join
2113 ;; Tests require network access to http://httpbin.org/get.
2114 (list "not test_creates_new_cassettes"
2115 "test_placeholders_work"
2116 "test_post_start_hook"
2117 "test_pre_stop_hook"
2118 "test_preplayback_hook"
2119 "test_prerecord_hook"
2120 "test_prerecord_ignoring_hook"
2121 "test_records_new_events_with_existing_cassette"
2122 "test_records_new_interaction"
2123 "test_records_new_interactions"
2124 "test_replaces_old_interactions"
2125 "test_replays_response_from_cassette"
2126 "test_requests_with_json_body"
2127 "test_saves_content_as_gzip"
2128 "test_unicode_is_saved_properly")
2129 " and not "))))
2130 (native-inputs
2131 (list nss-certs-for-test
2132 python-pytest
2133 python-setuptools))
2134 (propagated-inputs
2135 (list python-requests))
2136 (home-page "https://github.com/sigmavirus24/betamax")
2137 (synopsis "Record HTTP interactions with python-requests")
2138 (description
2139 "Betamax will record your test suite's HTTP interactions and replay them
2140during future tests. It is designed to work with python-requests.")
2141 (license license:expat)))
2142
2143(define-public python-betamax-matchers
2144 (package
2145 (name "python-betamax-matchers")
2146 (version "0.4.0")
2147 (source
2148 (origin
2149 (method git-fetch)
2150 (uri (git-reference
2151 (url "https://github.com/sigmavirus24/betamax_matchers")
2152 (commit version)))
2153 (file-name (git-file-name name version))
2154 (sha256
2155 (base32 "0lyg3r91hwfvavyi5k6sddcla37igigycfv1mx40c32byqwl6pq5"))))
2156 (build-system pyproject-build-system)
2157 (native-inputs (list python-pytest python-setuptools))
2158 (propagated-inputs (list python-betamax python-requests-toolbelt))
2159 (home-page "https://github.com/sigmavirus24/betamax_matchers")
2160 (synopsis "VCR imitation for python-requests")
2161 (description "@code{betamax-matchers} provides a set of Matchers for
2162Betamax.")
2163 (license license:asl2.0)))
2164
2165(define-public python-betamax-serializers
2166 (package
2167 (name "python-betamax-serializers")
2168 (version "0.2.1")
2169 (source
2170 (origin
2171 (method git-fetch)
2172 (uri (git-reference
2173 (url "https://gitlab.com/betamax/serializers")
2174 (commit version)))
2175 (file-name (git-file-name name version))
2176 (sha256
2177 (base32 "1p2l5w3vwvjacs2ndahgcjq55qb53i37p8mz1zh85pjxyszdyw2l"))))
2178 (build-system pyproject-build-system)
2179 (arguments (list #:tests? #f)) ; No tests.
2180 (native-inputs (list python-setuptools))
2181 (propagated-inputs (list python-betamax python-pyyaml))
2182 (synopsis "Set of third-party serializers for Betamax")
2183 (description
2184 "Betamax-Serializers are an experimental set of Serializers for Betamax
2185that may possibly end up in the main package.")
2186 (home-page "https://gitlab.com/betamax/serializers")
2187 (license license:asl2.0)))
2188
2189(define-public python-blacksheep
2190 (package
2191 (name "python-blacksheep")
2192 (version "2.6.3")
2193 (source
2194 (origin
2195 (method git-fetch)
2196 (uri (git-reference
2197 (url "https://github.com/Neoteroi/BlackSheep")
2198 (commit (string-append "v" version))))
2199 (file-name (git-file-name name version))
2200 (sha256
2201 (base32 "1k6yqsqnh6nnhi8z5v2yqpxs7qsk35zwd7gcr7cdh825f2vrl7js"))))
2202 (build-system pyproject-build-system)
2203 (arguments
2204 (list
2205 ;; tests: 1821 passed
2206 ;;
2207 ;; Run all unit tests, but do not run integration tests from `itests`
2208 ;; directory.
2209 #:test-flags
2210 #~(list "tests")
2211 #:phases
2212 #~(modify-phases %standard-phases
2213 (add-before 'build 'cythonize
2214 (lambda _
2215 (with-directory-excursion "blacksheep"
2216 (for-each (lambda (file)
2217 (invoke "cython" "-3" file "-I" "."))
2218 (find-files "." ".*\\.pyx$"))))))))
2219 (native-inputs
2220 (list nss-certs-for-test
2221 python-cython
2222 python-defusedxml
2223 python-flask
2224 python-jinja2
2225 python-pydantic
2226 python-pyjwt
2227 python-pytest
2228 python-pytest-asyncio
2229 python-setuptools
2230 python-starlette))
2231 (propagated-inputs
2232 (list python-certifi
2233 python-essentials
2234 python-essentials-openapi
2235 python-guardpost
2236 python-httptools
2237 python-rodi
2238 python-itsdangerous))
2239 (home-page "https://github.com/Neoteroi/BlackSheep")
2240 (synopsis "Asynchronous framework to build event based web applications")
2241 (description
2242 "BlackSheep is a lightweight, asynchronous, event driven Web framework.
2243
2244The framework offers
2245@itemize
2246@item A rich code API, based on dependency injection and inspired by Flask and
2247ASP.NET Core.
2248@item A typing-friendly codebase, which enables a comfortable development
2249experience thanks to hints when coding with IDEs.
2250@item Built-in generation of OpenAPI Documentation, supporting version 3, YAML,
2251and JSON.
2252@item A cross-platform framework, using the most modern versions of Python.
2253@item Good performance.
2254@end itemize")
2255 (license license:expat)))
2256
2257(define-public python-bleach
2258 (package
2259 (name "python-bleach")
2260 (version "6.3.0")
2261 (source
2262 (origin
2263 (method git-fetch)
2264 (uri (git-reference
2265 (url "https://github.com/mozilla/bleach")
2266 (commit (string-append "v" version))))
2267 (file-name (git-file-name name version))
2268 (sha256
2269 (base32 "02abk9ixn010sqpbdsd7nxms0gv4prwv6d3nplb8giq85lpn1kkb"))
2270 (snippet
2271 #~(begin
2272 (use-modules (guix build utils))
2273 (substitute* (find-files "." "\\.py$")
2274 (("bleach\\._vendor\\.html5lib") "html5lib"))
2275 (delete-file-recursively "bleach/_vendor/html5lib")))))
2276 (build-system pyproject-build-system)
2277 (arguments
2278 (list
2279 ;; tests: 448 passed, 1 deselected, 3 xfailed
2280 #:test-flags
2281 #~(list (string-append "--deselect=tests/test_clean.py::"
2282 "test_self_closing_tags_self_close[wbr]"))
2283 #:phases
2284 #~(modify-phases %standard-phases
2285 (add-after 'unpack 'relax-requirements
2286 (lambda _
2287 ;; "tinycss2>=1.1.0,<1.5"
2288 ;; The 'sanity-check of python-nbclassic fails without this.
2289 (substitute* "setup.py"
2290 (("\"tinycss2.*") "")))))))
2291 (native-inputs
2292 (list python-pytest
2293 python-setuptools))
2294 (propagated-inputs
2295 (list python-html5lib
2296 python-tinycss2
2297 python-webencodings))
2298 (home-page "https://github.com/mozilla/bleach")
2299 (synopsis "Whitelist-based HTML-sanitizing tool")
2300 (description "Bleach is an easy whitelist-based HTML-sanitizing tool.")
2301 (license license:asl2.0)))
2302
2303(define-public python-bottle
2304 (package
2305 (name "python-bottle")
2306 (version "0.13.4")
2307 (source
2308 (origin
2309 (method url-fetch)
2310 (uri (pypi-uri "bottle" version))
2311 (sha256
2312 (base32 "0irz5i3h73pqz0ssgp3yk12zx33q7lrlh8p0in9jgchjgqr7hzkq"))))
2313 (build-system pyproject-build-system)
2314 (native-inputs (list python-pytest python-setuptools))
2315 (home-page "https://bottlepy.org/")
2316 (synopsis "WSGI framework for small web-applications")
2317 (description "@code{python-bottle} is a WSGI framework for small web-applications.")
2318 (license license:expat)))
2319
2320(define-public python-branca
2321 (package
2322 (name "python-branca")
2323 (version "0.7.2")
2324 (source
2325 (origin
2326 (method git-fetch) ; no tests in PyPI
2327 (uri (git-reference
2328 (url "https://github.com/python-visualization/branca")
2329 (commit (string-append "v" version))))
2330 (file-name (git-file-name name version))
2331 (sha256
2332 (base32 "1vs94nqa7r6iwm8mj3m29hg090gmgz4ywnayxh8qiz9ij8jv96wa"))))
2333 (build-system pyproject-build-system)
2334 (arguments
2335 ;; This file requires Selenium.
2336 (list #:test-flags #~(list "--ignore" "tests/test_iframe.py"
2337 ;; This test passes but is very slow.
2338 "-k" "not test_color_brewer_extendability")))
2339 (propagated-inputs (list python-jinja2))
2340 (native-inputs
2341 (list python-numpy
2342 python-pytest
2343 python-setuptools
2344 python-setuptools-scm
2345 python-wheel))
2346 (home-page "https://github.com/python-visualization/branca")
2347 (synopsis "Generate complex HTML+JS pages with Python")
2348 (description "This library is a spinoff from @code{folium} that would host
2349the non-map-specific features. It can be used to generate HTML + JS.")
2350 (license license:expat)))
2351
2352(define-public python-btrees
2353 (package
2354 (name "python-btrees")
2355 (version "6.1")
2356 (source
2357 (origin
2358 (method git-fetch)
2359 (uri (git-reference
2360 (url "https://github.com/zopefoundation/BTrees")
2361 (commit version)))
2362 (file-name (git-file-name name version))
2363 (sha256
2364 (base32 "0vcibmd725ddgsl5yzmi8d403day3796h82xlq84w91xbdrbd5d5"))))
2365 (build-system pyproject-build-system)
2366 (arguments
2367 (list
2368 #:phases
2369 #~(modify-phases %standard-phases
2370 (replace 'check
2371 (lambda* (#:key tests? #:allow-other-keys)
2372 (if tests?
2373 (invoke "zope-testrunner" "--test-path=src")
2374 (format #t "test suite not run~%")))))))
2375 (propagated-inputs (list python-persistent python-zope-interface))
2376 (native-inputs (list python-persistent python-transaction
2377 python-zope-testrunner python-setuptools))
2378 (home-page "https://github.com/zopefoundation/BTrees")
2379 (synopsis "Scalable persistent object containers")
2380 (description
2381 "This package contains a set of persistent object containers built around a
2382modified BTree data structure. The trees are optimized for use inside ZODB's
2383\"optimistic concurrency\" paradigm, and include explicit resolution of
2384conflicts detected by that mechanism.")
2385 (license license:zpl2.1)))
2386
2387(define-public python-cloudpathlib
2388 (package
2389 (name "python-cloudpathlib")
2390 (version "0.23.0")
2391 (source
2392 (origin
2393 (method git-fetch)
2394 (uri (git-reference
2395 (url "https://github.com/drivendataorg/cloudpathlib")
2396 (commit (string-append "v" version))))
2397 (file-name (git-file-name name version))
2398 (sha256
2399 (base32 "1dqwml269lpz51drgg3s27sqmvwa1vldw2rj34ssnqppcmc5h5lm"))))
2400 (build-system pyproject-build-system)
2401 (arguments
2402 (list
2403 ;; tests: 977 passed, 15 skipped, 8642 warnings
2404 #:test-flags
2405 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
2406 ;; TODO: Package azure-identity (required for this file)
2407 "--ignore=tests/test_azure_specific.py"
2408 ;; TypeError: Retry.__init__() got an unexpected keyword
2409 ;; argument 'timeout'
2410 "--deselect=tests/test_gs_specific.py::test_timeout_and_retry")))
2411 (native-inputs
2412 (list ;; python-azure-identity
2413 python-dotenv
2414 python-flit-core
2415 python-psutil
2416 python-pydantic
2417 python-pytest
2418 python-pytest-cases
2419 python-pytest-reportlog
2420 python-pytest-xdist
2421 python-shortuuid
2422 python-tenacity))
2423 (propagated-inputs
2424 (list python-azure-storage-blob
2425 python-azure-storage-file-datalake
2426 python-boto3
2427 python-google-cloud-storage
2428 python-typing-extensions))
2429 (home-page "https://github.com/drivendataorg/cloudpathlib")
2430 (synopsis "Pathlib-style classes for cloud storage services")
2431 (description
2432 "This package provides a Python library with classes that mimic
2433@code{pathlib.Path}'s interface for URIs from different cloud storage
2434services.")
2435 (license license:expat)))
2436
2437(define-public python-conda-package-handling
2438 (package
2439 (name "python-conda-package-handling")
2440 (version "2.4.0")
2441 (source
2442 (origin
2443 (method git-fetch)
2444 (uri (git-reference
2445 (url "https://github.com/conda/conda-package-handling/")
2446 (commit version)))
2447 (file-name (git-file-name name version))
2448 (sha256
2449 (base32 "1l2zbbwlxp9azpshixvxnb9354xajxkn88934grpwl70blgb3yq2"))))
2450 (build-system pyproject-build-system)
2451 (native-inputs
2452 (list python-bottle
2453 python-mock
2454 python-pytest-8
2455 python-pytest-mock
2456 python-setuptools))
2457 (propagated-inputs
2458 (list python-conda-package-streaming))
2459 (home-page "https://conda.io")
2460 (synopsis "Create and extract conda packages of various formats")
2461 (description
2462 "This library is an abstraction of Conda package handling and a tool for
2463extracting, creating, and converting between formats.")
2464 (license license:bsd-3)))
2465
2466(define-public python-conda-package-streaming
2467 (package
2468 (name "python-conda-package-streaming")
2469 (version "0.12.0")
2470 (source
2471 (origin
2472 (method url-fetch)
2473 (uri (pypi-uri "conda_package_streaming" version))
2474 (sha256
2475 (base32 "1fcyx83swx1wfndrl0vdk8c2pixshn54gkjy7xchkra13kw2yas2"))))
2476 (build-system pyproject-build-system)
2477 (arguments
2478 ;; TODO: Cycles with python-conda-package-handling, implement bootstrap.
2479 (list #:tests? #f))
2480 (native-inputs
2481 (list python-flit-core))
2482 (propagated-inputs
2483 (list python-requests
2484 python-zstandard))
2485 (home-page "https://conda.github.io/conda-package-streaming/")
2486 (synopsis "Conda formats (@code{.conda}, @code{.tar.bz2}) reader library")
2487 (description
2488 "This package provides an efficient library to read from new and old format
2489@code{.conda} and @code{.tar.bz2} conda packages.")
2490 (license license:bsd-3)))
2491
2492(define-public python-dependency-groups
2493 (package
2494 (name "python-dependency-groups")
2495 (version "1.3.1")
2496 (source
2497 (origin
2498 (method url-fetch)
2499 (uri (pypi-uri "dependency_groups" version))
2500 (sha256
2501 (base32 "1zgymnk6k984h2wfdpp0vws2ihwqrr9lmxhrij9zs5q5140q61vq"))))
2502 (build-system pyproject-build-system)
2503 (propagated-inputs (list python-packaging python-tomli))
2504 (native-inputs (list python-flit-core python-pytest))
2505 (home-page "https://dependency-groups.readthedocs.io/")
2506 (synopsis "Tools and library for resolving PEP 735 Dependency Group data")
2507 (description
2508 "This package provides a library which is able to parse dependency groups (PEP
2509735), following includes, and provide that data as output.")
2510 (license license:expat)))
2511
2512(define-public python-devpi-common
2513 (package
2514 (name "python-devpi-common")
2515 (version "4.0.4")
2516 (source
2517 (origin
2518 (method url-fetch)
2519 (uri (pypi-uri "devpi_common" version))
2520 (sha256
2521 (base32 "1k217b0fvsc7k2afw6wwlvqr1ksnv1vjzfm61g358vn98nd0lni3"))))
2522 (build-system pyproject-build-system)
2523 (propagated-inputs (list python-lazy python-packaging-legacy
2524 python-requests))
2525 (native-inputs
2526 (list python-pytest
2527 python-setuptools
2528 python-wheel))
2529 (home-page "https://github.com/devpi/devpi")
2530 (synopsis
2531 "Utilities jointly used by devpi-server, devpi-client and others")
2532 (description
2533 "This package provides utilities jointly used by devpi-server,
2534devpi-client and others.")
2535 (license license:expat)))
2536
2537(define-public python-devpi-client
2538 (package
2539 (name "python-devpi-client")
2540 (version "7.2.0")
2541 (source
2542 (origin
2543 (method url-fetch)
2544 (uri (pypi-uri "devpi-client" version))
2545 (sha256
2546 (base32 "0ywx4ql8lsypb17n2miq39bmkrp232sdk8g6pskqp1y3b223chy1"))))
2547 (build-system pyproject-build-system)
2548 (arguments
2549 (list
2550 #:test-flags
2551 ;; This wants to use pip install
2552 '(list "--ignore=testing/test_upload.py"
2553 ;; These complain about finding distutils. It's not my fault,
2554 ;; mate, setuptools is right there, but you won't pick it!
2555 "--ignore=testing/test_list_remove.py"
2556 "--ignore=testing/test_main.py"
2557 "--ignore=testing/test_install.py"
2558 "--ignore=testing/test_functional.py"
2559 "--ignore=testing/test_test.py")
2560 #:phases
2561 '(modify-phases %standard-phases
2562 (add-after 'unpack 'patch-tests
2563 (lambda _
2564 ;; Do not replace the directory name of the store item.
2565 (substitute* "testing/conftest.py"
2566 (("\"devpi-server\", \"devpi-init\"")
2567 "\"/bin/devpi-server\", \"/bin/devpi-init\""))))
2568 (add-before 'check 'set-HOME
2569 ;; Some tests need this
2570 (lambda _ (setenv "HOME" "/tmp"))))))
2571 (propagated-inputs (list python-pypa-build
2572 python-check-manifest
2573 python-colorama
2574 python-devpi-common
2575 python-iniconfig
2576 python-pkginfo
2577 python-platformdirs
2578 python-pluggy
2579 python-pypitoken
2580 python-tomli))
2581 (native-inputs
2582 (list python-devpi-server
2583 python-pytest
2584 python-setuptools
2585 python-virtualenv))
2586 (home-page "https://github.com/devpi/devpi")
2587 (synopsis "Devpi upload/install/... commands for Python developers")
2588 (description
2589 "The devpi command line tool is typically used in conjunction with
2590devpi-server. It allows uploading, testing and installing packages from devpi
2591indexes.")
2592 (license license:expat)))
2593
2594(define-public python-devpi-process
2595 (package
2596 (name "python-devpi-process")
2597 (version "1.0.2")
2598 (source
2599 (origin
2600 (method url-fetch)
2601 (uri (pypi-uri "devpi_process" version))
2602 (sha256
2603 (base32 "0v26i8bs0n8f2ikizwyvq77fw3l0nsyl4wj8yff0r3y351ydqbs1"))))
2604 (build-system pyproject-build-system)
2605 (arguments
2606 (list
2607 #:phases
2608 '(modify-phases %standard-phases
2609 (add-after 'unpack 'relax-requirements
2610 (lambda _
2611 ;; Our package is too old, sorry.
2612 (substitute* "pyproject.toml"
2613 (("typing-extensions>=4.12.2")
2614 "typing-extensions>=4.10.0"))))
2615 (add-after 'unpack 'patch-tool-locations
2616 (lambda* (#:key inputs #:allow-other-keys)
2617 (substitute* "src/devpi_process/__init__.py"
2618 (("_exe\\(\"devpi-init\"\\)")
2619 (string-append "\"" (search-input-file inputs "/bin/devpi-init") "\""))
2620 (("_exe\\(\"devpi-server\"\\)")
2621 (string-append "\"" (search-input-file inputs "/bin/devpi-server") "\""))
2622 (("_exe\\(\"devpi\"\\)")
2623 (string-append "\"" (search-input-file inputs "/bin/devpi") "\""))))))))
2624 (propagated-inputs (list python-devpi-client python-devpi-server
2625 python-typing-extensions))
2626 (native-inputs
2627 (list nss-certs-for-test
2628 python-hatchling
2629 python-hatch-vcs
2630 python-httpx
2631 python-pytest))
2632 (home-page "https://github.com/devpi/devpi")
2633 (synopsis "API to create and use a devpi server process")
2634 (description
2635 "This package provides a programmatic API to create and use a devpi
2636server process.")
2637 (license license:expat)))
2638
2639(define-public python-devpi-server
2640 (package
2641 (name "python-devpi-server")
2642 (version "6.20.3")
2643 (source
2644 (origin
2645 (method git-fetch)
2646 (uri (git-reference
2647 (url "https://github.com/devpi/devpi")
2648 (commit (string-append "server-" version))))
2649 (file-name (git-file-name name version))
2650 (sha256
2651 (base32 "11q1bnd8rl55gcv99xkmg10i8z9l91kvmgrvcz1803mwkcs0isp8"))))
2652 (build-system pyproject-build-system)
2653 (arguments
2654 (list
2655 ;; tests: 1134 passed, 53 skipped, 29 warnings
2656 #:phases
2657 #~(modify-phases %standard-phases
2658 (add-after 'unpack 'chdir
2659 (lambda _
2660 (chdir "server")))
2661 (add-after 'chdir 'relax-requirements
2662 (lambda _
2663 (substitute* "pyproject.toml"
2664 ;; It straggles to check argon2 in passlib on any versions
2665 ;; starting from 6.14.0: UnknownExtra("passlib 1.7.4 has no
2666 ;; such extra feature 'argon2'",).
2667 (("passlib\\[argon2\\]") "passlib")
2668 (("\"py>=1.4.23\",") ""))))
2669 (add-before 'check 'pre-check
2670 (lambda _
2671 (setenv "HOME" "/tmp"))))))
2672 (propagated-inputs (list python-argon2-cffi
2673 python-attrs
2674 python-defusedxml
2675 python-devpi-common
2676 python-httpx
2677 python-itsdangerous
2678 python-lazy
2679 python-passlib
2680 python-platformdirs
2681 python-pluggy
2682 python-pyramid
2683 python-repoze-lru
2684 python-requests
2685 python-ruamel.yaml-0.16 ;FIXME: rename
2686 python-strictyaml
2687 python-waitress))
2688 (native-inputs
2689 (list nss-certs-for-test
2690 python-execnet
2691 python-pytest
2692 python-pytest-asyncio
2693 python-pytest-timeout
2694 python-setuptools
2695 python-webtest))
2696 (home-page "https://devpi.net")
2697 (synopsis "Pypi.org caching server")
2698 (description "This package implements a reliable private and pypi.org
2699caching server.")
2700 (license license:expat)))
2701
2702(define-public python-dicomweb-client
2703 (package
2704 (name "python-dicomweb-client")
2705 (version "0.60.0")
2706 (source
2707 (origin
2708 (method git-fetch)
2709 (uri (git-reference
2710 (url "https://github.com/ImagingDataCommons/dicomweb-client")
2711 (commit (string-append "v" version))))
2712 (file-name (git-file-name name version))
2713 (sha256
2714 (base32 "1zad0905cc4jy4hnh9yhcw63bg25f7xa33x9rj9fhh5r4fznha8d"))))
2715 (build-system pyproject-build-system)
2716 (arguments
2717 (list
2718 #:phases
2719 #~(modify-phases %standard-phases
2720 (add-after 'unpack 'remove-dynamic-versioning
2721 (lambda _
2722 (substitute* "pyproject.toml"
2723 ;; Dynamic versioning via 'uv-dynamic-versioning' is
2724 ;; not suitable for Guix.
2725 (("dynamic = \\[\"version\"\\]")
2726 (string-append "version = \""
2727 #$version "\""))))))))
2728 (native-inputs
2729 (list python-hatchling
2730 python-pytest
2731 python-pytest-localserver))
2732 (propagated-inputs
2733 (list python-numpy
2734 python-pillow
2735 python-pydicom
2736 python-requests
2737 python-retrying))
2738 (home-page "https://github.com/ImagingDataCommons/dicomweb-client")
2739 (synopsis "Python client for DICOMweb RESTful services")
2740 (description
2741 "@code{dicomweb_client} provides client interfaces for DICOMweb RESTful
2742services QIDO-RS, WADO-RS and STOW-RS to search, retrieve and store
2743DICOM objects over the web, respectively.")
2744 (license license:expat)))
2745
2746(define-public python-dnslib
2747 (package
2748 (name "python-dnslib")
2749 (version "0.9.26")
2750 (source
2751 (origin
2752 (method git-fetch)
2753 (uri (git-reference
2754 (url "https://github.com/paulc/dnslib")
2755 (commit version)))
2756 (file-name (git-file-name name version))
2757 (sha256
2758 (base32 "1x1l727qx6x0kw7yhzhxhbm40wgrh367dr3y0vaix0wrhi30qsyk"))))
2759 (build-system pyproject-build-system)
2760 (arguments
2761 (list
2762 #:phases
2763 #~(modify-phases %standard-phases
2764 (replace 'check
2765 (lambda* (#:key tests? #:allow-other-keys)
2766 (when tests?
2767 (invoke "./run_tests.sh")))))))
2768 (native-inputs
2769 (list python-setuptools))
2770 (home-page "https://github.com/paulc/dnslib")
2771 (synopsis "Library to encode/decode DNS wire-format packets")
2772 (description
2773 "This package provides a simple Python library to encode/decode DNS
2774wire-format packets.")
2775 (license license:bsd-3)))
2776
2777(define-public python-docusign-esign
2778 (package
2779 (name "python-docusign-esign")
2780 (version "5.0.0")
2781 (source
2782 (origin
2783 (method url-fetch)
2784 (uri (pypi-uri "docusign-esign" version))
2785 (sha256
2786 (base32 "18n9szjxbmsccz4vlvsl4xa73jn0y16l0c344m83gil25v2amn69"))))
2787 (build-system pyproject-build-system)
2788 ;; Testing requires undocumented setup changes with network access to
2789 ;; <demo.docusign.net>, and so testing is disabled here.
2790 (arguments `(#:tests? #f))
2791 (native-inputs
2792 (list python-setuptools
2793 python-wheel))
2794 (propagated-inputs
2795 (list python-certifi
2796 python-dateutil
2797 python-urllib3
2798 python-pyjwt
2799 python-cryptography))
2800 (home-page "https://developers.docusign.com/")
2801 (synopsis "DocuSign Python Client")
2802 (description
2803 "The Official DocuSign Python Client Library used to interact with the
2804eSign REST API. Send, sign, and approve documents using this client.")
2805 (license license:expat)))
2806
2807(define-public python-domain-connect
2808 (package
2809 (name "python-domain-connect")
2810 (version "0.0.11")
2811 (source
2812 (origin
2813 (method git-fetch) ;no tests in PyPI archive
2814 (uri (git-reference
2815 (url "https://github.com/Domain-Connect/domainconnect_python")
2816 (commit (string-append "v" version))))
2817 (file-name (git-file-name name version))
2818 (sha256
2819 (base32 "1dhqbx15h074g51mj73j9hlyvb11isjnj4s9ih5kbw1g4vf1q1jk"))))
2820 (build-system pyproject-build-system)
2821 (arguments
2822 (list
2823 ;; Check and sanity-check phases require /etc/resolv.conf, which is not
2824 ;; present in container.
2825 #:tests? #f
2826 #:phases #~(modify-phases %standard-phases (delete 'sanity-check))))
2827 (native-inputs
2828 (list python-setuptools))
2829 (propagated-inputs
2830 (list python-cryptography
2831 python-dnspython
2832 python-future
2833 python-publicsuffixlist))
2834 (home-page "https://github.com/Domain-Connect/domainconnect_python")
2835 (synopsis "Client library for Domain Connect protocol")
2836 (description
2837 "This package provides a Service Provider functionality in both Sync and
2838Async mode for @url{https://domainconnect.org/, Domain Connect protocol}.")
2839 (license license:expat)))
2840
2841(define-public python-domain-connect-dyndns
2842 (package
2843 (name "python-domain-connect-dyndns")
2844 (version "0.0.9")
2845 (source
2846 (origin
2847 (method url-fetch)
2848 (uri (pypi-uri "domain-connect-dyndns" version))
2849 (sha256
2850 (base32 "0srrblcb64bp7k5cqqivx4kykqdkmmzmspxwv66vix9k7wxdwqzx"))))
2851 (build-system pyproject-build-system)
2852 (arguments
2853 (list
2854 ;; Check and sanity-check phases require /etc/resolv.conf, which is not
2855 ;; present in container.
2856 #:tests? #f
2857 #:phases #~(modify-phases %standard-phases (delete 'sanity-check))))
2858 (native-inputs
2859 (list python-setuptools
2860 python-wheel))
2861 (propagated-inputs
2862 (list python-dnspython
2863 python-domain-connect
2864 python-requests
2865 python-validators))
2866 (home-page "https://github.com/Domain-Connect/DomainConnectDDNS-Python")
2867 (synopsis "Domain Connect Dynamic DNS in Python")
2868 ;; Project lacks meaningful description in README, see
2869 ;; <https://github.com/Domain-Connect/DomainConnectDDNS-Python/issues/43>.
2870 (description
2871 "Python client library for Dynamic DNS using
2872@url{https://www.domainconnect.org/, Domain Connect} protocol.")
2873 (license license:expat)))
2874
2875(define-public python-dominate
2876 (package
2877 (name "python-dominate")
2878 (version "2.9.1")
2879 (source
2880 (origin
2881 (method git-fetch)
2882 (uri (git-reference
2883 (url "https://github.com/Knio/dominate")
2884 (commit version)))
2885 (file-name (git-file-name name version))
2886 (sha256
2887 (base32 "0kv5ly8w2026pwvgamfjxav1g58wmgim30nr9w9qfwcipfjxwn5c"))))
2888 (build-system pyproject-build-system)
2889 (native-inputs
2890 (list python-pytest
2891 python-setuptools))
2892 (home-page "https://github.com/Knio/dominate")
2893 (synopsis "Python library for creating and manipulating HTML documents")
2894 (description
2895 "Dominate is a Python library for creating and manipulating HTML
2896documents using an elegant DOM API.")
2897 (license license:lgpl3+)))
2898
2899(define-public python-dropbox
2900 (package
2901 (name "python-dropbox")
2902 (version "12.0.2")
2903 (source
2904 (origin
2905 (method git-fetch) ; no tests in PyPI release
2906 (uri (git-reference
2907 (url "https://github.com/dropbox/dropbox-sdk-python")
2908 (commit (string-append "v" version))))
2909 (file-name (git-file-name name version))
2910 (sha256
2911 (base32 "0pyvi2mbibah42kq8804d98ghypm46wr8swqr34apnvnlp9j2nzl"))))
2912 (build-system pyproject-build-system)
2913 (arguments
2914 (list
2915 #:test-flags
2916 #~(list "-k" (string-join
2917 ;; Network access is required.
2918 (list "not test_bad_auth"
2919 "test_app_auth"
2920 "test_bad_pins"
2921 "test_bad_pins_session"
2922 "test_downscope"
2923 "test_multi_auth"
2924 "test_path_root"
2925 "test_path_root_err"
2926 "test_refresh"
2927 "test_rpc"
2928 "test_team"
2929 "test_upload_download"
2930 "test_versioned_route")
2931 " and not "))
2932 #:phases
2933 #~(modify-phases %standard-phases
2934 (add-after 'unpack 'relax-requirements
2935 (lambda _
2936 (substitute* "setup.py"
2937 ;; 'stone>=2,<3.3.3',
2938 ((">=2,<3.3.3") ">=2,<3.4.0"))))
2939 (add-before 'check 'pre-check
2940 (lambda _
2941 ;; Otherwise tests setup erroring.
2942 (setenv "LEGACY_USER_DROPBOX_TOKEN" "guix")
2943 (setenv "LEGACY_USER_CLIENT_ID" "guix")
2944 (setenv "LEGACY_USER_CLIENT_SECRET" "guix")
2945 (setenv "LEGACY_USER_REFRESH_TOKEN" "guix")
2946 (setenv "SCOPED_USER_DROPBOX_TOKEN" "guix")
2947 (setenv "SCOPED_USER_CLIENT_ID" "guix")
2948 (setenv "SCOPED_USER_CLIENT_SECRET" "guix")
2949 (setenv "SCOPED_USER_REFRESH_TOKEN" "guix")
2950 (setenv "SCOPED_TEAM_DROPBOX_TOKEN" "guix")
2951 (setenv "SCOPED_TEAM_CLIENT_ID" "guix")
2952 (setenv "SCOPED_TEAM_CLIENT_SECRET" "guix")
2953 (setenv "SCOPED_TEAM_REFRESH_TOKEN" "guix")
2954 (setenv "DROPBOX_SHARED_LINK" "guix"))))))
2955 (native-inputs
2956 (list nss-certs-for-test
2957 python-mock
2958 python-pytest
2959 python-pytest-mock
2960 python-setuptools
2961 python-wheel))
2962 (propagated-inputs
2963 (list python-requests python-six python-stone))
2964 (home-page "https://www.dropbox.com/developers")
2965 (synopsis "Official Dropbox API Client")
2966 (description "This package provides a Python SDK for integrating with the
2967Dropbox API v2.")
2968 (license license:expat)))
2969
2970(define-public python-dukpy
2971 (package
2972 (name "python-dukpy")
2973 (version "0.5.1")
2974 (source
2975 (origin
2976 (method git-fetch)
2977 (uri (git-reference
2978 (url "https://github.com/amol-/dukpy")
2979 (commit version)))
2980 (file-name (git-file-name name version))
2981 (sha256
2982 (base32 "1qsqfgy12frrdikjf353bsvhln11jixc3qs9rc1zra55k0569036"))))
2983 (build-system pyproject-build-system)
2984 (arguments
2985 (list
2986 #:test-flags
2987 #~(list #$@(map (lambda (test)
2988 (string-append "--deselect=tests/test_installer.py"
2989 "::TestPackageInstaller::"
2990 test))
2991 ;; Network access is required.
2992 (list "test_install_command"
2993 "test_install_command_latest_ver"
2994 "test_install_command_substrate_error"
2995 "test_install_command_without_dest"
2996 "test_install_react"
2997 "test_install_scoped_package"
2998 "test_install_unexisting_package"
2999 "test_install_unexisting_version")))))
3000 (native-inputs
3001 (list python-mock
3002 python-pytest
3003 python-setuptools
3004 python-webassets))
3005 (home-page "https://github.com/amol-/dukpy")
3006 (synopsis "Simple JavaScript interpreter for Python")
3007 (description
3008 "DukPy is a simple JavaScript interpreter for Python built on top of
3009duktape engine without any external dependency. It comes with a bunch of
3010common transpilers built-in for convenience:
3011@itemize
3012@item CoffeeScript
3013@item BabelJS
3014@item TypeScript
3015@item JSX
3016@item LESS
3017@end itemize")
3018 (license license:expat)))
3019
3020(define-public python-essentials-openapi
3021 (package
3022 (name "python-essentials-openapi")
3023 (version "1.2.1")
3024 (source
3025 (origin
3026 (method git-fetch)
3027 (uri (git-reference
3028 (url "https://github.com/Neoteroi/essentials-openapi")
3029 (commit (string-append "v" version))))
3030 (file-name (git-file-name name version))
3031 (sha256
3032 (base32 "0f3lhpkqhvv8sr1c34cvzdqkc61306m03w3jp0zdih1v6is05j8x"))))
3033 (build-system pyproject-build-system)
3034 (native-inputs
3035 (list python-flask
3036 python-hatchling
3037 python-pydantic
3038 python-pytest
3039 python-rich))
3040 (propagated-inputs
3041 (list python-essentials
3042 python-httpx
3043 python-jinja2
3044 python-markupsafe
3045 python-pyyaml))
3046 (home-page "https://github.com/Neoteroi/essentials-openapi/")
3047 (synopsis "Generator for OpenAPI Documentation")
3048 (description
3049 "Generator for OpenAPI Documentation version 2 and 3, in JSON and YAML
3050formats. Generator for other kinds of documents from OpenAPI Documentation
3051files.")
3052 (license license:expat)))
3053
3054(define-public python-eventlet
3055 (package
3056 (name "python-eventlet")
3057 (version "0.41.0")
3058 (source
3059 (origin
3060 (method git-fetch)
3061 (uri (git-reference
3062 (url "https://github.com/eventlet/eventlet")
3063 (commit version)))
3064 (file-name (git-file-name name version))
3065 (sha256
3066 (base32 "1rn8f5v08n48dh6aycdxfwz17w4xwkgny7bhy5llqn5dl0g2dw43"))))
3067 (build-system pyproject-build-system)
3068 (arguments
3069 (list
3070 ;; tests: 618 passed, 121 skipped, 20 deselected, 52 warnings
3071 #:test-flags
3072 #~(list
3073 #$@(map (lambda (test)
3074 (string-append "--deselect=tests/" test))
3075 (list
3076 ;; dns.resolver.NoResolverConfiguration: cannot open
3077 ;; /etc/resolv.conf
3078 "greendns_test.py::TestProxyResolver::test_clear"
3079 "greendns_test.py::TinyDNSTests::test_noraise_dns_tcp"
3080 "greendns_test.py::TinyDNSTests::test_raise_dns_tcp"
3081 ;; assert <built-in function gethostbyname> is <function
3082 ;; gethostbyname at 0x7ffff3491120>
3083 "socket_test.py::test_dns_methods_are_green"
3084 ;; socket.gaierror: [Errno -8] Servname not supported for
3085 ;; ai_socktype
3086 "greendns_test.py::TestGetaddrinfo::test_getaddrinfo"
3087 "greendns_test.py::TestGetaddrinfo::test_getaddrinfo_idn"
3088 "greendns_test.py::TestGetaddrinfo::test_getaddrinfo_inet"
3089 "greendns_test.py::TestGetaddrinfo::test_getaddrinfo_inet6"
3090 "greendns_test.py::test_hosts_no_network"
3091 ;; AssertionError: Expected single line "pass" in stdout
3092 "asyncio_test.py::test_asyncio_does_not_use_greendns"
3093 "greendns_test.py::test_import_rdtypes_then_eventlet"
3094 "patcher_test.py::test_patcher_existing_logging_module_lock")))
3095 #:phases
3096 #~(modify-phases %standard-phases
3097 (add-after 'unpack 'avoid-OSError
3098 (lambda _
3099 ;; If eventlet tries to load greendns, an OSError is thrown when
3100 ;; getprotobyname is called. Thankfully there is an environment
3101 ;; variable to disable the greendns import, so use it. Note that
3102 ;; this error is propagated to child packages too, so enforce the
3103 ;; changed default.
3104 (substitute* "eventlet/green/socket.py"
3105 (("os\\.environ\\.get\\(\"EVENTLET_NO_GREENDNS\", ''\\)")
3106 "os.environ.get(\"EVENTLET_NO_GREENDNS\", \"yes\")"))))
3107 (add-before 'check 'pre-check
3108 (lambda _
3109 (setenv "EVENTLET_HUB" "asyncio"))))))
3110 (native-inputs
3111 (list python-hatchling
3112 python-hatch-vcs
3113 python-pytest
3114 python-pytest-aiohttp))
3115 (propagated-inputs
3116 (list python-dnspython
3117 python-greenlet))
3118 (home-page "https://eventlet.net")
3119 (synopsis "Concurrent networking library for Python")
3120 (description
3121 "Eventlet is a concurrent networking library for Python that
3122allows you to change how you run your code, not how you write it.
3123It uses @code{epoll} or @code{libevent} for highly scalable non-blocking I/O.
3124Coroutines ensure that the developer uses a blocking style of programming
3125that is similar to threading, but provide the benefits of non-blocking I/O.
3126The event dispatch is implicit, which means you can easily use @code{Eventlet}
3127from the Python interpreter, or as a small part of a larger application.
3128
3129Note: In Guix, this package assumes the environment variable
3130@code{EVENTLET_NO_GREENDNS} defaults to @code{yes}. To try to use it, set it
3131to anything else.")
3132 (license license:expat)))
3133
3134(define-public python-feedgen
3135 (package
3136 (name "python-feedgen")
3137 (version "1.0.0")
3138 (source
3139 (origin
3140 (method git-fetch)
3141 (uri (git-reference
3142 (url "https://github.com/lkiesow/python-feedgen")
3143 (commit (string-append "v" version))))
3144 (file-name (git-file-name name version))
3145 (sha256
3146 (base32
3147 "1ppwxp9yck29pk2p2dlrrad6rz16l9h4fhcajp9yb7ns94fm5v3l"))))
3148 (build-system pyproject-build-system)
3149 (propagated-inputs
3150 (list python-dateutil
3151 python-lxml))
3152 (native-inputs
3153 (list python-pytest
3154 python-setuptools))
3155 (home-page "https://feedgen.kiesow.be")
3156 (synopsis "Atom and RSS feed generator")
3157 (description
3158 "This module can be used to generate web feeds in both Atom and RSS
3159format. It also extensible and comes with an extension to produce podcasts.")
3160 ;; The README says that this package is released under both licenses, and
3161 ;; permits the user to choose whichever is more convenient to them.
3162 (license (list license:bsd-2
3163 license:lgpl3+))))
3164
3165(define-public python-flask-caching
3166 (package
3167 (name "python-flask-caching")
3168 (version "2.3.1")
3169 (source
3170 (origin
3171 (method url-fetch)
3172 (uri (pypi-uri "flask_caching" version))
3173 (sha256
3174 (base32 "1jcqgfzvqhgpngf9nhpfjs129cslh8jyczfy8kw11y7b9qdzvmv5"))))
3175 (build-system pyproject-build-system)
3176 (arguments
3177 (list
3178 #:test-flags
3179 ;; Tests requiring running Redis or dated python-cache.
3180 #~(list "--deselect=tests/test_init.py::test_init_nullcache[MemcachedCache]"
3181 "--deselect=tests/test_init.py::test_init_nullcache[RedisCache]"
3182 "--deselect=tests/test_init.py::test_init_nullcache[RedisSentinelCache]"
3183 "--deselect=tests/test_init.py::test_init_nullcache[SASLMemcachedCache]"
3184 "--deselect=tests/test_init.py::test_init_nullcache[SpreadSASLMemcachedCache]"
3185 "-k" "not test_client_override_reflected_on_cachelib_methods")))
3186 (native-inputs
3187 (list python-pytest
3188 python-pytest-asyncio
3189 python-pytest-xprocess
3190 python-setuptools))
3191 (propagated-inputs
3192 (list python-cachelib
3193 python-flask))
3194 (home-page "https://github.com/pallets-eco/flask-caching")
3195 (synopsis "Caching extension for Flask")
3196 (description
3197 "This package provides a caching support to Flask applications, it's a
3198fort ok https://github.com/thadeusb/flask-cache.")
3199 (license license:bsd-3)))
3200
3201(define-public python-flask-paginate
3202 (package
3203 (name "python-flask-paginate")
3204 (version "2024.4.12")
3205 (source
3206 (origin
3207 (method git-fetch)
3208 (uri (git-reference
3209 (url "https://github.com/lixxu/flask-paginate")
3210 (commit (string-append "v" version))))
3211 (file-name (git-file-name name version))
3212 (sha256
3213 (base32 "1q4ajwk0pzc6934g07gdryjcwi6rd9iqcwv5g5s718dfx2bj1831"))))
3214 (arguments
3215 (list #:test-backend #~'custom
3216 #:test-flags #~(list "tests/tests.py")))
3217 (build-system pyproject-build-system)
3218 (native-inputs
3219 (list python-pytest
3220 python-setuptools))
3221 (propagated-inputs
3222 (list python-flask))
3223 (home-page "https://github.com/lixxu/flask-paginate")
3224 (synopsis "Simple paginate support for Flask")
3225 (description
3226 "Flask-paginate is a simple pagination extension for Flask which is
3227inspired by Ruby's will_paginate library. It supports several CSS frameworks.")
3228 (license license:bsd-3)))
3229
3230(define-public python-flask-limiter
3231 (package
3232 (name "python-flask-limiter")
3233 (version "4.1.1")
3234 (source
3235 (origin
3236 (method git-fetch)
3237 (uri (git-reference
3238 (url "https://github.com/alisaifee/flask-limiter")
3239 (commit version)))
3240 (file-name (git-file-name name version))
3241 (sha256
3242 (base32 "18n12iayzw6qqys26824j5lfbphfcammpmyrvys1k0rn4xcbifln"))))
3243 (build-system pyproject-build-system)
3244 (arguments
3245 (list
3246 ;; tests: 155 passed, 620 deselected
3247 #:test-flags
3248 #~(list "-k" (simple-format #f "not (~a)"
3249 (string-join
3250 (append
3251 ;; The test suite spawns storages in Docker.
3252 '("memcache" "reset_unsupported")
3253 '("mongo")
3254 '("redis" "clear_limits"
3255 "constructor_arguments_over_config"
3256 "custom_key_prefix" "fallback_to_memory"))
3257 " or ")))
3258 #:phases
3259 #~(modify-phases %standard-phases
3260 (add-before 'check 'adjust-tests
3261 (lambda _
3262 (substitute* "pytest.ini"
3263 ((".*--cov=.*") ""))
3264 (substitute* (find-files "tests" "\\.py$")
3265 (("import pymemcache.*") "")
3266 (("import pymongo.*") "")
3267 (("import redis.*") "")))))))
3268 (native-inputs (list python-flask-restful
3269 python-hatch-vcs
3270 python-hatchling
3271 python-hiro
3272 python-pytest
3273 python-pytest-check
3274 python-pytest-mock))
3275 (propagated-inputs (list python-flask
3276 python-limits
3277 python-ordered-set
3278 python-rich))
3279 (home-page "https://flask-limiter.readthedocs.org/")
3280 (synopsis "Rate limiting for Flask applications")
3281 (description
3282 "Flask-Limiter adds rate limiting to Flask applications.
3283Rate limits can be configured at different levels such as:
3284
3285@itemize
3286@item Application wide global limits per user
3287@item Default limits per route
3288@item By blueprints
3289@item By class-based views
3290@item By individual routes
3291@end itemize")
3292 (license license:expat)))
3293
3294(define-public python-gdown
3295 (package
3296 (name "python-gdown")
3297 (version "5.2.0")
3298 (source
3299 (origin
3300 (method url-fetch)
3301 (uri (pypi-uri "gdown" version))
3302 (sha256
3303 (base32 "11y7xx6zjipx15a5626lhiwmwb2jxp4mdcwqrnij0mfqc981ci91"))))
3304 (build-system pyproject-build-system)
3305 (arguments (list #:tests? #f)) ;network access is required
3306 (native-inputs
3307 (list python-hatch-fancy-pypi-readme
3308 python-hatch-vcs
3309 python-hatchling))
3310 (propagated-inputs
3311 (list python-beautifulsoup4
3312 python-filelock
3313 python-requests
3314 python-tqdm))
3315 (home-page "https://github.com/wkentaro/gdown")
3316 (synopsis "Google Drive Public File/Folder Downloader")
3317 (description
3318 "This package implements a functionality to download large files
3319recursively from Google Drive with option to filter them by file
3320formats (PDF/XML/CSV).")
3321 (license license:expat)))
3322
3323(define-public python-globus-sdk
3324 (package
3325 (name "python-globus-sdk")
3326 (version "4.4.0")
3327 (source
3328 (origin
3329 (method git-fetch)
3330 (uri (git-reference
3331 (url "https://github.com/globus/globus-sdk-python")
3332 (commit version)))
3333 (file-name (git-file-name name version))
3334 (sha256
3335 (base32 "1d0zw9dkpdhsf9zdg3nk6b55gqwzc3v2rj76nj7999hjmq8350vh"))))
3336 (build-system pyproject-build-system)
3337 (arguments
3338 (list
3339 #:phases
3340 #~(modify-phases %standard-phases
3341 (add-before 'check 'pre-check
3342 (lambda _ (setenv "HOME" "/tmp"))))))
3343 (native-inputs
3344 (list python-flaky
3345 python-pytest
3346 python-pytest-randomly
3347 python-responses
3348 python-setuptools))
3349 (propagated-inputs
3350 (list python-cryptography
3351 python-importlib-resources
3352 python-pyjwt
3353 python-requests))
3354 (home-page "https://github.com/globus/globus-sdk-python")
3355 (synopsis "Globus SDK for Python")
3356 (description
3357 "This package provides a SDK for convenient Pythonic interface to
3358@url{https://www.globus.org/, Globus} APIs.")
3359 (license license:asl2.0)))
3360
3361(define-public python-guardpost
3362 (package
3363 (name "python-guardpost")
3364 (version "1.0.4")
3365 (source
3366 (origin
3367 (method git-fetch)
3368 (uri (git-reference
3369 (url "https://github.com/Neoteroi/guardpost")
3370 (commit (string-append "v" version))))
3371 (file-name (git-file-name name version))
3372 (sha256
3373 (base32 "1xsakqn36g2h1s5rnbaf1lasx1jn4skqhmb8kdl1k4pgxp5sczyy"))))
3374 (build-system pyproject-build-system)
3375 (arguments
3376 (list
3377 ;; Possible timing issue, see:
3378 ;; <https://github.com/Neoteroi/GuardPost/issues/18>.
3379 #:test-flags '(list "--ignore=tests/test_jwts.py")))
3380 (native-inputs
3381 (list python-flask
3382 python-hatchling
3383 python-pytest
3384 python-pytest-asyncio))
3385 (propagated-inputs
3386 (list python-rodi
3387 ;; [optional]
3388 python-cryptography
3389 python-essentials
3390 python-pyjwt))
3391 (home-page "https://github.com/Neoteroi/GuardPost/")
3392 (synopsis
3393 "Authentication and authorization framework for Python applications")
3394 (description
3395 "GuardPost is a framework to handle authentication and
3396authorization in asynchronous Python applications.
3397
3398Its features include
3399
3400@itemize
3401@item Strategy to implement authentication.
3402@item Strategy to implement authorization.
3403@item Support for dependency injection
3404@item Built-in support for JSON Web Tokens (JWTs) authentication.
3405@end itemize")
3406 (license license:expat)))
3407
3408(define-public python-habanero
3409 (package
3410 (name "python-habanero")
3411 (version "2.3.0")
3412 (source
3413 (origin
3414 (method git-fetch)
3415 (uri (git-reference
3416 (url "https://github.com/sckott/habanero")
3417 (commit (string-append "v" version))))
3418 (file-name (git-file-name name version))
3419 (sha256
3420 (base32 "1a842izcc8l4wb8004v92zsq1h4yc7qc2wi9am6x0f7idlx993sw"))))
3421 (build-system pyproject-build-system)
3422 (arguments
3423 ;; Run only a small portion of unit tests without network access
3424 ;; requirement.
3425 (list #:test-flags #~(list "test/test-filters.py")))
3426 (native-inputs
3427 (list python-hatchling
3428 python-pytest))
3429 (propagated-inputs
3430 (list python-httpx
3431 python-packaging
3432 python-tqdm
3433 python-urllib3))
3434 (home-page "https://github.com/sckott/habanero")
3435 (synopsis "Low Level Client for Crossref Search API")
3436 (description
3437 "Low Level Client for
3438@url{https://api.crossref.org/swagger-ui/index.html, Crossref Search API}.")
3439 (license license:expat)))
3440
3441(define-public python-hookdns
3442 (package
3443 (name "python-hookdns")
3444 (version "2.0.0")
3445 (source
3446 (origin
3447 (method url-fetch)
3448 (uri (pypi-uri "hookdns" version))
3449 (sha256
3450 (base32 "087x12dy6slhyqwqblby2fpjdcy61yk3lqp3fplami0rmbn02fb7"))))
3451 (build-system pyproject-build-system)
3452 (arguments
3453 (list
3454 #:test-flags
3455 #~(list "-k" (string-join
3456 ;; Tests requiring networking.
3457 (list
3458 "not test_patch_contextmanager_with_another_hostname"
3459 "test_patch_contextmanager_with_another_hostname_ipv6"
3460 "test_patch_contextmanager_with_ipv4"
3461 "test_patch_contextmanager_with_name"
3462 "test_patch_contextmanager_with_public_fqdn_and_"
3463 "test_patch_contextmanager_with_unknown_hostname"
3464 "test_patch_decorator_with_another_hostname"
3465 "test_patch_decorator_with_another_hostname_ipv6"
3466 "test_patch_decorator_with_ipv4"
3467 "test_patch_decorator_with_name"
3468 "test_patch_decorator_with_public_fqdn_and_a_name_for_"
3469 "test_patch_decorator_with_unknown_hostname"
3470 "test_real_getaddrinfo_with_name_ipv6"
3471 "test_real_getaddrinfo_with_public_fqdn_ipv4"
3472 "test_real_getaddrinfo_with_public_fqdn_ipv6"
3473 "test_real_gethostbyname_ex_with_public_fqdn"
3474 "test_real_gethostbyname_with_public_fqdn"
3475 "test_real_requests_ip"
3476 "test_real_requests_name"
3477 "test_real_requests_with_public_fqdn"
3478 "test_reentrant")
3479 " and not "))))
3480 (native-inputs
3481 (list python-pytest
3482 python-requests
3483 python-setuptools
3484 python-wheel))
3485 (home-page "https://github.com/cle-b/hookdns")
3486 (synopsis "DNS resolution customization library")
3487 (description
3488 "HookDNS implements functionality that allows for modifying name
3489resolution in a Python script without any changes to the hosts file or the use
3490of a fake DNS resolver.")
3491 (license license:asl2.0)))
3492
3493(define-public python-httpcore2
3494 (package
3495 (name "python-httpcore2")
3496 (version "2.4.0")
3497 (source
3498 (origin
3499 (method git-fetch)
3500 (uri (git-reference
3501 (url "https://github.com/pydantic/httpx2")
3502 (commit (string-append "v" version))))
3503 (file-name (git-file-name name version))
3504 (sha256
3505 (base32 "05mql79icxigldzw01hs77jpgihvzjahvniwncb7ji2rqzhjr42g"))))
3506 (build-system pyproject-build-system)
3507 (arguments
3508 (list
3509 #:phases
3510 #~(modify-phases %standard-phases
3511 (add-after 'unpack 'preparation
3512 (lambda _
3513 (chdir "src/httpcore2")
3514 (copy-recursively "../../tests/httpcore2" "tests")
3515 (substitute* (find-files "tests" "\\.py$")
3516 (("tests\\.httpcore2") "tests")
3517 (("tests/httpcore2") "tests"))))
3518 (add-before 'build 'set-version
3519 (lambda _
3520 (substitute* "pyproject.toml"
3521 ((".*uv-dynamic-versioning>.*") "")
3522 (("source.*uv-dynamic-versioning.*") "source = 'vcs'"))
3523 (substitute* "httpcore2/__init__.py"
3524 ((".*= version\\(.*")
3525 (format #f "__version__ = ~s~%" #$version))))))))
3526 (native-inputs
3527 (list python-hatch-fancy-pypi-readme
3528 python-hatch-vcs
3529 python-hatchling
3530 python-pytest
3531 python-pytest-httpbin
3532 python-pytest-trio))
3533 (propagated-inputs
3534 (list python-h11
3535 python-truststore
3536 ;; [optional]
3537 python-anyio
3538 python-h2
3539 python-socksio
3540 python-trio))
3541 (home-page "https://github.com/pydantic/httpx2")
3542 (synopsis "Minimal low-level HTTP client")
3543 (description
3544 "The HTTP Core package provides a minimal low-level HTTP client, which
3545does one thing only. Sending HTTP requests.
3546
3547Some things HTTP Core does do:
3548@itemize
3549@item Sending HTTP requests.
3550@item Thread-safe / task-safe connection pooling.
3551@item HTTP(S) proxy & SOCKS proxy support.
3552@item Supports HTTP/1.1 and HTTP/2.
3553@item Provides both sync and async interfaces.
3554@item Async backend support for @code{asyncio} and @code{trio}.
3555@end itemize")
3556 (license license:bsd-3)))
3557
3558(define-public python-httpretty
3559 (package
3560 (name "python-httpretty")
3561 (version "1.1.4")
3562 (source
3563 (origin
3564 (method url-fetch)
3565 (uri (pypi-uri "httpretty" version))
3566 (sha256
3567 (base32 "0s1vjdaf3pk2xd0hvi5f7p3jm2rgwpbc734jdp9r50m1smfhxpi0"))))
3568 (build-system pyproject-build-system)
3569 (arguments
3570 (list
3571 #:test-flags
3572 ;; Only run Unit tests.
3573 #~(list "--ignore=tests/bugfixes"
3574 "--ignore=tests/functional"
3575 "--ignore=tests/pyopenssl"
3576 "-k" (string-join
3577 ;; Tests pattern failing with one of these errors:
3578 ;; AttributeError: '(str|bool|bytes|list|tuple)' object
3579 ;; has no attribute 'should'
3580 ;; AttributeError: 'function' object has no attribute
3581 ;; 'when'
3582 ;; AttributeError: 'AssertionBuilder' object has no
3583 ;; attribute 'should_not'
3584 (list "not fake_socket_passes_through"
3585 "fakesock_socket"
3586 "request_parse_body_when"
3587 "test_Entry_class_normalizes_headers"
3588 "test_has_request"
3589 "test_httpretty_should_raise_proper"
3590 "test_parse_request_line_connect"
3591 "test_request_parse_querystring"
3592 "test_request_string_representation"
3593 "test_request_stubs_internals")
3594 " and not "))))
3595 (native-inputs
3596 (list nss-certs-for-test
3597 python-freezegun
3598 python-mock
3599 python-pytest
3600 python-setuptools
3601 python-sure
3602 python-wheel))
3603 (home-page "https://httpretty.readthedocs.io")
3604 (synopsis "HTTP client mock for Python")
3605 (description
3606 "@code{httpretty} is a helper for faking web requests,inspired by Ruby's
3607@code{fakeweb}.")
3608 (license license:expat)))
3609
3610(define-public python-httpx2
3611 (package
3612 (name "python-httpx2")
3613 (version "2.4.0")
3614 (source
3615 (origin
3616 (method git-fetch)
3617 (uri (git-reference
3618 (url "https://github.com/pydantic/httpx2")
3619 (commit (string-append "v" version))))
3620 (file-name (git-file-name name version))
3621 (sha256
3622 (base32 "05mql79icxigldzw01hs77jpgihvzjahvniwncb7ji2rqzhjr42g"))))
3623 (arguments
3624 (list
3625 ;; tests: 1227 passed, 200 deselected
3626 #:test-flags
3627 ;; Networking tests.
3628 #~(list "-k" (string-join
3629 (list "not test_async_proxy_close[asyncio]"
3630 "test_async_proxy_close[trio]"
3631 "test_auth"
3632 "test_binary"
3633 "test_client_decode_text_using_autodetect"
3634 "test_client_decode_text_using_explicit_encoding"
3635 "test_follow_redirects"
3636 "test_get"
3637 "test_idna_url[http_with_custom_port]"
3638 "test_idna_url[http_with_port]"
3639 "test_idna_url[https_with_custom_port]"
3640 "test_idna_url[https_with_port]"
3641 "test_idna_url[https_without_port]"
3642 "test_idna_url[idna_label_after_ascii_label]"
3643 "test_idna_url[unicode_tr46_compat]"
3644 "test_json"
3645 "test_post"
3646 "test_redirects"
3647 "test_response_decode_text_using_autodetect"
3648 "test_sync_proxy_close"
3649 "test_url_malformed_idna_label_after_ascii_label"
3650 "test_url_mixed_valid_and_malformed_idna_labels"
3651 "test_verbose")
3652 " and not "))
3653 #:phases
3654 #~(modify-phases %standard-phases
3655 (add-after 'unpack 'preparation
3656 (lambda _
3657 (chdir "src/httpx2")
3658 (copy-recursively "../../tests/httpx2" "tests")
3659 (substitute* (find-files "tests" "\\.py$")
3660 (("tests\\.httpx2") "tests")
3661 (("tests/httpx2") "tests"))))
3662 (add-before 'build 'set-version
3663 (lambda _
3664 (substitute* "pyproject.toml"
3665 (("\"uv-dynamic-versioning>=0\\.8\\.0\"") "")
3666 (("source.*uv-dynamic-versioning.*") "source = 'vcs'")
3667 (("\\.uv-dynamic-versioning") ".vcs")))))))
3668 (build-system pyproject-build-system)
3669 (native-inputs
3670 (list python-chardet
3671 python-hatch-fancy-pypi-readme
3672 python-hatch-vcs
3673 python-hatchling
3674 python-pytest
3675 python-trustme
3676 python-uvicorn))
3677 (propagated-inputs
3678 (list python-anyio
3679 python-httpcore2
3680 python-idna
3681 python-truststore
3682 python-typing-extensions ;Python version < 3.13
3683 ;; [optional]
3684 python-brotli
3685 python-click
3686 python-h2
3687 python-pygments
3688 python-rich
3689 python-socksio
3690 python-zstandard))
3691 (home-page "https://github.com/pydantic/httpx2")
3692 (synopsis "The next generation HTTP client")
3693 (description
3694 "HTTPX2 is a fully featured HTTP client library for Python. It includes
3695an integrated command line client, has support for both HTTP/1.1 and HTTP/2,
3696and provides both sync and async APIs.")
3697 (license license:bsd-3)))
3698
3699(define-public python-jiter
3700 (package
3701 (name "python-jiter")
3702 (version "0.15.0")
3703 (source
3704 (origin
3705 (method git-fetch)
3706 (uri (git-reference
3707 (url "https://github.com/pydantic/jiter/")
3708 (commit (string-append "v" version))))
3709 (file-name (git-file-name name version))
3710 (sha256
3711 (base32 "1z2ljacsc64yykkxvjnq6rq4z56xwr8jhcw02ckv6b85kc66x63p"))))
3712 (build-system pyproject-build-system)
3713 (arguments
3714 (list
3715 #:imported-modules (append %cargo-build-system-modules
3716 %pyproject-build-system-modules)
3717 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
3718 (guix build pyproject-build-system)
3719 (guix build utils))
3720 #:phases
3721 #~(modify-phases %standard-phases
3722 (add-after 'unpack 'prepare-cargo-build-system
3723 (lambda args
3724 (for-each (lambda (phase)
3725 (format #t "Running cargo phase: ~a~%" phase)
3726 (apply (assoc-ref cargo:%standard-phases phase)
3727 #:cargo-target #$(cargo-triplet)
3728 args))
3729 '(prepare-rust-crates
3730 unpack-rust-crates
3731 configure
3732 check-for-pregenerated-files
3733 patch-cargo-checksums))))
3734 (add-after 'prepare-cargo-build-system 'chdir
3735 (lambda _
3736 (chdir "crates/jiter-python"))))))
3737 (native-inputs
3738 (append (list maturin
3739 python-dirty-equals
3740 python-pytest
3741 rust
3742 `(,rust "cargo"))
3743 (or (and=> (%current-target-system)
3744 (compose list make-rust-sysroot))
3745 '())))
3746 (inputs (cargo-inputs 'jiter))
3747 (home-page "https://github.com/pydantic/jiter/")
3748 (synopsis "Iterable JSON parser")
3749 (description
3750 "This package provides a fast Python iterable JSON parser, backed by Rust
3751libraries.")
3752 (license license:bsd-3)))
3753
3754(define-public python-justhtml
3755 (package
3756 (name "python-justhtml")
3757 (version "1.13.0")
3758 (source
3759 (origin
3760 (method git-fetch)
3761 (uri (git-reference
3762 (url "https://github.com/emilstenstrom/justhtml")
3763 (commit (string-append "v" version))))
3764 (file-name (git-file-name name version))
3765 (sha256
3766 (base32 "1hy5w3lr08sj3pivs46nnlfsvrd9ynmicxcrjk4sxbpg7411lyj5"))))
3767 (build-system pyproject-build-system)
3768 (native-inputs
3769 (list python-hatchling))
3770 (home-page "https://github.com/emilstenstrom/justhtml")
3771 (synopsis "Pure Python HTML5 parser")
3772 (description
3773 "JustHTML is a pure Python HTML5 parser. It has a simple API and does
3774not require C extensions or system dependencies.")
3775 (license license:expat)))
3776
3777(define-public python-hf-xet
3778 (package
3779 (name "python-hf-xet")
3780 (version "1.5.1")
3781 (source
3782 (origin
3783 (method git-fetch)
3784 (uri (git-reference
3785 (url "https://github.com/huggingface/xet-core")
3786 (commit (string-append "v" version))))
3787 (file-name (git-file-name name version))
3788 (sha256
3789 (base32 "0bczy0a8g7fnscpz2plq2pq0b8vapx9q5sny13rs2fa04ypq992f"))
3790 (modules '((guix build utils)))
3791 (snippet #~(for-each delete-file
3792 (find-files "." "Cargo\\.lock$")))))
3793 (build-system pyproject-build-system)
3794 (arguments
3795 (list
3796 #:imported-modules (append %cargo-build-system-modules
3797 %pyproject-build-system-modules)
3798 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
3799 (guix build pyproject-build-system)
3800 (guix build utils))
3801 #:phases
3802 #~(modify-phases %standard-phases
3803 (add-after 'unpack 'prepare-cargo-build-system
3804 (lambda args
3805 (for-each (lambda (phase)
3806 (format #t "Running cargo phase: ~a~%" phase)
3807 (apply (assoc-ref cargo:%standard-phases phase)
3808 #:cargo-target #$(cargo-triplet)
3809 args))
3810 '(prepare-rust-crates
3811 unpack-rust-crates
3812 configure
3813 check-for-pregenerated-files
3814 patch-cargo-checksums))))
3815 (add-after 'prepare-cargo-build-system 'chdir
3816 (lambda _
3817 (chdir "hf_xet"))))))
3818 (native-inputs
3819 (append (list maturin
3820 python-pytest
3821 rust
3822 `(,rust "cargo"))
3823 (or (and=> (%current-target-system)
3824 (compose list make-rust-sysroot))
3825 '())))
3826 (inputs (cargo-inputs 'hf_xet))
3827 (home-page "https://github.com/huggingface/xet-core")
3828 (synopsis "Transfer large files with the Hugging Face Hub")
3829 (description
3830 "This package enables @code{python-huggingface-hub} to utilize xet
3831storage for uploading and downloading to HF Hub. Xet storage provides
3832chunk-based deduplication, efficient storage/retrieval with local disk
3833caching, and backwards compatibility with Git LFS. This library is not meant
3834to be used directly, and is instead intended to be used from
3835@code{python-huggingface-hub}.")
3836 (license license:asl2.0)))
3837
3838(define-public python-huggingface-hub
3839 (package
3840 (name "python-huggingface-hub")
3841 (version "0.36.2")
3842 (source
3843 (origin
3844 (method git-fetch)
3845 (uri (git-reference
3846 (url "https://github.com/huggingface/huggingface_hub")
3847 (commit (string-append "v" version))))
3848 (file-name (git-file-name name version))
3849 (sha256
3850 (base32 "0hgdkfp7472sp0fjm5mwsx2rdlbr2ms8mzfzs0zr501gdwr7jjki"))))
3851 (build-system pyproject-build-system)
3852 (arguments
3853 (list
3854 #:test-flags
3855 ;; We don't have sentence_transformers...
3856 '(list "--ignore=contrib/sentence_transformers/test_sentence_transformers.py"
3857 ;; ...nor do we have InquirerPy...
3858 "--ignore=tests/test_command_delete_cache.py"
3859 ;; ...or timm...
3860 "--ignore=contrib/timm/test_timm.py"
3861 ;; ...or spacy_huggingface_hub
3862 "--ignore=contrib/spacy/test_spacy.py"
3863 ;; These all require internet access
3864 "--ignore=tests/test_cache_no_symlinks.py"
3865 "--ignore=tests/test_cache_layout.py"
3866 "--ignore=tests/test_commit_scheduler.py"
3867 "--ignore=tests/test_file_download.py"
3868 "--ignore=tests/test_hf_api.py"
3869 "--ignore=tests/test_hf_file_system.py"
3870 "--ignore=tests/test_inference_api.py"
3871 "--ignore=tests/test_inference_async_client.py"
3872 "--ignore=tests/test_inference_client.py"
3873 "--ignore=tests/test_inference_text_generation.py"
3874 "--ignore=tests/test_login_utils.py"
3875 "--ignore=tests/test_offline_utils.py"
3876 "--ignore=tests/test_repocard.py"
3877 "--ignore=tests/test_repository.py"
3878 "--ignore=tests/test_snapshot_download.py"
3879 "--ignore=tests/test_utils_cache.py"
3880 "--ignore=tests/test_utils_git_credentials.py"
3881 "--ignore=tests/test_utils_http.py"
3882 "--ignore=tests/test_utils_pagination.py"
3883 "--ignore=tests/test_webhooks_server.py"
3884 "-k" (string-append
3885 "not test_push_to_hub"
3886 " and not test_from_pretrained_model_id_only"
3887 " and not test_from_pretrained_model_id_and_revision"
3888 ;; These all require internet access
3889 " and not test_auth"
3890 " and not test_oauth"
3891 " and not test_utils_sha"
3892 " and not test_inference_providers"
3893 " and not test_xet"))
3894 #:phases
3895 '(modify-phases %standard-phases
3896 (add-before 'check 'pre-check
3897 ;; Some tests need to write to HOME.
3898 (lambda _ (setenv "HOME" "/tmp"))))))
3899 (propagated-inputs
3900 (list python-filelock
3901 python-fsspec
3902 python-hf-xet
3903 python-packaging
3904 python-pyyaml
3905 python-requests
3906 python-tqdm
3907 python-typing-extensions))
3908 (native-inputs
3909 (list python-aiohttp
3910 python-fastapi
3911 python-jedi
3912 python-jinja2
3913 python-numpy
3914 python-pillow
3915 python-pydantic
3916 python-pytest
3917 python-pytest-asyncio
3918 python-pytest-env
3919 python-pytest-mock
3920 python-pytest-rerunfailures
3921 python-pytest-vcr
3922 python-pytest-xdist
3923 python-setuptools
3924 python-types-requests
3925 python-types-toml
3926 python-types-urllib3
3927 python-typing-extensions
3928 python-urllib3))
3929 (home-page "https://huggingface.co/docs/huggingface_hub/")
3930 (synopsis "Client library for accessing the huggingface.co hub")
3931 (description
3932 "This package provides a client library to download and publish models,
3933datasets and other repos on the @url{huggingface.co} hub.")
3934 (license license:asl2.0)))
3935
3936(define-public python-kubernetes
3937 (package
3938 (name "python-kubernetes")
3939 (version "35.0.0")
3940 (source
3941 (origin
3942 (method url-fetch)
3943 (uri (pypi-uri "kubernetes" version))
3944 (sha256
3945 (base32 "1vh9bzq175fzv9av3v37lcfh37yzss2d9vxrb0a84fa2ji2d601x"))))
3946 (build-system pyproject-build-system)
3947 (arguments
3948 (list
3949 #:test-flags
3950 #~(list
3951 ;; The following tests expect a local running Kubernetes cluster.
3952 "--ignore=kubernetes/e2e_test"
3953 "--ignore=kubernetes/dynamic")))
3954 (native-inputs
3955 (list python-pytest
3956 python-setuptools))
3957 (propagated-inputs
3958 (list python-certifi
3959 python-dateutil
3960 python-durationpy
3961 python-google-auth
3962 python-pyyaml
3963 python-requests
3964 python-requests-oauthlib
3965 python-six ;XXX: hard dependency
3966 python-urllib3
3967 python-websocket-client))
3968 (home-page "https://github.com/kubernetes-client/python")
3969 (synopsis "Python client for Kubernetes")
3970 (description
3971 "This package provides an official Python client library for
3972@url{http://kubernetes.io, Kubernetes}.")
3973 (license license:asl2.0)))
3974
3975(define-public python-lazr-restfulclient
3976 (package
3977 (name "python-lazr-restfulclient")
3978 (version "0.14.6")
3979 (source
3980 (origin
3981 (method url-fetch)
3982 (uri (pypi-uri "lazr.restfulclient" version))
3983 (sha256
3984 (base32 "1nzzmp9aaaxh25jy3wm71cpf9dfw56s4g303c8a3nij874fjmwa3"))))
3985 (build-system pyproject-build-system)
3986 (arguments
3987 (list
3988 #:phases
3989 #~(modify-phases %standard-phases
3990 ;; Disable part of the test suite to avoid the lazr.authentication
3991 ;; requirement, which requires 'oauth', a Python 2 only library.
3992 (add-after 'unpack 'remove-some-checks
3993 (lambda _
3994 (with-directory-excursion "src/lazr/restfulclient/tests"
3995 (for-each delete-file '("test_oauth.py" "test_docs.py")))
3996 (substitute* "setup.py"
3997 (("\"(oauth|lazr\\.(authentication|restful>=0\\.11\\.0))\",")
3998 ""))))
3999 (replace 'check
4000 (lambda* (#:key tests? #:allow-other-keys)
4001 (if tests?
4002 (invoke "zope-testrunner" "--test-path=src")
4003 (format #t "test suite not run~%")))))))
4004 (native-inputs
4005 (list python-setuptools
4006 python-testtools
4007 python-wheel
4008 python-wsgi-intercept
4009 python-zope-testrunner))
4010 (propagated-inputs
4011 (list python-distro
4012 python-httplib2
4013 python-oauthlib
4014 python-pyparsing
4015 python-setuptools
4016 python-six
4017 python-wadllib))
4018 (home-page "https://launchpad.net/lazr.restfulclient")
4019 (synopsis "Web client Python library extending wadlib")
4020 (description "This package provides a programmable client library that
4021adds functionality on top of @code{wadlib}.")
4022 (license license:lgpl3+)))
4023
4024(define-public python-launchpadlib
4025 (package
4026 (name "python-launchpadlib")
4027 (version "2.1.0")
4028 (source
4029 (origin
4030 (method url-fetch)
4031 (uri (pypi-uri "launchpadlib" version))
4032 (sha256
4033 (base32 "0br4j76l83lvyrhm8psml9cqmdsn65rx48w1q1a0s1bmpf85ihml"))))
4034 (build-system pyproject-build-system)
4035 (arguments
4036 (list #:phases #~(modify-phases %standard-phases
4037 (add-before 'check 'set-home
4038 (lambda _
4039 ;; Tests require a writable home.
4040 (setenv "HOME" "/tmp"))))))
4041 (propagated-inputs
4042 (list python-httplib2 python-lazr-restfulclient python-lazr-uri))
4043 (native-inputs (list python-pytest python-testresources python-wadllib
4044 python-setuptools python-wheel))
4045 (home-page "https://documentation.ubuntu.com/launchpad")
4046 (synopsis "Python client library for Launchpad's web service")
4047 (description "@code{launchpadlib} is a Python library that allows
4048scripting Launchpad via its the web service API.")
4049 (license license:lgpl3+)))
4050
4051(define-public python-lazr-uri
4052 (package
4053 (name "python-lazr-uri")
4054 (version "1.0.7")
4055 (source
4056 (origin
4057 (method url-fetch)
4058 (uri (pypi-uri "lazr_uri" version))
4059 (sha256
4060 (base32 "1vm34pw8fksc6m8fnqwh215sqdlw546cxcdga93i2l746grzc37d"))))
4061 (build-system pyproject-build-system)
4062 (arguments
4063 (list
4064 #:phases
4065 #~(modify-phases %standard-phases
4066 (replace 'check
4067 (lambda* (#:key tests? #:allow-other-keys)
4068 (if tests?
4069 (invoke "zope-testrunner" "--test-path=src")
4070 (format #t "test suite not run~%")))))))
4071 (native-inputs (list python-setuptools python-zope-testrunner))
4072 (home-page "https://launchpad.net/lazr.uri")
4073 (synopsis "Python URI manipulation library")
4074 (description "This Python package provides a self-contained, easily
4075reusable library for parsing, manipulating, and generating URIs.")
4076 (license license:lgpl3)))
4077
4078(define-public python-ldaptor
4079 (package
4080 (name "python-ldaptor")
4081 (version "21.2.0")
4082 (source
4083 (origin
4084 (method url-fetch)
4085 (uri (pypi-uri "ldaptor" version))
4086 (sha256
4087 (base32 "0n53czn5pyh8923y282spdb7xc8c9rhn0n43bczanjjx6wcynjcc"))))
4088 (build-system pyproject-build-system)
4089 (arguments
4090 (list
4091 #:test-flags
4092 #~(list "-m" "twisted.trial"
4093 (string-append "-j" (number->string (parallel-job-count)))
4094 "ldaptor")
4095 #:phases
4096 #~(modify-phases %standard-phases
4097 (add-after 'unpack 'python-3.12-patch
4098 (lambda _
4099 (substitute* "ldaptor/config.py"
4100 (("SafeConfigParser")
4101 "ConfigParser"))))
4102 (add-before 'check 'disable-failing-tests
4103 (lambda _
4104 ;; Testing with Twisted 22.4 results in infinite loop creating
4105 ;; temporary config files, see
4106 ;; <https://github.com/twisted/ldaptor/issues/238>.
4107 (delete-file "ldaptor/test/test_config.py")))
4108 (replace 'check
4109 (lambda* (#:key tests? test-flags #:allow-other-keys)
4110 (when tests?
4111 (apply invoke "python" test-flags)))))))
4112 (native-inputs
4113 (list python-setuptools
4114 python-wheel))
4115 (propagated-inputs
4116 (list python-passlib
4117 python-pyopenssl
4118 python-service-identity ; to pass sanity check, for Twisted[tls]
4119 python-pyparsing
4120 python-twisted
4121 python-zope-interface))
4122 (home-page "https://github.com/twisted/ldaptor")
4123 (synopsis "Pure-Python Twisted library for LDAP")
4124 (description
4125 "This package provides a Python Twisted library for LDAP, which key
4126feaatures are:
4127@itemize
4128@item LDAP client logic
4129@item separately-accessible LDAP and BER protocol message generation/parsing
4130@item ASCII-format LDAP filter generation and parsing
4131@item LDIF format data generation
4132@item Samba password changing logic
4133@end itemize")
4134 (license license:expat)))
4135
4136(define-public python-legacy-cgi
4137 (package
4138 (name "python-legacy-cgi")
4139 (version "2.6.1")
4140 (source
4141 (origin
4142 (method url-fetch)
4143 (uri (pypi-uri "legacy_cgi" version))
4144 (sha256
4145 (base32 "0hksizyq7awmwh3337zy0rmj47x6b5igzam6ffj74gbwfjfakbgj"))))
4146 (build-system pyproject-build-system)
4147 (native-inputs (list python-poetry-core python-pytest))
4148 (home-page "https://github.com/jackrosenthal/legacy-cgi")
4149 (synopsis "Fork of the legacy standard library cgi and cgitb modules")
4150 (description
4151 "This is a fork of the standard library modules @code{cgi} and
4152@code{cgitb}. They are slated to be removed from the Python standard library
4153in Python 3.13 by PEP-594.")
4154 (license license:psfl)))
4155
4156(define-public python-librouteros
4157 (package
4158 (name "python-librouteros")
4159 (version "4.0.0")
4160 (source
4161 (origin
4162 (method git-fetch)
4163 (uri (git-reference
4164 (url "https://github.com/luqasz/librouteros")
4165 (commit version)))
4166 (file-name (git-file-name name version))
4167 (sha256
4168 (base32 "0in952b2idb5j8v6sxfm21gqbr5i5776w5ir0hdsxjrl2f29305v"))))
4169 (build-system pyproject-build-system)
4170 (arguments
4171 (list
4172 #:build-backend "hatchling.build"
4173 #:test-flags
4174 #~(list "tests/unit")))
4175 (native-inputs
4176 (list python-hatchling
4177 python-pytest
4178 python-pytest-asyncio
4179 python-stamina))
4180 (home-page "https://github.com/luqasz/librouteros")
4181 (synopsis "Python implementation of MikroTik RouterOS API")
4182 (description
4183 "This package implements MikroTik's @code{RouterOS} API.")
4184 (license license:gpl2+)))
4185
4186(define-public python-opentelemetry-api
4187 (package
4188 (name "python-opentelemetry-api")
4189 (version "1.37.0")
4190 (source
4191 (origin
4192 (method url-fetch)
4193 (uri (pypi-uri "opentelemetry_api" version))
4194 (sha256
4195 (base32 "19yr3hfwdc9sv8df4vydxcsxnpld3xi57siq4w8xanrm42qka1sl"))))
4196 (build-system pyproject-build-system)
4197 (propagated-inputs (list python-importlib-metadata
4198 python-typing-extensions))
4199 (native-inputs (list python-hatchling
4200 python-opentelemetry-test-utils-bootstrap))
4201 (home-page "https://opentelemetry.io/docs/languages/python/")
4202 (synopsis "OpenTelemetry Python API")
4203 (description "@code{OpenTelemetry} Python API.")
4204 (license license:asl2.0)))
4205
4206(define-public python-opentelemetry-api-bootstrap
4207 (hidden-package
4208 (package/inherit python-opentelemetry-api
4209 (name "python-opentelemetry-api-bootstrap")
4210 (arguments
4211 (list
4212 #:tests? #f))
4213 (native-inputs (list python-hatchling)))))
4214
4215(define-public python-opentelemetry-sdk
4216 (package
4217 (name "python-opentelemetry-sdk")
4218 (version "1.37.0")
4219 (source
4220 (origin
4221 (method url-fetch)
4222 (uri (pypi-uri "opentelemetry_sdk" version))
4223 (sha256
4224 (base32 "19fx8vf35kcss43i17zqngqhmglb36dnddasbdvfsgcm22f0i3nc"))))
4225 (build-system pyproject-build-system)
4226 (propagated-inputs (list python-opentelemetry-api
4227 python-opentelemetry-semantic-conventions
4228 python-typing-extensions))
4229 (native-inputs (list python-hatchling
4230 python-opentelemetry-test-utils-bootstrap
4231 python-pytest))
4232 (home-page "https://opentelemetry.io/docs/languages/python/")
4233 (synopsis "OpenTelemetry Python SDK")
4234 (description "@code{OpenTelemetry} Python SDK.")
4235 (license license:asl2.0)))
4236
4237(define-public python-opentelemetry-sdk-bootstrap
4238 (hidden-package
4239 (package/inherit python-opentelemetry-sdk
4240 (name "python-opentelemetry-sdk-bootstrap")
4241 (arguments (list #:tests? #f))
4242 (propagated-inputs (list python-opentelemetry-api-bootstrap
4243 python-opentelemetry-semantic-conventions-bootstrap))
4244 (native-inputs (list python-hatchling)))))
4245
4246(define-public python-opentelemetry-semantic-conventions
4247 (package
4248 (name "python-opentelemetry-semantic-conventions")
4249 (version "0.58b0")
4250 (source
4251 (origin
4252 (method url-fetch)
4253 (uri (pypi-uri "opentelemetry_semantic_conventions" version))
4254 (sha256
4255 (base32 "098czakcawikaspl46vy6vickw80mm2bnrspflrw8ya24r8nzm3b"))))
4256 (build-system pyproject-build-system)
4257 (propagated-inputs (list python-opentelemetry-api python-typing-extensions))
4258 (native-inputs (list python-hatchling))
4259 (home-page "https://opentelemetry.io/docs/languages/python/")
4260 (synopsis "OpenTelemetry Semantic Conventions")
4261 (description "@code{OpenTelemetry} Semantic Conventions.")
4262 (license license:asl2.0)))
4263
4264(define-public python-opentelemetry-semantic-conventions-bootstrap
4265 (hidden-package
4266 (package/inherit python-opentelemetry-semantic-conventions
4267 (name "python-opentelemetry-semantic-conventions-bootstrap")
4268 (arguments
4269 (list
4270 #:tests? #f))
4271 (propagated-inputs (list python-opentelemetry-api-bootstrap
4272 python-typing-extensions)))))
4273
4274(define-public python-opentelemetry-test-utils
4275 (package
4276 (name "python-opentelemetry-test-utils")
4277 (version "0.58b0")
4278 (source
4279 (origin
4280 (method url-fetch)
4281 (uri (pypi-uri "opentelemetry_test_utils" version))
4282 (sha256
4283 (base32 "0xjp04zjn7m79xsda9wp79rqyzy2c10347s967vp7xvmndwwa0ds"))))
4284 (build-system pyproject-build-system)
4285 (arguments (list #:tests? #f)) ; No tests in the wheel.
4286 (propagated-inputs
4287 (list python-asgiref
4288 python-opentelemetry-api
4289 python-opentelemetry-sdk))
4290 (native-inputs (list python-hatchling))
4291 (home-page "https://opentelemetry.io/docs/languages/python/")
4292 (synopsis "Test utilities for OpenTelemetry unit tests")
4293 (description "Test utilities for @code{OpenTelemetry} unit tests.")
4294 (license license:asl2.0)))
4295
4296(define-public python-opentelemetry-test-utils-bootstrap
4297 (hidden-package
4298 (package/inherit python-opentelemetry-test-utils
4299 (name "python-opentelemetry-test-utils-bootstrap")
4300 (propagated-inputs
4301 (list python-asgiref
4302 python-opentelemetry-api-bootstrap
4303 python-opentelemetry-sdk-bootstrap)))))
4304
4305(define-public python-pathy
4306 (package
4307 (name "python-pathy")
4308 (version "0.11.0")
4309 (source
4310 (origin
4311 (method url-fetch)
4312 (uri (pypi-uri "pathy" version))
4313 (sha256
4314 (base32 "0vbhcfg8g74g90bzmdgxr1jyvwhadvlr2w9wyvs6xxwb1dmhwgdv"))))
4315 (build-system pyproject-build-system)
4316 (native-inputs
4317 (list python-mock
4318 python-pytest
4319 python-setuptools))
4320 (propagated-inputs
4321 (list python-pathlib-abc-for-python-pathy
4322 python-smart-open-6
4323 python-typer))
4324 (home-page "https://github.com/justindujardin/pathy")
4325 (synopsis "Path interface for local and cloud bucket storage")
4326 (description "Pathy is a python package (with type annotations) for
4327working with Cloud Bucket storage providers using a @code{pathlib} interface.
4328It provides @code{pathlib.Path} subclasses for local and cloud bucket
4329storage.")
4330 (license license:asl2.0)))
4331
4332(define-public python-portend
4333 (package
4334 (name "python-portend")
4335 (version "3.2.1")
4336 (source
4337 (origin
4338 (method url-fetch)
4339 (uri (pypi-uri "portend" version))
4340 (sha256
4341 (base32 "12b4ikxyv32n33mvm4brp74igl1mvw825x01sjvvs54y3yml17da"))))
4342 (build-system pyproject-build-system)
4343 ;; Do not test pyproject.toml with python-pytest-checkdocs as it tries to
4344 ;; download dependencies.
4345 (arguments
4346 '(#:test-flags '("-k" "not project")))
4347 (native-inputs
4348 (list python-pytest
4349 python-setuptools
4350 python-setuptools-scm))
4351 (propagated-inputs
4352 (list python-tempora))
4353 (home-page "https://github.com/jaraco/portend")
4354 (synopsis "Monitor TCP ports for bound or unbound states")
4355 (description
4356 "@code{python-portend} can be used to monitor TCP ports for bound or
4357unbound states. For example, waiting for a port to be occupied or freed
4358within a set timeout. @code{python-portend} can also be used directly from
4359the command line.")
4360 (license license:expat)))
4361
4362(define-public python-prawcore
4363 (package
4364 (name "python-prawcore")
4365 (version "4.0.0")
4366 (source
4367 (origin
4368 (method git-fetch)
4369 (uri (git-reference
4370 (url "https://github.com/praw-dev/prawcore")
4371 (commit (string-append "v" version))))
4372 (file-name (git-file-name name version))
4373 (sha256
4374 (base32 "1kqqv1n9bibxfgagbyd8vl0yzrd4lr58xl59swz5v70w0kfap5fm"))))
4375 (build-system pyproject-build-system)
4376 (arguments
4377 (list
4378 ;; This test fails with a str rather than a bytes-like object.
4379 #:test-flags #~(list "-k" "not test_request__service_unavailable")))
4380 (native-inputs
4381 (list nss-certs-for-test
4382 python-betamax
4383 python-betamax-matchers
4384 python-betamax-serializers
4385 python-hatchling
4386 python-mock
4387 python-pytest
4388 python-testfixtures
4389 python-vcrpy))
4390 (propagated-inputs
4391 (list python-requests))
4392 (synopsis "Core component of PRAW")
4393 (description "PRAWcore is a low-level communication layer used by PRAW.")
4394 (home-page "https://praw.readthedocs.io/en/latest/")
4395 (license license:bsd-2)))
4396
4397(define-public python-praw
4398 (package
4399 (name "python-praw")
4400 (version "8.0.2")
4401 (source
4402 (origin
4403 (method git-fetch)
4404 (uri (git-reference
4405 (url "https://github.com/praw-dev/praw")
4406 (commit (string-append "v" version))))
4407 (file-name (git-file-name name version))
4408 (sha256
4409 (base32 "15kwvkc6ag83p3mrfnq6ffyvbw4d3njx0dl0vv00y7724b2rpqxw"))))
4410 (build-system pyproject-build-system)
4411 (arguments
4412 (list #:test-flags
4413 #~(list "--ignore=tests/units/models"
4414 "--ignore=tests/integration/models"
4415 "--ignore=tests/unit/test_config.py"
4416 "--ignore=tests/integration/test_reddit.py")))
4417 (native-inputs
4418 (list nss-certs-for-test
4419 python-betamax
4420 python-betamax-matchers
4421 python-hatchling
4422 python-pytest
4423 python-vcrpy))
4424 (propagated-inputs
4425 (list python-defusedxml
4426 python-prawcore
4427 python-update-checker
4428 python-websocket-client))
4429 (synopsis "Python Reddit API Wrapper")
4430 (description "PRAW is a Python package that allows for simple access to
4431Reddit’s API. It aims to be easy to use and internally follows all of Reddit’s
4432API rules.")
4433 (home-page "https://praw.readthedocs.io/en/latest/")
4434 (license license:bsd-2)))
4435
4436(define-public python-frozenlist
4437 (package
4438 (name "python-frozenlist")
4439 (version "1.8.0")
4440 (source
4441 (origin
4442 (method git-fetch)
4443 (uri (git-reference
4444 (url "https://github.com/aio-libs/frozenlist")
4445 (commit (string-append "v" version))))
4446 (file-name (git-file-name name version))
4447 (sha256
4448 (base32 "0r1kxf5b562zrn04nl912i6a8y1fyc891l1284v0zj9llb97limy"))))
4449 ;; XXX: Without "wheel", the 'install phase can't find the wheel.
4450 (outputs (list "out" "wheel"))
4451 (build-system pyproject-build-system)
4452 ;; The configuration contains explicit early calls to pytest_cov.
4453 (arguments (list #:test-flags #~(list "-o" "addopts=''")))
4454 (native-inputs
4455 (list python-cython
4456 python-expandvars
4457 python-pytest
4458 python-setuptools
4459 python-tomli))
4460 (home-page "https://github.com/aio-libs/frozenlist")
4461 (synopsis "List-like data structure for Python")
4462 (description "@code{frozenlist.FrozenList} is a list-like structure which
4463implements @code{collections.abc.MutableSequence}. It can be made immutable
4464by calling @code{FrozenList.freeze}.")
4465 (license license:asl2.0)))
4466
4467(define-public python-httpauth
4468 (package
4469 (name "python-httpauth")
4470 (version "0.4.1")
4471 (source (origin
4472 (method url-fetch)
4473 (uri (pypi-uri "httpauth" version))
4474 (sha256
4475 (base32
4476 "1m6rwvivg61l3h34hf6p6gkqmr69sb1c4k5ha379nxq0p8bfgahb"))))
4477 (build-system pyproject-build-system)
4478 (native-inputs (list python-pytest python-setuptools python-wheel))
4479 (home-page "https://github.com/jonashaag/httpauth")
4480 (synopsis "WSGI HTTP Digest Authentication middleware")
4481 (description "@code{python-httpauth} is WSGI middleware that secures some/all
4482routes using HTTP Digest Authentication.")
4483 (license license:bsd-2)))
4484
4485(define-public python-css-html-js-minify
4486 (let ((commit "8f72452960e41bc5476e50d96481f633eff72750")
4487 (revision "0"))
4488 (package
4489 (name "python-css-html-js-minify")
4490 (version (git-version "2.5.5" revision commit))
4491 (source
4492 (origin
4493 (method git-fetch)
4494 (uri (git-reference
4495 (url "https://github.com/juancarlospaco/css-html-js-minify")
4496 (commit commit)))
4497 (file-name (git-file-name name version))
4498 (sha256
4499 (base32 "1lkx03720zk6q16w3d9r3l5kryikd1cmzwrcjzsjxwrq4zfh6vdf"))))
4500 (build-system pyproject-build-system)
4501 (arguments
4502 (list
4503 #:phases
4504 #~(modify-phases %standard-phases
4505 (add-after 'unpack 'relax-requirements
4506 (lambda _
4507 (substitute* "setup.cfg"
4508 (("^tests_require.*") "")))))))
4509 (native-inputs (list python-pytest python-setuptools))
4510 (home-page "https://github.com/juancarlospaco/css-html-js-minify")
4511 (synopsis "CSS/HTML/JS minifier")
4512 (description
4513 "This package provides a single-file minifier for CSS, HTML, and JavaScript.")
4514 ;; XXX: The README just says "GNU GPL and GNU LGPL and MIT". From
4515 ;; <https://github.com/juancarlospaco/css-html-js-minify/issues/9> it
4516 ;; looks like the user can choose a license.
4517 (license (list license:gpl3+ license:lgpl3+ license:expat)))))
4518
4519(define-public python-publicsuffixlist
4520 (package
4521 (name "python-publicsuffixlist")
4522 (version "1.0.2.20250202")
4523 (source
4524 (origin
4525 (method url-fetch)
4526 (uri (pypi-uri "publicsuffixlist" version))
4527 (sha256
4528 (base32 "0llam7g7sv08lcfgy18iph8br8ldjmy2qbjaykc9pd3z4iisb0yd"))))
4529 (build-system pyproject-build-system)
4530 (arguments (list #:test-backend #~'unittest))
4531 (native-inputs (list python-setuptools))
4532 (home-page "https://github.com/ko-zu/psl")
4533 (synopsis "Public suffix list for Python")
4534 (description
4535 "This package provides an implementation of
4536@url{https://publicsuffix.org/, Public Suffix List } as Python library.
4537
4538Features:
4539@itemize
4540@item supports IDN (unicode and punycoded)
4541@item shipped with built-in PSL and an updater script
4542@item written in Pure Python with no library dependencies
4543@end itemize")
4544 (license license:mpl2.0)))
4545
4546(define-public python-pycognito
4547 (package
4548 (name "python-pycognito")
4549 (version "2024.5.1")
4550 (source
4551 (origin
4552 (method url-fetch)
4553 (uri (pypi-uri "pycognito" version))
4554 (sha256
4555 (base32 "1r1sq87spqcfgg17khgpqc2ga8m9nk10flg9h23drhy2k1kcc4g2"))))
4556 (build-system pyproject-build-system)
4557 (arguments
4558 ;; XXX: cycles with python-moto, bootstrap/minimal variant is required.
4559 (list #:tests? #f))
4560 (native-inputs
4561 (list python-setuptools))
4562 (propagated-inputs
4563 (list python-boto3
4564 python-envs
4565 python-pyjwt
4566 python-requests))
4567 (home-page "https://github.com/pvizeli/pycognito")
4568 (synopsis "Python library for using AWS Cognito")
4569 (description
4570 "This package provides a Python class to integrate Boto3's Cognito
4571client so it is easy to login users, with @acronym{Secure Remote Password,
4572SRP} support.")
4573 (license license:asl2.0)))
4574
4575(define-public python-pydap
4576 (package
4577 (name "python-pydap")
4578 (version "3.5.10")
4579 (source
4580 (origin
4581 (method git-fetch)
4582 (uri (git-reference
4583 (url "https://github.com/pydap/pydap")
4584 (commit version)))
4585 (file-name (git-file-name name version))
4586 (sha256
4587 (base32 "000b7jqjpx71miwxhbi07amyjyijq925x9x3paa7kzrr268klc2z"))))
4588 (build-system pyproject-build-system)
4589 (arguments
4590 (list
4591 ;; tests: 435 passed, 6 skipped
4592 #:test-flags
4593 ;; Tests need extra packaging.
4594 #~(list "--ignore=src/pydap/tests/test_wsgi_functions.py"
4595 "--ignore=src/pydap/tests/test_wsgi_ssf.py"
4596 ;; Network access is required.
4597 "--ignore=src/pydap/tests/test_client.py"
4598 "--ignore=src/pydap/tests/test_handlers_dap.py"
4599 "--ignore=src/pydap/tests/test_open_dap4_url.py"
4600 "--ignore=src/pydap/tests/test_virtualizarr.py")))
4601 (native-inputs
4602 (list nss-certs-for-test
4603 python-requests-mock
4604 python-pytest
4605 python-setuptools
4606 python-setuptools-scm
4607 python-webtest))
4608 (propagated-inputs
4609 (list python-beautifulsoup4
4610 python-jinja2
4611 python-lxml
4612 python-numpy
4613 python-requests
4614 python-requests-cache
4615 python-scipy
4616 python-webob
4617 ;; [optional]
4618 gunicorn
4619 python-docopt-ng
4620 ;; python-coards ;not packaged yet in Guix
4621 python-fastparquet
4622 ;; python-gsw ;not packaged yet in Guix
4623 python-netcdf4
4624 python-openpyxl
4625 python-pastedeploy
4626 python-werkzeug))
4627 (home-page "https://pydap.github.io/pydap/en/intro.html")
4628 (synopsis "Data Access Protocol implementation in Python")
4629 (description
4630 "This package provides a pure Python implementation of the Data Access
4631Protocol (DAP, aka OPeNDAP).")
4632 (license license:expat)))
4633
4634(define-public python-python3-saml
4635 (package
4636 (name "python-python3-saml")
4637 (version "1.16.0")
4638 (source
4639 (origin
4640 (method git-fetch)
4641 (uri (git-reference
4642 (url "https://github.com/SAML-Toolkits/python3-saml")
4643 (commit (string-append "v" version))))
4644 (file-name (git-file-name name version))
4645 (sha256
4646 (base32 "1isisymhk8zblj5942jfl0zq392q5fpjikx52nywvzb0m2dcc81b"))))
4647 (build-system pyproject-build-system)
4648 (arguments
4649 (list
4650 ;; 214 tests pass, 50 fail; many fail because of required Internet
4651 ;; access or because of assumptions about the location of test files.
4652 #:tests? #false))
4653 (native-inputs
4654 (list python-freezegun
4655 python-poetry-core))
4656 (inputs
4657 (list xmlsec-openssl))
4658 (propagated-inputs
4659 (list python-isodate
4660 python-lxml
4661 python-xmlsec))
4662 (home-page "https://github.com/SAML-Toolkits/python3-saml")
4663 (synopsis "Saml Python toolkit")
4664 (description
4665 "The SAML Python Toolkit lets you add SAML support to your Python
4666software.")
4667 (license license:expat)))
4668
4669(define-public python-ovh
4670 (package
4671 (name "python-ovh")
4672 (version "1.1.0")
4673 (source (origin
4674 (method url-fetch)
4675 (uri (pypi-uri "ovh" version))
4676 (sha256
4677 (base32
4678 "0ygniv12lixh9rvnjcd01gzbzk2b5xwcg2a59b7964a77dd9p3qh"))))
4679 (build-system pyproject-build-system)
4680 (arguments (list #:tests? #f)) ; XXX: tests require networking
4681 (propagated-inputs (list python-requests))
4682 (native-inputs (list python-setuptools))
4683 (home-page "https://api.ovh.com")
4684 (synopsis "Interact with OVHcloud APIs")
4685 (description "This package provides the official module to perform HTTP requests
4686to the OVHcloud APIs.")
4687 (license license:bsd-3)))
4688
4689(define-public python-cbor2
4690 (package
4691 (name "python-cbor2")
4692 (version "5.4.2.post1")
4693 (source
4694 (origin
4695 (method url-fetch)
4696 (uri (pypi-uri "cbor2" version))
4697 (sha256
4698 (base32 "15y78xcc3zkmvj1mdzz8gyhf3apbl91073kwhzbjk5abc1civwlw"))))
4699 (build-system pyproject-build-system)
4700 (native-inputs
4701 (list python-pytest python-setuptools python-setuptools-scm))
4702 (home-page "https://github.com/agronholm/cbor2")
4703 (synopsis "Concise Binary Object Representation (CBOR) (de)serializer")
4704 (description "This Python library provides encoding and decoding for the
4705Concise Binary Object
4706Representation (CBOR) (@url{https://www.rfc-editor.org/rfc/rfc8949.html, RFC
47078949}) serialization format. The specification is fully compatible with the
4708original RFC 7049. Among its features are:
4709@itemize
4710@item Simple API like the @code{json} or @code{pickle} modules.
4711@item Support many CBOR tags with stdlib objects.
4712@item Generic tag decoding.
4713@item Shared value references including cyclic references.
4714@item String references compact encoding with repeated strings replaced with
4715indices.
4716@item Optional C module backend tested on big- and little-endian architectures.
4717@item Extensible tagged value handling using tag_hook and object_hook on
4718decode and default on encode.
4719@end itemize")
4720 (license license:expat)))
4721
4722(define-public python-cfn-lint
4723 (package
4724 (name "python-cfn-lint")
4725 (version "1.38.1")
4726 (source
4727 (origin
4728 (method git-fetch)
4729 (uri (git-reference
4730 (url "https://github.com/aws-cloudformation/cfn-lint")
4731 (commit (string-append "v" version))))
4732 (file-name (git-file-name name version))
4733 (sha256
4734 (base32 "1crwx0cp50h83xz8lc4ny504mx4dadpk80ln539syd4jd78qplgy"))))
4735 (build-system pyproject-build-system)
4736 (arguments
4737 (list
4738 ;; tests: 2136 passed, 11 deselected, 1 warning
4739 #:test-flags
4740 #~(list "--ignore=test/integration/"
4741 "-k" (string-join
4742 ;; Tests failing on doctest or comparing diff.
4743 (list "not test_build_graph"
4744 "test_good_template"
4745 "test_success_run"
4746 "test_update_docs"
4747 ;; ImportError: Missing optional dependencies sarif
4748 "test_sarif_formatter")
4749 " and not "))
4750 #:phases
4751 #~(modify-phases %standard-phases
4752 (add-after 'unpack 'remove-deprecated
4753 (lambda _
4754 (substitute* "src/cfnlint/data/AdditionalSpecs/LmbdRuntimeLifecycle.json"
4755 (("deprecated\": \"2025")
4756 "deprecated\": \"2125")))))))
4757 (native-inputs
4758 (list python-defusedxml
4759 python-pydot
4760 python-pytest
4761 python-setuptools))
4762 (propagated-inputs
4763 (list python-aws-sam-translator
4764 python-jsonpatch
4765 python-networkx
4766 python-pyyaml
4767 python-regex
4768 python-sympy
4769 python-typing-extensions
4770 ;; [optional]
4771 python-junit-xml))
4772 (home-page "https://github.com/aws-cloudformation/cfn-lint")
4773 (synopsis "Validate CloudFormation templates")
4774 (description
4775 "This package lets you validate CloudFormation YAML/JSON templates against
4776the CloudFormation spec and additional checks. Includes checking valid values
4777for resource properties and best practices.")
4778 (license license:expat)))
4779
4780(define-public python-pyzabbix
4781 (package
4782 (name "python-pyzabbix")
4783 (version "1.3.1")
4784 (source
4785 (origin
4786 (method git-fetch)
4787 (uri (git-reference
4788 (url "https://github.com/lukecyca/pyzabbix")
4789 (commit version)))
4790 (file-name (git-file-name name version))
4791 (sha256
4792 (base32 "1dbs3bz1mjlvlg46ikhg5j7agwni61ljlpiziknklv95yp29n86v"))))
4793 (build-system pyproject-build-system)
4794 (arguments
4795 (list #:test-flags #~(list "tests")))
4796 (native-inputs
4797 (list python-pytest
4798 python-requests-mock
4799 python-setuptools))
4800 (propagated-inputs
4801 (list python-packaging
4802 python-requests))
4803 (home-page "https://github.com/lukecyca/pyzabbix")
4804 (synopsis "Python interface to the Zabbix API")
4805 (description
4806 "@code{pyzabbix} is a Python module for working with the Zabbix API.")
4807 (license license:lgpl2.1+)))
4808
4809(define-public python-requests-cache
4810 (package
4811 (name "python-requests-cache")
4812 (version "1.3.2")
4813 (source
4814 (origin
4815 (method git-fetch)
4816 (uri (git-reference
4817 (url "https://github.com/requests-cache/requests-cache")
4818 (commit (string-append "v" version))))
4819 (file-name (git-file-name name version))
4820 (sha256
4821 (base32 "1yhvidmmd02c95i1hamyy34rb3wfzgzxil2k8ay1p4r4kv7pjada"))))
4822 (build-system pyproject-build-system)
4823 (arguments
4824 (list
4825 ;; tests: 429 passed, 1051 warnings
4826 #:test-flags
4827 #~(list "--numprocesses" (number->string (parallel-job-count))
4828 ;; These tests require access to external services, e.g. MongoDB
4829 ;; and Redis.
4830 "--ignore=tests/integration")
4831 #:phases
4832 #~(modify-phases %standard-phases
4833 (add-before 'check 'pre-check
4834 (lambda _
4835 ;; PermissionError: [Errno 13] Permission denied:
4836 ;; '/homeless-shelter'
4837 (setenv "HOME" "/tmp"))))))
4838 (native-inputs
4839 (list python-hatchling
4840 python-pytest
4841 python-pytest-rerunfailures
4842 python-pytest-xdist
4843 python-requests-mock
4844 python-responses
4845 python-rich
4846 python-tenacity
4847 python-time-machine
4848 python-timeout-decorator))
4849 (propagated-inputs
4850 (list python-attrs
4851 python-cattrs
4852 python-platformdirs
4853 python-requests
4854 python-url-normalize
4855 python-urllib3
4856 ;; [optional]
4857 python-boto3
4858 python-botocore
4859 python-itsdangerous
4860 python-orjson ;Python version < 3.14
4861 python-pymongo
4862 python-pyyaml
4863 python-redis
4864 python-ujson))
4865 (home-page "https://github.com/requests-cache/requests-cache")
4866 (synopsis "Persistent HTTP cache for Python requests")
4867 (description
4868 "This package provides a drop-in replacement for @code{requests.Session}
4869with caching offload to SQLite, Redis, MongoDB and AWS DynamoDB or save
4870responses as planin JSON/YAML file or save responses as plain JSON/YAML
4871files.")
4872 (license license:bsd-2)))
4873
4874(define-public python-requests-futures
4875 (package
4876 (name "python-requests-futures")
4877 (version "1.0.2")
4878 (source
4879 (origin
4880 (method url-fetch)
4881 (uri (pypi-uri "requests_futures" version))
4882 (sha256
4883 (base32 "1njqfjmd72l5f32jvcppg2afrvb0cd8angdwmq7q0vik81wvazkb"))))
4884 (build-system pyproject-build-system)
4885 (native-inputs
4886 (list python-greenlet
4887 python-pytest
4888 python-pytest-httpbin
4889 python-setuptools
4890 python-werkzeug))
4891 (propagated-inputs (list python-requests))
4892 (home-page "https://github.com/ross/requests-futures")
4893 (synopsis "Asynchronous Python HTTP for Humans")
4894 (description
4895 "This package provides and add-on the Python Requests HTTP library to run
4896code asynchronously.")
4897 (license license:asl2.0)))
4898
4899(define-public python-requests-unixsocket
4900 (package
4901 (name "python-requests-unixsocket")
4902 (version "0.4.1")
4903 (source
4904 (origin
4905 (method git-fetch)
4906 (uri (git-reference
4907 (url "https://github.com/msabramo/requests-unixsocket")
4908 (commit (string-append "v" version))))
4909 (file-name (git-file-name name version))
4910 (sha256
4911 (base32 "1f0pi31xqzm3cdag4s4gpdj36x169jwc8ibqvcwqz6h9c0pklf3n"))))
4912 (build-system pyproject-build-system)
4913 (native-inputs
4914 (list python-pytest
4915 python-setuptools
4916 python-setuptools-scm
4917 python-waitress))
4918 (propagated-inputs
4919 (list python-requests))
4920 (home-page "https://github.com/msabramo/requests-unixsocket")
4921 (synopsis "Use requests to talk HTTP via a UNIX domain socket")
4922 (description
4923 "This package provides an extension to @code{requests} which let it talk
4924HTTP via a UNIX domain socket.")
4925 (license license:asl2.0)))
4926
4927(define-public python-s3path
4928 (package
4929 (name "python-s3path")
4930 (version "0.6.4")
4931 (source
4932 (origin
4933 (method url-fetch)
4934 (uri (pypi-uri "s3path" version))
4935 (sha256
4936 (base32 "1lp5243jjf9ngqmajgnfr1px1kmpkfmgh248xlqz0nkww4wcy1hh"))))
4937 (build-system pyproject-build-system)
4938 (arguments
4939 (list
4940 ;; XXX: All tests fail with error: fixture 's3_mock' not found.
4941 #:tests? #f))
4942 (native-inputs
4943 (list python-setuptools
4944 python-wheel))
4945 (propagated-inputs
4946 (list python-boto3
4947 python-smart-open))
4948 (home-page "https://github.com/liormizr/s3path")
4949 (synopsis "Pathlib extension for AWS S3 Service")
4950 (description
4951 "S3Path provide a Python convenient File-System/Path like interface for
4952AWS S3 Service using boto3 S3 resource as a driver.")
4953 (license license:asl2.0)))
4954
4955(define-public python-falcon
4956 (package
4957 (name "python-falcon")
4958 (version "4.0.2")
4959 (source
4960 (origin
4961 ;; Use git, as there are some test files missing from the PyPI release,
4962 ;; such as 'examples' directory.
4963 (method git-fetch)
4964 (uri (git-reference
4965 (url "https://github.com/falconry/falcon")
4966 (commit version)))
4967 (file-name (git-file-name name version))
4968 (sha256
4969 (base32
4970 "1zhyvfbz4c1bxd4vbsgk19dzih6kkzgin10lmsr32x3b4qgnwqxs"))))
4971 (build-system pyproject-build-system)
4972 (arguments
4973 (list
4974 #:test-flags
4975 '(list "-k" "not slow"
4976 "--ignore-glob=examples/*" "--ignore-glob=bench/*" "tests")
4977 #:phases
4978 '(modify-phases %standard-phases
4979 (add-before 'check 'pre-check
4980 (lambda _
4981 (setenv "FALCON_ASGI_WRAP_NON_COROUTINES" "Y")
4982 (setenv "FALCON_TESTING_SESSION" "Y")
4983 (setenv "PYTHONASYNCIODEBUG" "1")
4984 (setenv "HOME" "/tmp"))))))
4985 (propagated-inputs
4986 (list python-mimeparse))
4987 (native-inputs
4988 (list python-aiofiles
4989 python-cbor2
4990 python-cython ;for faster binaries
4991 python-fakeredis
4992 python-httpx
4993 python-mujson
4994 python-msgpack
4995 python-orjson
4996 python-pecan
4997 python-pillow
4998 python-pytest
4999 python-pytest-asyncio
5000 python-pyyaml
5001 python-rapidjson
5002 python-requests
5003 python-setuptools
5004 python-testtools
5005 python-ujson
5006 python-websockets
5007 python-wheel))
5008 (home-page "https://falconframework.org")
5009 (synopsis "Web framework for building APIs and application backends")
5010 (description "Falcon is a web API framework for building microservices,
5011application backends and higher-level frameworks. Among its features are:
5012@itemize
5013@item Optimized and extensible code base
5014@item Routing via URI templates and REST-inspired resource
5015classes
5016@item Access to headers and bodies through request and response
5017classes
5018@item Request processing via middleware components and hooks
5019@item Idiomatic HTTP error responses
5020@item Straightforward exception handling
5021@item Unit testing support through WSGI helpers and mocks
5022@item Compatible with both CPython and PyPy
5023@item Cython support for better performance when used with CPython
5024@end itemize")
5025 (license license:asl2.0)))
5026
5027(define-public python-falcon-cors
5028 (package
5029 (name "python-falcon-cors")
5030 (properties '((commit . "41e9f075e193c1f76b26c0a8c67ad6e87462dfa6")
5031 (revision . "0")))
5032 (version (git-version "1.1.7"
5033 (assoc-ref properties 'revision)
5034 (assoc-ref properties 'commit)))
5035 (source
5036 (origin
5037 (method git-fetch)
5038 (uri (git-reference
5039 (url "https://github.com/lwcolton/falcon-cors")
5040 (commit (assoc-ref properties 'commit))))
5041 (file-name (git-file-name name version))
5042 (sha256
5043 (base32 "0iqz1i1p5xr32n34j77p2a86jmrkg1w90d2wcmmy1mhi5mgdm5gx"))))
5044 (build-system pyproject-build-system)
5045 (arguments
5046 (list
5047 ;; XXX: The last commit's tests are incompatible with the more recent
5048 ;; version of python-falcon.
5049 #:tests? #f))
5050 (native-inputs
5051 (list python-falcon python-mock python-pynose python-setuptools))
5052 (home-page "https://github.com/lwcolton/falcon-cors")
5053 (synopsis "Falcon @dfn{cross-origin resource sharing} (CORS) library")
5054 (description
5055 "This middleware provides @dfn{cross-origin resource sharing} (CORS)
5056support for Falcon. It allows applying a specially crafted CORS object to the
5057incoming requests, enabling the ability to serve resources over a different
5058origin than that of the web application.")
5059 (license license:asl2.0)))
5060
5061(define-public python-furl
5062 (package
5063 (name "python-furl")
5064 (version "2.1.4")
5065 (source
5066 (origin
5067 (method url-fetch)
5068 (uri (pypi-uri "furl" version))
5069 (sha256
5070 (base32 "05b058xisv8kghvcpaxvssml2jjkh1cmzyrrjwk2kjb62985fxl7"))))
5071 (build-system pyproject-build-system)
5072 (arguments
5073 (list #:test-flags
5074 #~(list "-k" (string-append "not test_hosts"
5075 " and not test_netloc"
5076 " and not test_odd_urls"))))
5077 (propagated-inputs
5078 (list python-orderedmultidict python-six))
5079 (native-inputs
5080 (list python-pytest python-setuptools python-wheel))
5081 (home-page "https://github.com/gruns/furl")
5082 (synopsis "URL manipulation in Python")
5083 (description "Furl provides an easy-to-use alternative to the
5084@code{urllib} and @code{urlparse} modules for manipulating URLs.")
5085 (license license:unlicense)))
5086
5087(define-public python-httplib2
5088 (package
5089 (name "python-httplib2")
5090 (version "0.31.2")
5091 (source
5092 (origin
5093 (method git-fetch)
5094 (uri (git-reference
5095 (url "https://github.com/httplib2/httplib2")
5096 (commit (string-append "v" version))))
5097 (file-name (git-file-name name version))
5098 (sha256
5099 (base32
5100 "0wdnf4rhw9ar8b15lzvif11ibnnpqkfif3alkhkfywy3ikk8nrxb"))))
5101 (build-system pyproject-build-system)
5102 (arguments
5103 (list
5104 #:phases
5105 #~(modify-phases %standard-phases
5106 (add-after 'unpack 'adjust-test-requirements
5107 (lambda _
5108 (substitute* "requirements-test.txt"
5109 (("==") ">=")))))))
5110 (propagated-inputs
5111 (list python-pyparsing
5112 python-pysocks))
5113 (native-inputs
5114 (list python-cryptography
5115 python-mock
5116 python-pytest
5117 python-pytest-randomly
5118 python-pytest-timeout
5119 python-setuptools))
5120 (home-page "https://github.com/httplib2/httplib2")
5121 (synopsis "Comprehensive HTTP client library")
5122 (description
5123 "A comprehensive HTTP client library supporting many features left out of
5124other HTTP libraries.")
5125 (license license:expat)))
5126
5127(define-public python-cheroot
5128 (package
5129 (name "python-cheroot")
5130 (version "11.1.2")
5131 (source
5132 (origin
5133 (method git-fetch)
5134 (uri (git-reference
5135 (url "https://github.com/cherrypy/cheroot")
5136 (commit (string-append "v" version))))
5137 (file-name (git-file-name name version))
5138 (sha256
5139 (base32 "02rhci01m5fcn8mqpvq3c35rs4n28gxlfvfw2if2f85rgwrji8y8"))
5140 ;; TODO: Remove this patch on next release.
5141 (patches (search-patches "python-cheroot-openssl-test.patch"))))
5142 (build-system pyproject-build-system)
5143 (arguments
5144 (list
5145 ;; tests: 150 passed, 3 xfailed, 7 warnings
5146 #:test-flags
5147 ;; To prevent dependency on python-pypytools which depends on python-py
5148 ;; both marked as deprecated by maintainers, see:
5149 ;; <https://codeberg.org/guix/guix/issues/7475>.
5150 #~(list "--ignore=cheroot/test/test_server.py")
5151 #:phases
5152 #~(modify-phases %standard-phases
5153 (add-after 'unpack 'fix-pytest-config
5154 (lambda _
5155 ;; See: <https://codeberg.org/guix/guix/issues/7476>.
5156 (delete-file "pytest.ini"))))))
5157 (native-inputs
5158 (list python-portend
5159 python-pyopenssl
5160 python-pytest
5161 python-pytest-mock
5162 python-requests
5163 python-requests-toolbelt
5164 python-setuptools
5165 python-setuptools-scm
5166 python-trustme))
5167 (propagated-inputs
5168 (list python-jaraco-functools
5169 python-more-itertools))
5170 (home-page "https://cheroot.cherrypy.dev")
5171 (synopsis "Highly-optimized, pure-python HTTP server")
5172 (description
5173 "Cheroot is a high-performance, pure-Python HTTP server.")
5174 (license license:bsd-3)))
5175
5176(define-public python-cherrypy
5177 (package
5178 (name "python-cherrypy")
5179 (properties '((commit . "1f75bc9eed8e0e385f64f368bd69f58d96fb8c2b")
5180 (revision . "0")))
5181 (version (git-version "18.10.0"
5182 (assoc-ref properties 'revision)
5183 (assoc-ref properties 'commit)))
5184 (source
5185 (origin
5186 (method git-fetch)
5187 (uri (git-reference
5188 (url "https://github.com/cherrypy/cherrypy")
5189 (commit (assoc-ref properties 'commit))))
5190 (file-name (git-file-name name version))
5191 (sha256
5192 (base32 "1l01a4sbfm42s5xp6ngphgqf0yb65ksqbsb27kznvybblyaxfa9p"))))
5193 (build-system pyproject-build-system)
5194 (arguments
5195 (list
5196 ;; tests: 288 passed, 9 skipped, 1 xfailed, 2 xpassed, 15 warnings
5197 #:phases
5198 #~(modify-phases %standard-phases
5199 (add-after 'unpack 'fix-pytest-config
5200 (lambda _
5201 ;; See: <https://codeberg.org/guix/guix/issues/7476>.
5202 (delete-file "pytest.ini")))
5203 (add-after 'unpack 'patch-pyproject
5204 (lambda _
5205 (substitute* "pyproject.toml"
5206 (("\"cherrypy.scaffold\",")
5207 (string-join
5208 (list "\"cherrypy.scaffold\""
5209 "\"cherrypy._private_api\""
5210 "\"cherrypy._private_api.compat\",")
5211 ",\n "))))))))
5212 (propagated-inputs
5213 (list python-cheroot
5214 python-filelock
5215 python-jaraco-collections
5216 python-more-itertools
5217 python-portend))
5218 (native-inputs
5219 (list python-path
5220 python-pytest
5221 python-pytest-services
5222 python-requests
5223 python-requests-toolbelt
5224 python-setuptools
5225 python-setuptools-scm))
5226 (home-page "https://www.cherrypy.dev")
5227 (synopsis "Object-Oriented HTTP framework")
5228 (description
5229 "CherryPy is a pythonic, object-oriented web framework. It helps in
5230building web applications in the same way any other object-oriented Python
5231program would be built.")
5232 (license license:bsd-3)))
5233
5234(define-public python-parfive
5235 (package
5236 (name "python-parfive")
5237 (version "2.3.1")
5238 (source
5239 (origin
5240 (method git-fetch)
5241 (uri (git-reference
5242 (url "https://github.com/Cadair/parfive")
5243 (commit (string-append "v" version))))
5244 (file-name (git-file-name name version))
5245 (sha256
5246 (base32 "09kkh7kp9qy8m26zk6p7zc84yrc81pjgsi594kaa1v1n83mprl4b"))))
5247 (build-system pyproject-build-system)
5248 (arguments
5249 (list
5250 #:test-flags
5251 ;; Disable tests requiring network access.
5252 #~(list "-k" (string-join
5253 (list "not test_ftp"
5254 "test_ftp_http"
5255 "test_ftp_pasv_command"
5256 "test_problematic_http_urls")
5257 " and not "))))
5258 (native-inputs
5259 (list python-aiofiles
5260 python-pytest
5261 python-pytest-asyncio
5262 python-pytest-localserver
5263 python-pytest-socket
5264 python-setuptools
5265 python-setuptools-scm))
5266 (propagated-inputs
5267 (list python-aiohttp
5268 python-tqdm
5269 ;; [optional]
5270 python-aioftp))
5271 (home-page "https://parfive.readthedocs.io/")
5272 (synopsis "HTTP and FTP parallel file downloader")
5273 (description
5274 "This package provides CLI tool and Python library @code{parallel} file
5275downloader using asyncio. parfive can handle downloading multiple files in
5276parallel as well as downloading each file in a number of chunks.
5277
5278asciicast demo of parfive parfive works by creating a downloader object,
5279appending files to it and then running the download. parfive has a synchronous
5280API, but uses asyncio to parallelise downloading the files.")
5281 (license license:expat)))
5282
5283(define-public python-html2text
5284 (package
5285 (name "python-html2text")
5286 (version "2020.1.16")
5287 (source
5288 (origin
5289 (method url-fetch)
5290 (uri (pypi-uri "html2text" version))
5291 (sha256
5292 (base32 "1fvv4z6dblii2wk1x82981ag8yhxbim1v2ksgywxsndh2s7335p2"))))
5293 (build-system pyproject-build-system)
5294 (native-inputs (list python-pytest python-setuptools python-wheel))
5295 (home-page "https://github.com/Alir3z4/html2text")
5296 (synopsis "Convert HTML into plain text")
5297 (description
5298 "html2text takes HTML and converts it into plain ASCII text
5299which is also valid markdown. html2text was originally written by Aaron
5300Swartz.")
5301 (license license:gpl3+)))
5302
5303(define-public python-jose
5304 (package
5305 (name "python-jose")
5306 (version "3.5.0")
5307 (home-page "https://github.com/mpdavis/python-jose")
5308 (source (origin
5309 (method git-fetch)
5310 (uri (git-reference (url home-page) (commit version)))
5311 (file-name (git-file-name name version))
5312 (sha256
5313 (base32
5314 "0frv7r6q43mjl7s82hh8qvqpdgyfvmyq2b6aq4402riq2i238d7h"))))
5315 (build-system pyproject-build-system)
5316 (native-inputs
5317 (list python-pyasn1 python-pytest python-setuptools))
5318 (propagated-inputs
5319 (list python-cryptography python-ecdsa python-rsa))
5320 (synopsis "JOSE implementation in Python")
5321 (description
5322 "The @dfn{JavaScript Object Signing and Encryption} (JOSE) technologies
5323- JSON Web Signature (JWS), JSON Web Encryption (JWE), JSON Web Key (JWK), and
5324JSON Web Algorithms (JWA) - collectively can be used to encrypt and/or sign
5325content using a variety of algorithms.")
5326 (license license:expat)))
5327
5328(define-public python-joserfc
5329 (package
5330 (name "python-joserfc")
5331 (version "1.0.1")
5332 (source
5333 (origin
5334 (method url-fetch)
5335 (uri (pypi-uri "joserfc" version))
5336 (sha256
5337 (base32 "11m600bmj70bp96wxhwvyj4d57w0zahzq3vic7s4a4k85pl7nl64"))))
5338 (build-system pyproject-build-system)
5339 (arguments
5340 (list
5341 #:test-flags
5342 ;; No module named 'Crypto'
5343 '(list "--ignore=tests/jwe/test_chacha20.py"
5344 ;; Deprecation warnings are not raised.
5345 "-k" (string-append "not test_guess_bytes_key"
5346 " and not test_guess_callable_key"
5347 " and not test_guess_str_key"))))
5348 (propagated-inputs (list python-cryptography))
5349 (native-inputs (list python-pytest python-setuptools python-wheel))
5350 (home-page "https://github.com/authlib/joserfc")
5351 (synopsis "Python library for JOSE RFCs")
5352 (description
5353 "This package provides a Python library for JOSE RFCs, including JWS,
5354JWE, JWK, JWA, and JWT.")
5355 (license license:bsd-3)))
5356
5357(define-public python-jwcrypto
5358 (package
5359 (name "python-jwcrypto")
5360 (version "1.5.6")
5361 (source
5362 (origin
5363 (method url-fetch)
5364 (uri (pypi-uri "jwcrypto" version))
5365 (sha256
5366 (base32 "0fdhn5jrsdxqr1yr6rmh585q4j08z1aajn392vk1l20c59v8f6kp"))))
5367 (build-system pyproject-build-system)
5368 (native-inputs
5369 (list python-pytest
5370 python-setuptools))
5371 (propagated-inputs
5372 (list python-cryptography
5373 python-typing-extensions))
5374 (home-page "https://github.com/latchset/jwcrypto")
5375 (synopsis "Implementation of JOSE Web standards")
5376 (description
5377 "WCrypto is an implementation of the @dfn{Javascript Object Signing and
5378Encryption} (JOSE) Web Standards.")
5379 (license license:lgpl3+)))
5380
5381(define-public python-pypitoken
5382 (package
5383 (name "python-pypitoken")
5384 (version "7.0.1")
5385 (source
5386 (origin
5387 (method url-fetch)
5388 (uri (pypi-uri "pypitoken" version))
5389 (sha256
5390 (base32 "18hhwmdfs9y5ypl1n8z2h2ys2f52mv5xr043gzgb34mpmg0wi46x"))))
5391 (build-system pyproject-build-system)
5392 ;; There are no tests.
5393 (arguments (list #:tests? #false))
5394 (propagated-inputs (list python-jsonschema python-pymacaroons
5395 python-typing-extensions))
5396 (native-inputs (list python-poetry-core))
5397 (home-page "https://pypitoken.readthedocs.io/en/latest/")
5398 (synopsis "Manipulate PyPI API tokens")
5399 (description "This package lets you manipulate PyPI API tokens.")
5400 (license license:expat)))
5401
5402(define-public python-jsonpickle
5403 (package
5404 (name "python-jsonpickle")
5405 (version "4.0.0")
5406 (source (origin
5407 (method url-fetch)
5408 (uri (pypi-uri "jsonpickle" version))
5409 (sha256
5410 (base32
5411 "0dipys8p4hkqnp9nwkpysfv7mhws2hrr73wgn00pdmq4n990hrzw"))))
5412 (build-system pyproject-build-system)
5413 (arguments
5414 (list
5415 #:test-flags '(list "tests")
5416 #:phases
5417 '(modify-phases %standard-phases
5418 (add-before 'check 'pre-check
5419 (lambda* (#:key inputs #:allow-other-keys)
5420 (setenv "TZ" "UTC")
5421 (setenv "TZDIR"
5422 (search-input-directory inputs "share/zoneinfo")))))))
5423 (native-inputs
5424 (list python-bson
5425 python-ecdsa
5426 python-feedparser
5427 python-pymongo
5428 python-pytest
5429 python-pytest-benchmark
5430 python-pytest-enabler
5431 python-setuptools
5432 python-setuptools-scm
5433 python-simplejson
5434 python-sqlalchemy
5435 python-ujson
5436 python-wheel
5437 tzdata-for-tests))
5438 (home-page "https://jsonpickle.github.io/")
5439 (synopsis "Serialize object graphs into JSON")
5440 (description
5441 "This package provides a Python library for serializing any arbitrary
5442object graph to and from JSON.")
5443 (license license:bsd-3)))
5444
5445(define-public python-mcp
5446 (package
5447 (name "python-mcp")
5448 (version "1.25.0")
5449 (source
5450 (origin
5451 (method url-fetch)
5452 (uri (pypi-uri "mcp" version))
5453 (sha256
5454 (base32 "00k87bl4jvnh7hrmicwb2m715fwccvvlanwf8cnlwdphxdhh6can"))))
5455 (build-system pyproject-build-system)
5456 (arguments
5457 (list
5458 ;; XXX: 186 failed, 648 passed, 94 skipped, 54 errors
5459 ;; A lot of tests fail for unclear reasons.
5460 #:tests? #f))
5461 (propagated-inputs
5462 (list python-httpx
5463 python-httpx-sse
5464 python-pydantic
5465 python-sse-starlette))
5466 (native-inputs
5467 (list python-hatchling
5468 python-jsonschema
5469 python-pydantic-settings
5470 python-pytest
5471 python-pytest-examples
5472 python-pytest-xdist
5473 python-starlette
5474 python-typer
5475 python-typing-inspection
5476 python-uvicorn))
5477 (home-page "https://modelcontextprotocol.io")
5478 (synopsis "Model Context Protocol SDK")
5479 (description
5480 "This package provides a Python Software Development Kit for the Model
5481Context Protocol (MCP).")
5482 (license license:expat)))
5483
5484(define-public python-mechanicalsoup
5485 (package
5486 (name "python-mechanicalsoup")
5487 (version "1.4.0")
5488 (source
5489 (origin
5490 (method url-fetch)
5491 (uri (pypi-uri "mechanicalsoup" version))
5492 (sha256
5493 (base32 "0k1ac77ld6jyjm5fsr44399l5gmiwnz5w6s74i3qqx2scfbsgs6w"))))
5494 (build-system pyproject-build-system)
5495 (arguments
5496 (list
5497 #:test-flags
5498 ;; Unclear why test fails.
5499 #~(list "-k" "not test_select_form_associated_elements")
5500 ;; The following dependencies are not directly required, the developer
5501 ;; only pinned versions because of vulnerabilities. They also break
5502 ;; sanity-check because it checks for a python-certifi version which is
5503 ;; more recent than the one available in Guix.
5504 #:phases #~(modify-phases %standard-phases
5505 (add-after 'unpack 'relax-dependencies
5506 (lambda _
5507 (substitute* "requirements.txt"
5508 (("certifi.*") "")
5509 (("urllib3.*") "")))))))
5510 (propagated-inputs
5511 (list python-beautifulsoup4 python-lxml python-requests))
5512 (native-inputs
5513 (list python-pytest
5514 python-pytest-flake8
5515 python-pytest-httpbin
5516 python-pytest-mock
5517 python-requests-mock
5518 python-setuptools
5519 python-wheel))
5520 (home-page "https://mechanicalsoup.readthedocs.io/")
5521 (synopsis "Python library for automating website interaction")
5522 (description
5523 "MechanicalSoup is a Python library for automating interaction with
5524websites. It automatically stores and sends cookies, follows redirects, and can
5525follow links and submit forms. It doesn’t do JavaScript.")
5526 (license license:expat)))
5527
5528(define-public python-hypercorn
5529 (package
5530 (name "python-hypercorn")
5531 (version "0.18.0")
5532 (source
5533 (origin
5534 (method git-fetch)
5535 (uri (git-reference
5536 (url "https://github.com/pgjones/hypercorn")
5537 (commit version)))
5538 (file-name (git-file-name name version))
5539 (sha256
5540 (base32 "0jdi05n5isxn0rysq242p198lz03gbwsnizzb9yp6rxr7ajapns4"))))
5541 (build-system pyproject-build-system)
5542 (propagated-inputs
5543 (list python-aioquic
5544 python-h11
5545 python-h2
5546 python-priority
5547 python-pydata-sphinx-theme
5548 python-sphinxcontrib-mermaid
5549 python-tomli
5550 python-trio
5551 python-typing-extensions
5552 python-uvloop
5553 python-wsproto))
5554 (native-inputs
5555 (list nss-certs-for-test
5556 python-httpx
5557 python-pdm-backend
5558 python-pytest
5559 python-pytest-asyncio
5560 python-pytest-cov
5561 python-pytest-trio))
5562 (home-page "https://github.com/pgjones/hypercorn")
5563 (synopsis "ASGI Server based on Hyper libraries")
5564 (description
5565 "This package provides an ASGI (Asynchronous Server Gateway Interface)
5566Server based on Hyper libraries and inspired by @code{python-gunicorn}.")
5567 (license license:expat)))
5568
5569(define-public python-hyperframe
5570 (package
5571 (name "python-hyperframe")
5572 (version "6.1.0")
5573 (source
5574 (origin
5575 (method url-fetch)
5576 (uri (pypi-uri "hyperframe" version))
5577 (sha256
5578 (base32 "021v58w1b7mbwqkvbz11p3a4qk1sj91jnf6nmgg7ljl502590c7n"))))
5579 (build-system pyproject-build-system)
5580 (native-inputs
5581 (list python-pytest python-setuptools))
5582 (home-page "https://github.com/python-hyper/hyperframe")
5583 (synopsis "HTTP/2 framing layer for Python")
5584 (description
5585 "This library contains the HTTP/2 framing code used in the hyper project.
5586It provides a pure-Python codebase that is capable of decoding a binary stream
5587into HTTP/2 frames.")
5588 (license license:expat)))
5589
5590(define-public python-hpack
5591 (package
5592 (name "python-hpack")
5593 (version "4.1.0")
5594 (source
5595 (origin
5596 ;; PyPI tarball is missing some files necessary for the tests.
5597 (method git-fetch)
5598 (uri (git-reference
5599 (url "https://github.com/python-hyper/hpack")
5600 (commit (string-append "v" version))))
5601 (file-name (git-file-name name version))
5602 (sha256
5603 (base32 "1kgbx38p3a48iz914dqbx7av750a3s3x5kj3rvpcbh23ah75zg5x"))))
5604 (build-system pyproject-build-system)
5605 (native-inputs
5606 (list python-pytest python-setuptools))
5607 (home-page "https://hyper.rtfd.org")
5608 (synopsis "Pure-Python HPACK header compression")
5609 (description
5610 "This module contains a pure-Python HTTP/2 header encoding (HPACK) logic
5611for use in Python programs that implement HTTP/2.")
5612 (license license:expat)))
5613
5614(define-public python-h11
5615 (package
5616 (name "python-h11")
5617 (version "0.16.0")
5618 (source
5619 (origin
5620 (method url-fetch)
5621 (uri (pypi-uri "h11" version))
5622 (sha256
5623 (base32 "1wazxq4b4jg5001h5ypvz9pvrg80pagyd1aqm962wya5rxbbjdaf"))))
5624 (build-system pyproject-build-system)
5625 (native-inputs
5626 (list python-pytest python-setuptools))
5627 (home-page "https://github.com/python-hyper/h11")
5628 (synopsis "Pure-Python, bring-your-own-I/O implementation of HTTP/1.1")
5629 (description
5630 "This is a little HTTP/1.1 library written from scratch in Python, heavily
5631inspired by hyper-h2. It's a bring-your-own-I/O library; h11 contains no IO
5632code whatsoever. This means you can hook h11 up to your favorite network API,
5633and that could be anything you want.")
5634 (license license:expat)))
5635
5636(define-public python-h2
5637 (package
5638 (name "python-h2")
5639 (version "4.3.0")
5640 (source
5641 (origin
5642 (method git-fetch)
5643 (uri (git-reference
5644 (url "https://github.com/python-hyper/h2")
5645 (commit (string-append "v" version))))
5646 (file-name (git-file-name name version))
5647 (sha256
5648 (base32 "00rf0ii4xgdczx5xmv1k6b65q1axvxizbnl20d5vpr512zdix36k"))))
5649 (build-system pyproject-build-system)
5650 (arguments
5651 (list
5652 ;; tests: 1594 passed, 5 deselected
5653 ;; AssertionError: assert '<RemoteSettingsChanged
5654 ;; changed_settings:{ChangedSetting(setting=4, original_value=65536,
5655 ;; new_value=32768)}>' == '<RemoteSettingsChanged
5656 ;; changed_settings:{ChangedSetting(setting=SettingCodes.INITIAL_WINDOW_SIZE,
5657 ;; original_value=65536, new_value=32768)}>'
5658 #:test-flags
5659 #~(list "-k"
5660 (string-join
5661 (list "not test_remotesettingschanged_repr"
5662 ;; This test exceededs the Hypothesis deadline.
5663 #$@(if (target-riscv64?)
5664 #~("test_changing_max_frame_size")
5665 #~())
5666 "test_streamreset_repr"
5667 "test_settingsacknowledged_repr"
5668 "test_connectionterminated_repr[None-None]"
5669 "test_connectionterminated_repr[some"
5670 "test_remotesettingschanged_repr"
5671 "test_streamreset_repr"
5672 "test_settingsacknowledged_repr"
5673 "test_connectionterminated_repr[None-None]"
5674 "test_connectionterminated_repr[some")
5675 " and not "))))
5676 (native-inputs
5677 (list python-pytest
5678 python-setuptools))
5679 (propagated-inputs
5680 (list python-hpack
5681 python-hyperframe))
5682 (home-page "https://github.com/python-hyper/h2")
5683 (synopsis "HTTP/2 State-Machine based protocol implementation")
5684 (description
5685 "This module contains a pure-Python implementation of a HTTP/2 protocol
5686stack. It does not provide a parsing layer, a network layer, or any rules
5687about concurrency. Instead, it's a purely in-memory solution, defined in
5688terms of data actions and HTTP/2 frames. This is one building block of a full
5689Python HTTP implementation.")
5690 (license license:expat)))
5691
5692(define-public python-slixmpp
5693 (package
5694 (name "python-slixmpp")
5695 (version "1.17.0")
5696 (source
5697 (origin
5698 (method git-fetch)
5699 (uri (git-reference
5700 (url "https://codeberg.org/poezio/slixmpp")
5701 (commit (string-append "slix-" version))))
5702 (file-name (git-file-name name version))
5703 (sha256
5704 (base32 "0ml590qs3siajz00f40pdxcz27d41i25ld30819qrf0n9ilqlc6n"))))
5705 (build-system pyproject-build-system)
5706 (arguments
5707 (list
5708 ;; Use the upstream runner: it collects only tests/, skips itests/
5709 ;; which need a live XMPP server, and additionally runs the doctests.
5710 #:test-backend #~'custom
5711 #:test-flags #~'("run_tests.py")
5712 #:phases
5713 #~(modify-phases %standard-phases
5714 (add-after 'unpack 'disable-rust-extension
5715 ;; Upstream marks the Rust JID implementation as optional; skip
5716 ;; it and use the pure Python one in slixmpp/jid.py to avoid
5717 ;; pulling in the Cargo dependency tree.
5718 (lambda _
5719 (substitute* "pyproject.toml"
5720 (("\"setuptools-rust\", ") "")
5721 (("\\[\\[tool\\.setuptools-rust\\.ext-modules\\]\\]")
5722 "[tool.slixmpp-rust-disabled]"))))
5723 (add-before 'build 'set-version
5724 ;; setuptools-scm cannot determine the version without .git.
5725 (lambda _
5726 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
5727 (native-inputs
5728 (list gnupg ; 'gnupg' is required by the XEP-0027 tests.
5729 python-setuptools
5730 python-setuptools-scm))
5731 (propagated-inputs
5732 (list python-aiodns
5733 python-aiohttp
5734 python-cryptography
5735 python-defusedxml
5736 python-emoji
5737 python-pyasn1
5738 python-pyasn1-modules))
5739 (home-page "https://codeberg.org/poezio/slixmpp")
5740 (synopsis "XMPP library without threads")
5741 (description
5742 "Slixmpp is a XMPP library for Python 3.11+. It is a fork of SleekXMPP.
5743Its goal is to only rewrite the core of the library (the low level socket
5744handling, the timers, the events dispatching) in order to remove all
5745threads.")
5746 (license license:expat)))
5747
5748(define-public python-sockjs-tornado
5749 (package
5750 (name "python-sockjs-tornado")
5751 (version "1.0.6")
5752 (source
5753 (origin
5754 (method git-fetch)
5755 (uri (git-reference
5756 (url "https://github.com/mrjoes/sockjs-tornado/")
5757 (commit (string-append "v" version))))
5758 (file-name (git-file-name name version))
5759 (sha256
5760 (base32 "1y4wjca1776nvd0b79pz4d52i312xsyb2vahb883qmrw6s56mynk"))))
5761 (build-system pyproject-build-system)
5762 (arguments
5763 (list
5764 #:tests? #f)) ;The only test in examples/test/test.py runs a server.
5765 (native-inputs (list python-setuptools))
5766 (propagated-inputs (list python-tornado))
5767 (home-page "https://github.com/mrjoes/sockjs-tornado/")
5768 (synopsis
5769 "SockJS Python server implementation on top of the Tornado framework")
5770 (description
5771 "SockJS-tornado provides the server-side counterpart to a SockJS client
5772library, through the Tornado framework.
5773
5774SockJS provides a low-latency, full-duplex, cross-domain communication channel
5775between a web browser and web server.")
5776 (license license:expat)))
5777
5778(define-public python-flask-assets
5779 ;; The latest release still depends on the abandoned flask-script, whereas
5780 ;; at this later commit (already 2 years old at the time of this writing)
5781 ;; the dependency has been lifted.
5782 (let ((commit "62efd23fe95ee6a86fc1cfaa98fc1e2152093557")
5783 (revision "1"))
5784 (package
5785 (name "python-flask-assets")
5786 (version (git-version "2.1.0" revision commit))
5787 (source
5788 (origin
5789 (method git-fetch)
5790 (uri (git-reference
5791 (url "https://github.com/miracle2k/flask-assets/")
5792 (commit commit)))
5793 (file-name (git-file-name name version))
5794 (sha256
5795 (base32 "11q8vm2ipj4xrvawy9vl1l4k8kb4r72ghy1n8xrzci52v6lx8960"))))
5796 (build-system pyproject-build-system)
5797 (propagated-inputs
5798 (list python-flask python-webassets))
5799 (native-inputs
5800 (list nss-certs-for-test python-pytest python-setuptools python-wheel))
5801 (home-page "https://github.com/miracle2k/flask-assets")
5802 (synopsis "Asset management for Flask")
5803 (description "This package integrates @code{webassets} with Flask, adding
5804support for merging, minifying and compiling CSS and Javascript files.")
5805 (license license:bsd-2))))
5806
5807(define-public python-flask-babel
5808 (package
5809 (name "python-flask-babel")
5810 (version "4.0.0")
5811 (source
5812 (origin
5813 (method git-fetch) ;no tests in pypi release
5814 (uri (git-reference
5815 (url "https://github.com/python-babel/flask-babel")
5816 (commit (string-append "v" version))))
5817 (sha256
5818 (base32
5819 "19yq3f5rixbwhv7wxdarvi9hdj98a9dq8y76in9c1q3jxaigw104"))))
5820 (build-system pyproject-build-system)
5821 (native-inputs
5822 (list python-poetry-core
5823 python-pytest
5824 python-pytest-mock))
5825 (propagated-inputs
5826 (list python-babel
5827 python-flask
5828 python-jinja2
5829 python-pytz))
5830 (home-page "https://github.com/python-babel/flask-babel")
5831 (synopsis "Add i18n/l10n support to Flask applications")
5832 (description "This package implements internationalization and localization
5833support for Flask. This is based on the Python babel module as well as pytz -
5834both of which are installed automatically if you install this library.")
5835 (license license:bsd-3)))
5836
5837(define-public python-flask-cors
5838 (package
5839 (name "python-flask-cors")
5840 (version "6.0.2")
5841 (source
5842 (origin
5843 (method git-fetch) ;no tests in PyPI archive
5844 (uri (git-reference
5845 (url "https://github.com/CoryDolphin/flask-cors")
5846 (commit version)))
5847 (file-name (git-file-name name version))
5848 (sha256
5849 (base32 "02y740h951dscgkm7ghsss1bc0m8ymsfdpsimm1j0nkl0zjl6sgm"))))
5850 (build-system pyproject-build-system)
5851 (arguments
5852 (list
5853 #:phases
5854 #~(modify-phases %standard-phases
5855 (add-after 'unpack 'fix-version
5856 (lambda _
5857 ;; Otherwise sanity-check of dependents will fail.
5858 (substitute* "pyproject.toml"
5859 (("version = \"0\\.0\\.1\"" all)
5860 (string-append "version = \"" #$version "\""))))))))
5861 (native-inputs
5862 (list python-pytest
5863 python-setuptools))
5864 (propagated-inputs
5865 (list python-flask
5866 python-werkzeug))
5867 (home-page "https://flask-cors.readthedocs.io/en/latest/")
5868 (synopsis "Handle Cross-Origin Resource Sharing with Flask")
5869 (description
5870 "This package provides a Flask extension for handling @acronym{CORS,Cross
5871Origin Resource Sharing}, making cross-origin AJAX possible.")
5872 (license license:expat)))
5873
5874(define-public python-flask-markdown
5875 (package
5876 (name "python-flask-markdown")
5877 (version "0.3")
5878 (source
5879 (origin
5880 (method git-fetch)
5881 (uri (git-reference
5882 (url "https://github.com/dcolish/flask-markdown")
5883 (commit version)))
5884 (file-name (git-file-name name version))
5885 (sha256
5886 (base32 "1rqqmvjc4rjal6l4y3caxw9b3157pl923h4i1ihbm0gziqv3g2hl"))))
5887 (build-system pyproject-build-system)
5888 (arguments
5889 (list
5890 #:tests? #f ;Tests seem to be incompatible with latest python
5891 #:phases
5892 #~(modify-phases %standard-phases
5893 (add-after 'unpack 'set-version
5894 (lambda _
5895 (substitute* "setup.py"
5896 (("dev")
5897 #$version)))))))
5898 (propagated-inputs (list python-markdown python-flask))
5899 (native-inputs (list python-pynose python-setuptools))
5900 (home-page "https://github.com/dcolish/flask-markdown")
5901 (synopsis "Small extension to help with using Markdown in Flask")
5902 (description
5903 "Flask-Markdown supports several extensions for Markdown and integrates
5904into Jinja2 by default.")
5905 (license license:bsd-3)))
5906
5907(define-public python-flask-session
5908 (package
5909 (name "python-flask-session")
5910 (version "0.8.0")
5911 (source
5912 (origin
5913 (method url-fetch)
5914 (uri (pypi-uri "flask_session" version))
5915 (sha256
5916 (base32
5917 "1zs20zpq6gxz9gsccbd2jrrbbcfvh0x9z9741gkr8dhh07mlbq10"))))
5918 (build-system pyproject-build-system)
5919 (arguments
5920 '(#:tests? #f)) ; Tests require the various storage backends to be present
5921 (native-inputs (list python-flit-core))
5922 (propagated-inputs
5923 (list python-cachelib python-flask python-msgspec))
5924 (home-page "https://github.com/pallets-eco/flask-session")
5925 (synopsis "Adds server-side session support to your Flask application")
5926 (description
5927 "Flask-Session is an extension for Flask that adds support for
5928Server-side sessions, with a variety of different backends for session
5929storage.")
5930 (license license:bsd-3)))
5931
5932(define-public python-html5lib
5933 (package
5934 (name "python-html5lib")
5935 (version "1.1")
5936 (source
5937 (origin
5938 (method url-fetch)
5939 (uri (pypi-uri "html5lib" version))
5940 (sha256
5941 (base32 "0vqlhk0hgbsfkh7ybmby93xhlx8dq6pr5blf356ka3z2c41b9rdj"))))
5942 (build-system pyproject-build-system)
5943 (arguments
5944 '(#:tests? #f)) ;tests depend on dated pytest-expect
5945 (native-inputs
5946 (list python-setuptools))
5947 (propagated-inputs
5948 (list python-six
5949 python-webencodings
5950 ;; Required by Calibre 5.
5951 python-chardet))
5952 (home-page "https://github.com/html5lib/html5lib-python")
5953 (synopsis "Python HTML parser based on the WHATWG HTML specification")
5954 (description
5955 "Html5lib is an HTML parser based on the WHATWG HTML specification
5956and written in Python.")
5957 (license license:expat)))
5958
5959(define-public python-html5-parser
5960 (package
5961 (name "python-html5-parser")
5962 (version "0.4.12")
5963 (source
5964 (origin
5965 (method git-fetch)
5966 (uri (git-reference
5967 (url "https://github.com/kovidgoyal/html5-parser")
5968 (commit (string-append "v" version))))
5969 (file-name (git-file-name name version))
5970 (sha256
5971 (base32 "0axrz2x67nhsh3kijy68wwy5hx8h8418d8g2qz6f3pyxix7gw2fi"))))
5972 (build-system pyproject-build-system)
5973 (arguments
5974 (list
5975 #:phases
5976 #~(modify-phases %standard-phases
5977 (add-before 'build 'set-configure-flags
5978 (lambda _
5979 (setenv "CFLAGS" "-Wno-error=implicit-function-declaration"))))))
5980 (native-inputs (list pkg-config python-setuptools))
5981 (inputs (list libxml2))
5982 (propagated-inputs (list python-lxml python-beautifulsoup4 python-chardet))
5983 (home-page "https://html5-parser.readthedocs.io")
5984 (synopsis "Fast C-based HTML5 parsing for Python")
5985 (description
5986 "This package provides a fast implementation of the HTML5 parsing spec
5987for Python. Parsing is done in C using a variant of the gumbo parser. The
5988gumbo parse tree is then transformed into an lxml tree, also in C, yielding
5989parse times that can be a thirtieth of the html5lib parse times.")
5990 ;; src/as-python-tree.[c|h] are licensed GPL3. The other files
5991 ;; indicate ASL2.0, including the LICENSE file for the whole project.
5992 (license (list license:asl2.0 license:gpl3))))
5993
5994(define-public python-html5tagger
5995 (package
5996 (name "python-html5tagger")
5997 (version "2.0.0")
5998 (source (origin
5999 (method url-fetch)
6000 (uri (pypi-uri "html5tagger" version))
6001 (sha256
6002 (base32
6003 "090nmjhr0yj3x5iy9zmbmv07dpxn234dqpi2lglk0fa4aj83rvhd"))))
6004 (build-system pyproject-build-system)
6005 (arguments
6006 (list #:tests? #f)) ;no tests in PyPI or Git
6007 (native-inputs
6008 (list python-hatch-vcs python-hatchling))
6009 (home-page "https://github.com/sanic-org/html5tagger")
6010 (synopsis "Create HTML documents from Python")
6011 (description
6012 "@code{html5tagger} provides a simplified HTML5 syntax that can
6013be written directly in Python without templates.")
6014 (license license:unlicense)))
6015
6016(define-public python-minio
6017 (package
6018 (name "python-minio")
6019 (version "7.1.9")
6020 (source
6021 (origin
6022 (method git-fetch)
6023 (uri (git-reference
6024 (url "https://github.com/minio/minio-py")
6025 (commit version)))
6026 (file-name (git-file-name name version))
6027 (sha256
6028 (base32 "01734ki3p7844dya366hy1kvmmgy3xr0l0zbkchnnv4p611510vc"))))
6029 (build-system pyproject-build-system)
6030 (arguments
6031 (list
6032 #:test-flags
6033 ;; XXX: requires network access.
6034 #~(list "--ignore=tests/unit/credentials_test.py")))
6035 (native-inputs (list python-pytest python-setuptools))
6036 (propagated-inputs
6037 (list python-certifi python-dateutil python-pytz python-urllib3))
6038 (home-page "https://github.com/minio/minio-py")
6039 (synopsis "Programmatically access Amazon S3 from Python")
6040 (description
6041 "This package provides a Python library for interacting with any
6042Amazon S3 compatible object storage server.")
6043 (license license:asl2.0)))
6044
6045(define-public python-pycrdt
6046 (package
6047 (name "python-pycrdt")
6048 (version "0.13.0")
6049 (source
6050 (origin
6051 (method git-fetch)
6052 (uri (git-reference
6053 (url "https://github.com/y-crdt/pycrdt")
6054 (commit version)))
6055 (file-name (git-file-name name version))
6056 (sha256
6057 (base32 "18mnjbxdlra1w3jl42bf1jb25z9j3inh6s61qighqrvnylgxvxc1"))))
6058 (build-system pyproject-build-system)
6059 (arguments
6060 (list
6061 #:imported-modules `(,@%cargo-build-system-modules
6062 ,@%pyproject-build-system-modules)
6063 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
6064 (guix build pyproject-build-system)
6065 (guix build utils))
6066 #:test-flags #~(list "--ignore=tests/test_types.py")
6067 #:phases
6068 #~(modify-phases %standard-phases
6069 (add-after 'unpack 'relax-requirements
6070 (lambda _
6071 (substitute* "pyproject.toml"
6072 (("requires = \\[\"maturin>=.*\"\\]")
6073 "requires = [\"maturin\"]"))))
6074 (add-after 'unpack 'prepare-cargo-build-system
6075 (lambda args
6076 (for-each
6077 (lambda (phase)
6078 (format #t "Running cargo phase: ~a~%" phase)
6079 (apply (assoc-ref cargo:%standard-phases phase)
6080 #:cargo-target #$(cargo-triplet)
6081 args))
6082 '(unpack-rust-crates
6083 configure
6084 check-for-pregenerated-files
6085 patch-cargo-checksums)))))))
6086 (propagated-inputs
6087 (list python-anyio
6088 python-typing-extensions))
6089 (inputs (cargo-inputs 'pycrdt))
6090 (native-inputs
6091 (append
6092 (list maturin
6093 python-pydantic
6094 python-pytest
6095 rust
6096 `(,rust "cargo"))
6097 (or (and=> (%current-target-system)
6098 (compose list make-rust-sysroot))
6099 '())))
6100 (home-page "https://github.com/y-crdt/pycrdt")
6101 (synopsis "Python CRDTs library ported from Yjs framework")
6102 (description
6103 "Conflict-free Replicated Data Types (CRDTs) allow creating shared
6104documents that can automatically merge changes made concurrently on different
6105copies of the data. When the data lives on different machines, they make it
6106possible to build distributed systems that work with local data, leaving the
6107synchronization and conflict resolution with remote data to the CRDT
6108algorithm, which ensures that all data replicas eventually converge to the
6109same state.
6110
6111This is a Python CRDT library that provides bindings for Yrs, the Rust port of
6112the Yjs framework.")
6113 (license license:expat)))
6114
6115(define-public python-pycrdt-store
6116 (package
6117 (name "python-pycrdt-store")
6118 (version "0.1.3")
6119 (source
6120 (origin
6121 (method git-fetch)
6122 (uri (git-reference
6123 (url "https://github.com/y-crdt/pycrdt-store")
6124 (commit version)))
6125 (file-name (git-file-name name version))
6126 (sha256
6127 (base32 "18yvv5lgxb4v0qlbi8bbkcm1666nxbkmhbx445sxpzab7027fl1a"))))
6128 (build-system pyproject-build-system)
6129 (propagated-inputs
6130 (list python-anyio
6131 python-pycrdt
6132 python-sqlite-anyio))
6133 (native-inputs
6134 (list python-hatchling
6135 python-pytest
6136 python-pytest-rerunfailures
6137 python-trio))
6138 (home-page "https://github.com/y-crdt/pycrdt-store")
6139 (synopsis "Persistent storage for pycrdt")
6140 (description
6141 "This package provides a persistent storage feature for
6142@code{python-pycrdt}.")
6143 (license license:expat)))
6144
6145(define-public python-pycrdt-websocket
6146 (package
6147 (name "python-pycrdt-websocket")
6148 (version "0.16.0")
6149 (source
6150 (origin
6151 (method git-fetch)
6152 (uri (git-reference
6153 (url "https://github.com/y-crdt/pycrdt-websocket")
6154 (commit version)))
6155 (file-name (git-file-name name version))
6156 (sha256
6157 (base32 "1bcxivdra0v5fwlz3hcz98vxi61884bfvcwifsdp3mji28iprv22"))))
6158 (build-system pyproject-build-system)
6159 (arguments
6160 (list
6161 ;; These tests require the unpackaged Yjs.
6162 #:test-flags #~(list "--deselect=tests/test_pycrdt_yjs.py")))
6163 (propagated-inputs
6164 (list python-anyio
6165 python-pycrdt
6166 python-pycrdt-store))
6167 (native-inputs
6168 (list nss-certs-for-test
6169 python-hatchling
6170 python-hypercorn
6171 python-httpx-ws
6172 python-pytest))
6173 (home-page "https://github.com/y-crdt/pycrdt-websocket")
6174 (synopsis "WebSocket connector for pycrdt")
6175 (description "This package provides an asynchronous @code{WebSocket}
6176connector for @code{python-pycrdt}.")
6177 (license license:expat)))
6178
6179(define-public python-pycurl
6180 (package
6181 (name "python-pycurl")
6182 (version "7.45.7")
6183 (source
6184 (origin
6185 (method git-fetch)
6186 (uri (git-reference
6187 (url "https://github.com/pycurl/pycurl")
6188 (commit (string-append
6189 "REL_" (string-replace-substring version "." "_")))))
6190 (file-name (git-file-name name version))
6191 (sha256
6192 (base32 "1gkbv3cvrwd7z3vgqlvcf0wpvm3g6dia8xbx3g4bplnb2cascfiq"))))
6193 (build-system pyproject-build-system)
6194 (arguments
6195 '(#:test-flags
6196 ;; The test suite is not thread safe:
6197 ;; - some tests want to use the same port: address already in use
6198 ;; - some tests use signal.Signal, i.e. main-thread only
6199 (list "-k" (string-append
6200 ;; OSError: tests/fake-curl/libcurl/with_gnutls.so: cannot
6201 ;; open shared object file: No such file or directory
6202 "not test_libcurl_ssl_gnutls"
6203 ;; OSError: tests/fake-curl/libcurl/with_nss.so: cannot
6204 ;; open shared object file: No such file or directory
6205 " and not test_libcurl_ssl_nss"
6206 ;; OSError: tests/fake-curl/libcurl/with_openssl.so: cannot
6207 ;; open shared object file: No such file or directory
6208 " and not test_libcurl_ssl_openssl"
6209 ;; "A requested feature, protocol or option was not
6210 ;; found built-in in this libcurl due to a build-time
6211 ;; decision."
6212 " and not test_issuercert_blob"
6213 " and not test_krb4level"
6214 " and not test_krblevel"))
6215 #:phases (modify-phases %standard-phases
6216 (add-before 'build 'configure-tls-backend
6217 (lambda _
6218 ;; XXX: PycURL fails to automatically determine which
6219 ;; TLS backend to use when cURL is built with
6220 ;; --disable-static. See setup.py and
6221 ;; <https://github.com/pycurl/pycurl/pull/147>.
6222 (setenv "PYCURL_SSL_LIBRARY" "gnutls"))))))
6223 (native-inputs
6224 (list python-bottle
6225 python-flaky
6226 python-flask
6227 python-pytest
6228 python-setuptools
6229 python-wheel))
6230 (inputs
6231 (list curl gnutls))
6232 (home-page "http://pycurl.io/")
6233 (synopsis "Lightweight Python wrapper around libcurl")
6234 (description "Pycurl is a lightweight wrapper around libcurl. It provides
6235high-speed transfers via libcurl and frequently outperforms alternatives.")
6236
6237 ;; Per 'README.rst', this is dual-licensed: users can redistribute pycurl
6238 ;; under the terms of LGPLv2.1+ or Expat.
6239 (license (list license:lgpl2.1+ license:expat))))
6240
6241(define-public python-stamina
6242 (package
6243 (name "python-stamina")
6244 (version "25.2.0")
6245 (source
6246 (origin
6247 (method git-fetch)
6248 (uri (git-reference
6249 (url "https://github.com/hynek/stamina")
6250 (commit version)))
6251 (file-name (git-file-name name version))
6252 (sha256
6253 (base32 "100iadhzmxbavk0ras3srnagh9af5pxbqrm4mrrkyy69knih9jiy"))))
6254 (build-system pyproject-build-system)
6255 (native-inputs
6256 (list python-pytest
6257 python-anyio
6258 python-dirty-equals
6259 python-hatch-fancy-pypi-readme
6260 python-hatch-vcs
6261 python-hatchling
6262 python-structlog))
6263 (propagated-inputs
6264 (list python-tenacity
6265 python-typing-extensions))
6266 (home-page "https://github.com/hynek/stamina")
6267 (synopsis "Retries library for Python")
6268 (description
6269 "@code{stamina} is an opinionated wrapper around the
6270@url{https://tenacity.readthedocs.io/en/latest/, Tenacity} package.")
6271 (license license:expat)))
6272
6273(define-public python-stripe
6274 (package
6275 (name "python-stripe")
6276 (version "13.2.0")
6277 (source
6278 (origin
6279 (method git-fetch)
6280 (uri (git-reference
6281 (url "https://github.com/stripe/stripe-python")
6282 (commit (string-append "v" version))))
6283 (file-name (git-file-name name version))
6284 (sha256
6285 (base32 "0f0d1hqias3qylrhk56w055lqrlzjs9s7wxva30v54ykmn9nj6dx"))))
6286 (build-system pyproject-build-system)
6287 (arguments
6288 '(#:tests? #f)) ;; tests require network
6289 (native-inputs
6290 (list python-flit-core))
6291 (propagated-inputs
6292 (list python-httpx
6293 python-requests))
6294 (home-page "https://github.com/stripe/stripe-python")
6295 (synopsis "Python bindings for the Stripe financial services' API")
6296 (description "This package provides access to the Stripe financial
6297services' API. It includes a pre-defined set of classes for API resources
6298that initialize themselves dynamically from API responses which makes it
6299compatible with a wide range of versions of the Stripe API.")
6300 (license license:expat)))
6301
6302(define-public python-stripe-12
6303 (hidden-package
6304 (package/inherit python-stripe
6305 (name "python-stripe")
6306 (version "12.5.1")
6307 (source
6308 (origin
6309 (inherit (package-source python-stripe))
6310 (uri (git-reference
6311 (url "https://github.com/stripe/stripe-python")
6312 (commit (string-append "v" version))))
6313 (file-name (git-file-name name version))
6314 (sha256 (base32
6315 "0jgixfb8ydlx387vm7rdaqrzsiqbvi99nszrpb1ghjqyn755xigd"))))
6316 (native-inputs
6317 (list python-setuptools)))))
6318
6319(define-public python-tldextract
6320 (package
6321 (name "python-tldextract")
6322 (version "5.3.0")
6323 (source
6324 (origin
6325 (method url-fetch)
6326 (uri (pypi-uri "tldextract" version))
6327 (sha256
6328 (base32 "02c6cyh8f3dagcw786m9nl5y0n3xa98p5mb7d7xfr84l2l5bglmk"))))
6329 (build-system pyproject-build-system)
6330 (arguments
6331 (list
6332 #:phases
6333 #~(modify-phases %standard-phases
6334 (add-after 'unpack 'relax-requirements
6335 (lambda _
6336 (substitute* "pyproject.toml"
6337 (("\"requests-file.*\",")
6338 "\"requests-file\",")))))))
6339 (native-inputs
6340 (list nss-certs-for-test
6341 python-pytest
6342 python-pytest-mock
6343 python-responses
6344 python-setuptools
6345 python-setuptools-scm
6346 python-syrupy))
6347 (propagated-inputs
6348 (list python-filelock
6349 python-idna
6350 python-requests
6351 python-requests-file))
6352 (home-page "https://github.com/john-kurkowski/tldextract")
6353 (synopsis
6354 "Separate the TLD from the registered domain and subdomains of a URL")
6355 (description
6356 "TLDExtract accurately separates the TLD from the registered domain and
6357subdomains of a URL, using the Public Suffix List. By default, this includes
6358the public ICANN TLDs and their exceptions. It can optionally support the
6359Public Suffix List's private domains as well.")
6360 (license license:bsd-3)))
6361
6362(define-public python-tracerite
6363 (package
6364 (name "python-tracerite")
6365 (version "2.5.2")
6366 (source
6367 (origin
6368 (method url-fetch)
6369 (uri (pypi-uri "tracerite" version))
6370 (sha256
6371 (base32 "087i51ybbj62nx5jzx8znhqb6cd7279mi7v9j6lrxf8lhb81nr3r"))))
6372 (build-system pyproject-build-system)
6373 (arguments
6374 (list #:tests? #f)) ;no tests in PyPI or Git
6375 (native-inputs
6376 (list python-hatch-vcs python-hatchling))
6377 (propagated-inputs
6378 (list python-html5tagger))
6379 (home-page "https://github.com/sanic-org/tracerite")
6380 (synopsis "Human-readable HTML tracebacks")
6381 (description
6382 "@code{tracerite} converts Python tracebacks into useful error messages
6383in human-readable HTML format.")
6384 (license license:unlicense)))
6385
6386(define-public python-trio-websocket
6387 (package
6388 (name "python-trio-websocket")
6389 (version "0.12.2")
6390 (source
6391 (origin
6392 (method git-fetch)
6393 (uri (git-reference
6394 (url "https://github.com/HyperionGray/trio-websocket")
6395 (commit version)))
6396 (file-name (git-file-name name version))
6397 (sha256
6398 (base32 "1lm712gakpskcn3adna22kj8m1hspz9l68pmlziklr0ycphmyqac"))))
6399 (build-system pyproject-build-system)
6400 (native-inputs
6401 (list python-pytest
6402 python-pytest-trio
6403 python-setuptools
6404 python-trustme))
6405 (propagated-inputs
6406 (list python-outcome
6407 python-trio
6408 python-wsproto))
6409 (home-page "https://github.com/HyperionGray/trio-websocket")
6410 (synopsis "WebSocket library for Trio")
6411 (description "This library implements both server and client aspects of
6412the @url{https://tools.ietf.org/html/rfc6455, the WebSocket protocol},
6413striving for safety, correctness, and ergonomics. It is based on the
6414@url{https://wsproto.readthedocs.io/en/latest/, wsproto project}, which is a
6415@url{https://sans-io.readthedocs.io/, Sans-IO} state machine that implements
6416the majority of the WebSocket protocol, including framing, codecs, and events.
6417This library handles I/O using @url{https://trio.readthedocs.io/en/latest/,
6418the Trio framework}.")
6419 (license license:expat)))
6420
6421(define-public python-txacme
6422 ;; 0.9.3 tag was placed in 2020 and there a lot of changes providing
6423 ;; compatibility with twisted, use the latest commit from trunk branch.
6424 ;;
6425 ;;See: <https://github.com/twisted/txacme/issues/165>.
6426 (let ((commit "ac18f92f6dde971a6b38f2ecfae44665815db583")
6427 (revision "0"))
6428 (package
6429 (name "python-txacme")
6430 (version (git-version "0.9.3" revision commit))
6431 (source
6432 (origin
6433 (method git-fetch) ;no fresh release in PyPI
6434 (uri (git-reference
6435 (url "https://github.com/twisted/txacme")
6436 (commit commit)))
6437 (file-name (git-file-name name version))
6438 (sha256
6439 (base32 "0mgdfxldv8qflbn75ywslbarnd4i3l7c4krs4aibl2dpryclsjzs"))))
6440 (build-system pyproject-build-system)
6441 (arguments
6442 (list #:test-backend #~'custom
6443 #:test-flags #~(list "-m" "twisted.trial" "txacme")))
6444 (native-inputs
6445 (list python-setuptools))
6446 (propagated-inputs
6447 (list python-acme
6448 python-attrs
6449 python-eliot
6450 python-josepy
6451 python-pem
6452 python-treq
6453 python-twisted
6454 python-txsni))
6455 (home-page "https://github.com/twisted/txacme")
6456 (synopsis "Twisted implexmentation of the ACME protocol")
6457 (description
6458 "ACME is Automatic Certificate Management Environment, a protocol that
6459allows clients and certificate authorities to automate verification and
6460certificate issuance. The ACME protocol is used by the free Let's Encrypt
6461Certificate Authority.
6462
6463txacme is an implementation of the protocol for Twisted, the event-driven
6464networking engine for Python.")
6465 (license license:expat))))
6466
6467(define-public python-txaio
6468 (package
6469 (name "python-txaio")
6470 (version "25.9.2")
6471 (source
6472 (origin
6473 (method url-fetch)
6474 (uri (pypi-uri "txaio" version))
6475 (sha256
6476 (base32 "16ch62yk2gdikkak113h6qw13ns9ksca817hky0vabn0fyh08874"))))
6477 (build-system pyproject-build-system)
6478 (native-inputs
6479 (list python-pytest
6480 python-setuptools))
6481 (home-page "https://github.com/crossbario/txaio")
6482 (synopsis "Compatibility layer between Python asyncio and Twisted")
6483 (description
6484 "Txaio provides a compatibility layer between the Python @code{asyncio}
6485 bsmodule and @code{Twisted}.")
6486 (license license:expat)))
6487
6488;; XXX: Potentially abandonware since 2017, consider to remove when nothing
6489;; depends on it or fails to build.
6490(define-public python-txamqp
6491 (package
6492 (name "python-txamqp")
6493 (version "0.8.2")
6494 (source
6495 (origin
6496 (method url-fetch)
6497 (uri (pypi-uri "txAMQP" version))
6498 (sha256
6499 (base32 "0jd9864k3csc06kipiwzjlk9mq4054s8kzk5q1cfnxj8572s4iv4"))))
6500 (build-system pyproject-build-system)
6501 (arguments
6502 (list #:tests? #f)) ;all tests failed
6503 (native-inputs
6504 (list python-setuptools))
6505 (propagated-inputs
6506 (list python-six python-twisted))
6507 (home-page "https://github.com/txamqp/txamqp")
6508 (synopsis "Communicate with AMQP peers and brokers using Twisted")
6509 (description
6510 "This package provides a Python library for communicating with AMQP peers
6511and brokers using the asynchronous networking framework Twisted. It contains
6512all the necessary code to connect, send and receive messages to/from an
6513AMQP-compliant peer or broker (Qpid, OpenAMQ, RabbitMQ) using Twisted. It
6514also includes support for using Thrift RPC over AMQP in Twisted
6515applications.")
6516 (license license:asl2.0)))
6517
6518(define-public python-txsni
6519 (package
6520 (name "python-txsni")
6521 (version "0.2.0")
6522 (source
6523 (origin
6524 (method git-fetch)
6525 (uri (git-reference
6526 (url "https://github.com/glyph/txsni")
6527 (commit (string-append "v" version))))
6528 (file-name (git-file-name name version))
6529 (sha256
6530 (base32 "1fl8xi7vl24hwbva5v41l6nsrbkj2l2mlsgcvdjxgph61aznwywq"))))
6531 (build-system pyproject-build-system)
6532 (arguments
6533 (list #:test-backend #~'custom
6534 #:test-flags #~(list "-m" "twisted.trial"
6535 "--temp-directory=/tmp/_trial_temp"
6536 "txsni")))
6537 (native-inputs
6538 (list python-setuptools))
6539 (propagated-inputs
6540 (list python-pyopenssl
6541 python-service-identity
6542 python-twisted))
6543 (home-page "https://github.com/glyph/txsni")
6544 (synopsis "Run TLS servers with Twisted")
6545 (description
6546 "This package provides an easy-to-use SNI endpoint for use with the
6547Twisted web framework.")
6548 (license license:expat)))
6549
6550(define-public python-txtorcon
6551 (package
6552 (name "python-txtorcon")
6553 (version "24.8.0")
6554 (source
6555 (origin
6556 (method url-fetch)
6557 (uri (pypi-uri "txtorcon" version))
6558 (sha256
6559 (base32 "1l4ajw4h7nay4vmllh6cs7zh3hnh8vj4yvgfnq3m734wil9ikzmy"))))
6560 (build-system pyproject-build-system)
6561 (native-inputs
6562 (list python-pytest
6563 python-setuptools
6564 python-wheel))
6565 (inputs
6566 (list lsof))
6567 (propagated-inputs
6568 (list python-automat
6569 python-idna
6570 python-incremental
6571 python-pyopenssl
6572 python-service-identity
6573 python-twisted
6574 python-zope-interface))
6575 (home-page "https://github.com/meejah/txtorcon")
6576 (synopsis "Twisted-based Tor controller client")
6577 (description
6578 "This package provides a Twisted-based Tor controller client,with
6579state-tracking and configuration abstractions.")
6580 (license license:expat)))
6581
6582(define-public python-url-normalize
6583 (package
6584 (name "python-url-normalize")
6585 (version "2.2.1")
6586 (source
6587 (origin
6588 (method git-fetch) ; no tests in PyPI release
6589 (uri (git-reference
6590 (url "https://github.com/niksite/url-normalize")
6591 (commit (string-append "v" version))))
6592 (file-name (git-file-name name version))
6593 (sha256
6594 (base32 "1yhsf4sk6l6nznpnqigisbfz690a4g342dsk2n6dggh7q4l3amk4"))))
6595 (build-system pyproject-build-system)
6596 (arguments
6597 (list
6598 #:test-flags #~(list "--ignore=tests/test_cli.py")))
6599 (native-inputs
6600 (list python-pytest python-pytest-socket python-setuptools))
6601 (propagated-inputs
6602 (list python-idna))
6603 (home-page "https://github.com/niksite/url-normalize")
6604 (synopsis "URL normalization for Python")
6605 (description
6606 "This package provides a URI Normalization function with following
6607features:
6608@itemize
6609@item take care of IDN domains
6610@item always provide the URI scheme in lowercase characters
6611@item always provide the host, if any, in lowercase characters
6612@item only perform percent-encoding where it is essential
6613@item always use uppercase A-through-F characters when percent-encoding
6614@item prevent dot-segments appearing in non-relative URI paths
6615@item for schemes that define a default authority, use an empty authority if
6616the default is desired
6617@item for schemes that define an empty path to be equivalent to a path of
6618@code{/}, use @code{/}
6619@item for schemes that define a port, use an empty port if the default is
6620desired
6621@item all portions of the URI must be utf-8 encoded NFC from Unicode strings
6622@end itemize")
6623 (license license:expat)))
6624
6625(define-public python-waitress
6626 (package
6627 (name "python-waitress")
6628 (version "3.0.2")
6629 (source
6630 (origin
6631 (method url-fetch)
6632 (uri (pypi-uri "waitress" version))
6633 (sha256
6634 (base32
6635 "07y3xyx2006f2ni5d55byh3y7w4kcg9xww7vmfjasi0cmzralak8"))))
6636 (build-system pyproject-build-system)
6637 (arguments
6638 (list
6639 ;; https://github.com/Pylons/waitress/issues/443
6640 #:test-flags #~(list "-k" "not test_service_port")))
6641 (native-inputs (list python-pytest python-setuptools))
6642 (home-page "https://github.com/Pylons/waitress")
6643 (synopsis "Waitress WSGI server")
6644 (description
6645 "Waitress is meant to be a production-quality pure-Python WSGI server
6646with very acceptable performance.")
6647 (license license:zpl2.1)))
6648
6649(define-public python-weasel
6650 (package
6651 (name "python-weasel")
6652 (version "1.0.0")
6653 (source
6654 (origin
6655 (method git-fetch)
6656 (uri (git-reference
6657 (url "https://github.com/explosion/weasel/")
6658 (commit (string-append "release-v" version))))
6659 (file-name (git-file-name name version))
6660 (sha256
6661 (base32 "1sxcxri9hl9rs1kvdrv81g6mlg7lifhq9xacskracz63v4nyh8na"))))
6662 (build-system pyproject-build-system)
6663 (arguments
6664 (list
6665 #:test-flags
6666 ;; This test raises an error, but not the one expected by pytest.
6667 #~(list (string-append "--deselect=weasel/tests/test_validation.py::"
6668 "test_project_config_interpolation[10_0]")
6669 ;; Network access is required.
6670 #$@(map (lambda (test) (string-append "--deselect="
6671 "weasel/tests/cli/"
6672 test))
6673 (list "test_cli.py::test_project_git_dir_asset"
6674 "test_cli.py::test_project_git_file_asset"
6675 "test_cli_app.py::test_project_assets")))))
6676 (native-inputs
6677 (list python-pytest
6678 python-setuptools))
6679 (propagated-inputs
6680 (list python-cloudpathlib
6681 python-confection
6682 python-httpx
6683 python-packaging
6684 python-pydantic
6685 python-smart-open
6686 python-srsly
6687 python-typer
6688 python-wasabi))
6689 (home-page "https://github.com/explosion/weasel/")
6690 (synopsis "Small and easy workflow system")
6691 (description
6692 "This package provides a minimalistic workflow system to manage and
6693share end-to-end workflows for different use cases and domains.")
6694 (license license:expat)))
6695
6696(define-public python-webencodings
6697 (package
6698 (name "python-webencodings")
6699 (version "0.5.1")
6700 (source
6701 (origin
6702 (method url-fetch)
6703 (uri (pypi-uri "webencodings" version))
6704 (sha256
6705 (base32 "08qrgrc4hrximb2gqnl69g01s93rhf2842jfxdjljc1dbwj1qsmk"))))
6706 (build-system pyproject-build-system)
6707 (arguments
6708 (list #:test-flags #~(list "webencodings/tests.py")))
6709 (native-inputs
6710 (list python-pytest python-setuptools))
6711 (home-page "https://github.com/SimonSapin/python-webencodings")
6712 (synopsis "Character encoding aliases for legacy web content")
6713 (description
6714 "In order to be compatible with legacy web content when interpreting
6715something like @code{Content-Type: text/html; charset=latin1}, tools need to
6716use a particular set of aliases for encoding labels as well as some overriding
6717rules. For example, @code{US-ASCII} and @code{iso-8859-1} on the web are
6718actually aliases for @code{windows-1252}, and a @code{UTF-8} or @code{UTF-16}
6719BOM takes precedence over any other encoding declaration. The WHATWG
6720@url{https://encoding.spec.whatwg.org/,Encoding} standard defines all such
6721details so that implementations do not have to reverse-engineer each other.
6722
6723This module implements the Encoding standard and has encoding labels and BOM
6724detection, but the actual implementation for encoders and decoders is
6725Python’s.")
6726 (license license:bsd-3)))
6727
6728(define-public python-omnipath
6729 (package
6730 (name "python-omnipath")
6731 (version "1.0.10")
6732 (source
6733 (origin
6734 (method git-fetch)
6735 (uri (git-reference
6736 (url "https://github.com/saezlab/omnipath/")
6737 (commit (string-append "v" version))))
6738 (file-name (git-file-name name version))
6739 (sha256
6740 (base32 "0jnc7nsn6n5hqx5wlk928b7xmg0mpfqy8al9w2p707ihcwh4s1rf"))))
6741 (build-system pyproject-build-system)
6742 (arguments
6743 (list
6744 #:test-flags '(list "-k"
6745 (string-append
6746 ;; These require internet access
6747 "not test_download_homologene"
6748 " and not test_complex_genes"
6749 ;; These tests are not compatible with pandas 3
6750 " and not test_no_dtype_conversion"
6751 " and not test_strip_resource_label_no_func"
6752 " and not test_split_unique_join_no_func"
6753 " and not test_auto_dtype"))
6754 #:phases
6755 #~(modify-phases %standard-phases
6756 (add-after 'unpack 'set-home
6757 (lambda _
6758 (setenv "HOME" "/tmp"))))))
6759 (propagated-inputs (list python-attrs
6760 python-docrep
6761 python-inflect
6762 python-networkx
6763 python-packaging
6764 python-pandas
6765 python-requests
6766 python-tqdm
6767 python-typing-extensions
6768 python-urllib3
6769 python-wrapt))
6770 (native-inputs (list nss-certs-for-test
6771 python-bump2version
6772 python-hatchling
6773 python-pytest
6774 python-pytest-mock
6775 python-pytest-socket
6776 python-requests-mock))
6777 (home-page "https://omnipathdb.org/")
6778 (synopsis "Python client for the OmniPath web service")
6779 (description "This package provides a Python client for the OmniPath web
6780service.")
6781 (license license:expat)))
6782
6783(define-public python-openai
6784 (package
6785 (name "python-openai")
6786 (version "2.42.0")
6787 (source
6788 (origin
6789 (method git-fetch)
6790 (uri (git-reference
6791 (url "https://github.com/openai/openai-python")
6792 (commit (string-append "v" version))))
6793 (file-name (git-file-name name version))
6794 (sha256
6795 (base32 "1p0vzy34cx2gfkhsqg2kxzam51cjlpa99q0skzj4426sx2hsw3g6"))))
6796 (build-system pyproject-build-system)
6797 (arguments
6798 (list
6799 #:test-flags
6800 ;; These require internet access and an openai API key.
6801 #~(list "--ignore=openai/tests/asyncio/test_endpoints.py"
6802 "--ignore=openai/tests/test_endpoints.py"
6803 "--ignore-glob=tests/api_resources/*")))
6804 (propagated-inputs
6805 (list python-aiohttp
6806 python-distro
6807 python-httpx
6808 python-jiter
6809 python-pydantic
6810 python-requests
6811 python-tqdm
6812 python-typing-extensions))
6813 (native-inputs
6814 (list nss-certs-for-test
6815 python-dirty-equals
6816 python-hatchling
6817 python-hatch-fancy-pypi-readme
6818 python-inline-snapshot
6819 python-pytest
6820 python-pytest-asyncio
6821 python-pytest-mock
6822 python-pytest-xdist
6823 python-respx
6824 python-rich
6825 python-setuptools))
6826 (home-page "https://github.com/openai/openai-python")
6827 (synopsis "Python client library for the OpenAI API")
6828 (description "This package provides a Python client library for the
6829OpenAI API.")
6830 (license license:expat)))
6831
6832(define-public python-openapi-schema-validator
6833 (package
6834 (name "python-openapi-schema-validator")
6835 (version "0.6.2")
6836 (source
6837 (origin
6838 (method git-fetch) ;no tests in pypi release
6839 (uri (git-reference
6840 (url "https://github.com/p1c2u/openapi-schema-validator")
6841 (commit version)))
6842 (file-name (git-file-name name version))
6843 (sha256
6844 (base32
6845 "0pgsm1x7lhc5ryj4l45ik8m5x9gqyi50dkflaiqqr4fnl0bsbx09"))))
6846 (build-system pyproject-build-system)
6847 (arguments
6848 (list
6849 #:test-flags
6850 ;; This one returns 5 instead of 4 elements
6851 '(list "-k" "not test_array_prefixitems_invalid")
6852 #:phases
6853 #~(modify-phases %standard-phases
6854 ;; See https://github.com/python-openapi/openapi-schema-validator/issues/204
6855 (add-after 'unpack 'relax-requirements
6856 (lambda _
6857 (substitute* "pyproject.toml"
6858 (("jsonschema-specifications.*")
6859 "jsonschema-specifications = \">=2023.5.2\"\n")))))))
6860 (native-inputs (list python-poetry-core python-pytest))
6861 (propagated-inputs
6862 (list python-isodate
6863 python-jsonschema
6864 python-rfc3339-validator
6865 python-strict-rfc3339))
6866 (home-page "https://github.com/p1c2u/openapi-schema-validator")
6867 (synopsis "OpenAPI schema validation library for Python")
6868 (description "Openapi-schema-validator is a Python library that validates
6869a schema against:
6870@itemize
6871@item OpenAPI Schema Specification v3.0 which is an extended subset of the
6872JSON Schema Specification Wright Draft 00.
6873@item OpenAPI Schema Specification v3.1 which is an extended superset of the
6874JSON Schema Specification Draft 2020-12.
6875@end itemize")
6876 (license license:bsd-3)))
6877
6878(define-public python-openapi-spec-validator
6879 (package
6880 (name "python-openapi-spec-validator")
6881 (version "0.7.1")
6882 (source
6883 (origin
6884 (method git-fetch) ;no tests in pypi release
6885 (uri (git-reference
6886 (url "https://github.com/p1c2u/openapi-spec-validator")
6887 (commit version)))
6888 (file-name (git-file-name name version))
6889 (sha256
6890 (base32
6891 "0s5yd4dbr6knwd2g1g4v2931k14n1lm80l11n2ija18yfis8yisz"))))
6892 (build-system pyproject-build-system)
6893 (arguments
6894 (list
6895 ;; These tests attempt to fetch resources from the Internet
6896 #:test-flags '(list "--ignore-glob=tests/integration/validation/**"
6897 "-k" "not example")))
6898 (native-inputs
6899 (list python-poetry-core
6900 python-pytest))
6901 (propagated-inputs
6902 (list python-jsonschema
6903 python-jsonschema-path
6904 python-lazy-object-proxy
6905 python-openapi-schema-validator
6906 python-pyyaml
6907 python-requests
6908 python-setuptools))
6909 (home-page "https://github.com/p1c2u/openapi-spec-validator")
6910 (synopsis "OpenAPI spec validator")
6911 (description "OpenAPI Spec Validator is a Python library that validates an
6912OpenAPI specification against the OpenAPI 2.0 (also known as Swagger), OpenAPI
69133.0 and OpenAPI 3.1 specifications. The validator aims to check for full
6914compliance with the specification.")
6915 (license license:asl2.0)))
6916
6917(define-public python-openapi-core
6918 (package
6919 (name "python-openapi-core")
6920 (version "0.19.4")
6921 (source
6922 (origin
6923 (method git-fetch)
6924 (uri (git-reference
6925 (url "https://github.com/p1c2u/openapi-core")
6926 (commit version)))
6927 (file-name (git-file-name name version))
6928 (sha256
6929 (base32
6930 "092sj2933jmvq5r76khr0vphih490vls1ga3s43gz8i47aqaxx96"))))
6931 (build-system pyproject-build-system)
6932 (arguments
6933 (list
6934 #:test-flags
6935 '(list "tests/unit"
6936 "-k" "not test_chars_valid")))
6937 (native-inputs (list python-django
6938 python-falcon
6939 python-flask
6940 python-mock
6941 python-poetry-core
6942 python-pytest
6943 python-pytest-asyncio
6944 python-responses))
6945 (propagated-inputs
6946 (list python-attrs
6947 python-aiohttp
6948 python-isodate
6949 python-jsonschema
6950 python-lazy-object-proxy
6951 python-more-itertools
6952 python-openapi-schema-validator
6953 python-openapi-spec-validator
6954 python-parse
6955 python-six
6956 python-werkzeug))
6957 (home-page "https://github.com/p1c2u/openapi-core")
6958 (synopsis "OpenAPI core library")
6959 (description "Openapi-core is a Python library that adds client-side and
6960server-side support for the OpenAPI Specification v3. It has features such
6961as:
6962@itemize
6963@item Validation of requests and responses
6964@item Schema casting and unmarshalling
6965@item Media type and parameters deserialization
6966@item Security providers (API keys, Cookie, Basic and Bearer HTTP
6967authentications)
6968@item Custom deserializers and formats
6969@item Integration with libraries and frameworks.
6970@end itemize")
6971 (license license:bsd-3)))
6972
6973(define-public python-openid
6974 (package
6975 (name "python-openid")
6976 (version "3.2.0")
6977 (source
6978 (origin
6979 (method url-fetch)
6980 (uri (pypi-uri "python3-openid" version))
6981 (sha256
6982 (base32
6983 "1bxf9a3ny1js422j962zfzl4a9dhj192pvai05whn7j0iy9gdyrk"))))
6984 (build-system pyproject-build-system)
6985 (arguments
6986 `(#:phases
6987 (modify-phases %standard-phases
6988 (replace 'check
6989 (lambda* (#:key tests? #:allow-other-keys)
6990 (when tests?
6991 (invoke "python" "-m" "unittest" "openid.test.test_suite")))))))
6992 (propagated-inputs
6993 (list python-defusedxml))
6994 (native-inputs
6995 (list python-psycopg2 python-django python-setuptools python-wheel))
6996 (home-page "https://github.com/necaris/python3-openid")
6997 (synopsis "OpenID support for servers and consumers")
6998 (description "This library provides OpenID authentication for Python, both
6999for clients and servers.")
7000 (license license:asl2.0)))
7001
7002(define-public python-cssutils
7003 (package
7004 (name "python-cssutils")
7005 (version "2.15.0")
7006 (source
7007 (origin
7008 (method url-fetch)
7009 (uri (pypi-uri "cssutils" version))
7010 (sha256
7011 (base32 "08fhyw7x88xzhphm6jc6v72kw3i8iysw91x7rgd3fl4iycvr4wz9"))))
7012 (build-system pyproject-build-system)
7013 (arguments
7014 (list
7015 ;; tests: 399 passed, 2 skipped, 43 xfailed
7016 #:test-flags
7017 ;; Examples try to access http://cthedot.de/not-present.css.
7018 #~(list "--ignore=examples/")))
7019 (native-inputs
7020 (list python-cssselect
7021 python-jaraco-test
7022 python-pytest
7023 python-setuptools))
7024 (propagated-inputs
7025 (list python-encutils python-more-itertools))
7026 (home-page "https://github.com/jaraco/cssutils")
7027 (synopsis "CSS Cascading Style Sheets library for Python")
7028 (description
7029 "Cssutils is a Python package for parsing and building CSS Cascading
7030Style Sheets. Currently it provides a DOM only and no rendering options.")
7031 (license license:lgpl3+)))
7032
7033(define-public python-css-parser
7034 (package
7035 (name "python-css-parser")
7036 (version "1.1.1")
7037 (source
7038 (origin
7039 (method git-fetch)
7040 (uri (git-reference
7041 (url "https://github.com/ebook-utils/css-parser")
7042 (commit (string-append "v" version))))
7043 (file-name (git-file-name name version))
7044 (sha256
7045 (base32 "0514g5a0r972lm883b3aja3b8jsxywmhxn4xpx7ksjpqmx38wga4"))))
7046 (build-system pyproject-build-system)
7047 (native-inputs
7048 (list python-pytest
7049 python-setuptools))
7050 (home-page "https://github.com/ebook-utils/css-parser")
7051 (synopsis "CSS related utilities for Python")
7052 (description
7053 "Css-parser is a Python package for parsing and building CSS
7054Cascading Style Sheets. Currently it provides a DOM only and no rendering
7055options.
7056
7057It's a fork of cssutils 1.0.2, updated and modified for parsing ebooks, due to
7058cssutils not receiving updates as of 1.0.2.")
7059 (license license:lgpl3+)))
7060
7061(define-public python-cssselect
7062 (package
7063 (name "python-cssselect")
7064 (version "1.4.0")
7065 (source
7066 (origin
7067 (method git-fetch)
7068 (uri (git-reference
7069 (url "https://github.com/scrapy/cssselect")
7070 (commit (string-append "v" version))))
7071 (file-name (git-file-name name version))
7072 (sha256
7073 (base32 "110l98x1mz1mxcal89xscsg28vg624sc0y6b5x1n2clwa19q5g4y"))))
7074 (build-system pyproject-build-system)
7075 (native-inputs
7076 (list python-hatchling python-lxml python-pytest))
7077 (home-page "https://github.com/scrapy/cssselect")
7078 (synopsis "CSS3 selector parser and translator to XPath 1.0")
7079 (description
7080 "Cssselect ia a Python module that parses CSS3 Selectors and translates
7081them to XPath 1.0 expressions. Such expressions can be used in lxml or
7082another XPath engine to find the matching elements in an XML or HTML document.")
7083 (license license:bsd-3)))
7084
7085(define-public python-databricks-cli
7086 (package
7087 (name "python-databricks-cli")
7088 (version "0.18.0")
7089 (home-page "https://github.com/databricks/databricks-cli")
7090 (source (origin
7091 (method git-fetch)
7092 (uri (git-reference (url home-page) (commit version)))
7093 (file-name (git-file-name name version))
7094 (sha256
7095 (base32
7096 "1avag4kwqk2f24r5i0vcmhm6s1gsw6maykhlyj2ixz0qc05pjzvl"))))
7097 (build-system pyproject-build-system)
7098 (arguments
7099 (list #:phases #~(modify-phases %standard-phases
7100 (replace 'check
7101 (lambda _
7102 (invoke "pytest" "tests" "-vv"))))))
7103 (native-inputs
7104 ;; For tests.
7105 (list python-decorator
7106 python-mock
7107 python-pytest
7108 python-requests-mock
7109 python-setuptools
7110 python-wheel))
7111 (propagated-inputs
7112 (list python-click
7113 python-oauthlib
7114 python-pyjwt
7115 python-requests
7116 python-six
7117 python-tabulate))
7118 (synopsis "Command line interface for Databricks")
7119 (description
7120 "The Databricks Command Line Interface is a tool which provides an easy
7121to use interface to the Databricks platform. The CLI is built on top of the
7122Databricks REST APIs.")
7123 (license license:asl2.0)))
7124
7125(define-public python-openid-cla
7126 ;; XXX: Last updated in 2015.
7127 (package
7128 (name "python-openid-cla")
7129 (version "1.2")
7130 (source
7131 (origin
7132 (method url-fetch)
7133 (uri (pypi-uri "python-openid-cla" version))
7134 (sha256
7135 (base32
7136 "102hy2qisvjxp5s0v9lvwqi4f2dk0dhns40vjgn008yxc7k0h3cr"))))
7137 (build-system pyproject-build-system)
7138 (arguments '(#:tests? #f)) ; No tests.
7139 (native-inputs (list python-setuptools python-wheel))
7140 (propagated-inputs (list python-openid python-six))
7141 (home-page "https://github.com/puiterwijk/python-openid-cla/")
7142 (synopsis "Implementation of the OpenID CLA extension for python-openid")
7143 (description "@code{openid-cla} is an implementation of the OpenID
7144contributor license agreement extension for python-openid.")
7145 (license license:bsd-3)))
7146
7147(define-public python-openid-teams
7148 ;; XXX: Last updated in 2018.
7149 (package
7150 (name "python-openid-teams")
7151 (version "1.1")
7152 (source
7153 (origin
7154 (method url-fetch)
7155 (uri (pypi-uri "python-openid-teams" version))
7156 (sha256
7157 (base32
7158 "05zrh78alav24rxkbqlpbad6d3x2nljk6z6j7kflxf3vdqa7w969"))))
7159 (build-system pyproject-build-system)
7160 (arguments '(#:tests? #f)) ; No tests.
7161 (native-inputs (list python-setuptools python-wheel))
7162 (propagated-inputs (list python-openid python-six))
7163 (home-page "https://github.com/puiterwijk/python-openid-teams/")
7164 (synopsis "Implementation of the OpenID teams extension for python-openid")
7165 (description
7166 "@code{openid-teams} is an implementation of the OpenID
7167teams extension for python-openid.")
7168 (license license:bsd-3)))
7169
7170(define-public python-priority
7171 (package
7172 (name "python-priority")
7173 (version "2.0.0")
7174 (source
7175 (origin
7176 (method url-fetch)
7177 (uri (pypi-uri "priority" version))
7178 (sha256
7179 (base32 "1h0qpa949bxx7za95v1apwnngkrngi695cwx8wchn3cd3d7xarf9"))))
7180 (build-system pyproject-build-system)
7181 (native-inputs
7182 (list python-pytest python-setuptools python-wheel))
7183 (home-page "https://python-hyper.org/projects/priority/en/latest/")
7184 (synopsis "Pure-Python implementation of the HTTP/2 priority tree")
7185 (description
7186 "Priority is a pure-Python implementation of the priority logic for HTTP/2,
7187set out in RFC 7540 Section 5.3 (Stream Priority).")
7188 (license license:expat)))
7189
7190(define-public python-weblate-language-data
7191 (package
7192 (name "python-weblate-language-data")
7193 (version "2025.8")
7194 (source
7195 (origin
7196 (method url-fetch)
7197 (uri (pypi-uri "weblate_language_data" version))
7198 (sha256
7199 (base32 "0byj1xl6xldam790b6wg62dk1b4i6qdlsp4lqzlv65wnp2klvrkf"))))
7200 (build-system pyproject-build-system)
7201 (arguments (list #:tests? #f)) ;not tests, just data files
7202 (native-inputs
7203 (list python-setuptools))
7204 (propagated-inputs
7205 (list python-translate-toolkit))
7206 (home-page "https://github.com/WeblateOrg/language-data")
7207 (synopsis "Language definitions for Weblate")
7208 (description
7209 "This package provides language definitions used by
7210@url{https://weblate.org/, Weblate}i.")
7211 (license license:expat)))
7212
7213(define-public python-wikidata
7214 (package
7215 (name "python-wikidata")
7216 (version "0.8.1")
7217 (source
7218 (origin
7219 (method git-fetch)
7220 (uri (git-reference
7221 (url "https://github.com/dahlia/wikidata")
7222 (commit version)))
7223 (file-name (git-file-name name version))
7224 (sha256
7225 (base32 "06zg74h249phszn1znfcjdz6c3lz350fiabdzn7iqb2xg4xh69a5"))))
7226 (build-system pyproject-build-system)
7227 (native-inputs
7228 (list python-pytest python-setuptools))
7229 (home-page "https://github.com/dahlia/wikidata")
7230 (synopsis "Wikidata client library")
7231 (description
7232 "This package provides a Python interface to @url{https://www.wikidata.org/,
7233Wikidata}.")
7234 (license license:gpl3+)))
7235
7236(define-public python-wsproto
7237 (package
7238 (name "python-wsproto")
7239 (version "1.3.2")
7240 (source
7241 (origin
7242 (method git-fetch)
7243 (uri (git-reference
7244 (url "https://github.com/python-hyper/wsproto/")
7245 (commit version)))
7246 (file-name (git-file-name name version))
7247 (sha256
7248 (base32 "1n67xnnq3mvnxp61r4d8730hh8hzrq8i9bdrv8jivhj369fhndn9"))))
7249 (build-system pyproject-build-system)
7250 (native-inputs
7251 (list python-pytest
7252 python-setuptools))
7253 (propagated-inputs
7254 (list python-h11))
7255 (home-page "https://github.com/python-hyper/wsproto/")
7256 (synopsis "WebSockets state-machine based protocol implementation")
7257 (description
7258 "@code{wsproto} is a pure-Python implementation of a WebSocket protocol
7259stack. It's written from the ground up to be embeddable in whatever program
7260you choose to use, ensuring that you can communicate via WebSockets, as
7261defined in RFC6455, regardless of your programming paradigm.")
7262 (license license:expat)))
7263
7264(define-public hypercorn
7265 (package
7266 (name "hypercorn")
7267 (version "0.18.0")
7268 (source
7269 (origin
7270 (method git-fetch) ;PyPI does not have tests
7271 (uri (git-reference
7272 (url "https://github.com/pgjones/hypercorn")
7273 (commit version)))
7274 (file-name (git-file-name name version))
7275 (sha256
7276 (base32 "0jdi05n5isxn0rysq242p198lz03gbwsnizzb9yp6rxr7ajapns4"))))
7277 (build-system pyproject-build-system)
7278 ;; Propagate because Hypercorn also exposes functionality over a module.
7279 (propagated-inputs (list python-h11
7280 python-h2
7281 python-priority
7282 python-tomli
7283 python-wsproto))
7284 (native-inputs (list nss-certs-for-test
7285 python-httpx
7286 python-pdm-backend
7287 python-poetry-core
7288 python-pytest
7289 python-pytest-asyncio
7290 python-pytest-trio
7291 python-trio))
7292 (home-page "https://gitlab.com/pgjones/hypercorn/")
7293 (synopsis "ASGI Server based on Hyper libraries")
7294 (description
7295 "Hypercorn is an ASGI web server based on the sans-io hyper, h11, h2, and
7296wsproto libraries and inspired by Gunicorn. It supports HTTP/1, HTTP/2,
7297WebSockets (over HTTP/1 and HTTP/2), ASGI/2, and ASGI/3 specifications. It
7298can utilise asyncio, uvloop, or trio worker types.")
7299 (license license:expat)))
7300
7301(define-public python-querystring-parser
7302 (package
7303 (name "python-querystring-parser")
7304 (version "1.2.4")
7305 (source
7306 (origin
7307 (method git-fetch)
7308 (uri (git-reference
7309 (url "https://github.com/bernii/querystring-parser")
7310 (commit version)))
7311 (file-name (git-file-name name version))
7312 (sha256
7313 (base32 "15n89bf1x9dgp1vi697pa238nvn0vbqp3ghf0xrcyqqa9gn1l6fb"))))
7314 (build-system pyproject-build-system)
7315 (arguments
7316 (list
7317 #:test-backend #~'custom
7318 #:test-flags #~(list "querystring_parser/tests.py")
7319 #:phases
7320 #~(modify-phases %standard-phases
7321 (add-after 'unpack 'fix-python-incompatibilities
7322 (lambda _
7323 (substitute* "querystring_parser/tests.py"
7324 ;; XXX FIXME: This test is broken with Python 3.7:
7325 ;; https://github.com/bernii/querystring-parser/issues/35
7326 (("self\\.assertEqual\\(self\\.knownValuesNormalized, result\\)")
7327 "True")
7328 ;; Removed in Python 3.12.
7329 (("assertEquals")
7330 "assertEqual")))))))
7331 (native-inputs (list python-setuptools))
7332 (propagated-inputs (list python-six))
7333 (home-page "https://github.com/bernii/querystring-parser")
7334 (synopsis "QueryString parser that correctly handles nested dictionaries")
7335 (description
7336 "This package provides a query string parser for Python and Django
7337projects that correctly creates nested dictionaries from sent form/querystring
7338data.")
7339 (license license:expat)))
7340
7341(define-public python-tornado
7342 (package
7343 (name "python-tornado")
7344 (version "6.4.2")
7345 (source
7346 (origin
7347 (method url-fetch)
7348 (uri (pypi-uri "tornado" version))
7349 (sha256
7350 (base32 "02v2mlvr58xg0l0gh08nswl53z73wkf23sziggypk63ffjsdbflj"))))
7351 (build-system pyproject-build-system)
7352 (arguments
7353 (list
7354 #:test-flags
7355 ;; AttributeError: 'TestIOStreamWebMixin' object has no attribute 'io_loop'
7356 #~(list "--ignore=tornado/test/iostream_test.py")))
7357 (native-inputs
7358 (list python-certifi
7359 python-pytest
7360 python-setuptools))
7361 (home-page "https://www.tornadoweb.org/")
7362 (synopsis "Python web framework and asynchronous networking library")
7363 (description
7364 "Tornado is a Python web framework and asynchronous networking library,
7365originally developed at FriendFeed. By using non-blocking network I/O,
7366Tornado can scale to tens of thousands of open connections, making it ideal
7367for long polling, WebSockets, and other applications that require a long-lived
7368connection to each user.")
7369 (license license:asl2.0)))
7370
7371(define-public python-tornado-http-auth
7372 (package
7373 (name "python-tornado-http-auth")
7374 (version "1.1.1")
7375 (source
7376 (origin
7377 (method git-fetch)
7378 (uri (git-reference
7379 (url "https://github.com/gvalkov/tornado-http-auth")
7380 (commit (string-append "v" version))))
7381 (file-name (git-file-name name version))
7382 (sha256
7383 (base32 "1v9sin1zlck9wvkwx0ldqb1b271xlkq63562w8g1yb7v6qka9q4f"))))
7384 (build-system pyproject-build-system)
7385 ;; XXX: This version is incompatible with current tornado.testing.
7386 (arguments (list #:tests? #f))
7387 (native-inputs (list python-setuptools))
7388 (propagated-inputs (list python-tornado))
7389 (home-page "https://github.com/gvalkov/tornado-http-auth")
7390 (synopsis "Digest and basic authentication module for Tornado")
7391 (description
7392 "Provides support for adding authentication to services using the Tornado
7393web framework, either via the basic or digest authentication schemes.")
7394 (license license:asl2.0)))
7395
7396(define-public python-wsgi-intercept
7397 (package
7398 (name "python-wsgi-intercept")
7399 (version "1.13.1")
7400 (source (origin
7401 (method url-fetch)
7402 (uri (pypi-uri "wsgi_intercept" version))
7403 (sha256
7404 (base32
7405 "1h94dj7h7n7zdj3ll4imqjhq5vk21yidk2niwnmpw7xik9inrgbr"))))
7406 (build-system pyproject-build-system)
7407 (arguments
7408 (list
7409 ;; XXX: tests required internet access
7410 #:tests? #f))
7411 (propagated-inputs
7412 (list python-six))
7413 (native-inputs
7414 (list python-httplib2
7415 python-pytest
7416 python-requests
7417 python-setuptools
7418 python-urllib3
7419 python-wheel))
7420 (synopsis "Puts a WSGI application in place of a real URI for testing")
7421 (description "Wsgi_intercept installs a WSGI application in place of a real
7422URI for testing. Testing a WSGI application normally involves starting a
7423server at a local host and port, then pointing your test code to that address.
7424Instead, this library lets you intercept calls to any specific host/port
7425combination and redirect them into a WSGI application importable by your test
7426program. Thus, you can avoid spawning multiple processes or threads to test
7427your Web app.")
7428 (home-page "https://github.com/cdent/wsgi-intercept")
7429 (license license:expat)))
7430
7431(define-public python-webob
7432 (package
7433 (name "python-webob")
7434 (version "1.8.10")
7435 (source
7436 (origin
7437 (method url-fetch)
7438 (uri (pypi-uri "webob" version))
7439 (sha256
7440 (base32
7441 "0avwfsqqva46aix1p61jbwjsw7kh6zkxvfds9xi3zg07yc8km5hw"))))
7442 (build-system pyproject-build-system)
7443 ;; tests: 2394 passed, 9 skipped, 1 xfailed, 35 warnings
7444 (native-inputs
7445 (list python-pytest
7446 python-setuptools))
7447 (home-page "https://webob.org/")
7448 (synopsis "WSGI request and response object")
7449 (description
7450 "WebOb provides wrappers around the WSGI request environment, and an
7451object to help create WSGI responses.")
7452 (license license:expat)))
7453
7454(define-public python-yewtube-search
7455 (package
7456 (name "python-yewtube-search")
7457 ;; Original repository for python-youtube-search package is archived, see:
7458 ;; <https://github.com/alexmercerind/youtube-search-python/issues/189>.
7459 ;; The most promising fork was
7460 ;; <https://github.com/ahmedayyad-dev/youtube-search-python-fork> which is
7461 ;; archived since <2026-04-04>. This is another fork with a different PyPI
7462 ;; name for python-yewtube.
7463 (version "1.6.7")
7464 (source
7465 (origin
7466 (method url-fetch)
7467 (uri (pypi-uri "yewtube_search_python" version))
7468 (sha256
7469 (base32 "0vjh4wrlqx4lv9qi6572jx2d0rsp6gkvaqf0f2ar4npdz0ldgl47"))))
7470 (build-system pyproject-build-system)
7471 (arguments (list #:tests? #f)) ;no tests in repository
7472 (native-inputs
7473 (list python-setuptools))
7474 (propagated-inputs
7475 (list python-httpx))
7476 (home-page "https://github.com/iamtalhaasghar/youtube-search-python")
7477 (synopsis "Search for YouTube videos, channels & playlists")
7478 (description
7479 "This package provides tools to search for @code{YouTube} videos,
7480channels and playlists; as well as getting video metadata from links. This
7481package does not rely on the @code{YouTube} Data API v3.")
7482 (license license:expat)))
7483
7484(define-public python-zc-lockfile
7485 (package
7486 (name "python-zc-lockfile")
7487 (version "4.0")
7488 (source
7489 (origin
7490 (method git-fetch)
7491 (uri (git-reference
7492 (url "https://github.com/zopefoundation/zc.lockfile")
7493 (commit version)))
7494 (file-name (git-file-name name version))
7495 (sha256
7496 (base32 "0b1kkwx2d4wf392sd3bfjvzgkdrknwsxg9mby121mq8zl7c490gg"))))
7497 (build-system pyproject-build-system)
7498 (arguments
7499 (list
7500 #:phases
7501 #~(modify-phases %standard-phases
7502 (replace 'check
7503 (lambda* (#:key tests? #:allow-other-keys)
7504 (if tests?
7505 (invoke "zope-testrunner" "--test-path=src")
7506 (format #t "test suite not run~%")))))))
7507 (native-inputs (list python-zope-testing python-zope-testrunner
7508 python-setuptools))
7509 (home-page "https://github.com/zopefoundation/zc.lockfile")
7510 (synopsis "Interprocess locks using lock files")
7511 (description
7512 "This package provides an implementation of interprocess locks using lock
7513files. These locks can also be used to mediate access to other files.")
7514 (license license:zpl2.1)))
7515
7516(define-public python-zconfig
7517 (package
7518 (name "python-zconfig")
7519 (version "4.3")
7520 (source
7521 (origin
7522 (method git-fetch)
7523 (uri (git-reference
7524 (url "https://github.com/zopefoundation/ZConfig/")
7525 (commit version)))
7526 (file-name (git-file-name name version))
7527 (sha256
7528 (base32 "06c4vffk51fw03q87r31s81b0xbxg2qqvjfmcl2z4hg21fr088c2"))))
7529 (build-system pyproject-build-system)
7530 (arguments
7531 (list
7532 #:phases
7533 #~(modify-phases %standard-phases
7534 (replace 'check
7535 (lambda* (#:key tests? #:allow-other-keys)
7536 (if tests?
7537 (begin
7538 ;; This test assumes we still have setup.py in the
7539 ;; directory from which we import zconfig, which
7540 ;; does not work after installing the package.
7541 (delete-file-recursively
7542 "src/ZConfig/tests/test_readme.py")
7543 (invoke "zope-testrunner" "-vv" "--test-path=src" "--all"))
7544 (format #t "test suite not run~%")))))))
7545 (native-inputs (list python-docutils python-manuel python-zope-exceptions
7546 python-zope-testrunner python-setuptools))
7547 (home-page "https://github.com/zopefoundation/ZConfig/")
7548 (synopsis "Structured configuration library intended for general use")
7549 (description
7550 "@code{zconfig} is a configuration library intended for general use. It
7551supports a hierarchical schema-driven configuration model that allows a schema
7552to specify data conversion routines written in Python. Its model is very
7553different from the model supported by the @code{configparser} module found in
7554Python's standard library, and is more suitable to configuration-intensive
7555applications.")
7556 (license license:zpl2.1)))
7557
7558(define-public python-zodb
7559 (package
7560 (name "python-zodb")
7561 (version "6.0.1")
7562 (source
7563 (origin
7564 (method url-fetch)
7565 (uri (pypi-uri "zodb" version))
7566 (sha256
7567 (base32 "02cmvf8j2nin5z26wvy2vq2k9mj12hqrr4276lj3w4jj32p0zxw9"))))
7568 (build-system pyproject-build-system)
7569 (arguments
7570 (list
7571 #:phases
7572 #~(modify-phases %standard-phases
7573 (replace 'check
7574 (lambda* (#:key tests? #:allow-other-keys)
7575 (if tests?
7576 (begin
7577 ;; This test does not work after installing the
7578 ;; package, since it expects the ZODB source code
7579 ;; to reside in the src/ directory.
7580 (delete-file-recursively
7581 "src/ZODB/tests/testdocumentation.py")
7582 (invoke "zope-testrunner" "-vv" "--test-path=src"
7583 "--all"))
7584 (format #t "test suite not run~%")))))))
7585 (native-inputs
7586 (list python-manuel
7587 python-wheel
7588 python-zope-testing
7589 python-zope-testrunner))
7590 (propagated-inputs
7591 (list python-btrees
7592 python-persistent
7593 python-transaction
7594 python-zc-lockfile
7595 python-zconfig
7596 python-zodbpickle
7597 python-zope-interface))
7598 (home-page "http://zodb-docs.readthedocs.io")
7599 (synopsis "Object-oriented database for Python")
7600 (description
7601 "@code{ZODB} provides an object-oriented and @acronym{ACID,
7602Atomicity Consistency Isolation Durability} compliant database for Python with
7603a high degree of transparency. @code{ZODB} is an object-oriented database,
7604not an object-relational mapping. This comes with several advantaged:
7605
7606@itemize
7607@item no separate language for database operations
7608@item very little impact on your code to make objects persistent
7609@item no database mapper that partially hides the database.
7610@item almost no seam between code and database.
7611@end itemize")
7612 (license license:zpl2.1)))
7613
7614(define-public python-zodbpickle
7615 (package
7616 (name "python-zodbpickle")
7617 (version "3.2")
7618 (source
7619 (origin
7620 (method url-fetch)
7621 (uri (pypi-uri "zodbpickle" version))
7622 (sha256
7623 (base32 "035bjrksl4h92mvjkx6id4gjcpc1k4mbci8ryjl6l9mki7ihx77b"))))
7624 (build-system pyproject-build-system)
7625 (arguments
7626 '(#:phases (modify-phases %standard-phases
7627 (replace 'check
7628 (lambda* (#:key tests? #:allow-other-keys)
7629 (if tests?
7630 (invoke "zope-testrunner" "-vv" "--test-path=src"
7631 "--all")
7632 (format #t "test suite not run~%")))))))
7633 (native-inputs (list python-zope-testrunner python-setuptools python-wheel))
7634 (home-page "https://github.com/zopefoundation/zodbpickle")
7635 (synopsis "Uniform pickling interface for @code{zodb}")
7636 (description
7637 "This package is a fork of the @code{pickle} module (and the
7638supporting C extension) from both Python 3.2 and Python 3.3. The fork adds
7639support for the @code{noload} operations used by @code{zodb}.")
7640 (license (list license:psfl license:zpl2.1))))
7641
7642(define-public python-zope-dottedname
7643 (package
7644 (name "python-zope-dottedname")
7645 (version "7.0")
7646 (source
7647 (origin
7648 (method git-fetch)
7649 (uri (git-reference
7650 (url "https://github.com/zopefoundation/zope.dottedname")
7651 (commit version)))
7652 (file-name (git-file-name name version))
7653 (sha256
7654 (base32 "0h7a637zsl1a3f0rpb2nw41mzxv0pqyj8ahn6h60n2c1px912rbd"))))
7655 (build-system pyproject-build-system)
7656 (arguments
7657 (list #:test-backend #~'custom
7658 #:test-flags #~(list "src/zope/dottedname/tests.py")))
7659 (native-inputs (list python-setuptools))
7660 (home-page "https://zopedottedname.readthedocs.io")
7661 (synopsis "Resolver for Python dotted names")
7662 (description
7663 "This package provides a @code{resolve()} function that resolves strings
7664containing dotted names into the appropriate Python object.")
7665 (license license:zpl2.1)))
7666
7667(define-public python-zope-event
7668 (package
7669 (name "python-zope-event")
7670 (version "6.0")
7671 (source
7672 (origin
7673 (method git-fetch)
7674 (uri (git-reference
7675 (url "https://github.com/zopefoundation/zope.event")
7676 (commit version)))
7677 (file-name (git-file-name name version))
7678 (sha256
7679 (base32 "0la3q47c59aq50s036q468bhnmzgs71f1cygv89w6qkk1hkn35ym"))))
7680 (build-system pyproject-build-system)
7681 (arguments
7682 (list
7683 #:test-flags
7684 #~(list "src/zope/event/tests.py")))
7685 (native-inputs (list python-pytest python-setuptools))
7686 (home-page "https://zopeevent.readthedocs.io/en/latest/")
7687 (synopsis "Event publishing system for Python")
7688 (description
7689 "Zope.event provides an event publishing API, intended for use by
7690applications which are unaware of any subscribers to their events. It is a
7691simple event-dispatching system on which more sophisticated event dispatching
7692systems can be built.")
7693 (license license:zpl2.1)))
7694
7695(define-public python-zope-interface
7696 (package
7697 (name "python-zope-interface")
7698 (version "7.2")
7699 (source
7700 (origin
7701 (method git-fetch)
7702 (uri (git-reference
7703 (url "https://github.com/zopefoundation/zope.interface")
7704 (commit version)))
7705 (file-name (git-file-name name version))
7706 (sha256
7707 (base32 "01snm1lbqhx3ird4m76nciaqasxvf8dd6817zm35v684g5hbzd2s"))))
7708 (build-system pyproject-build-system)
7709 (arguments
7710 ;; XXX: test suite can't find python-zope-testing
7711 (list #:tests? #f))
7712 (native-inputs (list python-setuptools))
7713 (home-page "https://zopeinterface.readthedocs.io")
7714 (synopsis "\"Design by contract\" methodology in Python")
7715 (description
7716 "Zope.interface provides an implementation of \"object interfaces\" for
7717Python. Interfaces are a mechanism for labeling objects as conforming to a
7718given API or contract.")
7719 (license license:zpl2.1)))
7720
7721(define-public python-zope-exceptions
7722 (package
7723 (name "python-zope-exceptions")
7724 (version "6.0")
7725 (source
7726 (origin
7727 (method git-fetch)
7728 (uri (git-reference
7729 (url "https://github.com/zopefoundation/zope.exceptions")
7730 (commit version)))
7731 (file-name (git-file-name name version))
7732 (sha256
7733 (base32 "0fmsw2j8islaiv6zf2mxh2s43y7virqny6s8gk8v2zkcxpy95cic"))))
7734 (build-system pyproject-build-system)
7735 (arguments
7736 (list
7737 #:phases
7738 #~(modify-phases %standard-phases
7739 (replace 'check
7740 (lambda* (#:key tests? #:allow-other-keys)
7741 (if tests?
7742 (invoke "zope-testrunner" "--test-path=src")
7743 (format #t "test suite not run~%")))))))
7744 (native-inputs (list python-setuptools python-zope-testrunner-bootstrap))
7745 (propagated-inputs (list python-zope-interface))
7746 (home-page "https://github.com/zopefoundation/zope.exceptions")
7747 (synopsis "Zope exceptions")
7748 (description
7749 "Zope.exceptions provides general-purpose exception types that have uses
7750outside of the Zope framework.")
7751 (license license:zpl2.1)))
7752
7753(define (python-zope-bootstrap-package orig)
7754 (package
7755 (inherit orig)
7756 (name (string-append (package-name orig) "-bootstrap"))
7757 (arguments
7758 (if (null? (package-arguments orig))
7759 (list
7760 #:tests? #f
7761 #:phases #~(modify-phases %standard-phases
7762 (delete 'sanity-check)))
7763 (substitute-keyword-arguments arguments
7764 ((#:tests? _ #f) #f)
7765 ((#:phases phases '%standard-phases)
7766 #~(modify-phases #$phases
7767 (delete 'sanity-check))))))
7768 (propagated-inputs `())
7769 (native-inputs (list python-setuptools))
7770 (properties `((hidden? . #t)))))
7771
7772(define-public python-zope-exceptions-bootstrap
7773 (python-zope-bootstrap-package python-zope-exceptions))
7774
7775(define-public python-zope-testing
7776 (package
7777 (name "python-zope-testing")
7778 (version "6.0")
7779 (source
7780 (origin
7781 (method git-fetch)
7782 (uri (git-reference
7783 (url "https://github.com/zopefoundation/zope.testing")
7784 (commit version)))
7785 (file-name (git-file-name name version))
7786 (sha256
7787 (base32 "0zqipsgv7qj7f8hrd3x6xpqwszdiac8vpjdm8ak5kljl5napw7d7"))))
7788 (build-system pyproject-build-system)
7789 (arguments
7790 (list
7791 #:phases
7792 #~(modify-phases %standard-phases
7793 (replace 'check
7794 (lambda* (#:key tests? #:allow-other-keys)
7795 (if tests?
7796 (invoke "zope-testrunner" "--test-path=src")
7797 (format #t "test suite not run~%")))))))
7798 (native-inputs (list python-setuptools
7799 python-zope-interface
7800 python-zope-testrunner-bootstrap))
7801 (home-page "https://zopetesting.readthedocs.io/")
7802 (synopsis "Zope testing helpers")
7803 (description
7804 "Zope.testing provides a number of testing utilities for HTML forms, HTTP
7805servers, regular expressions, and more.")
7806 (license license:zpl2.1)))
7807
7808(define-public python-zope-testrunner
7809 (package
7810 (name "python-zope-testrunner")
7811 (version "7.4")
7812 (source
7813 (origin
7814 (method git-fetch)
7815 (uri (git-reference
7816 (url "https://github.com/zopefoundation/zope.testrunner")
7817 (commit version)))
7818 (file-name (git-file-name name version))
7819 (sha256
7820 (base32 "0gd5rnzw6vzbx766jxqr4zc6qx7gk75r2c0nqqvhkb12hzk5ca2g"))))
7821 (build-system pyproject-build-system)
7822 (arguments
7823 (list
7824 #:phases
7825 #~(modify-phases %standard-phases
7826 (add-after 'unpack 'remove-problematic-test
7827 (lambda _
7828 ;; This test contains invalid syntax, which breaks bytecode
7829 ;; compilation. For simplicity just remove it.
7830 (delete-file
7831 "src/zope/testrunner/tests/testrunner-ex/sample2/badsyntax.py")))
7832 (replace 'check
7833 (lambda* (#:key tests? #:allow-other-keys)
7834 (if tests?
7835 (invoke "zope-testrunner" "--test-path=src")
7836 (format #t "test suite not run~%")))))))
7837 (native-inputs (list python-setuptools python-zope-testing))
7838 (propagated-inputs (list python-zope-exceptions python-zope-interface))
7839 (home-page "https://zopetestrunner.readthedocs.io")
7840 (synopsis "Zope testrunner script")
7841 (description "This package provides a script for running Python tests.")
7842 (license license:zpl2.1)))
7843
7844(define-public python-zope-testrunner-bootstrap
7845 (package
7846 (inherit (python-zope-bootstrap-package python-zope-testrunner))
7847 (propagated-inputs
7848 (list python-six python-zope-exceptions-bootstrap))
7849 (properties `((hidden? . #t)))))
7850
7851(define-public python-zope-i18nmessageid
7852 (package
7853 (name "python-zope-i18nmessageid")
7854 (version "7.0")
7855 (source
7856 (origin
7857 (method git-fetch)
7858 (uri (git-reference
7859 (url "https://github.com/zopefoundation/zope.i18nmessageid")
7860 (commit version)))
7861 (file-name (git-file-name name version))
7862 (sha256
7863 (base32 "192ixj8r9n467avbxrmhakmqiaflc1vw37k08z096ajcjgbfrm5d"))))
7864 (build-system pyproject-build-system)
7865 (arguments
7866 (list
7867 #:phases
7868 #~(modify-phases %standard-phases
7869 (replace 'check
7870 (lambda* (#:key tests? #:allow-other-keys)
7871 (if tests?
7872 (invoke "zope-testrunner" "--test-path=src")
7873 (format #t "test suite not run~%")))))))
7874 (native-inputs (list python-setuptools python-zope-testrunner))
7875 (home-page "https://zopei18nmessageid.readthedocs.io")
7876 (synopsis "Message identifiers for internationalization")
7877 (description "Zope.i18nmessageid provides facilities for declaring
7878internationalized messages within program source text.")
7879 (license license:zpl2.1)))
7880
7881(define-public python-zope-schema
7882 (package
7883 (name "python-zope-schema")
7884 (version "7.0.1")
7885 (source
7886 (origin
7887 (method git-fetch)
7888 (uri (git-reference
7889 (url "https://github.com/zopefoundation/zope.schema")
7890 (commit version)))
7891 (file-name (git-file-name name version))
7892 (sha256
7893 (base32 "1hj6j0gqgvv9a5pyaz54wbn8n7wf9lyg4njb2cfs980z0d5faj39"))))
7894 (build-system pyproject-build-system)
7895 (arguments
7896 (list
7897 #:phases
7898 #~(modify-phases %standard-phases
7899 (replace 'check
7900 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
7901 (add-installed-pythonpath inputs outputs)
7902 (if tests?
7903 (invoke "zope-testrunner" "--test-path=src")
7904 (format #t "test suite not run.~%")))))))
7905 (propagated-inputs (list python-zope-event python-zope-interface))
7906 (native-inputs (list python-zope-i18nmessageid python-zope-testing
7907 python-zope-testrunner python-setuptools))
7908 (home-page "https://zopeschema.readthedocs.io")
7909 (synopsis "Zope data schemas")
7910 (description "Zope.scheme provides extensions to zope.interface for
7911defining data schemas.")
7912 (license license:zpl2.1)))
7913
7914(define-public python-zope-sqlalchemy
7915 (package
7916 (name "python-zope-sqlalchemy")
7917 (version "1.6")
7918 (source
7919 (origin
7920 (method git-fetch)
7921 (uri (git-reference
7922 (url "https://github.com/zopefoundation/zope.sqlalchemy")
7923 (commit version)))
7924 (file-name (git-file-name name version))
7925 (sha256
7926 (base32 "1z4gw4i95dyqxsvrahk4fav008045n8kyxpn3fa887snmpvcjhng"))))
7927 (build-system pyproject-build-system)
7928 (arguments
7929 (list
7930 #:phases
7931 #~(modify-phases %standard-phases
7932 (replace 'check
7933 (lambda* (#:key tests? #:allow-other-keys)
7934 (if tests?
7935 (invoke "zope-testrunner" "--test-path=src")
7936 (format #t "test suite not run~%")))))))
7937 (propagated-inputs (list python-sqlalchemy python-transaction
7938 python-zope-interface))
7939 (native-inputs (list python-zope-testing python-zope-testrunner
7940 python-setuptools))
7941 (home-page "https://github.com/zopefoundation/zope.sqlalchemy")
7942 (synopsis "Minimal SQLAlchemy transaction integration for Zope")
7943 (description
7944 "The aim of this package is to unify the plethora of existing packages
7945integrating SQLAlchemy with Zope's transaction management. As such,it only
7946provides a data manager and makes no attempt to define a @i{zopeish} way to
7947configure engines.")
7948 (license license:zpl2.1)))
7949
7950(define-public python-zope-configuration
7951 (package
7952 (name "python-zope-configuration")
7953 (version "7.0")
7954 (source
7955 (origin
7956 (method git-fetch)
7957 (uri (git-reference
7958 (url "https://github.com/zopefoundation/zope.configuration")
7959 (commit version)))
7960 (file-name (git-file-name name version))
7961 (sha256
7962 (base32 "11lr6z3jpz9835a1if89g3x7k31sviq2d0xvvic5xi4c980dbkhv"))))
7963 (build-system pyproject-build-system)
7964 (arguments
7965 (list
7966 #:phases
7967 #~(modify-phases %standard-phases
7968 (replace 'check
7969 (lambda* (#:key tests? #:allow-other-keys)
7970 (if tests?
7971 (invoke "zope-testrunner" "--test-path=src")
7972 (format #t "test suite not run~%")))))))
7973 (native-inputs (list python-manuel python-setuptools python-zope-testing
7974 python-zope-testrunner))
7975 (propagated-inputs (list python-zope-i18nmessageid python-zope-interface
7976 python-zope-schema))
7977 (home-page "https://zopeconfiguration.readthedocs.io")
7978 (synopsis "Zope Configuration Markup Language")
7979 (description "Zope.configuration implements ZCML, the Zope Configuration
7980Markup Language.")
7981 (license license:zpl2.1)))
7982
7983(define-public python-zope-configuration-bootstrap
7984 (python-zope-bootstrap-package python-zope-configuration))
7985
7986(define-public python-zope-copy
7987 (package
7988 (name "python-zope-copy")
7989 (version "6.0")
7990 (source
7991 (origin
7992 (method git-fetch)
7993 (uri (git-reference
7994 (url "https://github.com/zopefoundation/zope.copy")
7995 (commit version)))
7996 (file-name (git-file-name name version))
7997 (sha256
7998 (base32 "1ym82p9scpfi3rflxnlv55v0a7hra3rq4rrlw759maq05i8qp1w5"))))
7999 (build-system pyproject-build-system)
8000 (arguments
8001 (list
8002 #:phases
8003 #~(modify-phases %standard-phases
8004 (replace 'check
8005 (lambda* (#:key tests? #:allow-other-keys)
8006 (if tests?
8007 (invoke "zope-testrunner" "--test-path=src")
8008 (format #t "test suite not run~%")))))))
8009 (propagated-inputs (list python-zope-interface))
8010 (native-inputs
8011 (list python-zodbpickle
8012 python-zope-component-bootstrap
8013 python-zope-location-bootstrap
8014 python-zope-proxy
8015 python-zope-schema
8016 python-zope-testing
8017 python-zope-testrunner
8018 python-setuptools))
8019 (home-page "https://zopecopy.readthedocs.io")
8020 (synopsis "Pluggable object copying mechanism")
8021 (description
8022 "This package provides a pluggable mechanism for copying persistent objects.")
8023 (license license:zpl2.1)))
8024
8025(define-public python-zope-proxy
8026 (package
8027 (name "python-zope-proxy")
8028 (version "7.0")
8029 (source
8030 (origin
8031 (method git-fetch)
8032 (uri (git-reference
8033 (url "https://github.com/zopefoundation/zope.proxy")
8034 (commit version)))
8035 (file-name (git-file-name name version))
8036 (sha256
8037 (base32 "00r9f4n0cl3fyc5gyf5l43zh95cmzx1gz6wr04k17d7wm2gmivyn"))))
8038 (build-system pyproject-build-system)
8039 (arguments
8040 (list
8041 #:phases
8042 #~(modify-phases %standard-phases
8043 (replace 'check
8044 (lambda* (#:key tests? #:allow-other-keys)
8045 (if tests?
8046 (invoke "zope-testrunner" "--test-path=src")
8047 (format #t "test suite not run~%")))))))
8048 (native-inputs
8049 (list python-zope-location-bootstrap
8050 python-zope-security-bootstrap
8051 python-zope-testrunner
8052 python-setuptools))
8053 (propagated-inputs (list python-zope-interface))
8054 (home-page "https://zopeproxy.readthedocs.io")
8055 (synopsis "Generic, transparent proxies")
8056 (description
8057 "Zope.proxy provides generic, transparent proxies for Python. Proxies are
8058special objects which serve as mostly-transparent wrappers around another
8059object, intervening in the apparent behavior of the wrapped object only when
8060necessary to apply the policy (e.g., access checking, location brokering,
8061etc.) for which the proxy is responsible.")
8062 (license license:zpl2.1)))
8063
8064(define-public python-zope-proxy-bootstrap
8065 (python-zope-bootstrap-package python-zope-proxy))
8066
8067(define-public python-zope-hookable
8068 (package
8069 (name "python-zope-hookable")
8070 (version "7.0")
8071 (source
8072 (origin
8073 (method git-fetch)
8074 (uri (git-reference
8075 (url "https://github.com/zopefoundation/zope.hookable")
8076 (commit version)))
8077 (file-name (git-file-name name version))
8078 (sha256
8079 (base32 "1l94xzzpyslpgv2ghvl5qzpfcsq02kp04fmvl95d6jcmivmmr4m8"))))
8080 (build-system pyproject-build-system)
8081 (arguments
8082 (list
8083 #:phases
8084 #~(modify-phases %standard-phases
8085 (replace 'check
8086 (lambda* (#:key tests? #:allow-other-keys)
8087 (if tests?
8088 (invoke "zope-testrunner" "--test-path=src")
8089 (format #t "test suite not run~%")))))))
8090 (native-inputs (list python-zope-testing python-zope-testrunner
8091 python-setuptools))
8092 (home-page "https://zopehookable.readthedocs.io")
8093 (synopsis "Zope hookable")
8094 (description
8095 "This package supports the efficient creation of hookable objects, which
8096are callable objects that are meant to be optionally replaced. The idea is
8097that you create a function that does some default thing and make i hookable.
8098Later, someone can modify what it does by calling its sethook method and
8099changing its implementation. All users of the function, including those that
8100imported it, will see the change.")
8101 (license license:zpl2.1)))
8102
8103(define-public python-zope-location
8104 (package
8105 (name "python-zope-location")
8106 (version "6.0")
8107 (source
8108 (origin
8109 (method git-fetch)
8110 (uri (git-reference
8111 (url "https://github.com/zopefoundation/zope.location")
8112 (commit version)))
8113 (file-name (git-file-name name version))
8114 (sha256
8115 (base32 "1jfsmbxj6hz7kmk5b0351b63ssm7qfkgqmz9v7xb7wwlmxsxkcdk"))))
8116 (build-system pyproject-build-system)
8117 (arguments
8118 (list
8119 #:phases
8120 #~(modify-phases %standard-phases
8121 (replace 'check
8122 (lambda* (#:key tests? #:allow-other-keys)
8123 (if tests?
8124 (invoke "zope-testrunner" "--test-path=src")
8125 (format #t "test suite not run~%")))))))
8126 (native-inputs (list python-zope-testrunner python-setuptools))
8127 (propagated-inputs (list python-zope-interface python-zope-proxy
8128 python-zope-schema))
8129 (home-page "https://zopelocation.readthedocs.io")
8130 (synopsis "Zope location library")
8131 (description
8132 "Zope.location implements the concept of \"locations\" in Zope3, which
8133are are special objects that have a structural location.")
8134 (license license:zpl2.1)))
8135
8136(define-public python-zope-location-bootstrap
8137 (python-zope-bootstrap-package python-zope-location))
8138
8139(define-public python-zope-security
8140 (package
8141 (name "python-zope-security")
8142 (version "7.3")
8143 (source
8144 (origin
8145 (method git-fetch)
8146 (uri (git-reference
8147 (url "https://github.com/zopefoundation/zope.security")
8148 (commit version)))
8149 (file-name (git-file-name name version))
8150 (sha256
8151 (base32 "06x6qcls2mdl05xnsyy5h70mbgij8xb6ksxbawzrc23cq04nkvx7"))))
8152 (build-system pyproject-build-system)
8153 (arguments
8154 (list
8155 #:phases
8156 #~(modify-phases %standard-phases
8157 (replace 'check
8158 (lambda* (#:key tests? #:allow-other-keys)
8159 (if tests?
8160 (invoke "zope-testrunner" "--test-path=src")
8161 (format #t "test suite not run~%")))))))
8162 (propagated-inputs
8163 (list python-zope-component
8164 python-zope-i18nmessageid
8165 python-zope-interface
8166 python-zope-location
8167 python-zope-proxy
8168 python-zope-schema))
8169 (native-inputs
8170 (list python-btrees
8171 python-zope-component-bootstrap
8172 python-zope-configuration-bootstrap
8173 python-zope-location-bootstrap
8174 python-zope-testing
8175 python-zope-testrunner
8176 python-setuptools))
8177 (home-page "https://zopesecurity.readthedocs.io")
8178 (synopsis "Zope security framework")
8179 (description "Zope.security provides a generic mechanism to implement
8180security policies on Python objects.")
8181 (license license:zpl2.1)))
8182
8183(define-public python-zope-security-bootstrap
8184 (package
8185 (inherit (python-zope-bootstrap-package python-zope-security))
8186 (propagated-inputs
8187 (list python-zope-i18nmessageid
8188 python-zope-interface
8189 python-zope-proxy-bootstrap
8190 python-zope-schema))))
8191
8192(define-public python-zope-component
8193 (package
8194 (name "python-zope-component")
8195 (version "7.0")
8196 (source
8197 (origin
8198 (method git-fetch)
8199 (uri (git-reference
8200 (url "https://github.com/zopefoundation/zope.component")
8201 (commit version)))
8202 (file-name (git-file-name name version))
8203 (sha256
8204 (base32 "1jygzhcg9rppsrd8cwvm0944naq1ldjf0vcpgsz0glwcdnr7cyfw"))))
8205 (build-system pyproject-build-system)
8206 (arguments
8207 (list
8208 #:phases
8209 #~(modify-phases %standard-phases
8210 (replace 'check
8211 (lambda* (#:key tests? #:allow-other-keys)
8212 (if tests?
8213 (invoke "zope-testrunner" "--test-path=src")
8214 (format #t "test suite not run~%")))))))
8215 (native-inputs
8216 (list python-persistent
8217 python-zope-configuration-bootstrap
8218 python-zope-i18nmessageid
8219 python-zope-location-bootstrap
8220 python-zope-proxy-bootstrap
8221 python-zope-security-bootstrap
8222 python-zope-testing
8223 python-zope-testrunner
8224 python-setuptools))
8225 (propagated-inputs
8226 (list python-zope-deferredimport python-zope-deprecation
8227 python-zope-event python-zope-hookable python-zope-interface))
8228 (home-page "https://zopecomponent.readthedocs.io")
8229 (synopsis "Zope Component Architecture")
8230 (description
8231 "Zope.component represents the core of the Zope Component Architecture.
8232Together with the zope.interface package, it provides facilities for defining,
8233registering and looking up components.")
8234 (license license:zpl2.1)))
8235
8236(define-public python-zope-component-bootstrap
8237 (python-zope-bootstrap-package python-zope-component))
8238
8239(define-public python-zope-deferredimport
8240 (package
8241 (name "python-zope-deferredimport")
8242 (version "6.0")
8243 (source
8244 (origin
8245 (method git-fetch)
8246 (uri (git-reference
8247 (url "https://github.com/zopefoundation/zope.deferredimport")
8248 (commit version)))
8249 (file-name (git-file-name name version))
8250 (sha256
8251 (base32 "08j728nn1la570nny1xz1xvxcm9hf2mcc3im1bzcxxrrxh4kw3zd"))))
8252 (build-system pyproject-build-system)
8253 (arguments
8254 (list
8255 #:phases
8256 #~(modify-phases %standard-phases
8257 (replace 'check
8258 (lambda* (#:key tests? #:allow-other-keys)
8259 (if tests?
8260 (invoke "zope-testrunner" "--test-path=src")
8261 (format #t "test suite not run~%")))))))
8262 (propagated-inputs (list python-zope-proxy))
8263 (native-inputs (list python-zope-testrunner python-setuptools))
8264 (home-page "https://zopedeferredimport.readthedocs.io")
8265 (synopsis "Defer imports until used by code")
8266 (description
8267 "Often, especially for package modules, you want to import names for
8268convenience, but not actually perform the imports until necessary. The
8269@code{zope.deferredimport} package provided facilities for defining names in
8270modules that will be imported from somewhere else when used. You can also cause
8271deprecation warnings to be issued when a variable is used.")
8272 (license license:zpl2.1)))
8273
8274(define-public python-ndg-httpsclient
8275 (package
8276 (name "python-ndg-httpsclient")
8277 (version "0.5.1")
8278 (source
8279 (origin
8280 (method git-fetch)
8281 (uri (git-reference
8282 (url "https://github.com/cedadev/ndg_httpsclient/")
8283 (commit version)))
8284 (file-name (git-file-name name version))
8285 (sha256
8286 (base32 "0lhsgs4am4xyjssng5p0vkfwqncczj1dpa0vss4lrhzq86mnn5rz"))))
8287 (build-system pyproject-build-system)
8288 (arguments
8289 (list
8290 #:tests? #f)) ;Tests appear to require networking.
8291 (native-inputs (list python-setuptools))
8292 (propagated-inputs (list python-pyasn1 python-pyopenssl))
8293 (synopsis "HTTPS support for Python's httplib and urllib2")
8294 (description
8295 "This is a HTTPS client implementation for httplib and urllib2 based on
8296PyOpenSSL. PyOpenSSL provides a more fully-featured SSL implementation over
8297the default provided with Python and, importantly, enables full verification
8298of the SSL peer.")
8299 (home-page "https://github.com/cedadev/ndg_httpsclient/")
8300 (license license:bsd-3)))
8301
8302(define-public python-netaddr
8303 (package
8304 (name "python-netaddr")
8305 (version "1.3.0")
8306 (source
8307 (origin
8308 (method url-fetch)
8309 (uri (pypi-uri "netaddr" version))
8310 (sha256
8311 (base32 "12p4ysgawhgkka0sz1dkwgwc2za80dxdp9wvfxivfldmjnc3sg2w"))))
8312 (build-system pyproject-build-system)
8313 (native-inputs (list python-poetry-core
8314 python-pytest
8315 python-setuptools
8316 python-wheel))
8317 (home-page "https://netaddr.readthedocs.io")
8318 (synopsis "Pythonic manipulation of network addresses")
8319 (description
8320 "A Python library for representing and manipulating IPv4, IPv6, CIDR, EUI
8321and MAC network addresses.")
8322 (license license:bsd-3)))
8323
8324(define-public python-nh3
8325 (package
8326 (name "python-nh3")
8327 (version "0.2.20")
8328 (source
8329 (origin
8330 (method url-fetch)
8331 (uri (pypi-uri "nh3" version))
8332 (sha256
8333 (base32 "1mcf3y5294glji9lhzh57wymw4srbvzdg0kcakm0p2pqgwnw81cp"))))
8334 (build-system pyproject-build-system)
8335 (arguments
8336 (list
8337 #:imported-modules `(,@%cargo-build-system-modules
8338 ,@%pyproject-build-system-modules)
8339 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
8340 (guix build pyproject-build-system)
8341 (guix build utils))
8342 #:phases
8343 #~(modify-phases %standard-phases
8344 (add-after 'unpack 'prepare-cargo-build-system
8345 (lambda args
8346 (for-each
8347 (lambda (phase)
8348 (format #t "Running cargo phase: ~a~%" phase)
8349 (apply (assoc-ref cargo:%standard-phases phase)
8350 #:cargo-target #$(cargo-triplet)
8351 args))
8352 '(unpack-rust-crates
8353 configure
8354 check-for-pregenerated-files
8355 patch-cargo-checksums)))))))
8356 (native-inputs
8357 (append
8358 (list maturin python-pytest rust `(,rust "cargo"))
8359 (or (and=> (%current-target-system)
8360 (compose list make-rust-sysroot))
8361 '())))
8362 (inputs (cargo-inputs 'python-nh3))
8363 (home-page "https://nh3.readthedocs.io")
8364 (synopsis "Python bindings to Ammonia HTML sanitization library")
8365 (description "This package provides Python bindings to Ammonia HTML
8366sanitizer Rust crate.")
8367 (license license:expat)))
8368
8369(define-public python-noiseprotocol
8370 (package
8371 (name "python-noiseprotocol")
8372 (version "0.3.1")
8373 (source
8374 (origin
8375 (method git-fetch)
8376 (uri (git-reference
8377 (url "https://github.com/plizonczyk/noiseprotocol")
8378 (commit (string-append "v" version))))
8379 (file-name (git-file-name name version))
8380 (sha256
8381 (base32 "1mk0rqpjifdv3v1cjwkdnjbrfmzzjm9f3qqs1r8vii4j2wvhm6am"))))
8382 (build-system pyproject-build-system)
8383 (propagated-inputs (list python-cryptography))
8384 (native-inputs (list python-setuptools python-pytest))
8385 (home-page "https://github.com/plizonczyk/noiseprotocol")
8386 (synopsis "Implementation of Noise Protocol Framework")
8387 (description
8388 "This package provides an implementation of Noise Protocol Framework.")
8389 (license license:expat)))
8390
8391(define-public python-webrtcvad-wheels
8392 (package
8393 (name "python-webrtcvad-wheels")
8394 (version "2.0.14")
8395 (source
8396 (origin
8397 (method git-fetch)
8398 (uri (git-reference
8399 (url "https://github.com/daanzu/py-webrtcvad-wheels")
8400 (commit (string-append "v" version))))
8401 (file-name (git-file-name name version))
8402 (sha256
8403 (base32 "0sqgg8jmg2j14f4h96h0rs42kr460v65lhanps6lhdvj5zp81cbh"))))
8404 (build-system pyproject-build-system)
8405 (native-inputs (list python-psutil python-pytest python-setuptools))
8406 (home-page "https://github.com/daanzu/py-webrtcvad-wheels")
8407 (synopsis "Python interface to the WebRTC Voice Activity Detector (VAD)")
8408 (description
8409 "This package provides a Python interface to the Google
8410@url{https://webrtc.org/, WebRTC} @acronym{VAD, Voice Activity Detector}.")
8411 (license license:expat)))
8412
8413(define-public python-websocket-client
8414 (package
8415 (name "python-websocket-client")
8416 (version "1.8.0")
8417 (source
8418 (origin
8419 (method url-fetch)
8420 (uri (pypi-uri "websocket_client" version))
8421 (sha256
8422 (base32 "1nn3qi5g59j55wfy2z02j6lq2cm281fq0wi406b2yqys8jgxyf9j"))))
8423 (build-system pyproject-build-system)
8424 (arguments
8425 (list
8426 #:test-flags
8427 ;; This test requires networking.
8428 '(list "-k" "not testConnect")))
8429 (native-inputs
8430 (list python-pysocks
8431 python-pytest
8432 python-setuptools
8433 python-websockets
8434 python-wheel))
8435 (home-page "https://github.com/websocket-client/websocket-client")
8436 (synopsis "WebSocket client for Python")
8437 (description "The Websocket-client module provides the low level APIs for
8438WebSocket usage in Python programs.")
8439 (license license:lgpl2.1+)))
8440
8441(define-public python-websocket-client-0.59
8442 (package
8443 (inherit python-websocket-client)
8444 (version "0.59.0")
8445 (source
8446 (origin
8447 (method url-fetch)
8448 (uri (pypi-uri "websocket-client" version))
8449 (sha256
8450 (base32 "0p0cz2mdissq7iw1n7jrmsfir0jfmgs1dvnpnrx477ffx9hbsxnk"))))
8451 (native-inputs
8452 (modify-inputs native-inputs
8453 (append python-six)))))
8454
8455(define-public python-purl
8456 (package
8457 (name "python-purl")
8458 (version "1.6")
8459 (source
8460 (origin
8461 (method git-fetch)
8462 (uri (git-reference
8463 (url "https://github.com/codeinthehole/purl")
8464 (commit version)))
8465 (file-name (git-file-name name version))
8466 (sha256
8467 (base32 "01zngf0s0qfsrsk0skn57frbzyscwv8467pfjk6hxdfgdx2wkg95"))))
8468 (build-system pyproject-build-system)
8469 (arguments
8470 (list
8471 #:test-flags #~(list "--pyargs" "./tests")))
8472 (native-inputs (list python-pytest python-setuptools))
8473 (propagated-inputs (list python-six))
8474 (home-page "https://github.com/codeinthehole/purl")
8475 (synopsis "Python package for URL manipulation")
8476 (description "Purl is a Python package for handling URLs.")
8477 (license license:expat)))
8478
8479(define-public python-requests
8480 (package
8481 (name "python-requests")
8482 (version "2.34.2")
8483 (source (origin
8484 (method url-fetch)
8485 (uri (pypi-uri "requests" version))
8486 (sha256
8487 (base32
8488 "1vdrc3lq9x848760n7mdhn8whsfslk30pmnnk0v4caafmr69527j"))))
8489 (build-system pyproject-build-system)
8490 (arguments
8491 (list #:test-flags
8492 ;; These require internet access
8493 '(list "--ignore=tests/test_requests.py"
8494 "-k" (string-append "not test_use_proxy_from_environment"
8495 " and not requests.sessions.Session"
8496 " and not requests.models.PreparedRequest"
8497 " and not requests.api.request")
8498 "tests/")))
8499 (propagated-inputs
8500 (list python-certifi
8501 python-charset-normalizer
8502 python-idna
8503 python-urllib3))
8504 (native-inputs
8505 (list python-pytest
8506 python-pytest-mock
8507 python-setuptools))
8508 (home-page "https://requests.readthedocs.io/")
8509 (synopsis "Python HTTP library")
8510 (description
8511 "Requests is a Python HTTP client library. It aims to be easier to use
8512than Python’s urllib2 library.")
8513 (license license:asl2.0)))
8514
8515(define-public python-requests-kerberos
8516 (package
8517 (name "python-requests-kerberos")
8518 (version "0.14.0")
8519 ;; No tests in the PyPI tarball.
8520 (source
8521 (origin
8522 (method git-fetch)
8523 (uri (git-reference
8524 (url "https://github.com/requests/requests-kerberos")
8525 (commit (string-append "v" version))))
8526 (file-name (git-file-name name version))
8527 (sha256
8528 (base32 "0s30pcnlir3j2jmf7yh065f294cf3x0x5i3ldskn8mm0a3657mv3"))))
8529 (build-system pyproject-build-system)
8530 (propagated-inputs (list python-cryptography
8531 python-pyspnego
8532 python-requests))
8533 (native-inputs (list python-pytest python-pytest-mock python-setuptools
8534 python-wheel))
8535 (home-page "https://github.com/requests/requests-kerberos")
8536 (synopsis "Kerberos authentication handler for python-requests")
8537 (description "This package provides a Kerberos authentication handler for
8538python-requests.")
8539 (license license:isc)))
8540
8541(define-public python-requests-unixsocket2
8542 (package
8543 (name "python-requests-unixsocket2")
8544 (version "1.0.1")
8545 (source
8546 (origin
8547 (method git-fetch)
8548 (uri (git-reference
8549 (url "https://gitlab.com/thelabnyc/requests-unixsocket2")
8550 (commit (string-append "v" version))))
8551 (sha256
8552 (base32 "0wb8ckagal9d6lfyl3pf9m45xn1krq6vg8kzciwv12chq9wwh0ra"))))
8553 (build-system pyproject-build-system)
8554 (native-inputs
8555 (list nss-certs-for-test
8556 python-hatchling
8557 python-pytest
8558 python-waitress))
8559 (propagated-inputs
8560 (list python-requests
8561 python-urllib3))
8562 (home-page "https://gitlab.com/thelabnyc/requests-unixsocket2")
8563 (synopsis "Talk HTTP via a UNIX domain socket")
8564 (description
8565 "This Python package lets you use the @code{requests} library to talk
8566HTTP via a UNIX domain socket.")
8567 (license license:asl2.0)))
8568
8569(define-public python-requests-ntlm
8570 (package
8571 (name "python-requests-ntlm")
8572 (version "1.3.0")
8573 (source
8574 (origin
8575 (method git-fetch)
8576 (uri (git-reference
8577 (url "https://github.com/requests/requests-ntlm")
8578 (commit (string-append "v" version))))
8579 (file-name (git-file-name name version))
8580 (sha256
8581 (base32 "0snsk66zdihdlyfjz2zgpyfgdyjg814m3cc4g3my09hdnb5xvagv"))))
8582 (build-system pyproject-build-system)
8583 (arguments
8584 (list
8585 #:test-flags
8586 ;; XXX: Connection refused.
8587 #~(list "-k" (string-join
8588 (list "not test_ntlm_http_with_cbt"
8589 "test_ntlm_http_without_cbt"
8590 "test_ntlm_https_with_cbt"
8591 "test_ntlm_https_without_cbt")
8592 " and not "))
8593 #:phases
8594 #~(modify-phases %standard-phases
8595 (add-before 'check 'spawn-test-server
8596 (lambda _
8597 ;; Taken from .github/workflows/ci.yml.
8598 (spawn "python"
8599 (list "python" "-m" "tests.test_server")))))))
8600 (propagated-inputs
8601 (list python-cryptography python-pyspnego python-requests))
8602 (native-inputs (list python-flask python-pytest python-setuptools))
8603 (home-page "https://github.com/requests/requests-ntlm")
8604 (synopsis "NTLM authentication support for Requests")
8605 (description
8606 "This package allows for HTTP NTLM authentication using the requests
8607library.")
8608 (license license:isc)))
8609
8610(define-public python-requests-mock
8611 (package
8612 (name "python-requests-mock")
8613 (version "1.12.1")
8614 (source
8615 (origin
8616 (method url-fetch)
8617 (uri (pypi-uri "requests-mock" version))
8618 (sha256
8619 (base32 "008l6xysgs6ax56lairg1li5i4bb04i2z19w5bl5claj7crjxqg9"))))
8620 (build-system pyproject-build-system)
8621 (native-inputs
8622 (list python-purl
8623 python-pytest
8624 python-requests-futures
8625 python-setuptools
8626 python-setuptools-scm
8627 python-testtools))
8628 (propagated-inputs
8629 (list python-requests))
8630 (home-page "https://requests-mock.readthedocs.org/")
8631 (synopsis "Mock out responses from the requests package")
8632 (description
8633 "This module provides a building block to stub out the HTTP requests
8634portions of your testing code.")
8635 (license license:asl2.0)))
8636
8637(define-public python-requests-toolbelt
8638 (package
8639 (name "python-requests-toolbelt")
8640 (version "1.0.0")
8641 (source
8642 (origin
8643 (method url-fetch)
8644 (uri (pypi-uri "requests-toolbelt" version))
8645 (sha256
8646 (base32 "1ijvip427ki177ycrblcn1mfgsq7ixzpvqqfvidjn0a7s2is10bn"))))
8647 (build-system pyproject-build-system)
8648 (arguments
8649 (list
8650 #:test-flags
8651 ;; Requiring networking or fail due not valid certs: AttributeError:
8652 ;; 'MockHTTPResponse' object has no attribute 'close'
8653 #~(list "-k" (string-append "not test_dump_all"
8654 " and not test_dump_response"
8655 " and not test_prepared_request_override_base"
8656 " and not test_prepared_request_with_base"
8657 " and not test_request_override_base"
8658 " and not test_request_with_base"))))
8659 (native-inputs
8660 (list python-betamax
8661 python-mock
8662 python-pyopenssl
8663 python-pytest
8664 python-setuptools
8665 python-trustme
8666 python-wheel))
8667 (propagated-inputs
8668 (list python-requests))
8669 (synopsis "Extensions to python-requests")
8670 (description "This is a toolbelt of useful classes and functions to be used
8671with python-requests.")
8672 (home-page "https://github.com/requests/toolbelt/")
8673 (license license:asl2.0)))
8674
8675(define-public python-requests-ftp
8676 (package
8677 (name "python-requests-ftp")
8678 (version "0.3.1")
8679 (source
8680 (origin
8681 (method git-fetch)
8682 (uri (git-reference
8683 (url "https://github.com/Lukasa/requests-ftp")
8684 (commit (string-append "v" version))))
8685 (file-name (git-file-name name version))
8686 (sha256
8687 (base32 "1c7xbz2fxb12ldaw2pkfg5qd29g6slf4a2gavhqvz26cd1r82ny7"))))
8688 (build-system pyproject-build-system)
8689 (arguments
8690 ;; XXX: No connection adapters found.
8691 (list #:test-flags #~(list "--ignore=tests/test_ftp_proxy.py")))
8692 (native-inputs
8693 (list python-pyftpdlib python-pytest python-setuptools python-six))
8694 (propagated-inputs (list python-requests))
8695 (home-page "https://github.com/Lukasa/requests-ftp")
8696 (synopsis "FTP Transport Adapter for Requests")
8697 (description "Requests-FTP is an implementation of a simple FTP transport
8698adapter for use with the Requests library.")
8699 (license license:asl2.0)))
8700
8701(define-public python-mohawk
8702 (let ((commit "b7899166880e890f01cf2531b5686094ba08df8f")
8703 (revision "0"))
8704 (package
8705 (name "python-mohawk")
8706 (version (git-version "1.1.0" revision commit))
8707 (source
8708 (origin
8709 (method git-fetch)
8710 (uri (git-reference
8711 (url "https://github.com/kumar303/mohawk")
8712 (commit commit)))
8713 (file-name (git-file-name name version))
8714 (sha256
8715 (base32 "00y9fimcj851rk2770wqk61fac9pnxfnzca4fvsci57zw18i50m6"))
8716 (patches
8717 (search-patches "python-mohawk-pytest.patch"))))
8718 (build-system pyproject-build-system)
8719 (arguments
8720 (list #:test-flags #~(list "mohawk/tests.py")))
8721 (native-inputs (list python-pytest python-setuptools))
8722 (propagated-inputs (list python-six)) ;TODO: remove python-mohawk when
8723 ;python-six is removed?
8724 (home-page "https://github.com/kumar303/mohawk")
8725 (synopsis "Library for Hawk HTTP authorization")
8726 (description
8727 "Mohawk is an alternate Python implementation of the Hawk HTTP
8728authorization scheme.")
8729 (license license:bsd-3))))
8730
8731(define-public python-msal
8732 (package
8733 (name "python-msal")
8734 (version "1.34.0")
8735 (home-page
8736 "https://github.com/AzureAD/microsoft-authentication-library-for-python")
8737 (source
8738 (origin
8739 (method git-fetch)
8740 (uri (git-reference
8741 (url home-page)
8742 (commit version)))
8743 (file-name (git-file-name name version))
8744 (sha256
8745 (base32 "1xcyiv742ihnzypjw7syamnhqffdy6wsvvv0f5jcl3pap0apbk0z"))
8746 (patches (search-patches "python-msal-requests.patch"))))
8747 (build-system pyproject-build-system)
8748 (arguments
8749 (list
8750 #:test-flags
8751 #~(list
8752 "--ignore=tests/test_benchmark.py"
8753 ;; XXX: Ignoring cryptography version scheme tests.
8754 "-k"
8755 "not test_ceiling_should_be_latest_cryptography_version_plus_three"
8756 ;; XXX: These tests try to access the network.
8757 "--ignore=tests/test_application.py"
8758 "--ignore=tests/test_ccs.py"
8759 ;; XXX: These tests assume they are run on Windows.
8760 "--ignore=tests/test_mi.py")
8761 #:phases
8762 #~(modify-phases %standard-phases
8763 (add-after 'unpack 'set-cryptography-version
8764 (lambda _
8765 (substitute* "tests/test_cryptography.py"
8766 (("^latest_cryptography_version = @version@")
8767 (format #f "latest_cryptography_version = ~s"
8768 #$(package-version
8769 (this-package-input "python-cryptography")))))))
8770 (add-before 'check 'configure-tests
8771 (lambda* (#:key tests? #:allow-other-keys)
8772 (when tests?
8773 (setenv "TRAVIS_TAG" "1")))))))
8774 (native-inputs
8775 (list nss-certs-for-test python-mock python-pytest python-setuptools))
8776 (propagated-inputs (list python-cryptography python-pyjwt python-requests))
8777 (synopsis "Microsoft Authentication Library (MSAL) for Python")
8778 (description
8779 "The Microsoft Authentication Library for Python enables applications to
8780integrate with the Microsoft identity platform. It allows you to sign in
8781users or apps with Microsoft identities (Azure AD, Microsoft Accounts and
8782Azure AD B2C accounts) and obtain tokens to call Microsoft APIs such as
8783Microsoft Graph or your own APIs registered with the Microsoft identity
8784platform. It is built using industry standard OAuth2 and OpenID Connect
8785protocols.")
8786 (license license:expat)))
8787
8788(define-public python-oauthlib
8789 (package
8790 (name "python-oauthlib")
8791 (version "3.3.1")
8792 (source
8793 (origin
8794 (method git-fetch)
8795 (uri (git-reference
8796 (url "https://github.com/oauthlib/oauthlib")
8797 (commit (string-append "v" version))))
8798 (file-name (git-file-name name version))
8799 (sha256
8800 (base32 "0aa38lpa6s1k56v7w7kw2w4l159kaz4gn03m698a8hfdjkx92fb5"))))
8801 (build-system pyproject-build-system)
8802 (native-inputs (list python-pytest python-mock python-setuptools))
8803 (propagated-inputs (list python-cryptography python-pyjwt python-blinker))
8804 (home-page "https://github.com/oauthlib/oauthlib")
8805 (synopsis "OAuth implementation for Python")
8806 (description
8807 "Oauthlib is a generic, spec-compliant, thorough implementation of the
8808OAuth request-signing logic.")
8809 (license license:bsd-3)))
8810
8811(define-public python-urllib3
8812 (package
8813 (name "python-urllib3")
8814 (version "2.7.0")
8815 (source
8816 (origin
8817 (method url-fetch)
8818 (uri (pypi-uri "urllib3" version))
8819 (sha256
8820 (base32
8821 "0k2za0kdl4y8mdhay0wbnf6522n4ybr61gk7gik19srwnv1hw7i3"))))
8822 (build-system pyproject-build-system)
8823 (arguments `(#:tests? #f))
8824 (native-inputs
8825 (list python-hatch-vcs
8826 python-hatchling
8827 python-setuptools-scm))
8828 (propagated-inputs
8829 (append
8830 ;; These 5 inputs are used to build urrlib3[secure]
8831 (list python-certifi
8832 python-idna
8833 python-pysocks)
8834 (if (member (%current-system)
8835 (package-transitive-supported-systems python-cryptography))
8836 (list python-cryptography)
8837 '())
8838 (if (member (%current-system)
8839 (package-transitive-supported-systems python-pyopenssl))
8840 (list python-pyopenssl)
8841 '())))
8842 (home-page "https://urllib3.readthedocs.io/")
8843 (synopsis "HTTP library with thread-safe connection pooling")
8844 (description
8845 "Urllib3 supports features left out of urllib and urllib2 libraries. It
8846can reuse the same socket connection for multiple requests, it can POST files,
8847supports url redirection and retries, and also gzip and deflate decoding.")
8848 (license license:expat)))
8849
8850(define-public python-urllib3-1.26
8851 (package
8852 (inherit python-urllib3)
8853 (version "1.26.17")
8854 (source
8855 (origin
8856 (method url-fetch)
8857 (uri (pypi-uri "urllib3" version))
8858 (sha256
8859 (base32
8860 "08fzhaf77kbjj5abpl9xag6fpfxkdp1k5s7sqd3ayacdq91a5mi4"))))
8861 (native-inputs
8862 (list python-setuptools
8863 python-wheel))))
8864
8865(define-public python-wsgiproxy2
8866 (package
8867 (name "python-wsgiproxy2")
8868 (version "0.5.1")
8869 (source
8870 (origin
8871 (method git-fetch)
8872 (uri (git-reference
8873 (url "https://github.com/gawel/WSGIProxy2/")
8874 (commit version)))
8875 (file-name (git-file-name name version))
8876 (sha256
8877 (base32 "0aw9ibla2cqzlbm3vzyk1yk3d8pccpbpdkqx99q30hq1fz1izsm2"))))
8878 (build-system pyproject-build-system)
8879 (arguments (list #:test-backend #~'unittest))
8880 (native-inputs (list python-webtest python-setuptools))
8881 (propagated-inputs (list python-requests python-six python-urllib3
8882 python-webob))
8883 (home-page "https://github.com/gawel/WSGIProxy2/")
8884 (synopsis "WSGI Proxy with various http client backends")
8885 (description
8886 "WSGI turns HTTP requests into WSGI function calls. WSGIProxy turns WSGI
8887function calls into HTTP requests. It also includes code to sign requests and
8888pass private data, and to spawn subprocesses to handle requests.")
8889 (license license:expat)))
8890
8891(define-public python-pastedeploy
8892 (package
8893 (name "python-pastedeploy")
8894 (version "3.1.0")
8895 (source
8896 (origin
8897 (method url-fetch)
8898 (uri (pypi-uri "PasteDeploy" version))
8899 (sha256
8900 (base32 "15as15mgz9xn33abwrp0x0mbj537ib3q47z8ky5475c05wasznwx"))))
8901 (build-system pyproject-build-system)
8902 (native-inputs (list python-pytest python-setuptools))
8903 (home-page "https://pylonsproject.org/")
8904 (synopsis "Load, configure, and compose WSGI applications and servers")
8905 (description
8906 "This tool provides code to load WSGI applications and servers from URIs;
8907these URIs can refer to Python Eggs for INI-style configuration files. Paste
8908Script provides commands to serve applications based on this configuration
8909file.")
8910 (license license:expat)))
8911
8912(define-public python-webtest
8913 (package
8914 (name "python-webtest")
8915 (version "3.0.6")
8916 (source
8917 (origin
8918 (method url-fetch)
8919 (uri (pypi-uri "webtest" version))
8920 (sha256
8921 (base32 "0jwl8i9xvm5xim1h2jrwfbqac1g3fpiazfdwfp2md3s4899gsmj2"))))
8922 (build-system pyproject-build-system)
8923 (arguments
8924 ;; Tests require python-pyquery, which creates a circular dependency.
8925 `(#:tests? #f))
8926 (native-inputs
8927 (list python-setuptools))
8928 (propagated-inputs
8929 (list python-beautifulsoup4
8930 python-waitress
8931 python-webob))
8932 (home-page "https://docs.pylonsproject.org/projects/webtest/")
8933 (synopsis "Helper to test WSGI applications")
8934 (description
8935 "Webtest allows you to test your Python web applications without
8936starting an HTTP server. It supports anything that supports the minimum of
8937WSGI.")
8938 (license license:expat)))
8939
8940(define-public python-flask
8941 (package
8942 (name "python-flask")
8943 (version "3.1.3")
8944 (source
8945 (origin
8946 (method git-fetch)
8947 (uri (git-reference
8948 (url "https://github.com/pallets/flask")
8949 (commit version)))
8950 (file-name (git-file-name name version))
8951 (sha256
8952 (base32 "006s5rm4syg48ymmwlnrkx8f8j758waksvhdsfiqx51zv52c0p8l"))))
8953 (build-system pyproject-build-system)
8954 (arguments
8955 (list
8956 #:test-flags
8957 ;; assert 404 == 400
8958 ;; This test is removed on master branch.
8959 #~(list (string-append "--deselect=tests/test_reqctx.py"
8960 "::test_bad_environ_raises_bad_request"))))
8961 (native-inputs
8962 (list python-flit-core
8963 python-pytest))
8964 (propagated-inputs
8965 (list python-blinker
8966 python-click
8967 python-itsdangerous
8968 python-jinja2
8969 python-markupsafe
8970 python-werkzeug
8971 ;; [optional]
8972 python-asgiref
8973 python-dotenv))
8974 (home-page "https://palletsprojects.com/p/flask/")
8975 (synopsis "Microframework based on Werkzeug, Jinja2 and good intentions")
8976 (description "Flask is a micro web framework based on the Werkzeug toolkit
8977and Jinja2 template engine. It is called a micro framework because it does not
8978presume or force a developer to use a particular tool or library.")
8979 (license license:bsd-3)))
8980
8981(define-public python-flask-compress
8982 (package
8983 (name "python-flask-compress")
8984 (version "1.24")
8985 (source
8986 (origin
8987 (method git-fetch)
8988 (uri (git-reference
8989 (url "https://github.com/colour-science/flask-compress")
8990 (commit (string-append "v" version))))
8991 (file-name (git-file-name name version))
8992 (sha256
8993 (base32 "0mid5c34r75vax1r7l2l5sjjhs6bl8rbsdmhc7kz39snq6xw3cr5"))))
8994 (build-system pyproject-build-system)
8995 (native-inputs
8996 (list python-flask-caching
8997 python-pytest
8998 python-setuptools
8999 python-setuptools-scm))
9000 (propagated-inputs
9001 (list python-backports-zstd
9002 python-brotli
9003 python-flask))
9004 (home-page "https://github.com/colour-science/flask-compress")
9005 (synopsis "Compress responses in a Flask app")
9006 (description
9007 "This package lets you compress Flask application responses and static
9008files with gzip, deflate or brotli. Flask-Compress both adds the various
9009headers required for a compressed response and compresses the response data.")
9010 (license license:expat)))
9011
9012(define-public python-flask-seasurf
9013 (package
9014 (name "python-flask-seasurf")
9015 (version "2.0.0")
9016 (source (origin
9017 (method url-fetch)
9018 (uri (pypi-uri "Flask-SeaSurf" version))
9019 (sha256
9020 (base32
9021 "0g5dsm2ikv8q4qcrb2446pbs972l5wkxyfmxsriqdsl02nz06h4f"))))
9022 (build-system pyproject-build-system)
9023 (arguments
9024 (list #:tests? #false)) ;there are none
9025 (propagated-inputs (list python-flask))
9026 (native-inputs (list python-setuptools python-wheel))
9027 (home-page "https://github.com/maxcountryman/flask-seasurf/")
9028 (synopsis "CSRF extension for Flask")
9029 (description "SeaSurf is a Flask extension for preventing cross-site
9030request forgery (CSRF). CSRF attacks are problematic because the mechanism
9031they use is relatively easy to exploit. This extension attempts to aid you in
9032securing your application from such attacks. This extension is based on the
9033Django middleware.")
9034 (license license:bsd-3)))
9035
9036(define-public python-flask-wtf
9037 (package
9038 (name "python-flask-wtf")
9039 (version "1.2.2")
9040 (source
9041 (origin
9042 (method url-fetch)
9043 (uri (pypi-uri "Flask-WTF" version))
9044 (sha256
9045 (base32
9046 "0sv6hjva1fdizb7sr46230pplx8qz8rnb4bxrfy71xbc8cgfxlkr"))))
9047 (build-system pyproject-build-system)
9048 (propagated-inputs
9049 (list python-flask python-flask python-itsdangerous python-wtforms))
9050 (native-inputs
9051 (list python-hatchling python-pytest))
9052 (home-page "https://github.com/lepture/flask-wtf")
9053 (synopsis "Simple integration of Flask and WTForms")
9054 (description "Flask-WTF integrates Flask and WTForms, including CSRF, file
9055upload, and reCAPTCHA.")
9056 (license license:bsd-3)))
9057
9058(define-public python-flask-multistatic
9059 (package
9060 (name "python-flask-multistatic")
9061 (version "1.0")
9062 (source
9063 (origin
9064 (method url-fetch)
9065 (uri (pypi-uri "flask-multistatic" version))
9066 (sha256
9067 (base32
9068 "0p4v50rwv64wcd0zlq7rzl4waprwr4hj19s3cgf1isywa7jcisgm"))))
9069 (build-system pyproject-build-system)
9070 (arguments (list #:tests? #f)) ; No tests upstream.
9071 (native-inputs (list python-setuptools))
9072 (propagated-inputs (list python-flask))
9073 (home-page "https://pagure.io/flask-multistatic")
9074 (synopsis "Flask plugin to allow overriding static files")
9075 (description "@code{flask-multistatic} is a flask plugin that adds support
9076for overriding static files.")
9077 (license license:gpl3+)))
9078
9079(define-public python-responses
9080 (package
9081 (name "python-responses")
9082 (version "0.25.3")
9083 (source (origin
9084 (method url-fetch)
9085 (uri (pypi-uri "responses" version))
9086 (sha256
9087 (base32
9088 "1fld6lsa143md4lxccwxq9iyqm9d8a05i9sp7lqjibnrmd3r4yv1"))))
9089 (build-system pyproject-build-system)
9090 (native-inputs
9091 (list python-pytest
9092 python-pytest-asyncio
9093 python-pytest-httpserver
9094 python-setuptools
9095 python-tomli
9096 python-tomli-w
9097 python-wheel))
9098 (propagated-inputs
9099 (list python-requests
9100 python-pyyaml
9101 python-urllib3))
9102 (home-page "https://github.com/getsentry/responses")
9103 (synopsis "Utility for mocking out the `requests` Python library")
9104 (description "A utility library for mocking out the `requests` Python
9105library.")
9106 (license license:asl2.0)))
9107
9108(define-public python-grequests
9109 (let ((commit "60f70e99e942a2df378b4e4f6202dcf862754c2d")
9110 (revision "0"))
9111 (package
9112 (name "python-grequests")
9113 (version (git-version "0.7.0" revision commit))
9114 (source
9115 (origin
9116 (method git-fetch)
9117 (uri (git-reference
9118 (url "https://github.com/kennethreitz/grequests")
9119 (commit commit)))
9120 (file-name (git-file-name name version))
9121 (sha256
9122 (base32 "0132yv1rr4pmrmwasrnasqbnd80pi6rgy52608731p7lidkmxz9a"))))
9123 (build-system pyproject-build-system)
9124 (arguments
9125 (list
9126 ;; XXX: Most failing tests seem to be caused by network access,
9127 ;; but there is no easy/flag way to disable tests selectively.
9128 #:tests? #f
9129 #:test-backend #~'unittest
9130 #:test-flags #~(list "tests.py")))
9131 (propagated-inputs (list python-gevent python-requests))
9132 (native-inputs (list python-setuptools))
9133 (home-page "https://github.com/kennethreitz/grequests")
9134 (synopsis "Python library for asynchronous HTTP requests")
9135 (description
9136 "GRequests is a Python library that allows you to use @code{Requests}
9137with @code{Gevent} to make asynchronous HTTP Requests easily.")
9138 (license license:bsd-2))))
9139
9140(define-public python-gwebsockets
9141 (package
9142 (name "python-gwebsockets")
9143 (version "0.7")
9144 (source
9145 (origin
9146 (method git-fetch)
9147 (uri (git-reference
9148 (url "https://github.com/sugarlabs/gwebsockets")
9149 (commit (string-append "v" version))))
9150 (file-name (git-file-name name version))
9151 (sha256
9152 (base32 "0w422yz0qdix5xb6aqrrci1s1hy4whncspwb03m9ankqww0s1yv2"))))
9153 (build-system pyproject-build-system)
9154 (arguments (list #:tests? #f)) ; No tests upstream.
9155 (native-inputs (list python-setuptools))
9156 (propagated-inputs (list python-pygobject))
9157 (home-page "https://github.com/sugarlabs/gwebsockets")
9158 (synopsis "GLib based websockets server")
9159 (description
9160 "This package provides a websocket server written in Python. It uses GIO
9161for network communication and hence it easily integrates with the GLib
9162mainloop.")
9163 (license license:asl2.0)))
9164
9165(define-public python-dpkt
9166 (package
9167 (name "python-dpkt")
9168 (version "1.9.8")
9169 (source
9170 (origin
9171 (method git-fetch)
9172 (uri (git-reference
9173 (url "https://github.com/kbandla/dpkt")
9174 (commit (string-append "v" version))))
9175 (file-name (git-file-name name version))
9176 (sha256
9177 (base32 "0dhy8l4sqfxqdda6lishb95g3v6hnw14l20ipqpzb6vaw1vf7mzj"))))
9178 (build-system pyproject-build-system)
9179 (arguments
9180 (list
9181 #:test-flags
9182 #~(list "--pyargs" "dpkt")))
9183 (native-inputs (list python-pytest python-setuptools))
9184 (home-page "https://github.com/kbandla/dpkt")
9185 (synopsis "Packet generator and parser for TCP/IP protocols")
9186 (description
9187 "The dpkt module is a fast, simple packet generator and parser for the
9188basic TCP/IP protocols.")
9189 (license license:bsd-3)))
9190
9191(define-public python-geventhttpclient
9192 (package
9193 (name "python-geventhttpclient")
9194 (version "2.3.9")
9195 (source (origin
9196 (method git-fetch)
9197 (uri (git-reference
9198 (url "https://github.com/geventhttpclient/geventhttpclient")
9199 (commit version)
9200 (recursive? #true)))
9201 (file-name (git-file-name name version))
9202 (sha256
9203 (base32
9204 "1diq6n9sr92rsqbpxlbhbn1d22hrlzp6swykz9bfzh7sxpywa6j8"))))
9205 (build-system pyproject-build-system)
9206 (arguments
9207 (list
9208 #:test-flags
9209 ;; Disable network tests.
9210 '(list "-k"
9211 (string-append "not test_client_simple"
9212 " and not test_client_ssl"
9213 " and not test_client_with_default_headers"
9214 " and not test_client_without_leading_slash"
9215 " and not test_download"
9216 " and not test_fail_invalid_ca_certificate"
9217 " and not test_httpbin_multipart"
9218 " and not test_multi_queries_greenlet_safe"
9219 " and not test_no_form_encode_header"
9220 " and not test_no_form_encoded_header"
9221 " and not test_request_with_headers"
9222 " and not test_response_context_manager"
9223 " and not test_urllib_request"))))
9224 (native-inputs (list nss-certs-for-test
9225 python-dpkt python-pytest python-requests
9226 python-setuptools python-wheel))
9227 (propagated-inputs (list python-brotli python-certifi python-gevent
9228 python-urllib3))
9229 (home-page "https://github.com/geventhttpclient/geventhttpclient")
9230 (synopsis "HTTP client library for gevent")
9231 (description "@code{python-geventhttpclient} is a high performance,
9232concurrent HTTP client library for python using @code{gevent}.")
9233 (license license:expat)))
9234
9235(define-public python-gevent-websocket
9236 (package
9237 (name "python-gevent-websocket")
9238 (version "0.10.1")
9239 (source
9240 (origin
9241 (method url-fetch)
9242 (uri (pypi-uri "gevent-websocket" version))
9243 (sha256
9244 (base32 "1c2zv2rahp1gil3cj66hfsqgy0n35hz9fny3ywhr2319d0lz7bky"))))
9245 (build-system pyproject-build-system)
9246 (arguments
9247 (list #:tests? #f)) ; no tests in PyPI or git
9248 (native-inputs
9249 (list python-setuptools
9250 python-wheel))
9251 (propagated-inputs
9252 (list python-gevent))
9253 (home-page "https://gitlab.com/noppo/gevent-websocket")
9254 (synopsis "Websocket handler for the gevent pywsgi server")
9255 (description
9256 "Websocket handler for the gevent pywsgi server, a Python network
9257library.
9258
9259Features include:
9260@itemize
9261@item integration on both socket level or using an abstract interface
9262@item RPC and PubSub framework using @acronym{WebSocket Application Messaging
9263Protocol, WAMP}
9264@item easily extendible using a simple WebSocket protocol plugin API
9265@end itemize")
9266 (license license:asl2.0)))
9267
9268(define-public python-requests-oauthlib
9269 (package
9270 (name "python-requests-oauthlib")
9271 (version "2.0.0")
9272 (source
9273 (origin
9274 (method git-fetch)
9275 (uri (git-reference (url
9276 "https://github.com/requests/requests-oauthlib")
9277 (commit (string-append "v" version))))
9278 (file-name (git-file-name name version))
9279 (sha256 (base32 "0i0vnanxqilnf2rgng7n96rl8fzq0dbcl3rpl7zkxj50kv66nqwl"))))
9280 (build-system pyproject-build-system)
9281 (arguments
9282 (list
9283 #:test-flags
9284 #~(list
9285 "--ignore=tests/test_core.py" ; requires network access.
9286 "--ignore=tests/examples/test_native_spa_pkce_auth0.py"
9287 "-k" "not test_fetch_access_token"))) ; flaky tests.
9288 (native-inputs
9289 (list python-requests-mock python-pytest python-setuptools))
9290 (propagated-inputs
9291 (list python-oauthlib python-requests))
9292 (home-page "https://github.com/requests/requests-oauthlib")
9293 (synopsis "OAuthlib authentication support for Requests")
9294 (description
9295 "Requests-OAuthlib uses the Python Requests and OAuthlib libraries to
9296provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
9297 (license license:isc)))
9298
9299(define-public python-cachecontrol
9300 (package
9301 (name "python-cachecontrol")
9302 (version "0.14.1")
9303 (source
9304 (origin
9305 (method git-fetch)
9306 (uri (git-reference
9307 (url "https://github.com/ionrock/cachecontrol")
9308 (commit (string-append "v" version))))
9309 (file-name (git-file-name name version))
9310 (sha256
9311 (base32
9312 "07ifs4dhahhsgj4vxgfl5ymnmb4my5l2wb8jiinn6fncszcfmr59"))))
9313 (build-system pyproject-build-system)
9314 (propagated-inputs
9315 (list python-filelock python-msgpack python-requests))
9316 (native-inputs
9317 (list python-cherrypy python-flit-core python-pytest))
9318 (home-page "https://github.com/ionrock/cachecontrol")
9319 (synopsis "The httplib2 caching algorithms for use with requests")
9320 (description "CacheControl is a port of the caching algorithms in
9321@code{httplib2} for use with @code{requests} session objects.")
9322 (license license:asl2.0)))
9323
9324(define-public python-s3fs
9325 (package
9326 (name "python-s3fs")
9327 (version "2026.1.0")
9328 (source
9329 (origin
9330 (method url-fetch)
9331 (uri (pypi-uri "s3fs" version))
9332 (sha256
9333 (base32 "17fhx4qnpcwhrfckn27wdjvlxink1kcpaiganxij4fjmp7gm58xp"))))
9334 (build-system pyproject-build-system)
9335 ;; TODO: Many tests fail with "No such file or directory" raised by the
9336 ;; HTTP client.
9337 (arguments (list #:tests? #false))
9338 (native-inputs
9339 (list python-setuptools))
9340 (propagated-inputs
9341 (list python-aiobotocore
9342 python-aiohttp
9343 python-fsspec))
9344 (home-page "https://github.com/fsspec/s3fs/")
9345 (synopsis "Convenient filesystem interface over S3")
9346 (description "This package provides a convenient filesystem interface over
9347S3.")
9348 (license license:bsd-3)))
9349
9350(define-public python-s3transfer
9351 (package
9352 (name "python-s3transfer")
9353 (version "0.16.0")
9354 (source
9355 (origin
9356 (method url-fetch)
9357 (uri (pypi-uri "s3transfer" version))
9358 (sha256
9359 (base32 "087rmdwsn9drkh5rwwbfym5p8qvirc8gllnd54i7j9c04q9hz6cf"))))
9360 (build-system pyproject-build-system)
9361 (arguments
9362 (list
9363 ;; tests: 630 passed, 51 skipped
9364 #:test-flags
9365 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
9366 ;; Tests require networking.
9367 "--ignore" "tests/integration")))
9368 (native-inputs
9369 (list python-pytest
9370 python-pytest-xdist
9371 python-setuptools))
9372 (propagated-inputs
9373 (list python-botocore))
9374 (home-page "https://github.com/boto/s3transfer")
9375 (synopsis "Amazon S3 Transfer Manager")
9376 (description
9377 "S3transfer is a Python library for managing Amazon S3 transfers.")
9378 (license license:asl2.0)))
9379
9380(define-public python-flask-restful
9381 (package
9382 (name "python-flask-restful")
9383 (version "0.3.10")
9384 (source
9385 (origin
9386 (method url-fetch)
9387 (uri (pypi-uri "Flask-RESTful" version))
9388 (sha256
9389 (base32
9390 "0dzckjjz3aw8nmisr5g9mnv02s2nqlhblykr9ydqzpr703pz4jpy"))))
9391 (build-system pyproject-build-system)
9392 (arguments
9393 ;; See <https://github.com/flask-restful/flask-restful/issues/980>.
9394 (list #:tests? #f))
9395 (propagated-inputs
9396 (list python-aniso8601 python-flask python-pytz))
9397 (native-inputs
9398 (list python-blinker
9399 python-mock
9400 python-pytest
9401 python-setuptools
9402 python-six))
9403 (home-page "https://github.com/flask-restful/flask-restful/")
9404 (synopsis "Flask module for creating REST APIs")
9405 (description
9406 "This package contains a Flask module for creating REST APIs.")
9407 (license license:bsd-3)))
9408
9409(define-public python-flask-sqlalchemy
9410 (package
9411 (name "python-flask-sqlalchemy")
9412 ;; Released version fails tests in Python 3.12.
9413 (properties '((commit . "168cb4b7b50fe5176307a10d873781bfafc6eeda")
9414 (revision . "0")))
9415 (version (git-version "3.1.1"
9416 (assoc-ref properties 'revision)
9417 (assoc-ref properties 'commit)))
9418 (source
9419 (origin
9420 (method git-fetch)
9421 (uri (git-reference
9422 (url "https://github.com/pallets-eco/flask-sqlalchemy")
9423 (commit (assoc-ref properties 'commit))))
9424 (file-name (git-file-name name version))
9425 (sha256
9426 (base32
9427 "0xw8v1540m21x9crpgb0i3rxyhh1d24ldg354vndw9cif74ls5p6"))))
9428 (build-system pyproject-build-system)
9429 (arguments
9430 (list
9431 #:test-flags
9432 #~(list "-k" (string-append "not test_explicit_table[db2]"
9433 " and not test_explicit_table[db4]")
9434 "-W" "ignore::DeprecationWarning")))
9435 (native-inputs
9436 (list python-flit-core
9437 python-pytest))
9438 (propagated-inputs
9439 (list python-flask
9440 python-sqlalchemy-2))
9441 (home-page "https://github.com/mitsuhiko/flask-sqlalchemy")
9442 (synopsis "Module adding SQLAlchemy support to your Flask application")
9443 (description
9444 "This package adds SQLAlchemy support to your Flask application.")
9445 (license license:bsd-3)))
9446
9447(define-public python-flask-restful-swagger
9448 (package
9449 (name "python-flask-restful-swagger")
9450 (version "0.20.1")
9451 ;; XXX: Unbundle minified javascript.
9452 (source
9453 (origin
9454 (method git-fetch)
9455 (uri (git-reference
9456 (url "https://github.com/rantav/flask-restful-swagger")
9457 (commit version)))
9458 (file-name (git-file-name name version))
9459 (sha256
9460 (base32 "1ppdwn25ijf8b3zchxkvwj4ipc68v3p522i8mm51jm0w6mg5bvsh"))))
9461 (build-system pyproject-build-system)
9462 (arguments (list #:tests? #f)) ; No tests.
9463 (native-inputs (list python-setuptools))
9464 (propagated-inputs (list python-flask-restful python-six))
9465 (home-page "https://github.com/rantav/flask-restful-swagger")
9466 (synopsis "Extract Swagger specs from Flask-Restful projects")
9467 (description "This package lets you extract Swagger API documentation
9468specs from your Flask-Restful projects.")
9469 (license license:expat)))
9470
9471(define-public python-htmlmin
9472 (package
9473 (name "python-htmlmin")
9474 (version "0.1.12")
9475 (source
9476 (origin
9477 (method url-fetch)
9478 (uri (pypi-uri "htmlmin" version))
9479 (sha256
9480 (base32
9481 "0y51xhabw6x8jk8k93xl8vznshpz3jb6l28075r5sjip613fzhah"))))
9482 (build-system pyproject-build-system)
9483 (arguments
9484 (list #:tests? #f)) ; no tests
9485 (native-inputs (list python-setuptools))
9486 (home-page "https://htmlmin.readthedocs.org/en/latest/")
9487 (synopsis "HTML minifier")
9488 (description "@code{htmlmin} is an HTML minifier that just works.
9489It comes with safe defaults and easily configurable options.")
9490 (license license:bsd-3)))
9491
9492;; XXX: Forked renamed and updated version.
9493(define-public python-htmlmin2
9494 (package/inherit python-htmlmin
9495 (name "python-htmlmin2")
9496 (version "0.1.13")
9497 (source
9498 (origin
9499 (method git-fetch)
9500 (uri (git-reference
9501 (url "https://github.com/wilhelmer/htmlmin")
9502 (commit (string-append "v" version))))
9503 (file-name (git-file-name name version))
9504 (sha256
9505 (base32 "1y7mcx8d451hwa1wrg2lffg7ccdy3w5m7xwb5xqp8h2852pypfh2"))))
9506 (build-system pyproject-build-system)
9507 (arguments (list #:test-backend #~'unittest))
9508 (native-inputs (list python-setuptools))
9509 (home-page "https://github.com/wilhelmer/htmlmin")
9510 (description
9511 "@code{htmlmin2} is an HTML minifier that just works. It comes with safe
9512defaults and easily configurable options. This variant is an updated fork of
9513the original @code{python-htmlmin}.")
9514 (license license:bsd-3)))
9515
9516(define-public python-flask-htmlmin
9517 (package
9518 (name "python-flask-htmlmin")
9519 (version "3.0.0")
9520 (source
9521 (origin
9522 (method git-fetch)
9523 (uri (git-reference
9524 (url "https://github.com/hamidfzm/Flask-HTMLmin")
9525 (commit (string-append "v" version))))
9526 (file-name (git-file-name name version))
9527 (sha256
9528 (base32 "0ybqssnqwa9zgv61azp5r1grgnq28ypfhr80p9rp61x2z0y0zl32"))))
9529 (build-system pyproject-build-system)
9530 (native-inputs (list python-pytest python-setuptools))
9531 (propagated-inputs (list python-cssmin python-flask python-htmlmin2))
9532 (home-page "https://github.com/hamidfzm/Flask-HTMLmin")
9533 (synopsis "HTML response minifier for Flask")
9534 (description
9535 "Minify @code{text/html} MIME type responses when using @code{Flask}.")
9536 (license license:bsd-3)))
9537
9538(define-public python-jsmin
9539 (package
9540 (name "python-jsmin")
9541 (version "3.0.1")
9542 (source
9543 (origin
9544 (method url-fetch)
9545 (uri (pypi-uri "jsmin" version))
9546 (sha256
9547 (base32
9548 "1z1brjsvni0260bypldkl8a05sgp0qk18x560zl44igr3q99m5f0"))))
9549 (build-system pyproject-build-system)
9550 (arguments (list #:test-backend #~'unittest))
9551 (native-inputs
9552 (list python-setuptools))
9553 (home-page "https://github.com/tikitu/jsmin/")
9554 (synopsis "Python JavaScript minifier")
9555 (description
9556 "@code{jsmin} is a JavaScript minifier, usable from both Python code and
9557on the command line.")
9558 (license license:expat)))
9559
9560(define-public python-flask-login
9561 (let ((commit "c8bba84b9ba6768e878317fc46c54bd13fa1ac07")
9562 (revision "0"))
9563 (package
9564 (name "python-flask-login")
9565 (version (git-version "0.6.3" revision commit))
9566 (source
9567 (origin
9568 (method git-fetch)
9569 (uri (git-reference
9570 (url "https://github.com/maxcountryman/flask-login")
9571 (commit commit)))
9572 (file-name (git-file-name name version))
9573 (sha256
9574 (base32 "0q0ga1zwm06kvpnsf50ckmsc77959i1spx7z2y3jkbwaa4klsyli"))))
9575 (build-system pyproject-build-system)
9576 (propagated-inputs
9577 (list python-flask))
9578 (native-inputs
9579 ;; For tests.
9580 (list python-blinker
9581 python-flit-core
9582 python-mock
9583 python-pytest
9584 python-semantic-version
9585 python-werkzeug))
9586 (home-page "https://github.com/maxcountryman/flask-login")
9587 (synopsis "User session management for Flask")
9588 (description
9589 "@code{Flask-Login} provides user session management for Flask. It
9590handles the common tasks of logging in, logging out, and remembering your
9591users' sessions over extended periods of time.")
9592 (license license:expat))))
9593
9594(define-public python-oauth2client
9595 (package
9596 (name "python-oauth2client")
9597 (version "4.1.3")
9598 (source
9599 (origin
9600 (method git-fetch)
9601 (uri (git-reference
9602 (url "https://github.com/google/oauth2client/")
9603 (commit (string-append "v" version))))
9604 (file-name (git-file-name name version))
9605 (sha256
9606 (base32 "0xm19dv5kmi82zzrx3d4mp326irr3x37q818hlspz514dzjq2ad1"))))
9607 (build-system pyproject-build-system)
9608 (arguments
9609 (list #:tests? #f))
9610 (native-inputs
9611 (list python-setuptools))
9612 (propagated-inputs
9613 (list python-httplib2
9614 python-pyasn1
9615 python-pyasn1-modules
9616 python-pyparsing
9617 python-rsa
9618 python-six))
9619 (home-page "https://github.com/google/oauth2client/")
9620 (synopsis "OAuth 2.0 client library")
9621 (description "@code{python-oauth2client} provides an OAuth 2.0 client
9622library for Python")
9623 (license license:asl2.0)))
9624
9625(define-public python-flask-oidc
9626 (package
9627 (name "python-flask-oidc")
9628 (version "2.3.1")
9629 (source
9630 (origin
9631 (method url-fetch)
9632 (uri (pypi-uri "flask_oidc" version))
9633 (sha256
9634 (base32
9635 "1200xhqiqlqfmrq54v2p6cf3nny86njjw8r7sk5j59hlk9a683zk"))))
9636 (build-system pyproject-build-system)
9637 (propagated-inputs
9638 (list python-authlib
9639 python-blinker
9640 python-flask
9641 python-requests
9642 python-responses))
9643 (native-inputs
9644 (list python-pytest python-poetry-core))
9645 (home-page "https://github.com/puiterwijk/flask-oidc")
9646 (synopsis "OpenID Connect extension for Flask")
9647 (description "@code{python-flask-oidc} provides an OpenID Connect extension
9648for Flask.")
9649 (license license:bsd-2)))
9650
9651(define-public python-webassets
9652 (package
9653 (name "python-webassets")
9654 (version "3.0.0")
9655 (source
9656 (origin
9657 (method git-fetch)
9658 (uri (git-reference
9659 (url "https://github.com/miracle2k/webassets")
9660 (commit version)))
9661 (file-name (git-file-name name version))
9662 (sha256
9663 (base32 "11hxvdqw86q6r665iryjzwx21ys8jh2c63mw016ldr6j49l0zyyh"))))
9664 (build-system pyproject-build-system)
9665 (propagated-inputs (list python-pyyaml python-zope-dottedname))
9666 (native-inputs (list python-hatchling python-pytest))
9667 (home-page "https://github.com/miracle2k/webassets")
9668 (synopsis "Media asset management")
9669 (description
9670 "This package provides utilities to merge, minify and compress Javascript
9671and CSS files,supporting a variety of different filters, including YUI, jsmin,
9672jspacker or CSS tidy. It also supports URL rewriting in CSS files.")
9673 (license license:bsd-2)))
9674
9675(define-public python-cssmin
9676 (package
9677 (name "python-cssmin")
9678 (version "0.2.0")
9679 (source
9680 (origin
9681 (method git-fetch)
9682 (uri (git-reference
9683 (url "https://github.com/zacharyvoase/cssmin")
9684 (commit (string-append "v" version))))
9685 (file-name (git-file-name name version))
9686 (sha256
9687 (base32 "04bzpal6j26pjjjf3p7iq6g2wcr61j4g0ygqz6h847h4hsyah9qg"))))
9688 (build-system pyproject-build-system)
9689 (arguments (list #:tests? #f)) ; No tests.
9690 (native-inputs (list python-setuptools))
9691 (home-page "https://github.com/zacharyvoase/cssmin")
9692 (synopsis "Python port of the YUI CSS Compressor")
9693 (description "Python port of the YUI CSS Compressor.")
9694 (license (list license:expat license:bsd-3))))
9695
9696(define-public python-elastic-transport
9697 (package
9698 (name "python-elastic-transport")
9699 (version "9.1.0")
9700 (source
9701 (origin
9702 (method url-fetch)
9703 (uri (pypi-uri "elastic_transport" version))
9704 (sha256
9705 (base32 "0g879z8rqrfbwkxsm6xcycjha1swl7gdgs6m0y0j1zmh4m5f940m"))))
9706 (build-system pyproject-build-system)
9707 (arguments
9708 (list
9709 #:test-flags
9710 ;; Deselect failing tests (mostly due to network not reachable)
9711 #~(list "-k"
9712 (string-append
9713 "not .badssl.com"
9714 " and not test_assert_fingerprint_in_cert_chain_failure"))))
9715 (propagated-inputs (list python-certifi python-urllib3))
9716 (native-inputs (list nss-certs-for-test
9717 python-aiohttp
9718 ;; python-furo
9719 python-httpx
9720 python-opentelemetry-api
9721 python-opentelemetry-sdk
9722 python-orjson
9723 python-pytest
9724 python-pytest-asyncio-0.26
9725 ;; python-pytest-cov
9726 python-pytest-httpbin
9727 python-pytest-httpserver
9728 python-pytest-mock
9729 python-requests
9730 python-respx ;test
9731 python-setuptools
9732 ;; python-sphinx
9733 ;; python-sphinx-autodoc-typehints
9734 python-trustme
9735 python-wheel))
9736 (home-page "https://github.com/elastic/elastic-transport-python")
9737 (synopsis "Common library for Python Elastic client libraries")
9738 (description
9739 "This library was lifted from @code{elasticsearch-py} and then transformed to
9740be used across all Elastic services rather than only Elasticsearch. It
9741provides transport classes and utilities shared among Python Elastic client
9742libraries.")
9743 ;; Apache-2.0 in setup.py and LICENSE file.
9744 (license license:asl2.0)))
9745
9746(define-public python-elasticsearch
9747 (package
9748 (name "python-elasticsearch")
9749 (version "9.1.1")
9750 (source
9751 (origin
9752 (method git-fetch) ; no tests in PyPI release
9753 (uri (git-reference
9754 (url "https://github.com/elastic/elasticsearch-py")
9755 (commit (string-append "v" version))))
9756 (file-name (git-file-name name version))
9757 (sha256
9758 (base32 "015x73y84nyigcyg00lh32p2pfrqf834fr7clfnzymgzrrxa73jf"))))
9759 (build-system pyproject-build-system)
9760 (native-inputs
9761 (list nss-certs-for-test
9762 python-aiohttp
9763 python-dateutil
9764 python-mock
9765 python-orjson
9766 python-pytest
9767 python-pytest-asyncio
9768 python-pytz
9769 python-pyyaml
9770 python-requests
9771 python-hatchling))
9772 (propagated-inputs
9773 (list python-certifi
9774 python-elastic-transport))
9775 (home-page "https://github.com/elastic/elasticsearch-py")
9776 (synopsis "Low-level client for Elasticsearch")
9777 (description "Official low-level client for Elasticsearch. Its goal is to
9778provide common ground for all Elasticsearch-related code in Python; because of
9779this it tries to be opinion-free and very extendable.")
9780 ;; Apache-2.0 in setup.py and LICENSE file.
9781 (license license:asl2.0)))
9782
9783(define-public python-engineio
9784 (package
9785 (name "python-engineio")
9786 (version "4.13.4")
9787 (source
9788 (origin
9789 (method git-fetch)
9790 (uri (git-reference
9791 (url "https://github.com/miguelgrinberg/python-engineio/")
9792 (commit (string-append "v" version))))
9793 (file-name (git-file-name name version))
9794 (sha256
9795 (base32 "1ndp68cqssjpvln958v236rg5jgpzy57vs3z45sz7xfscmbi893r"))))
9796 (build-system pyproject-build-system)
9797 (native-inputs
9798 (list python-pytest
9799 python-pytest-asyncio
9800 python-setuptools
9801 python-tornado))
9802 (propagated-inputs
9803 (list python-simple-websocket
9804 ;; [optional]
9805 python-aiohttp
9806 python-requests
9807 python-websocket-client))
9808 (home-page "https://github.com/miguelgrinberg/python-engineio/")
9809 (synopsis "Engine.IO server")
9810 (description "This package provides a Python implementation of the
9811@code{Engine.IO} realtime client and server.")
9812 (license license:expat)))
9813
9814(define-public python-ephemeral-port-reserve
9815 (package
9816 (name "python-ephemeral-port-reserve")
9817 (version "1.1.4")
9818 (source
9819 (origin
9820 (method git-fetch)
9821 (uri (git-reference
9822 (url "https://github.com/Yelp/ephemeral-port-reserve")
9823 (commit (string-append "v" version))))
9824 (file-name (git-file-name name version))
9825 (sha256
9826 (base32 "1ifmf5zcw7mhbm73awmf5jwc4rw8lhk81mn4zp797lwkysjm38s7"))))
9827 (build-system pyproject-build-system)
9828 (native-inputs
9829 (list python-pytest
9830 python-setuptools))
9831 (home-page "https://github.com/Yelp/ephemeral-port-reserve/")
9832 (synopsis "Find an unused port, reliably")
9833 (description
9834 "Bind to an ephemeral port, force it into the TIME_WAIT state, and unbind
9835it.")
9836 (license license:expat)))
9837
9838(define-public python-flask-migrate
9839 (package
9840 (name "python-flask-migrate")
9841 (version "4.1.0")
9842 (home-page "https://github.com/miguelgrinberg/flask-migrate/")
9843 (source (origin
9844 (method git-fetch)
9845 (uri (git-reference (url home-page)
9846 (commit (string-append "v" version))))
9847 (file-name (git-file-name name version))
9848 (sha256
9849 (base32
9850 "09qw1hhyssa5gahm199x67d55c55m3k9m23xp2bdacwsiv8jw57g"))))
9851 (build-system pyproject-build-system)
9852 (propagated-inputs
9853 (list python-flask python-alembic python-flask-sqlalchemy))
9854 (native-inputs
9855 (list python-pytest python-setuptools python-wheel))
9856 (synopsis "SQLAlchemy database migrations for Flask programs using
9857Alembic")
9858 (description "This package contains SQLAlchemy database migration tools
9859for Flask programs that are using @code{python-alembic}.")
9860 (license license:expat)))
9861
9862(define-public python-genshi
9863 (package
9864 (name "python-genshi")
9865 (version "0.7.10")
9866 (source
9867 (origin
9868 (method git-fetch)
9869 (uri (git-reference
9870 (url "https://github.com/edgewall/genshi")
9871 (commit version)))
9872 (file-name (git-file-name name version))
9873 (sha256
9874 (base32 "1dmf0ggp0s3371jv483kjriw9jscawxcik6q70a0wqjdfh5383i6"))))
9875 (build-system pyproject-build-system)
9876 (arguments (list #:test-backend #~'unittest))
9877 (native-inputs (list python-setuptools))
9878 (propagated-inputs (list python-six))
9879 (home-page "https://genshi.edgewall.org/")
9880 (synopsis "Toolkit for generation of output for the web")
9881 (description "Genshi is a Python library that provides an integrated set
9882of components for parsing, generating, and processing HTML, XML or other
9883textual content for output generation on the web.")
9884 (license license:bsd-3)))
9885
9886(define-public python-flask-principal
9887 (package
9888 (name "python-flask-principal")
9889 (version "0.4.0")
9890 (source
9891 (origin
9892 (method git-fetch)
9893 (uri (git-reference
9894 (url "https://github.com/pallets-eco/flask-principal")
9895 (commit version)))
9896 (file-name (git-file-name name version))
9897 (sha256
9898 (base32 "0hcqcj768inmyfsw1y2vk6pa9p22dh138ll809rhpz9vjz6spnqk"))))
9899 (build-system pyproject-build-system)
9900 (propagated-inputs (list python-blinker))
9901 (native-inputs (list python-flask python-pynose python-setuptools))
9902 (home-page "https://github.com/pallets-eco/flask-principal")
9903 (synopsis "Identity management for Flask")
9904 (description
9905 "@code{flask_principal} is a identity management library for Flask. It
9906supports managing both authentication and authorization data in a thread-local
9907variable.")
9908 (license license:expat)))
9909
9910(define-public python-flask-httpauth
9911 (package
9912 (name "python-flask-httpauth")
9913 (version "4.8.0")
9914 (source
9915 (origin
9916 (method url-fetch)
9917 (uri (pypi-uri "Flask-HTTPAuth" version))
9918 (sha256
9919 (base32
9920 "0yh9fn6pak64has89pcy03f1cn198vkil872y5jjr53kph2qlmk6"))))
9921 (build-system pyproject-build-system)
9922 (propagated-inputs (list python-flask))
9923 (native-inputs
9924 (list nss-certs-for-test
9925 python-pytest
9926 python-setuptools
9927 python-wheel))
9928 (home-page "https://github.com/miguelgrinberg/flask-httpauth/")
9929 (synopsis "Basic and Digest HTTP authentication for Flask routes")
9930 (description "@code{flask_httpauth} provides Basic and Digest HTTP
9931authentication for Flask routes.")
9932 (license license:expat)))
9933
9934(define-public python-uritemplate
9935 (package
9936 (name "python-uritemplate")
9937 (version "4.2.0")
9938 (source
9939 (origin
9940 (method url-fetch)
9941 (uri (pypi-uri "uritemplate" version))
9942 (sha256
9943 (base32
9944 "03lxxkk0kjn6z7z1f9hqvsaqfrny1qds7vi36f35b2c7h38jw328"))))
9945 (build-system pyproject-build-system)
9946 (native-inputs (list python-pytest python-setuptools))
9947 (home-page "https://uritemplate.readthedocs.io/")
9948 (synopsis "Library to deal with URI Templates")
9949 (description "@code{uritemplate} provides Python library to deal with URI
9950Templates.")
9951 ;; The software is made available under the terms of *either* of the
9952 ;; licenses found in LICENSE.APACHE or LICENSE.BSD. Contributions
9953 ;; are made under *both* licenses (excerpt from the LICENSE file).
9954 (license (list license:bsd-2 license:asl2.0))))
9955
9956(define-public python-uritemplate-3
9957 (package
9958 (inherit python-uritemplate)
9959 (name "python-uritemplate")
9960 (version "3.0.1")
9961 (source (origin
9962 (method url-fetch)
9963 (uri (pypi-uri "uritemplate" version))
9964 (sha256
9965 (base32 "1bkwmgr0ia9gcn4bszs2xlvml79f0bi2s4a87xg22ky9rq8avy2s"))))))
9966
9967(define-public python-publicsuffix2
9968 (package
9969 (name "python-publicsuffix2")
9970 (version "2.2019-12-21")
9971 (source
9972 (origin
9973 (method git-fetch)
9974 (uri (git-reference
9975 (url "https://github.com/pombredanne/python-publicsuffix2")
9976 (commit (string-append "release-" version))))
9977 (file-name (git-file-name name version))
9978 (sha256
9979 (base32 "1dkvfvl0izq9hqzilnw8ipkbgjs9xyad9p21i3864hzinbh0wp9r"))))
9980 (build-system pyproject-build-system)
9981 (arguments
9982 (list
9983 #:tests? #f ;the test suite requires network access
9984 #:phases
9985 #~(modify-phases %standard-phases
9986 (add-after 'unpack 'ignore-maintainer-inputs
9987 (lambda _
9988 ;; Comment out a demand for python-requests, which is used only by
9989 ;; the unused ‘update_psl’ helper command.
9990 (substitute* "setup.py"
9991 (("'requests " match)
9992 (format #f "# ~a" match))))))))
9993 (native-inputs (list python-setuptools))
9994 (home-page "https://github.com/pombredanne/python-publicsuffix2")
9995 (synopsis
9996 "Get a public suffix for a domain name using the Public Suffix List")
9997 (description
9998 "Get a public suffix for a domain name using the Public Suffix List.
9999Forked from and using the same API as the publicsuffix package.")
10000 (license (list license:expat license:mpl2.0))))
10001
10002(define-public python-werkzeug
10003 (package
10004 (name "python-werkzeug")
10005 (version "3.1.8")
10006 (source
10007 (origin
10008 (method git-fetch)
10009 (uri (git-reference
10010 (url "https://github.com/pallets/werkzeug")
10011 (commit version)))
10012 (file-name (git-file-name name version))
10013 (sha256
10014 (base32 "1jwrrjv50n5rcfzax4qf0237znkcpcafd17hx0r77f997yv3ghlv"))))
10015 (build-system pyproject-build-system)
10016 (arguments
10017 (list
10018 #:test-flags
10019 #~(list "-m" "not dev_server")))
10020 (native-inputs
10021 (list python-ephemeral-port-reserve
10022 python-flit-core
10023 python-pytest
10024 python-pytest-timeout
10025 python-watchdog))
10026 (propagated-inputs
10027 (list python-markupsafe))
10028 (home-page "https://palletsprojects.com/p/werkzeug/")
10029 (synopsis "Utilities for WSGI applications")
10030 (description "One of the most advanced WSGI utility modules. It includes a
10031powerful debugger, full-featured request and response objects, HTTP utilities to
10032handle entity tags, cache control headers, HTTP dates, cookie handling, file
10033uploads, a powerful URL routing system and a bunch of community-contributed
10034addon modules.")
10035 (license license:x11)))
10036
10037(define-public python-werkzeug-1.0
10038 (package
10039 (inherit python-werkzeug)
10040 (version "1.0.1")
10041 (source (origin
10042 (method url-fetch)
10043 (uri (pypi-uri "Werkzeug" version))
10044 (sha256
10045 (base32
10046 "0z74sa1xw5h20yin9faj0vvdbq713cgbj84klc72jr9nmpjv303c"))
10047 (patches (search-patches "python-werkzeug-tests.patch"))))
10048 (arguments
10049 (list
10050 #:phases
10051 '(modify-phases %standard-phases
10052 (add-after 'unpack 'ignore-warnings
10053 (lambda _
10054 (substitute* "setup.cfg"
10055 ((" error.*") "")))))))
10056 (propagated-inputs
10057 (list python-requests))
10058 (native-inputs
10059 (list python-pytest python-pytest-timeout python-setuptools
10060 python-wheel))))
10061
10062(define-public python-wtforms
10063 (package
10064 (name "python-wtforms")
10065 (version "3.2.2")
10066 (source
10067 (origin
10068 (method url-fetch)
10069 (uri (pypi-uri "wtforms" version))
10070 (sha256
10071 (base32 "14qbayp2gfmahaqn5migwyz2h1cq3gcdr4q2vd75vwvhhqzwf03v"))))
10072 (build-system pyproject-build-system)
10073 (native-inputs
10074 (list python-babel
10075 python-email-validator
10076 python-hatchling
10077 python-pytest
10078 python-setuptools))
10079 (propagated-inputs (list python-markupsafe))
10080 (home-page "https://wtforms.readthedocs.io/")
10081 (synopsis
10082 "Form validation and rendering library for Python web development")
10083 (description
10084 "WTForms is a flexible forms validation and rendering library
10085for Python web development. It is very similar to the web form API
10086available in Django, but is a standalone package.")
10087 (license license:bsd-3)))
10088
10089(define-public python-wtforms-sqlalchemy
10090 (package
10091 (name "python-wtforms-sqlalchemy")
10092 (version "0.4.1")
10093 (source
10094 (origin
10095 (method url-fetch)
10096 (uri (pypi-uri "WTForms-SQLAlchemy" version))
10097 (sha256
10098 (base32 "1nx4x0ifanlbrzh3f9ns8ihnchlkzf54ilvqmgcgcz2j72vm43rp"))))
10099 (build-system pyproject-build-system)
10100 (native-inputs (list python-pytest python-setuptools python-wheel))
10101 (propagated-inputs (list python-sqlalchemy python-wtforms))
10102 (home-page "https://github.com/wtforms/wtforms-sqlalchemy/")
10103 (synopsis "SQLAlchemy tools for WTForms")
10104 (description
10105 "WTForms-SQLAlchemy is a fork of the @code{wtforms.ext.sqlalchemy}
10106package from WTForms. The package has been renamed to
10107@code{wtforms_sqlalchemy} but otherwise should function the same as
10108@code{wtforms.ext.sqlalchemy} did.")
10109 (license license:bsd-3)))
10110
10111(define-public python-urlgrabber
10112 (package
10113 (name "python-urlgrabber")
10114 (version "4.1.0")
10115 (source
10116 (origin
10117 (method url-fetch)
10118 (uri (pypi-uri "urlgrabber" version))
10119 (sha256
10120 (base32 "0fg16zlw49cw7pjq9dhpc5vd35d5zz1mlki55m464qxfmfpzhnh7"))))
10121 (build-system pyproject-build-system)
10122 (arguments
10123 (list
10124 #:tests? #f ; Most tests require network access.
10125 #:phases
10126 #~(modify-phases %standard-phases
10127 (replace 'check
10128 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
10129 (when tests?
10130 (invoke "python" "test/runtests.py")))))))
10131 (native-inputs (list python-setuptools))
10132 (propagated-inputs
10133 (list python-pycurl python-setuptools python-six))
10134 (home-page "http://urlgrabber.baseurl.org/") ; no HTTPS
10135 (synopsis "High-level cross protocol url-grabber")
10136 (description
10137 "@code{urlgrabber} is a library that unifies access to files available on
10138the web, FTP or locally. It supports HTTP, FTP and file:// protocols, it
10139supports features like HTTP keep-alive, reget, throttling and more.")
10140 (license license:lgpl2.1+)))
10141
10142(define-public python-pycares
10143 (package
10144 (name "python-pycares")
10145 (version "4.11.0")
10146 (source
10147 (origin
10148 (method git-fetch)
10149 (uri (git-reference
10150 (url "https://github.com/saghul/pycares")
10151 (commit (string-append "v" version))))
10152 (file-name (git-file-name name version))
10153 (sha256
10154 (base32 "18syxp9bpm70zfiw427p7cpp6wg0ybrw6b32c1zvdp2i8jgd82xl"))
10155 (snippet #~(begin
10156 (rmdir "deps/c-ares")))))
10157 (build-system pyproject-build-system)
10158 (arguments
10159 (list
10160 ;; XXX: Half of the tests require internet access
10161 ;; There is currently no markers to avoid running them.
10162 #:tests? #f
10163 #:phases
10164 #~(modify-phases %standard-phases
10165 (add-after 'unpack 'configure-system-lib
10166 (lambda _
10167 (setenv "PYCARES_USE_SYSTEM_LIB" "1"))))))
10168 (native-inputs (list python-pytest python-setuptools))
10169 (inputs (list c-ares))
10170 (propagated-inputs (list python-cffi))
10171 (home-page "https://github.com/saghul/pycares")
10172 (synopsis "Python interface for @code{c-ares}")
10173 (description
10174 "@code{pycares} is a Python module which provides an interface to
10175@code{c-ares}, a C library that performs DNS requests and name resolutions
10176asynchronously.")
10177 (license license:expat)))
10178
10179(define-public python-yarl
10180 (package
10181 (name "python-yarl")
10182 (version "1.18.3")
10183 (source
10184 (origin
10185 (method url-fetch)
10186 (uri (pypi-uri "yarl" version))
10187 (sha256
10188 (base32
10189 "1qfj6kvdxr8bzka4lp0bh0xfgr5mzx7zzvj2jb4vcxxzbk20265c"))))
10190 (build-system pyproject-build-system)
10191 (arguments
10192 (list
10193 #:test-flags '(list "--ignore-glob=tests/test_*_benchmarks.py")
10194 #:phases
10195 '(modify-phases %standard-phases
10196 (add-after 'unpack 'avoid-pytest-cov-preload
10197 (lambda _
10198 (substitute* "pytest.ini"
10199 (("-p pytest_cov") ""))))
10200 (add-after 'unpack 'patch-build-system
10201 (lambda _
10202 ;; XXX: I don't know how to tell it to build the extensions in
10203 ;; place.
10204 (substitute* "packaging/pep517_backend/_backend.py"
10205 (("build_inplace=False") "build_inplace=True")))))))
10206 (native-inputs
10207 (list python-cython
10208 python-expandvars
10209 python-pytest
10210 python-pytest-xdist
10211 python-setuptools
10212 python-tomli))
10213 (propagated-inputs
10214 (list python-packaging python-idna python-multidict python-propcache))
10215 (home-page "https://github.com/aio-libs/yarl/")
10216 (synopsis "Yet another URL library")
10217 (description "@code{yarl} module provides handy @code{URL} class
10218for URL parsing and changing.")
10219 (license license:asl2.0)))
10220
10221(define-public python-canvasapi
10222 (package
10223 (name "python-canvasapi")
10224 (version "3.4.0")
10225 (source (origin
10226 (method git-fetch)
10227 (uri (git-reference
10228 (url "https://github.com/ucfopen/canvasapi")
10229 (commit (string-append "v" version))))
10230 (file-name (git-file-name name version))
10231 (sha256
10232 (base32
10233 "017gashyd4avxzlz3imwn18vmfd0cjyhbm063isra3d2wk3ivrkx"))))
10234 (build-system pyproject-build-system)
10235 (propagated-inputs (list python-arrow python-pytz python-requests))
10236 (native-inputs (list python-pytest
10237 python-requests-mock
10238 python-setuptools
10239 python-urllib3))
10240 (home-page "https://github.com/ucfopen/canvasapi")
10241 (synopsis "API wrapper for the Canvas LMS")
10242 (description
10243 "CanvasAPI is a Python library for accessing Instructure’s Canvas LMS API.
10244The library enables developers to programmatically manage Canvas courses,
10245users, gradebooks, and more.")
10246 (license license:expat)))
10247
10248(define-public python-google
10249 (package
10250 (name "python-google")
10251 (version "3.0.0")
10252 (source
10253 (origin
10254 (method url-fetch)
10255 (uri (pypi-uri "google" version))
10256 (sha256
10257 (base32 "1gncv3l11za0mpxvmpaf5n5j3jzp282rz62yml4ha4z55q930d8l"))))
10258 (build-system pyproject-build-system)
10259 (arguments (list #:tests? #f)) ;There are no tests.
10260 (native-inputs (list python-setuptools))
10261 (propagated-inputs (list python-beautifulsoup4))
10262 (home-page "https://breakingcode.wordpress.com/")
10263 (synopsis "Python bindings to the Google search engine")
10264 (description
10265 "This package provides Python bindings for using the Google search
10266engine. Its module is called @code{googlesearch}.")
10267 (license license:bsd-3)))
10268
10269(define-public python-google-api-client
10270 (package
10271 (name "python-google-api-client")
10272 (version "2.198.0")
10273 (source
10274 (origin
10275 (method git-fetch)
10276 (uri (git-reference
10277 (url "https://github.com/google/google-api-python-client")
10278 (commit (string-append "v" version))))
10279 (file-name (git-file-name name version))
10280 (sha256
10281 (base32 "1adjr3ylp8bwbvywxm11hs4y913pvaga0dn6nwmb3622y62zxfhg"))))
10282 (build-system pyproject-build-system)
10283 (arguments
10284 (list
10285 #:test-flags
10286 #~(list
10287 "-k"
10288 (string-join
10289 (list
10290 ;; XXX: Deprecated behavior.
10291 "not test_client_options_universe_configured_with_mtls"
10292 "test_universe_env_var_configured_with_mtls"
10293 ;; XXX: Requires CA certificates.
10294 "test_credentials_and_credentials_file_mutually_exclusive")
10295 " and not ")
10296 "tests")))
10297 (native-inputs
10298 (list python-parameterized
10299 python-pytest
10300 python-setuptools))
10301 (propagated-inputs
10302 (list python-google-api-core
10303 python-google-auth
10304 python-google-auth-httplib2
10305 python-httplib2
10306 python-pyparsing
10307 python-uritemplate-3))
10308 (home-page "https://github.com/google/google-api-python-client")
10309 (synopsis "Core Python library for accessing Google APIs")
10310 (description "Python client library for Google's discovery based APIs")
10311 (license license:asl2.0)))
10312
10313(define-public python-google-auth-httplib2
10314 (package
10315 (name "python-google-auth-httplib2")
10316 (version "0.4.0")
10317 (source (origin
10318 (method url-fetch)
10319 (uri (pypi-uri "google_auth_httplib2" version))
10320 (sha256
10321 (base32 "0dgdzy2ps3z71dc2b4s1fhmyx094nq0sg75sagav995p0ji31c6m"))))
10322 (build-system pyproject-build-system)
10323 (propagated-inputs
10324 (list python-google-auth python-httplib2))
10325 (native-inputs
10326 (list python-pytest
10327 python-pyparsing
10328 python-pytest-localserver
10329 python-flask
10330 python-setuptools))
10331 (home-page "https://github.com/googleapis/google-cloud-python")
10332 (synopsis "Google Authentication Library: httplib2 transport")
10333 (description "This package provides a Google Authentication Library plugin
10334for httplib2 transport.")
10335 (license license:asl2.0)))
10336
10337(define-public python-google-auth-oauthlib
10338 (package
10339 (name "python-google-auth-oauthlib")
10340 (version "1.2.4")
10341 (home-page
10342 "https://github.com/GoogleCloudPlatform/\
10343google-auth-library-python-oauthlib")
10344 (source
10345 (origin
10346 (method git-fetch)
10347 (uri (git-reference
10348 (url home-page)
10349 (commit (string-append "v" version))))
10350 (file-name (git-file-name name version))
10351 (sha256
10352 (base32 "1j25kdbs2j1x23pdv4n49xl9pz2ppn55vsav65ir796kq4lf9nca"))))
10353 (build-system pyproject-build-system)
10354 (propagated-inputs (list python-google-auth python-requests-oauthlib))
10355 (native-inputs
10356 (list python-click python-mock python-pytest python-setuptools))
10357 (synopsis "Google Authentication Library: oauthlib")
10358 (description "This package provides a Google Authentication Library plugin
10359with oauthlib.")
10360 (license license:asl2.0)))
10361
10362(define-public whoogle-search
10363 (package
10364 (name "whoogle-search")
10365 (version "0.8.4")
10366 (source (origin
10367 (method url-fetch)
10368 (uri (pypi-uri "whoogle-search" version))
10369 (sha256
10370 (base32
10371 "0hsy4l98nzj6i1lf63wvqd0yharkaz44zsxh863ymy47rxnwimz7"))))
10372 (build-system pyproject-build-system)
10373 (arguments
10374 (list
10375 ;; The tests need network access
10376 #:tests? #f))
10377 (propagated-inputs
10378 (list python-beautifulsoup4
10379 python-brotli
10380 python-cryptography
10381 python-cssutils
10382 python-defusedxml
10383 python-flask
10384 python-dotenv
10385 python-requests
10386 python-stem
10387 python-validators
10388 python-waitress))
10389 (native-inputs (list python-setuptools python-wheel))
10390 (home-page "https://github.com/benbusby/whoogle-search")
10391 (synopsis "Self-hosted, ad-free, privacy-respecting metasearch engine")
10392 (description
10393 "Get Google results, but without any ads, javascript, AMP links,
10394cookies, or IP address tracking. Quick and simple to implement as a primary
10395search engine replacement on both desktop and mobile.")
10396 (license license:expat)))
10397
10398(define-public python-hawkauthlib
10399 (package
10400 (name "python-hawkauthlib")
10401 (version "2.0.0")
10402 (source
10403 (origin
10404 (method git-fetch)
10405 (uri (git-reference
10406 (url "https://github.com/mozilla-services/hawkauthlib")
10407 (commit (string-append "v" version))))
10408 (file-name (git-file-name name version))
10409 (sha256
10410 (base32 "0pdpk3fp87ngfsyp4lm2z7z8b203jxsmvbz59q6r6xgg9sp4cl3l"))))
10411 (build-system pyproject-build-system)
10412 (arguments
10413 (list
10414 #:test-backend #~'unittest
10415 #:phases
10416 #~(modify-phases %standard-phases
10417 (add-after 'unpack 'fix-python-incompatibilities
10418 (lambda _
10419 (substitute* (find-files "hawkauthlib/tests" "\\.py$")
10420 (("assertEquals") "assertEqual")))))))
10421 (native-inputs (list python-setuptools))
10422 (propagated-inputs (list python-requests python-webob))
10423 (home-page "https://github.com/mozilla-services/hawkauthlib")
10424 (synopsis "Hawk Access Authentication protocol")
10425 (description
10426 "This is a low-level Python library for implementing Hawk Access
10427Authentication, a simple HTTP request-signing scheme.")
10428 (license license:mpl2.0)))
10429
10430(define-public python-pybrowserid
10431 (package
10432 (name "python-pybrowserid")
10433 (version "0.14.0")
10434 (source
10435 (origin
10436 (method git-fetch)
10437 (uri (git-reference
10438 (url "https://github.com/mozilla/PyBrowserID")
10439 (commit version)))
10440 (file-name (git-file-name name version))
10441 (sha256
10442 (base32 "0in0sbj56wrz5mlrj6wkd3h7rrp7714c5rkxvkfwp60s2hr6ynj6"))))
10443 (build-system pyproject-build-system)
10444 (arguments
10445 (list
10446 #:test-backend #~'unittest
10447 #:phases
10448 #~(modify-phases %standard-phases
10449 (add-after 'unpack 'python-3.12-compatibility
10450 (lambda _
10451 (substitute* (find-files "browserid/tests" "\\.py")
10452 (("assertEquals") "assertEqual")))))))
10453 (propagated-inputs (list python-requests))
10454 (native-inputs (list python-mock python-setuptools))
10455 (home-page "https://github.com/mozilla/PyBrowserID")
10456 (synopsis "Python library for the BrowserID protocol")
10457 (description
10458 "This is a Python client library for the BrowserID protocol that
10459underlies Mozilla Persona.")
10460 (license license:mpl2.0)))
10461
10462(define-public python-pyfxa
10463 (package
10464 (name "python-pyfxa")
10465 (version "0.8.1")
10466 (source
10467 (origin
10468 (method git-fetch)
10469 (uri (git-reference
10470 (url "https://github.com/mozilla/PyFxA")
10471 (commit (string-append "v" version))))
10472 (file-name (git-file-name name version))
10473 (sha256
10474 (base32 "11iaw50x5ic9cqp3jwkvhk8mz00dhg8xhl1kkx45zrb8nnrfw2vs"))))
10475 (build-system pyproject-build-system)
10476 (arguments
10477 (list
10478 ;; These tests require network access
10479 #:test-flags #~(list "--ignore=fxa/tests/test_core.py")))
10480 (propagated-inputs
10481 (list python-cryptography
10482 python-pyjwt
10483 python-parameterized
10484 python-hawkauthlib
10485 python-requests))
10486 (native-inputs
10487 (list python-grequests
10488 python-hatchling
10489 python-mock
10490 python-pytest
10491 python-responses))
10492 (home-page "https://github.com/mozilla/PyFxA")
10493 (synopsis "Firefox Accounts client library for Python")
10494 (description
10495 "This is a Python library for interacting with the Firefox Accounts
10496ecosystem.")
10497 (license license:mpl2.0)))
10498
10499(define-public python-hyperlink
10500 (package
10501 (name "python-hyperlink")
10502 (version "21.0.0")
10503 (source
10504 (origin
10505 (method url-fetch)
10506 (uri (pypi-uri "hyperlink" version))
10507 (sha256
10508 (base32
10509 "0sx50lkivsfjxx9zr4yh7l9gll2l9kvl0v0w8w4wk2x5v9bzjyj2"))))
10510 (build-system pyproject-build-system)
10511 (arguments
10512 (list #:phases
10513 #~(modify-phases %standard-phases
10514 (add-before 'check 'pretend-to-be-CI
10515 (lambda _
10516 ;; Pretend to be a CI system to skip flaky tests.
10517 (setenv "CI" "true"))))))
10518 (native-inputs
10519 (list python-pytest python-setuptools python-wheel))
10520 (propagated-inputs
10521 (list python-idna))
10522 (home-page "https://github.com/python-hyper/hyperlink")
10523 (synopsis "Python module to create immutable URLs according to spec")
10524 (description "This package provides a Python module to create immutable, and
10525correct URLs for Python according to RFCs 3986 and 3987.")
10526 (license license:expat)))
10527
10528(define-public python-treq
10529 (package
10530 (name "python-treq")
10531 (version "24.9.1")
10532 (source
10533 (origin
10534 (method url-fetch)
10535 (uri (pypi-uri "treq" version))
10536 (sha256
10537 (base32
10538 "1a7yrq2m7hf77fia4fc0c6zanvwnykpgirdbs1cyvr7k0k27znhm"))))
10539 (build-system pyproject-build-system)
10540 (native-inputs
10541 (list python-httpbin
10542 python-pytest
10543 python-service-identity
10544 python-setuptools
10545 python-wheel))
10546 (propagated-inputs
10547 (list python-attrs
10548 python-hyperlink
10549 python-incremental
10550 python-requests
10551 python-twisted
10552 python-typing-extensions))
10553 (home-page "https://github.com/twisted/treq")
10554 (synopsis "Requests-like API built on top of twisted.web's Agent")
10555 (description "This package provides an HTTP library inspired by
10556@code{requests} but written on top of Twisted's @code{Agents}. It offers a
10557high level API for making HTTP requests when using Twisted.")
10558 (license license:expat)))
10559
10560(define-public python-ws4py
10561 (package
10562 (name "python-ws4py")
10563 (version "0.6.0")
10564 (source
10565 (origin
10566 (method git-fetch)
10567 (uri (git-reference
10568 (url "https://github.com/Lawouach/WebSocket-for-Python")
10569 (commit version)))
10570 (file-name (git-file-name name version))
10571 (sha256
10572 (base32
10573 "00y6s8gk20936njqbxr8vjliviiz7r7pqrlwg7xi8zzs6903xvv6"))))
10574 (build-system pyproject-build-system)
10575 (arguments
10576 (list
10577 #:phases
10578 #~(modify-phases %standard-phases
10579 (add-after 'unpack 'remove-cherrypy-support
10580 (lambda _
10581 (delete-file "ws4py/server/cherrypyserver.py")
10582 (delete-file "test/test_cherrypy.py"))))))
10583 (native-inputs (list python-setuptools python-pytest))
10584 (propagated-inputs
10585 (list python-gevent python-tornado))
10586 (home-page "https://github.com/Lawouach/WebSocket-for-Python")
10587 (synopsis "WebSocket client and server library")
10588 (description
10589 "This package provides a WebSocket client and server library for Python.")
10590 (license license:bsd-3)))
10591
10592(define-public python-slowapi
10593 (package
10594 (name "python-slowapi")
10595 (version "0.1.9")
10596 (source
10597 (origin
10598 (method git-fetch)
10599 (uri (git-reference
10600 (url "https://github.com/laurents/slowapi")
10601 (commit (string-append "v" version))))
10602 (file-name (git-file-name name version))
10603 (sha256
10604 (base32 "1lc1n6lvh01dhhrc507qri9rz1w72l2riii03ixh7n7n1gwjpws7"))))
10605 (build-system pyproject-build-system)
10606 (arguments
10607 (list
10608 #:test-flags
10609 ;; These tests fail because the timestamp contains more decimal points
10610 ;; than expected, so a simple equality comparison fails.
10611 '(list "-k" (string-append "not test_headers_no_breach"
10612 " and not test_headers_breach"))))
10613 (propagated-inputs (list python-limits python-redis))
10614 (native-inputs
10615 (list python-fastapi
10616 python-hiro
10617 python-mock
10618 python-poetry-core
10619 python-pytest))
10620 (home-page "https://github.com/laurents/slowapi")
10621 (synopsis "Rate limiting extension for Starlette and Fastapi")
10622 (description
10623 "This package provides a rate limiting extension for Starlette and
10624Fastapi.")
10625 (license license:expat)))
10626
10627(define-public python-slugify
10628 (package
10629 (name "python-slugify")
10630 (version "8.0.4")
10631 (source
10632 (origin
10633 (method git-fetch)
10634 (uri (git-reference
10635 (url "https://github.com/un33k/python-slugify")
10636 (commit (string-append "v" version))))
10637 (file-name (git-file-name name version))
10638 (sha256
10639 (base32 "0z83nwy7acc72mb2jv3516nfplah1wm61wkmnzl71dh8i4q985yd"))))
10640 (build-system pyproject-build-system)
10641 (arguments (list #:test-backend #~'unittest))
10642 (native-inputs (list python-setuptools))
10643 (propagated-inputs (list python-unidecode python-text-unidecode))
10644 (home-page "https://github.com/un33k/python-slugify")
10645 (synopsis "Python Slugify application that handles Unicode")
10646 (description "This package provides a @command{slufigy} command and
10647library to create slugs from unicode strings while keeping it DRY.")
10648 (license license:expat)))
10649
10650(define-public python-tinycss2
10651 (package
10652 (name "python-tinycss2")
10653 (version "1.5.1")
10654 (source
10655 (origin
10656 (method git-fetch)
10657 (uri (git-reference
10658 (url "https://github.com/Kozea/tinycss2")
10659 (commit (string-append "v" version))
10660 (recursive? #true)))
10661 (file-name (git-file-name name version))
10662 (sha256
10663 (base32 "1ww5m8rmpva9mq04cz1h9rx76vg2h5nnijzi0vprf5wzp8g9snb5"))))
10664 (build-system pyproject-build-system)
10665 (native-inputs
10666 (list python-flit-core
10667 python-pytest))
10668 (propagated-inputs
10669 (list python-webencodings))
10670 (home-page "https://doc.courtbouillon.org/tinycss2/stable/")
10671 (synopsis "Low-level CSS parser for Python")
10672 (description "@code{tinycss2} can parse strings, return Python objects
10673representing tokens and blocks, and generate CSS strings corresponding to
10674these objects.
10675
10676Based on the CSS Syntax Level 3 specification, @code{tinycss2} knows the
10677grammar of CSS but doesn’t know specific rules, properties or values supported
10678in various CSS modules.")
10679 (license license:bsd-3)))
10680
10681(define-public python-tinyhtml5
10682 (package
10683 (name "python-tinyhtml5")
10684 (version "2.1.0")
10685 (source
10686 (origin
10687 (method git-fetch)
10688 (uri (git-reference
10689 (url "https://github.com/CourtBouillon/tinyhtml5")
10690 (commit version)))
10691 (file-name (git-file-name name version))
10692 (sha256
10693 (base32 "1q8z2ym2q6083ky0f9vwf73k3gimffnbfwlpmd69bp6anc4fa81x"))))
10694 (build-system pyproject-build-system)
10695 (propagated-inputs
10696 (list python-webencodings))
10697 (native-inputs
10698 (list python-flit-core
10699 python-pytest))
10700 (home-page "https://github.com/CourtBouillon/tinyhtml5")
10701 (synopsis "Small HTML parser based on the WHATWG HTML specification")
10702 (description "This Python module is a HTML5 parser that transforms a
10703possibly malformed HTML document into an ElementTree tree. This module is a
10704simplified fork of html5lib.")
10705 (license license:expat)))
10706
10707(define-public python-cssselect2
10708 (package
10709 (name "python-cssselect2")
10710 (version "0.9.0")
10711 (source
10712 (origin
10713 (method git-fetch)
10714 (uri (git-reference
10715 (url "https://github.com/Kozea/cssselect2")
10716 (commit version)))
10717 (file-name (git-file-name name version))
10718 (sha256
10719 (base32 "1drvb83siq9s6dygyhab6kzk2v2ib6cv51ls42p4jrxs9q8cdiw0"))))
10720 (build-system pyproject-build-system)
10721 (propagated-inputs
10722 (list python-tinycss2))
10723 (native-inputs
10724 (list python-flit-core
10725 python-pytest))
10726 (home-page "https://doc.courtbouillon.org/cssselect2/stable/")
10727 (synopsis "CSS selectors for Python ElementTree")
10728 (description "@code{cssselect2} is a straightforward implementation of
10729CSS3 Selectors for markup documents (HTML, XML, etc.) that can be read by
10730ElementTree-like parsers (including cElementTree, lxml, html5lib, etc.).
10731
10732Unlike the Python package @code{cssselect}, it does not translate selectors to
10733XPath and therefore does not have all the correctness corner cases that are
10734hard or impossible to fix in cssselect.")
10735 (license license:bsd-3)))
10736
10737(define-public python-uvloop
10738 (package
10739 (name "python-uvloop")
10740 (version "0.22.1")
10741 (source
10742 (origin
10743 (method git-fetch)
10744 (uri (git-reference
10745 (url "https://github.com/MagicStack/uvloop")
10746 (commit (string-append "v" version))))
10747 (file-name (git-file-name name version))
10748 (sha256
10749 (base32 "1qbykwwz4ac3f7472g22z4i5rrd5kcr8hmxn5kswmja57j1nxlpl"))
10750 (modules '((guix build utils)))
10751 (snippet
10752 '(begin
10753 (delete-file-recursively "vendor")))))
10754 (build-system pyproject-build-system)
10755 (arguments
10756 (list
10757 ;; tests: 470 passed, 32 skipped, 8 deselected, 5 warnings, 104 subtests passed
10758 #:test-flags
10759 ;; The tests are prone to get stuck. Use pytest-timeout’s --timeout flag
10760 ;; to get a meaningful idea about where.
10761 #~(list "--timeout=300"
10762 "--timeout-method=thread"
10763 "-k" (string-join
10764 (list
10765 ;; Timeout, because SIGINT cannot be sent to child.
10766 "not test_signals_sigint_pycode_continue"
10767 "test_signals_sigint_pycode_stop"
10768 "test_signals_sigint_uvcode"
10769 "test_signals_sigint_uvcode_two_loop_runs"
10770 #$@(if (target-riscv64?)
10771 `("test_renegotiation")
10772 `()))
10773 " and not "))
10774 #:phases
10775 #~(modify-phases %standard-phases
10776 (add-after 'unpack 'preparations
10777 (lambda _
10778 ;; Use packaged libuv.
10779 (substitute* "setup.py" (("self.use_system_libuv = False")
10780 "self.use_system_libuv = True"))
10781 ;; Replace hardcoded shell command.
10782 (substitute* "uvloop/loop.pyx"
10783 (("b'/bin/sh'") (string-append "b'" (which "sh") "'")))
10784 (substitute* "tests/test_process.py"
10785 (("'env'") (string-append "'" (which "env") "'")))))
10786 #$@(if (target-riscv64?)
10787 `((add-after 'unpack 'adjust-test-timeouts
10788 (lambda _
10789 (substitute* '("tests/test_tcp.py"
10790 "tests/test_unix.py")
10791 (("SSL_HANDSHAKE_TIMEOUT = 15\\.0")
10792 "SSL_HANDSHAKE_TIMEOUT = 30.0")))))
10793 '())
10794 (add-before 'check 'pre-check
10795 (lambda* (#:key tests? #:allow-other-keys)
10796 (when tests?
10797 ;; Remove Python module, which conflicts with the installed
10798 ;; version, but lacks the built C module.
10799 (delete-file-recursively "uvloop")))))))
10800 (native-inputs
10801 (list python-aiohttp
10802 python-cython
10803 python-psutil
10804 python-pyopenssl
10805 python-pytest
10806 python-pytest-timeout
10807 python-setuptools))
10808 (inputs
10809 (list libuv))
10810 (home-page "https://github.com/MagicStack/uvloop")
10811 (synopsis "Fast implementation of asyncio event loop on top of libuv")
10812 (description
10813 "@code{uvloop} is a fast, drop-in replacement of the built-in asyncio
10814event loop. It is implemented in Cython and uses libuv under the hood.")
10815 (license license:expat)))
10816
10817(define-public python-httptools
10818 (package
10819 (name "python-httptools")
10820 (version "0.7.1")
10821 (source
10822 (origin
10823 ;; PyPI tarball comes with a vendored http-parser and no tests.
10824 (method git-fetch)
10825 (uri (git-reference
10826 (url "https://github.com/MagicStack/httptools")
10827 (commit (string-append "v" version))))
10828 (file-name (git-file-name name version))
10829 (sha256
10830 (base32 "0j9c1av3y1smg6lgh0i031l07i9plzbvv14jj53vpzm35sy7kbl7"))
10831 (modules '((guix build utils)))
10832 (snippet
10833 #~(begin (delete-file-recursively "vendor")))))
10834 (build-system pyproject-build-system)
10835 (arguments
10836 (list
10837 #:test-flags
10838 ;; XXX: AssertionError: HttpParserError not raised.
10839 #~(list "-k" "not test_parser_response_leninent_headers_1")
10840 #:phases
10841 #~(modify-phases %standard-phases
10842 (add-after 'unpack 'configure-build-ext
10843 (lambda _
10844 (with-output-to-file "setup.cfg"
10845 (lambda ()
10846 (display "\
10847[build_ext]
10848use_system_llhttp = true
10849use_system_http_parser = true
10850cython_always = true"))))))))
10851 (native-inputs
10852 (list python-cython
10853 python-pytest
10854 python-setuptools))
10855 (inputs
10856 (list http-parser
10857 llhttp))
10858 (home-page "https://github.com/MagicStack/httptools")
10859 (synopsis "Collection of framework independent HTTP protocol utils")
10860 (description
10861 "@code{httptools} is a Python binding for the nodejs HTTP parser.")
10862 (license license:expat)))
10863
10864(define-public python-uvicorn
10865 (package
10866 (name "python-uvicorn")
10867 ;; 0.49.0 (2026-06-03), release does not work with python-websockets 16.0,
10868 ;; see: <https://github.com/Kludex/uvicorn/pull/2985>.
10869 (properties '((commit . "e8a31bca03254b8457c4c89596e310282cc33edc")
10870 (revision . "0")))
10871 (version (git-version "0.49.0"
10872 (assoc-ref properties 'revision)
10873 (assoc-ref properties 'commit)))
10874 (source
10875 (origin
10876 (method git-fetch)
10877 (uri (git-reference
10878 (url "https://github.com/encode/uvicorn")
10879 (commit (assoc-ref properties 'commit))))
10880 (file-name (git-file-name name version))
10881 (sha256
10882 (base32 "1vd1680a1k3jcdgc3jd5p3a6zmhz4r8bgzb7v7zhpxrkkdsisrxj"))))
10883 (build-system pyproject-build-system)
10884 (arguments
10885 (list
10886 #:test-flags
10887 #~(list "--ignore=tests/benchmarks"
10888 #$@(cond
10889 ((or (target-aarch64?)
10890 (target-riscv64?))
10891 '("-k not test_send_binary_data_to_server_bigger_than_default_on_websockets"))
10892 (#t '())))))
10893 (native-inputs
10894 (list nss-certs-for-test
10895 python-a2wsgi
10896 python-hatchling
10897 python-httpx-bootstrap
10898 python-pytest
10899 python-pytest-asyncio
10900 python-pytest-mock
10901 python-pytest-xdist
10902 python-requests
10903 python-trustme
10904 python-wsproto))
10905 (propagated-inputs
10906 (list python-a2wsgi
10907 python-click
10908 python-dotenv
10909 python-h11
10910 python-httptools
10911 python-pyyaml
10912 python-uvloop
10913 python-watchfiles
10914 python-websockets))
10915 (home-page "https://github.com/encode/uvicorn")
10916 (synopsis "Fast ASGI server implementation")
10917 (description
10918 "@code{uvicorn} is a fast ASGI server implementation, using @code{uvloop}
10919and @code{httptools}. It currently supports HTTP/1.1 and WebSockets. Support
10920for HTTP/2 is planned.")
10921 (license license:bsd-3)))
10922
10923(define-public python-translation-finder
10924 (package
10925 (name "python-translation-finder")
10926 (version "2.22")
10927 (source
10928 (origin
10929 (method url-fetch)
10930 (uri (pypi-uri "translation_finder" version))
10931 (sha256
10932 (base32 "1hav99ccijvk2w8wpvba2pc7ba1z150vja2wvaimd069mc08pjd2"))))
10933 (build-system pyproject-build-system)
10934 (arguments
10935 (list
10936 #:test-flags
10937 ;; AssertionError: 31 != 30 : Mismatched count of results
10938 #~(list "--deselect=translation_finder/test_api.py::APITest::test_discover_file")))
10939 (native-inputs
10940 (list python-pytest
10941 python-setuptools))
10942 (propagated-inputs
10943 (list python-charset-normalizer
10944 python-ruamel.yaml
10945 python-weblate-language-data))
10946 (home-page "https://weblate.org/")
10947 (synopsis "Translation file finder for Weblate")
10948 (description "This package provides a function to find translation file in
10949the source code of a project. It supports many translation file formats and
10950is part of the Weblate translation platform.")
10951 (license license:gpl3+)))
10952
10953(define-public python-gitlab
10954 (package
10955 (name "python-gitlab")
10956 (version "7.0.0")
10957 (source
10958 (origin
10959 (method git-fetch)
10960 (uri (git-reference
10961 (url "https://github.com/python-gitlab/python-gitlab")
10962 (commit (string-append "v" version))))
10963 (file-name (git-file-name name version))
10964 (sha256
10965 (base32 "0rf1hz5n724f8sfc7g3fzfz96jsv9y145pi6gc8qscsjq3z4vi37"))))
10966 (build-system pyproject-build-system)
10967 (arguments
10968 (list
10969 #:test-flags
10970 #~(list "--ignore=tests/unit/test_graphql.py"
10971 ;; XXX: Missing helper script.
10972 "-k" "not test_data_from_helper" "tests/unit")))
10973 (native-inputs
10974 (list python-anyio
10975 python-pytest
10976 python-responses
10977 python-setuptools))
10978 (propagated-inputs (list python-requests python-requests-toolbelt))
10979 (home-page "https://github.com/python-gitlab/python-gitlab")
10980 (synopsis "Interact with GitLab API")
10981 (description "This package provides an extended library for interacting
10982with GitLab instances through their API.")
10983 (license license:lgpl3+)))
10984
10985(define-public python-path-and-address
10986 (package
10987 (name "python-path-and-address")
10988 (version "2.0.1")
10989 (source
10990 (origin
10991 (method git-fetch)
10992 (uri (git-reference
10993 (url "https://github.com/joeyespo/path-and-address")
10994 (commit (string-append "v" version))))
10995 (file-name (git-file-name name version))
10996 (sha256
10997 (base32 "0b0afpsaim06mv3lhbpm8fmawcraggc11jhzr6h72kdj1cqjk5h6"))))
10998 (build-system pyproject-build-system)
10999 (native-inputs
11000 (list python-pytest python-setuptools))
11001 (home-page "https://github.com/joeyespo/path-and-address")
11002 (synopsis "Functions for command-line server tools used by humans")
11003 (description "Path-and-address resolves ambiguities of command-line
11004interfaces, inferring which argument is the path, and which is the address.")
11005 (license license:expat)))
11006
11007(define-public python-port-for
11008 (package
11009 (name "python-port-for")
11010 (version "0.7.4")
11011 (source
11012 (origin
11013 (method url-fetch)
11014 (uri (pypi-uri "port_for" version))
11015 (sha256
11016 (base32 "13826s2d4hzzmv69wws6a7ryhminclv2bqaw6cpl929gnbki6xzw"))))
11017 (build-system pyproject-build-system)
11018 (propagated-inputs
11019 (list python-urllib3))
11020 (native-inputs
11021 (list python-pytest python-setuptools python-wheel))
11022 (home-page "https://github.com/kmike/port-for/")
11023 (synopsis "TCP localhost port finder and association manager")
11024 (description
11025 "This package provides a utility that helps with local TCP ports
11026management. It can find an unused TCP localhost port and remember the
11027association.")
11028 (license license:expat)))
11029
11030(define-public python-livereload
11031 (package
11032 (name "python-livereload")
11033 (version "2.7.1")
11034 (source
11035 (origin
11036 (method git-fetch)
11037 (uri (git-reference
11038 (url "https://github.com/lepture/python-livereload")
11039 (commit (string-append "v" version))))
11040 (file-name (git-file-name name version))
11041 (sha256
11042 (base32 "19wkdd1grw6mcd4qi8iaw4jdr207h3m24951vgy69j7g904lynjq"))))
11043 (build-system pyproject-build-system)
11044 (arguments (list #:test-backend #~'unittest))
11045 (native-inputs (list python-django python-setuptools))
11046 (propagated-inputs (list python-tornado))
11047 (home-page "https://github.com/lepture/python-livereload")
11048 (synopsis "Python LiveReload")
11049 (description
11050 "Python LiveReload provides a command line utility, @command{livereload},
11051for starting a web server in a directory. It can trigger arbitrary commands
11052and serve updated contents upon changes to the directory.")
11053 (license license:bsd-3)))
11054
11055(define-public python-vf-1
11056 (package
11057 (name "python-vf-1")
11058 (version "1.0.0")
11059 (source
11060 (origin
11061 (method git-fetch)
11062 (uri (git-reference
11063 (url "https://git.sr.ht/~solderpunk/VF-1")
11064 (commit (string-append "v" version))))
11065 (file-name (git-file-name name version))
11066 (sha256
11067 (base32 "1j8l4xivm6rs8jms1ixx0i9fz4yxr84hbz1pdc498jgkgzy1v8ih"))))
11068 (build-system pyproject-build-system)
11069 (arguments (list #:tests? #f)) ; No tests.
11070 (native-inputs (list python-setuptools))
11071 (home-page "https://git.sr.ht/~solderpunk/VF-1")
11072 (synopsis "Command line gopher client")
11073 (description "@code{VF-1} is a command line gopher client with
11074@acronym{TLS, Transport Layer Security} support.")
11075 (license license:bsd-2)))
11076
11077(define-public python-httpcore
11078 (package
11079 (name "python-httpcore")
11080 (version "1.0.9")
11081 (source
11082 (origin
11083 ;; PyPI tarball does not contain tests.
11084 (method git-fetch)
11085 (uri (git-reference
11086 (url "https://github.com/encode/httpcore")
11087 (commit version)))
11088 (file-name (git-file-name name version))
11089 (sha256
11090 (base32 "0yhm2n8qflpwjsjggyj757m0gw3n68al0my0ljybndwp933ipl32"))))
11091 (build-system pyproject-build-system)
11092 (native-inputs
11093 (list nss-certs-for-test
11094 python-hatch-fancy-pypi-readme
11095 python-hatchling
11096 python-pytest
11097 python-pytest-asyncio
11098 python-pytest-httpbin
11099 python-pytest-trio
11100 python-uvicorn
11101 python-trustme))
11102 (propagated-inputs
11103 (list python-anyio
11104 python-certifi
11105 python-h11
11106 python-h2
11107 python-sniffio
11108 python-socksio
11109 python-trio
11110 python-trio-typing))
11111 (home-page "https://github.com/encode/httpcore")
11112 (synopsis "Minimal, low-level HTTP client")
11113 (description
11114 "HTTP Core provides a minimal and low-level HTTP client, which does one
11115thing only: send HTTP requests.
11116
11117Some things HTTP Core does do:
11118
11119@itemize
11120@item Sending HTTP requests.
11121@item Provides both sync and async interfaces.
11122@item Supports HTTP/1.1 and HTTP/2.
11123@item Async backend support for asyncio and trio.
11124@item Automatic connection pooling.
11125@item HTTP(S) proxy support.
11126@end itemize")
11127 (license license:bsd-3)))
11128
11129;;; Variant used to break a cycle between python-httpx and python-uvicorn.
11130(define-public python-httpcore-bootstrap
11131 (hidden-package
11132 (package/inherit python-httpcore
11133 (name "python-httpcore-bootstrap")
11134 (arguments (list #:tests? #f))
11135 (native-inputs (list python-hatchling
11136 python-hatch-fancy-pypi-readme)))))
11137
11138(define-public python-httpx
11139 (package
11140 (name "python-httpx")
11141 (version "0.28.1")
11142 (source
11143 (origin
11144 ;; PyPI tarball does not contain tests.
11145 (method git-fetch)
11146 (uri (git-reference
11147 (url "https://github.com/encode/httpx")
11148 (commit version)))
11149 (file-name (git-file-name name version))
11150 (sha256
11151 (base32 "00d6rb21xwazwb0sj68zhra0qxxcwkd0vv7bg3k1jg94dmk2w7xl"))))
11152 (build-system pyproject-build-system)
11153 (arguments
11154 (list
11155 ;; 1401 passed, 1 skipped, 5 deselected
11156 #:test-flags
11157 #~(list "-o" "asyncio_mode=auto"
11158 ;; CLI tests are broken.
11159 "--ignore=tests/test_main.py"
11160 "-k" (string-join
11161 ;; These tests try to open an outgoing connection.
11162 (list "not test_async_proxy_close"
11163 "test_sync_proxy_clos"
11164 "test_write_timeout")
11165 " and not "))))
11166 (native-inputs
11167 (list nss-certs-for-test
11168 python-chardet
11169 python-cryptography
11170 python-hatch-fancy-pypi-readme
11171 python-hatchling
11172 python-pytest
11173 python-pytest-asyncio
11174 python-pytest-trio
11175 python-setuptools
11176 python-trio
11177 python-trustme
11178 python-uvicorn))
11179 (propagated-inputs
11180 (list python-anyio
11181 python-certifi
11182 python-httpcore
11183 python-idna
11184 ;; [brotli]
11185 python-brotli
11186 ;; [http2]
11187 python-h2
11188 ;; [socks]
11189 python-socksio
11190 ;; [zstd]
11191 python-zstandard
11192 ;; For trio, see:
11193 ;; <https://github.com/python-trio/trio/issues/2802>.
11194 python-sniffio))
11195 (home-page "https://www.python-httpx.org/")
11196 (synopsis "HTTP client for Python")
11197 (description
11198 "HTTPX is a fully featured HTTP client for Python 3, which provides sync
11199and async APIs, and support for both HTTP/1.1 and HTTP/2.
11200
11201HTTPX builds on the well-established usability of requests, and gives you:
11202
11203@itemize
11204@item A broadly requests-compatible API.
11205@item Standard synchronous interface, but with async support if you need it.
11206@item HTTP/1.1 and HTTP/2 support.
11207@item Ability to make requests directly to WSGI applications or ASGI applications.
11208@item Strict timeouts everywhere.
11209@item Fully type annotated.
11210@item 99% test coverage.
11211@end itemize
11212
11213Plus all the standard features of requests:
11214
11215@itemize
11216@item International Domains and URLs
11217@item Keep-Alive & Connection Pooling
11218@item Sessions with Cookie Persistence
11219@item Browser-style SSL Verification
11220@item Basic/Digest Authentication
11221@item Elegant Key/Value Cookies
11222@item Automatic Decompression
11223@item Automatic Content Decoding
11224@item Unicode Response Bodies
11225@item Multipart File Uploads
11226@item HTTP(S) Proxy Support
11227@item Connection Timeouts
11228@item Streaming Downloads
11229@item .netrc Support
11230@item Chunked Requests
11231@end itemize")
11232 (license license:bsd-3)))
11233
11234;;; Variant used to break a cycle with python-uvicorn.
11235(define-public python-httpx-bootstrap
11236 (hidden-package
11237 (package/inherit python-httpx
11238 (name "python-httpx-bootstrap")
11239 (arguments (list #:tests? #f))
11240 (native-inputs
11241 (list python-hatchling
11242 python-hatch-fancy-pypi-readme))
11243 (propagated-inputs
11244 (modify-inputs propagated-inputs
11245 (replace "python-httpcore" python-httpcore-bootstrap))))))
11246
11247(define-public python-httpx-sse
11248 (package
11249 (name "python-httpx-sse")
11250 (version "0.4.3")
11251 (source
11252 (origin
11253 (method git-fetch)
11254 (uri (git-reference
11255 (url "https://github.com/florimondmanca/httpx-sse")
11256 (commit version)))
11257 (file-name (git-file-name name version))
11258 (sha256
11259 (base32 "0zliqd1rkvc0mjppscvqmg8j17hsiwvxn439yhn6qbjvk5ydncz8"))))
11260 (build-system pyproject-build-system)
11261 (native-inputs
11262 (list python-pytest
11263 python-pytest-asyncio
11264 python-setuptools
11265 python-setuptools-scm
11266 python-sse-starlette))
11267 (propagated-inputs (list python-httpx))
11268 (home-page "https://github.com/florimondmanca/httpx-sse")
11269 (synopsis "Consume Server-Sent Event (SSE) messages with HTTPX.")
11270 (description "Consume Server-Sent Event (SSE) messages with HTTPX.")
11271 (license license:expat)))
11272
11273(define-public python-httpx-ws
11274 (package
11275 (name "python-httpx-ws")
11276 (version "0.9.0")
11277 (source
11278 (origin
11279 (method git-fetch)
11280 (uri (git-reference
11281 (url "https://github.com/frankie567/httpx-ws")
11282 (commit (string-append "v" version))))
11283 (file-name (git-file-name name version))
11284 (sha256
11285 (base32 "1hin6fndvfnx3mjgy30x0ghgjalikxavyj24klcknnly9sqzg83v"))))
11286 (build-system pyproject-build-system)
11287 (propagated-inputs
11288 (list python-anyio
11289 python-httpcore
11290 python-httpx
11291 python-wsproto))
11292 (native-inputs
11293 (list nss-certs-for-test
11294 python-hatch-regex-commit
11295 python-hatchling
11296 python-pytest
11297 python-pytest-cov
11298 python-starlette
11299 python-uvicorn))
11300 (home-page "https://github.com/frankie567/httpx-ws")
11301 (synopsis "WebSockets support for HTTPX")
11302 (description "This package provides @code{WebSockets} support for HTTPX.")
11303 (license license:expat)))
11304
11305(define-public python-wsgiprox
11306 (package
11307 (name "python-wsgiprox")
11308 (version "1.5.2")
11309 (source
11310 (origin
11311 (method url-fetch)
11312 (uri (pypi-uri "wsgiprox" version))
11313 (sha256
11314 (base32 "11fsm199pvwbmqx2lccznvws65aam1rqqv0w79gal8hispwgd5rs"))))
11315 (build-system pyproject-build-system)
11316 (arguments
11317 ;; The test suite hangs (see:
11318 ;; https://github.com/webrecorder/wsgiprox/issues/6).
11319 (list
11320 #:tests? #f
11321 #:phases
11322 #~(modify-phases %standard-phases
11323 (add-after 'unpack 'fix-pytest-argument
11324 (lambda _
11325 ;; See: https://github.com/webrecorder/wsgiprox/issues/7.
11326 (substitute* "setup.py"
11327 (("--doctest-module")
11328 "--doctest-modules")))))))
11329 (propagated-inputs
11330 (list python-certauth
11331 python-gevent
11332 python-six
11333 python-websocket-client))
11334 (native-inputs
11335 (list python-mock python-waitress python-setuptools))
11336 (home-page "https://github.com/webrecorder/wsgiprox")
11337 (synopsis "HTTP/S proxy with WebSockets over WSGI")
11338 (description
11339 "@code{wsgiprox} is a Python WSGI (Web Server Gateway Interface)
11340middle-ware for adding HTTP and HTTPS proxy support to a WSGI application.
11341The library accepts HTTP and HTTPS proxy connections, and routes them to a
11342designated prefix.")
11343 (license license:asl2.0)))
11344
11345(define-public python-warcio
11346 ;; The PyPI release is missing some test support files (see:
11347 ;; https://github.com/webrecorder/warcio/issues/132).
11348 (package
11349 (name "python-warcio")
11350 (version "1.8.1")
11351 (source
11352 (origin
11353 (method git-fetch)
11354 (uri (git-reference
11355 (url "https://github.com/webrecorder/warcio")
11356 (commit (string-append "v" version))))
11357 (file-name (git-file-name name version))
11358 (sha256
11359 (base32
11360 "19wwg7zmx33c942dbahdkng1byiwr4c9cd1ayrsh13f818n17zps"))))
11361 (build-system pyproject-build-system)
11362 (arguments
11363 (list
11364 #:test-flags ; These tests fail due to networking requirements.
11365 '(list "-k" (format #f "not ~a"
11366 (string-join
11367 '("test_post_chunked"
11368 "test_remote"
11369 "test_capture_http_proxy"
11370 "test_capture_https_proxy"
11371 "test_capture_https_proxy_same_session")
11372 " and not "))
11373 ; The following test requires the hookdns package.
11374 "--ignore=test/test_capture_http_proxy.py")))
11375 (native-inputs
11376 (list python-httpbin
11377 python-pytest
11378 python-requests
11379 python-setuptools
11380 python-wsgiprox))
11381 (home-page "https://github.com/webrecorder/warcio")
11382 (synopsis "Streaming web archival archive (WARC) library")
11383 (description "warcio is a Python library to read and write the WARC format
11384commonly used in Web archives. It is designed for fast, low-level access to
11385web archival content, oriented around a stream of WARC records rather than
11386files.")
11387 (license license:asl2.0)))
11388
11389(define-public python-websockets
11390 (package
11391 (name "python-websockets")
11392 (version "16.0")
11393 (source
11394 (origin
11395 (method git-fetch)
11396 (uri (git-reference
11397 (url "https://github.com/aaugustin/websockets")
11398 (commit version)))
11399 (file-name (git-file-name name version))
11400 (sha256
11401 (base32
11402 "1f71siwmjxn8b671x8lkkxx56q3xm99f2kmjqpzfcv3air9n94gg"))))
11403 (build-system pyproject-build-system)
11404 (arguments
11405 (list #:test-backend #~'unittest
11406 #:phases
11407 #~(modify-phases %standard-phases
11408 (add-before 'check 'extend-test-timeout
11409 (lambda _
11410 ;; Some architectures need an even longer timeout. Make it
11411 ;; long enough that it should never fail due to timeout.
11412 #$@(if (target-riscv64?)
11413 #~((setenv "WEBSOCKETS_TESTS_TIMEOUT_FACTOR" "100"))
11414 #~((setenv "WEBSOCKETS_TESTS_TIMEOUT_FACTOR" "10"))))))))
11415 (native-inputs
11416 (list python-setuptools))
11417 (home-page "https://github.com/aaugustin/websockets")
11418 (synopsis
11419 "Python implementation of the WebSocket Protocol (RFC 6455 & 7692)")
11420 (description
11421 "@code{websockets} is a library for building WebSocket servers and clients
11422in Python with a focus on correctness and simplicity.
11423
11424Built on top of @code{asyncio}, Python's standard asynchronous I/O framework,
11425it provides an elegant coroutine-based API.")
11426 (license license:bsd-3)))
11427
11428(define-public selenium-manager
11429 (package
11430 (name "selenium-manager")
11431 (version "4.34.2")
11432 (source
11433 (origin
11434 (method git-fetch)
11435 (uri (git-reference
11436 (url "https://github.com/SeleniumHQ/selenium")
11437 (commit (string-append "selenium-" version "-python"))))
11438 (file-name (git-file-name name version))
11439 (sha256
11440 (base32 "14fg8r4rm9d7169rlm29l5yn08wgllmqk1zc6six3dlrzzf5mxil"))))
11441 (build-system cargo-build-system)
11442 (arguments
11443 (list
11444 ;; XXX: Almost all tests require either browsers or network access.
11445 #:tests? #f
11446 #:install-source? #f ; Most likely intended as a leaf.
11447 #:phases
11448 #~(modify-phases %standard-phases
11449 (add-after 'unpack 'chdir
11450 (lambda _
11451 (chdir "rust"))))))
11452 (native-inputs (list pkg-config))
11453 (inputs (cons* (list zstd "lib") xz
11454 (cargo-inputs 'selenium-manager)))
11455 (home-page "https://www.selenium.dev")
11456 (synopsis "CLI tool to manager the browser test infrastructure")
11457 (description
11458 "Selenium simplifies web browser automation. It specifically provides
11459infrastructure for the W3C WebDriver specification — a platform and
11460language-neutral coding interface compatible with all major web browsers.
11461
11462Selenium Manager is a CLI tool that automatically manages the browser/driver
11463infrastructure required by Selenium.")
11464 (license license:asl2.0)))
11465
11466(define-public python-selenium
11467 (package/inherit selenium-manager
11468 (name "python-selenium")
11469 (build-system pyproject-build-system)
11470 (arguments
11471 (list
11472 ;; XXX: Disable failing tests.
11473 #:test-flags
11474 #~(list "--ignore-glob=test/selenium/webdriver/*"
11475 ;; Probably requires those.
11476 "--ignore-glob=test/unit/selenium/webdriver/chrome/*"
11477 "--ignore-glob=test/unit/selenium/webdriver/firefox/*"
11478 ;; XXX: SSL certificates access.
11479 "--ignore=test/unit/selenium/webdriver/remote/remote_connection_tests.py"
11480 "-k" "not test_missing_cdp_devtools_version_falls_back")
11481 #:phases
11482 #~(modify-phases %standard-phases
11483 (add-after 'unpack 'chdir
11484 (lambda _
11485 (chdir "py")))
11486 (add-after 'chdir 'inject-selenium-manager-binary
11487 (lambda* (#:key inputs #:allow-other-keys)
11488 (substitute* "selenium/webdriver/common/selenium_manager.py"
11489 (("compiled_path = Path.*")
11490 (format #f "return Path(~s)~%"
11491 (search-input-file inputs "bin/selenium-manager"))))
11492 (substitute* "pyproject.toml"
11493 (("\\[\\[tool\\.setuptools-rust\\.bins\\]\\]")
11494 "")
11495 (("target = \"selenium\\.webdriver\\.common.*\"")
11496 ""))))
11497 (add-after 'chdir 'relax-requirements
11498 (lambda _
11499 (substitute* "pyproject.toml"
11500 (("\"(typing_extensions|trio|urllib3.*)~=.*\"," _ target)
11501 (format #f "~s," target))))))))
11502 (propagated-inputs (list python-certifi
11503 python-trio
11504 python-trio-websocket
11505 python-typing-extensions
11506 python-urllib3
11507 python-websocket-client))
11508 (inputs (list selenium-manager))
11509 (native-inputs (list python-filetype
11510 python-pytest
11511 python-pytest-mock
11512 python-pytest-trio
11513 python-setuptools
11514 python-setuptools-rust))
11515 (synopsis "Python bindings for Selenium")
11516 (description
11517 "Selenium enables web browser automation. It specifically provides
11518infrastructure for the W3C WebDriver specification — a platform and
11519language-neutral coding interface compatible with all major web browsers.")))
11520
11521(define-public python-rapidjson
11522 (package
11523 (name "python-rapidjson")
11524 (version "1.23")
11525 (source
11526 (origin
11527 (method git-fetch)
11528 (uri (git-reference
11529 (url "https://github.com/python-rapidjson/python-rapidjson")
11530 (commit (string-append "v" version))))
11531 (file-name (git-file-name name version))
11532 (sha256
11533 (base32 "0ajf919gg3qmi68jb0m6v80al2n65cn2ac36qz46s0h6zh92cl86"))
11534 (modules '((guix build utils)))
11535 (snippet
11536 '(delete-file-recursively "rapidjson"))))
11537 (build-system pyproject-build-system)
11538 (arguments
11539 (list
11540 #:test-flags '(list "tests")
11541 #:phases
11542 #~(modify-phases %standard-phases
11543 ;; We cannot seem to use #:configure-flags with the
11544 ;; pyproject-build-system to override rj_include_dir.
11545 (add-after 'unpack 'override-rapidjson-sources
11546 (lambda _
11547 (substitute* "setup.py"
11548 (("^rj_include_dir =.*")
11549 (string-append "rj_include_dir = '"
11550 #$(this-package-native-input "rapidjson")
11551 "/include/rapidjson" "'"))
11552 (("if not os.path.isdir.*") "if False:")))))))
11553 (native-inputs
11554 (list rapidjson python-pytest python-pytz python-setuptools))
11555 (home-page "https://github.com/python-rapidjson/python-rapidjson")
11556 (synopsis "Python wrapper around rapidjson")
11557 (description "This package provides a python wrapper around rapidjson.")
11558 (license license:expat)))
11559
11560(define-public python-venusian
11561 (package
11562 (name "python-venusian")
11563 (version "3.1.1")
11564 (source
11565 (origin
11566 (method url-fetch)
11567 (uri (pypi-uri "venusian" version))
11568 (sha256
11569 (base32 "0h8cdwx5x6i1ydc9s0hxwvy73l6iwlqijn2l77mq74k6anrv6ksk"))))
11570 (build-system pyproject-build-system)
11571 (native-inputs
11572 (list python-pytest
11573 python-setuptools))
11574 (home-page "https://docs.pylonsproject.org/projects/venusian")
11575 (synopsis "Library for deferring decorator actions")
11576 (description
11577 "Venusian is a library which allows framework authors to defer decorator
11578actions. Instead of taking actions when a function (or class) decorator is
11579executed at import time, you can defer the action usually taken by the
11580decorator until a separate scan phase.")
11581 (license license:repoze)))
11582
11583(define-public python-zope-deprecation
11584 (package
11585 (name "python-zope-deprecation")
11586 (version "6.0")
11587 (source (origin
11588 (method url-fetch)
11589 (uri (pypi-uri "zope_deprecation" version))
11590 (sha256
11591 (base32
11592 "0pzimp7xr8m0836bbsrx8wa9ybl58s5hwacas95nsfp6m2ypwwhq"))))
11593 (build-system pyproject-build-system)
11594 (arguments
11595 (list #:tests? #f)) ;no tests in PyPI
11596 (native-inputs
11597 (list python-setuptools))
11598 (home-page "https://zopedeprecation.readthedocs.io/")
11599 (synopsis "Function for marking deprecations")
11600 (description "The @code{zope.deprecation} module provides a function for
11601marking modules, classes, functions, methods and properties as deprecated,
11602displaying warnings when usaged in application code.")
11603 (license license:zpl2.1)))
11604
11605(define-public python-translationstring
11606 (package
11607 (name "python-translationstring")
11608 (version "1.4")
11609 (source (origin
11610 (method url-fetch)
11611 (uri (pypi-uri "translationstring" version))
11612 (sha256
11613 (base32
11614 "1wvncdzi1wj37x226qcf0yycz7js6l83na0pmc9blsbfsww7b55z"))))
11615 (build-system pyproject-build-system)
11616 (native-inputs
11617 (list python-pytest
11618 python-setuptools))
11619 (home-page "https://docs.pylonsproject.org/projects/translationstring")
11620 (synopsis "Internationalization tooling for the Pylons project")
11621 (description "This package provides a library used by various Pylons
11622project packages for internationalization (i18n) duties related to
11623translation.")
11624 (license license:repoze)))
11625
11626(define-public python-plaster
11627 (package
11628 (name "python-plaster")
11629 (version "1.1.2")
11630 (source (origin
11631 (method url-fetch)
11632 (uri (pypi-uri "plaster" version))
11633 (sha256
11634 (base32
11635 "167gfh0ahdll9m96ypgasji6yry2hkn9f0ml1b0lf4ccpxagrgpq"))))
11636 (build-system pyproject-build-system)
11637 (native-inputs
11638 (list python-pytest
11639 python-setuptools))
11640 (home-page "https://docs.pylonsproject.org/projects/plaster/en/latest/")
11641 (synopsis "Configuration loader for multiple config file formats")
11642 (description
11643 "Plaster is a loader interface around multiple config file formats. It
11644exists to define a common API for applications to use when they wish to load
11645configuration. The library itself does not aim to handle anything except a
11646basic API that applications may use to find and load configuration settings.
11647Any specific constraints should be implemented in a pluggable loader which can
11648be registered via an entrypoint.")
11649 (license license:repoze)))
11650
11651(define-public python-plaster-pastedeploy
11652 (package
11653 (name "python-plaster-pastedeploy")
11654 (version "1.0.1")
11655 (source (origin
11656 (method url-fetch)
11657 (uri (pypi-uri "plaster_pastedeploy" version))
11658 (sha256
11659 (base32
11660 "04hl71p76wnwiy195p5w51bn3c6ba0lgx8nsfm42d9s15rnjw9my"))))
11661 (build-system pyproject-build-system)
11662 (native-inputs
11663 (list python-pytest
11664 python-setuptools))
11665 (propagated-inputs
11666 (list python-plaster python-pastedeploy))
11667 (home-page "https://github.com/Pylons/plaster_pastedeploy")
11668 (synopsis "Plugin for python-plaster adding PasteDeploy syntax")
11669 (description
11670 "This plugin for @code{python-plaster} adds support for PasteDeploy
11671syntax, it provides a plaster @code{Loader} object that can parse ini files
11672according to the standard set by PasteDeploy")
11673 (license license:expat)))
11674
11675(define-public python-hupper
11676 (package
11677 (name "python-hupper")
11678 (version "1.12.1")
11679 (source
11680 (origin
11681 (method url-fetch)
11682 (uri (pypi-uri "hupper" version))
11683 (sha256
11684 (base32 "1srj7sqxdgxr0nnhh9lw8jmp64chwgg8iwfm9b4g9v7l1wbm9gq6"))))
11685 (build-system pyproject-build-system)
11686 (arguments
11687 (list
11688 ;; RuntimeError: timeout waiting for change to
11689 ;; file=/tmp/guix-build-python-hupper-1.12.1.drv-0/tmpm9n4697p
11690 #:test-flags #~(list "--ignore=tests/test_it.py")))
11691 (native-inputs
11692 (list python-pytest python-setuptools python-wheel))
11693 (propagated-inputs
11694 (list python-watchdog))
11695 (home-page "https://readthedocs.org/projects/hupper")
11696 (synopsis "Integrated process monitor tracking changes to imported Python files")
11697 (description
11698 "Hupper is an integrated process monitor that will track changes to any
11699imported Python files in sys.modules as well as custom paths. When files are
11700changed the process is restarted.")
11701 (license license:expat)))
11702
11703(define-public python-pyowm
11704 (package
11705 (name "python-pyowm")
11706 (version "3.3.0")
11707 (source
11708 (origin
11709 (method git-fetch)
11710 (uri (git-reference
11711 (url "https://github.com/csparpa/pyowm")
11712 (commit version)))
11713 (file-name (git-file-name name version))
11714 (sha256
11715 (base32
11716 "1ha4pp96y3jk33qnyir5851cnj4dc06q6wqn1b0w54l3fsds28vi"))))
11717 (build-system pyproject-build-system)
11718 (arguments (list #:test-flags #~(list "tests/unit")))
11719 (native-inputs (list python-pytest python-setuptools python-wheel))
11720 (propagated-inputs
11721 (list python-geojson-for-pyowm
11722 python-pysocks
11723 python-requests))
11724 (home-page "https://github.com/csparpa/pyowm")
11725 (synopsis "Python wrapper around OpenWeatherMap web APIs")
11726 (description
11727 "This package provides a Python wrapper around OpenWeatherMap web APIs.")
11728 (license license:expat)))
11729
11730(define-public python-pyramid
11731 (package
11732 (name "python-pyramid")
11733 (version "2.1")
11734 (source
11735 (origin
11736 (method git-fetch)
11737 (uri (git-reference
11738 (url "https://github.com/Pylons/pyramid")
11739 (commit version)))
11740 (file-name (git-file-name name version))
11741 (sha256
11742 (base32 "0my03b81009w9zqx5cdn9qixh0jah49hr0379n98kx2j3b8cfk1p"))))
11743 (build-system pyproject-build-system)
11744 (native-inputs
11745 (list python-pytest
11746 python-setuptools
11747 python-webtest
11748 python-zope-component))
11749 (propagated-inputs
11750 (list python-hupper
11751 python-plaster
11752 python-plaster-pastedeploy
11753 python-translationstring
11754 python-venusian
11755 python-webob
11756 python-zope-deprecation
11757 python-zope-interface))
11758 (home-page "https://trypyramid.com/")
11759 (synopsis "Python web-framework suitable for small and large sites")
11760 (description
11761 "Pyramid makes it easy to write web applications. From minimal
11762request/response web apps to larger, grown applications.")
11763 (license license:repoze)))
11764
11765(define-public python-pyramid-chameleon
11766 ;; PyPI lacks a fresh release, use the latest commit associated with
11767 ;; unrleased version, see:
11768 ;; <https://github.com/Pylons/pyramid_chameleon/issues/27>
11769 (let ((commit "956c77ba37120c430e871c834d3cd4ed5ac8dccf")
11770 (revision "0"))
11771 (package
11772 (name "python-pyramid-chameleon")
11773 (version (git-version "0.4.dev0" revision commit))
11774 (source
11775 (origin
11776 (method git-fetch)
11777 (uri (git-reference
11778 (url "https://github.com/Pylons/pyramid_chameleon")
11779 (commit commit)))
11780 (file-name (git-file-name name version))
11781 (sha256
11782 (base32 "0rsb921xi7736h1xikc904bq2zzmrj1g8qgyimjw5wxdcd8927b1"))))
11783 (build-system pyproject-build-system)
11784 (native-inputs
11785 (list python-pytest
11786 python-setuptools))
11787 (propagated-inputs
11788 (list python-chameleon
11789 python-pyramid))
11790 (home-page "https://github.com/Pylons/pyramid_chameleon")
11791 (synopsis "Chameleon template compiler for pyramid")
11792 (description
11793 "These package provides bindings for the Chameleon templating system
11794 for the Pyramid web framework.")
11795 (license license:repoze))))
11796
11797(define-public python-pyramid-debugtoolbar
11798 (package
11799 (name "python-pyramid-debugtoolbar")
11800 (version "4.12.1")
11801 (source
11802 (origin
11803 (method git-fetch)
11804 (uri (git-reference
11805 (url "https://github.com/Pylons/pyramid_debugtoolbar")
11806 (commit version)))
11807 (file-name (git-file-name name version))
11808 (sha256
11809 (base32 "0kalb5rsrlcz62zv9a39kp28mvwg9j6gymvzxbybdnvk51v9if56"))))
11810 (build-system pyproject-build-system)
11811 (arguments
11812 (list
11813 #:test-flags
11814 ;; Large diff assertion not equal faileurs.
11815 #~(list #$@(map (lambda (test)
11816 (string-append "--deselect=tests"
11817 "/test_panels/test_sqla.py::" test))
11818 (list "TestSimpleSelect::test_panel"
11819 "TestTransactionCommit::test_panel"
11820 "TestTransactionRollback::test_panel")))))
11821 (native-inputs
11822 (list python-pytest
11823 python-setuptools
11824 python-webtest))
11825 (propagated-inputs
11826 (list python-pyramid
11827 python-pyramid-chameleon
11828 python-pyramid-jinja2
11829 python-pyramid-mako
11830 python-selenium
11831 python-sqlalchemy
11832 python-waitress))
11833 (home-page "https://github.com/Pylons/pyramid_debugtoolbar")
11834 (synopsis "Pyramid debug toolbar")
11835 (description
11836 "This package provides an interactive HTML debugger for Pyramid
11837application development.")
11838 (license license:bsd-3)))
11839
11840(define-public python-pyramid-jinja2
11841 (package
11842 (name "python-pyramid-jinja2")
11843 (version "2.10.1")
11844 (source
11845 (origin
11846 (method url-fetch)
11847 (uri (pypi-uri "pyramid_jinja2" version))
11848 (sha256
11849 (base32 "0xqnqbqhx9bkrg2ic3blflsk8xc8kh7i2dm2kha9apqkbjrqql4c"))))
11850 (build-system pyproject-build-system)
11851 (arguments
11852 (list
11853 #:test-flags
11854 ;; Two tests failed with assertion not equal.
11855 #~(list "-k" "not test_it_relative_to_package and not test_options")))
11856 (native-inputs
11857 (list python-pytest
11858 python-setuptools
11859 python-webtest))
11860 (propagated-inputs
11861 (list python-jinja2
11862 python-markupsafe
11863 python-pyramid
11864 python-zope-deprecation))
11865 (home-page "https://github.com/Pylons/pyramid_jinja2")
11866 (synopsis "Jinja2 template bindings for the Pyramid web framework")
11867 (description "This package provides Jinja2 template bindings for the
11868Pyramid web framework.")
11869 (license license:repoze)))
11870
11871(define-public python-pyramid-mako
11872 ;; 1.1.0 was released in 2019, there a lot of compatibility changes on
11873 ;; master, us the latest commit for now.
11874 (let ((commit "1a6f4c00c7134530d2975f34d904b64a41b28b21")
11875 (revision "0"))
11876 (package
11877 (name "python-pyramid-mako")
11878 (version (git-version "1.1.0" revision commit))
11879 (source
11880 (origin
11881 (method git-fetch)
11882 (uri (git-reference
11883 (url "https://github.com/Pylons/pyramid_mako")
11884 (commit commit)))
11885 (file-name (git-file-name name version))
11886 (sha256
11887 (base32 "0v0571z2gby4apsalkdk83gs0d5mw79d56518h3bwwxzbq32kkns"))))
11888 (build-system pyproject-build-system)
11889 (native-inputs
11890 (list python-pytest
11891 python-setuptools))
11892 (propagated-inputs
11893 (list python-mako
11894 python-pyramid))
11895 (home-page "https://github.com/Pylons/pyramid_mako")
11896 (synopsis "Mako template bindings for the Pyramid web framework")
11897 (description
11898 "This package provides Mako template bindings for the Pyramid web
11899framework.")
11900 (license license:repoze))))
11901
11902(define-public python-pyramid-retry
11903 (package
11904 (name "python-pyramid-retry")
11905 (version "2.1.1")
11906 (source
11907 (origin
11908 (method url-fetch)
11909 (uri (pypi-uri "pyramid_retry" version))
11910 (sha256
11911 (base32 "1jf07v6zhli0abgm2qajzfwg68bl9zy4xygjwl4svawbwrm2ga5s"))))
11912 (build-system pyproject-build-system)
11913 (native-inputs
11914 (list python-pytest
11915 python-setuptools
11916 python-webtest))
11917 (propagated-inputs
11918 (list python-pyramid
11919 python-zope-interface))
11920 (home-page "https://github.com/Pylons/pyramid_retry")
11921 (synopsis "Pyramid execution policy supporting retrying failed requests")
11922 (description
11923 "@code{pyramid_retry} is an execution policy for Pyramid that wraps requests
11924and can retry them a configurable number of times under certain \"retryable\"
11925error conditions before indicating a failure to the client.")
11926 (license license:expat)))
11927
11928(define-public python-pyramid-tm
11929 (package
11930 (name "python-pyramid-tm")
11931 (version "2.6")
11932 (source
11933 (origin
11934 (method url-fetch)
11935 (uri (pypi-uri "pyramid_tm" version))
11936 (sha256
11937 (base32 "173hg16hldfh5n3mn482xx64nldk308dzri31jd0qa4528cx4j41"))))
11938 (build-system pyproject-build-system)
11939 (native-inputs
11940 (list python-pytest
11941 python-setuptools
11942 python-webtest))
11943 (propagated-inputs
11944 (list python-pyramid
11945 python-transaction))
11946 (home-page "https://github.com/Pylons/pyramid_tm")
11947 (synopsis "Centralized transaction management for Pyramid")
11948 (description
11949 "@code{pyramid_tm} is a package which allows Pyramid requests to join the
11950active @url{https://pypi.org/project/transaction/, transaction} as provided by
11951the Python transaction package.")
11952 (license license:repoze)))
11953
11954(define-public python-random-user-agent
11955 (package
11956 (name "python-random-user-agent")
11957 (version "1.0.1")
11958 (source
11959 (origin
11960 (method url-fetch)
11961 (uri (pypi-uri "random_user_agent" version))
11962 (sha256
11963 (base32 "04nhzdh2ki7ybhjrmghxci6hcm6i03vvin2q2ynj87fbr1pa534g"))))
11964 (build-system pyproject-build-system)
11965 (arguments (list #:tests? #f)) ; No tests.
11966 (native-inputs (list python-setuptools))
11967 (home-page "https://github.com/Luqman-Ud-Din/random_user_agent")
11968 (synopsis "List of user agents")
11969 (description
11970 "This package provides a list of user agents, from a collection of more
11971than 326,000 known user-agents. Users can pick a random one, or select one
11972based on filters.")
11973 (license license:expat)))
11974
11975(define-public python-rangehttpserver
11976 (package
11977 (name "python-rangehttpserver")
11978 (version "1.4.0")
11979 (source
11980 (origin
11981 (method git-fetch)
11982 (uri (git-reference
11983 (url "https://github.com/danvk/RangeHTTPServer")
11984 (commit version)))
11985 (file-name (git-file-name name version))
11986 (sha256
11987 (base32 "1dx533fsbq1mbz3by7qkm5bh2c253nwvm8214pqbwbfq07kqkwf2"))))
11988 (build-system pyproject-build-system)
11989 (native-inputs
11990 (list python-pytest
11991 python-requests
11992 python-setuptools))
11993 (home-page "https://github.com/danvk/RangeHTTPServer")
11994 (synopsis "SimpleHTTPServer with support for range requests")
11995 (description
11996 "This tool provides a simple HTTP server with support for Range
11997requests.")
11998 (license license:asl2.0)))
11999
12000(define-public python-flask-restx
12001 (package
12002 (name "python-flask-restx")
12003 (version "1.3.0")
12004 (source
12005 (origin
12006 (method git-fetch) ;no tests in PyPI archive
12007 (uri (git-reference
12008 (url "https://github.com/python-restx/flask-restx")
12009 (commit version)))
12010 (file-name (git-file-name name version))
12011 (sha256
12012 (base32 "1qmm3i1cdv0bvzsc1gn4ql2dsf1fbx85fk69vcmzpsdxzczmw508"))))
12013 (build-system pyproject-build-system)
12014 (arguments
12015 (list
12016 ;; 1214 passed, 6 skipped, 16 deselected, 3 warnings
12017 #:test-flags
12018 #~(list "--benchmark-skip"
12019 ;; ValueError: http://www.google.com is not a valid URL. Domain
12020 ;; does not exists.
12021 "--deselect=tests/test_inputs.py::URLTest::test_check"
12022 "-k" (string-join
12023 ;; See: <https://github.com/python-restx/flask-restx/issues/620>.
12024 (list "not test_rfc822_value"
12025 "test_iso8601_value"
12026 ;; assert 404 == 2000
12027 "test_specs_endpoint_host_and_subdomain"
12028 ;; ValueError: [email protected] is not a valid email
12029 "test_valid_value_check")
12030 " and not "))))
12031 (native-inputs
12032 (list python-blinker
12033 python-faker
12034 python-pytest
12035 python-pytest-benchmark
12036 python-pytest-flask
12037 python-pytest-mock
12038 python-setuptools))
12039 (propagated-inputs
12040 (list python-aniso8601
12041 python-flask
12042 python-importlib-resources
12043 python-jsonschema
12044 python-pytz
12045 python-werkzeug))
12046 (home-page "https://github.com/python-restx/flask-restx")
12047 (synopsis
12048 "Framework for fast, easy and documented API development with Flask")
12049 (description
12050 "Flask-RESTX is an extension for Flask that adds support for quickly building
12051REST APIs. Flask-RESTX encourages best practices with minimal setup. If you are familiar
12052 with Flask, Flask-RESTX should be easy to pick up. It provides a coherent collection of
12053decorators and tools to describe your API and expose its documentation properly using
12054Swagger.")
12055 (license license:bsd-3)))
12056
12057(define-public python-flask-socketio
12058 (package
12059 (name "python-flask-socketio")
12060 (version "5.6.1")
12061 (source
12062 (origin
12063 (method git-fetch)
12064 (uri (git-reference
12065 (url "https://github.com/miguelgrinberg/Flask-SocketIO/")
12066 (commit (string-append "v" version))))
12067 (file-name (git-file-name name version))
12068 (sha256
12069 (base32 "1bs594bxggwn78yhf86whv6bcs8gb7mhrm5dnk5x4c3jb20nhfmm"))))
12070 (build-system pyproject-build-system)
12071 (native-inputs
12072 (list python-pytest
12073 python-redis
12074 python-setuptools))
12075 (propagated-inputs
12076 (list python-flask
12077 python-socketio))
12078 (home-page "https://github.com/miguelgrinberg/Flask-SocketIO/")
12079 (synopsis "Socket.IO integration for Flask applications")
12080 (description "Socket.IO integration for Flask applications")
12081 (license license:expat)))
12082
12083(define-public python-manuel
12084 (package
12085 (name "python-manuel")
12086 (version "1.13.0")
12087 (source
12088 (origin
12089 (method url-fetch)
12090 (uri (pypi-uri "manuel" version))
12091 (sha256
12092 (base32 "0nl8psji3fizbxw34gdg22dndlg9lf5f56mnh1vr4vgsx06i4qsx"))))
12093 (build-system pyproject-build-system)
12094 (arguments
12095 (list
12096 ;; FIXME: Tests are broken, see: <https://github.com/benji-york/manuel/pull/32>.
12097 #:tests? #f))
12098 (propagated-inputs
12099 (list python-setuptools)) ;install requires
12100 (home-page "https://pypi.org/project/manuel/")
12101 (synopsis "Build tested documentation")
12102 (description
12103 "Manuel lets you mix and match traditional doctests with custom test syntax.")
12104 (license license:asl2.0)))
12105
12106(define-public python-marshmallow-jsonapi
12107 (package
12108 (name "python-marshmallow-jsonapi")
12109 (version "0.26.0")
12110 (source
12111 (origin
12112 (method git-fetch)
12113 (uri (git-reference
12114 ;; XXX: Deprecated upstream: This repository has been archived
12115 ;; by the owner on Jun 6, 2024. It is now read-only.
12116 ;; Using a maintained fork. The pypi name of this fork
12117 ;; is marshmallow-jsonapi-minfork.
12118 (url "https://github.com/tadams42/marshmallow-jsonapi")
12119 (commit version)))
12120 (file-name (git-file-name name version))
12121 (sha256
12122 (base32 "07sizh4m03rrk1139ci3psh5npk42cdsdfsdp574pz1fd5ncrq91"))))
12123 (build-system pyproject-build-system)
12124 (native-inputs
12125 (list python-faker
12126 python-flask
12127 python-pytest
12128 python-setuptools))
12129 (propagated-inputs (list python-marshmallow))
12130 (home-page "https://github.com/marshmallow-code/marshmallow-jsonapi")
12131 (synopsis "JSON:API 1.0 formatting with Marshmallow")
12132 (description
12133 "The marshmallow-jsonapi package provides a simple way to produce
12134@uref{https://jsonapi.org, JSON:API}-compliant data in any Python Web
12135framework. It includes optional utilities to integrate with Flask. This is a
12136forked version whose pypi name is @code{marshmallow_jsonapi_minfork}.")
12137 (license license:expat)))
12138
12139(define-public python-pecan
12140 (package
12141 (name "python-pecan")
12142 (version "1.8.0")
12143 (source
12144 (origin
12145 (method git-fetch)
12146 (uri (git-reference
12147 (url "https://github.com/pecan/pecan")
12148 (commit version)))
12149 (file-name (git-file-name name version))
12150 (sha256
12151 (base32 "0w693jpnjy358992f3jrrlf31knkqn0jvz2jx0iz7ziikprc61p8"))))
12152 (build-system pyproject-build-system)
12153 (arguments
12154 (list
12155 #:test-flags '(list "--pyargs" "pecan")))
12156 (native-inputs
12157 (list gunicorn
12158 python-genshi
12159 python-jinja2
12160 python-pytest
12161 python-sqlalchemy-2
12162 python-webtest))
12163 (propagated-inputs
12164 (list python-mako
12165 python-webob))
12166 (home-page "http://github.com/pecan/pecan")
12167 (synopsis "WSGI object-dispatching web framework")
12168 (description "This package provides a WSGI object-dispatching web
12169framework, designed to be lean and fast, with few dependencies.")
12170 (license license:bsd-3)))
12171
12172(define-public python-persistent
12173 (package
12174 (name "python-persistent")
12175 (version "6.1.1")
12176 (source
12177 (origin
12178 (method git-fetch)
12179 (uri (git-reference
12180 (url "https://github.com/zopefoundation/persistent/")
12181 (commit version)))
12182 (file-name (git-file-name name version))
12183 (sha256
12184 (base32 "19qwqg49zql2c8l4vjxjb9haw0bzd6lk8p4v3hip2irch6a4578a"))))
12185 (build-system pyproject-build-system)
12186 (arguments
12187 (list
12188 #:phases
12189 #~(modify-phases %standard-phases
12190 (replace 'check
12191 (lambda* (#:key tests? #:allow-other-keys)
12192 (if tests?
12193 (invoke "zope-testrunner" "--test-path=src"
12194 ;; XXX: Ignore doc tests.
12195 "!persistent.tests.test_docs")
12196 (format #t "test suite not run~%")))))))
12197 (propagated-inputs
12198 (list python-cffi
12199 python-zope-deferredimport
12200 python-zope-interface
12201 python-zope-testrunner))
12202 (native-inputs
12203 (list python-manuel python-zope-testrunner python-setuptools))
12204 (home-page "https://github.com/zopefoundation/persistent/")
12205 (synopsis "Translucent persistent objects")
12206 (description
12207 "This package contains a generic persistence implementation for Python.
12208It forms the core protocol for making objects interact \"transparently\" with
12209a database such as the ZODB.")
12210 (license license:zpl2.1)))
12211
12212(define-public python-transaction
12213 (package
12214 (name "python-transaction")
12215 (version "5.0")
12216 (source
12217 (origin
12218 (method url-fetch)
12219 (uri (pypi-uri "transaction" version))
12220 (sha256
12221 (base32 "0x0i5graxb93aa8bwf5rmm9zq7d7r6q2b4pw358wph5whbbpnvhh"))))
12222 (build-system pyproject-build-system)
12223 (native-inputs
12224 (list python-pytest
12225 python-setuptools))
12226 (propagated-inputs
12227 (list python-zope-interface))
12228 (home-page "https://github.com/zopefoundation/transaction")
12229 (synopsis "Transaction management for Python")
12230 (description "This package contains a generic transaction implementation
12231for Python. It is mainly used by the ZODB.")
12232 (license license:zpl2.1)))
12233
12234(define-public python-truststore
12235 (package
12236 (name "python-truststore")
12237 (version "0.10.4")
12238 (source
12239 (origin
12240 (method url-fetch)
12241 (uri (pypi-uri "truststore" version))
12242 (sha256
12243 (base32 "00f3xc7720rkddsn291yrw871kfnimi6d9xbwi75xbb3ci1vv4cx"))))
12244 (build-system pyproject-build-system)
12245 (arguments
12246 (list #:tests? #f)) ;all tests require Internet access
12247 (native-inputs
12248 (list python-flit-core))
12249 (home-page "https://github.com/sethmlarson/truststore")
12250 (synopsis "Verify certificates using native system trust stores")
12251 (description
12252 "Truststore is a library which exposes native system certificate stores (ie
12253\"trust stores\") through an @code{ssl.SSLContext-like} API. This means that
12254Python applications no longer need to rely on certifi as a root certificate
12255store.")
12256 (license license:expat)))
12257
12258(define-public python-robot-detection
12259 (package
12260 (name "python-robot-detection")
12261 (version "0.4.0")
12262 (source
12263 (origin
12264 (method git-fetch)
12265 (uri (git-reference
12266 (url "https://github.com/rory/robot-detection")
12267 (commit (string-append "v" version))))
12268 (file-name (git-file-name name version))
12269 (sha256
12270 (base32 "1gxk13rn0gw5pfc4abhfnzg8qi05xa0ygs26pgkp0swygkzq6wsq"))))
12271 (build-system pyproject-build-system)
12272 (arguments (list #:test-backend #~'unittest))
12273 (native-inputs (list python-setuptools))
12274 (propagated-inputs (list python-six))
12275 (home-page "https://github.com/rory/robot-detection")
12276 (synopsis "Detect web crawlers")
12277 (description
12278 "@code{robot_detection} is a python module to detect if a given HTTP User
12279Agent is a web crawler. It uses the list of registered robots from
12280@url{http://www.robotstxt.org}.")
12281 (license license:gpl3+)))
12282
12283(define-public python-robotframework-requests
12284 (package
12285 (name "python-robotframework-requests")
12286 (version "0.9.7")
12287 (source
12288 (origin
12289 (method git-fetch) ; no tests in PyPI release
12290 (uri (git-reference
12291 (url "https://github.com/MarketSquare/robotframework-requests")
12292 (commit (string-append "v" version))))
12293 (file-name (git-file-name name version))
12294 (sha256
12295 (base32 "077j8p5k41v53slyv8h32fcmqfi7m6z3r4gmyqqaawm5szfmy61m"))))
12296 (build-system pyproject-build-system)
12297 (native-inputs
12298 (list python-pytest
12299 python-setuptools
12300 python-wheel))
12301 (propagated-inputs
12302 (list python-requests
12303 python-robotframework))
12304 (home-page "https://github.com/MarketSquare/robotframework-requests")
12305 (synopsis "Robot Framework keyword library wrapper around requests")
12306 (description
12307 "@code{RequestsLibrary} is a @url{https://robotframework.org/, Robot
12308Framework} library aimed to provide HTTP API testing functionalities by
12309wrapping the @code{requests} Python library.")
12310 (license license:expat)))
12311
12312(define-public python-pysolr
12313 (package
12314 (name "python-pysolr")
12315 (version "3.10.0")
12316 (source
12317 (origin
12318 (method url-fetch)
12319 (uri (pypi-uri "pysolr" version))
12320 (sha256
12321 (base32 "02gl1sma5cnpd7srpri1g68lpsg3s5n3lr462p5ll8v9s4nllyqj"))))
12322 (build-system pyproject-build-system)
12323 (arguments
12324 '(#:tests? #f)) ; Tests require network access.
12325 (native-inputs
12326 (list python-setuptools
12327 python-setuptools-scm
12328 python-wheel))
12329 (propagated-inputs
12330 (list python-requests))
12331 (home-page "https://github.com/django-haystack/pysolr/")
12332 (synopsis "Lightweight python wrapper for Apache Solr")
12333 (description
12334 "This module provides an interface that queries the Apache Solr server
12335using a pure Python implementation.")
12336 (license license:bsd-3)))
12337
12338(define-public python-pyjsparser
12339 ;; XXX: This project is potentially abandonware, consider to remove in next
12340 ;; refresh cycle, see:
12341 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/28>,
12342 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/39>, and
12343 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/40>.
12344 (package
12345 (name "python-pyjsparser")
12346 (version "2.7.1")
12347 (source
12348 (origin
12349 (method url-fetch)
12350 (uri (pypi-uri "pyjsparser" version))
12351 (sha256
12352 (base32 "0ycmf9fsvwliqmm1n6sfz7x71y7i2kbfgn39d8lsbiccfxmxlq5y"))))
12353 (build-system pyproject-build-system)
12354 (arguments
12355 '(#:tests? #f)) ;no tests in PyPI
12356 (native-inputs (list python-setuptools))
12357 (home-page "https://github.com/PiotrDabkowski/pyjsparser")
12358 (synopsis "Fast JavaScript parser")
12359 (description
12360 "This package provides a fast JavaScript parser (based on esprima.js)")
12361 (license license:expat)))
12362
12363(define-public python-js2py
12364 (package
12365 (name "python-js2py")
12366 (properties '((commit . "2e017b86e2f18a6c8a842293b1687f2ce7baa12e")
12367 (revision . "0")))
12368 (version (git-version "0.74"
12369 (assoc-ref properties 'revision)
12370 (assoc-ref properties 'commit)))
12371 (source
12372 (origin
12373 (method git-fetch)
12374 (uri (git-reference
12375 (url "https://github.com/PiotrDabkowski/Js2Py")
12376 (commit (assoc-ref properties 'commit))))
12377 (file-name (git-file-name name version))
12378 (sha256
12379 (base32 "0rsac03shkm0yxq91hzxdvhb96wy168bxdw8azi25bvlm8s3l27p"))
12380 (patches
12381 (list
12382 (origin
12383 (method url-fetch)
12384 (uri (string-append "https://github.com/PiotrDabkowski/Js2Py/commit"
12385 "/fd7df4a91fb08060914c7b1d9e94583d18f3371b"
12386 ".patch"))
12387 (file-name (string-append name "-" version "-pull-327.patch"))
12388 (sha256
12389 (base32 "14v89v8qqrsq0d63xbilkvx19l1rk59mlrbxvd4sj138lk7160ki")))))))
12390 (build-system pyproject-build-system)
12391 (arguments
12392 (list #:tests? #f)) ; tests require Node
12393 (native-inputs
12394 (list python-setuptools))
12395 (propagated-inputs
12396 (list python-pyjsparser
12397 python-six
12398 python-tzlocal))
12399 (home-page "https://github.com/PiotrDabkowski/Js2Py")
12400 (synopsis "JavaScript to Python translator")
12401 (description
12402 "This package provides a JavaScript to Python translator and a JavaScript
12403interpreter written in pure Python.")
12404 (license license:expat)))
12405
12406(define-public python-http-ece
12407 (package
12408 (name "python-http-ece")
12409 (version "1.2.1")
12410 (source
12411 (origin
12412 (method git-fetch)
12413 (uri (git-reference
12414 (url "https://github.com/web-push-libs/encrypted-content-encoding")
12415 (commit (string-append "v" version))))
12416 (file-name (git-file-name name version))
12417 (sha256
12418 (base32 "16kd9dsfpyfvq4iw6bbrrqrvsnf5lwgwa6p9f3b1y56ab18y0kzx"))))
12419 (build-system pyproject-build-system)
12420 (arguments
12421 `(#:phases
12422 (modify-phases %standard-phases
12423 (add-after 'unpack 'change-directory
12424 (lambda _ (chdir "python") #t)))))
12425 (native-inputs
12426 (list python-pytest python-setuptools))
12427 (propagated-inputs
12428 (list python-cryptography))
12429 (home-page "https://github.com/web-push-libs/encrypted-content-encoding")
12430 (synopsis "Encrypted Content Encoding for HTTP")
12431 (description
12432 "This package provides a simple implementation of Encrypted Content
12433Encoding for HTTP.")
12434 (license license:expat)))
12435
12436(define-public python-cloud-init
12437 (package
12438 (name "python-cloud-init")
12439 (version "24.2")
12440 (source
12441 (origin
12442 (method git-fetch)
12443 (uri (git-reference
12444 (url "https://github.com/canonical/cloud-init")
12445 (commit version)))
12446 (file-name (git-file-name name version))
12447 (sha256
12448 (base32 "18872z2y9wkh558y1bx5r0rksb4i584jbc8z4g8marwawhwxq506"))))
12449 (build-system pyproject-build-system)
12450 (arguments
12451 (list
12452 #:test-flags
12453 '(list
12454 ;; This requires usermod
12455 "--ignore=tests/unittests/distros/test_create_users.py"
12456 ;; This writes to /var
12457 "--ignore=tests/unittests/net/test_dhcp.py"
12458 "-k"
12459 (string-append
12460 ;; This test messes with PATH, so it cannot find mkdir
12461 "not test_path_env_gets_set_from_main"
12462 " and not test_apt_configure_sources_list_"
12463 ;; These all fail because /bin/sh doesn't exist. We cannot patch
12464 ;; this because the generated scripts must use /bin/sh as they are
12465 ;; supposed to be run on minimal systems.
12466 " and not test_handler_creates_and_runs_bootcmd_script_with_instance_id"
12467 " and not test_handler_runs_bootcmd_script_with_error"
12468 " and not test_subp_combined_stderr_stdout"
12469 " and not test_handle_part"))
12470 #:phases
12471 #~(modify-phases %standard-phases
12472 (add-after 'unpack 'patch-references
12473 (lambda _
12474 (substitute* "tests/unittests/cmd/test_clean.py"
12475 (("#!/bin/sh") (string-append "#!" (which "sh"))))))
12476 (add-after 'install 'move-files
12477 (lambda* (#:key inputs outputs #:allow-other-keys)
12478 (for-each (lambda (dir)
12479 (let ((source (string-append (site-packages inputs outputs) "/" dir))
12480 (target (string-append #$output "/" (basename dir))))
12481 (copy-recursively source target)
12482 (delete-file-recursively source)))
12483 (list "etc" "lib" "usr/lib" "usr/share")))))))
12484 (propagated-inputs
12485 (list python-configobj
12486 python-jinja2
12487 python-jsonpatch
12488 python-jsonschema
12489 python-netifaces
12490 python-oauthlib
12491 python-pyserial
12492 python-pyyaml
12493 python-responses))
12494 (native-inputs
12495 (list procps ;for ps when running tests
12496 python-pytest
12497 python-pytest-mock
12498 python-passlib
12499 python-setuptools
12500 python-wheel))
12501 (home-page "https://github.com/canonical/cloud-init")
12502 (synopsis "Cloud instance initialization tools")
12503 (description
12504 "Cloud-init is the multi-distribution method for cross-platform cloud
12505instance initialization. It is supported across all major public cloud
12506providers, provisioning systems for private cloud infrastructure, and
12507bare-metal installations.")
12508 ;; Either license can be chosen
12509 (license (list license:asl2.0 license:gpl3))))
12510
12511(define-public python-cloudscraper
12512 (package
12513 (name "python-cloudscraper")
12514 (version "3.0.0")
12515 (source
12516 (origin
12517 (method git-fetch)
12518 (uri (git-reference
12519 (url "https://github.com/VeNoMouS/cloudscraper")
12520 (commit version)))
12521 (file-name (git-file-name name version))
12522 (sha256
12523 (base32 "13w0ywz2y8x0zwpwzrnn46wyq307hfpdcz49zy33yyf46rq9n10n"))
12524 (modules '((guix build utils)))
12525 (snippet
12526 '(with-directory-excursion "cloudscraper"
12527 (for-each delete-file
12528 '("captcha/9kw.py" "captcha/anticaptcha.py"))
12529 (substitute* "__init__.py"
12530 ;; Perhaps it's a joke, but don't promote proprietary software.
12531 (("([Th]is feature is not available) in the .*'" _ prefix)
12532 (string-append prefix ".'")))))))
12533 (build-system pyproject-build-system)
12534 (arguments
12535 (list
12536 #:test-flags
12537 #~(list "-k" "not test_403_handling")
12538 #:phases
12539 #~(modify-phases %standard-phases
12540 (add-after 'unpack 'relax-requirements
12541 (lambda _
12542 ;; XXX: Relax brotli dependency.
12543 (substitute* "pyproject.toml"
12544 (("\"brotli>=.*\"")
12545 "\"brotli\""))
12546 ;; XXX: Dependencies, that have not yet been packaged
12547 ;; and cause an import error when included.
12548 (delete-file "cloudscraper/interpreters/v8.py")))
12549 (add-after 'unpack 'fix-references
12550 (lambda _
12551 (substitute* "cloudscraper/interpreters/nodejs.py"
12552 (("'node'")
12553 (string-append "'" (which "node") "'"))))))))
12554 (inputs (list node-lts))
12555 (propagated-inputs
12556 (list python-pycryptodome
12557 python-brotli
12558 python-js2py
12559 python-polling2
12560 python-requests
12561 python-requests-toolbelt
12562 python-responses
12563 python-pyparsing
12564 python-websocket-client))
12565 (native-inputs (list python-pytest python-setuptools))
12566 (home-page "https://github.com/venomous/cloudscraper")
12567 (synopsis "Cloudflare anti-bot bypass")
12568 (description
12569 "This module acts as a webbrowser solving Cloudflare's Javascript
12570challenges.")
12571 (license license:expat)))
12572
12573(define-public python-imap-tools
12574 (package
12575 (name "python-imap-tools")
12576 (version "1.9.0")
12577 (source
12578 (origin
12579 (method git-fetch) ; no tests in PyPI release
12580 (uri (git-reference
12581 (url "https://github.com/ikvk/imap_tools")
12582 (commit (string-append "v" version))))
12583 (file-name (git-file-name name version))
12584 (sha256
12585 (base32 "0iawc6shxn8p0ysiqiahfic5rp1r16f7rfn11c8y2fl8falckynr"))))
12586 (arguments
12587 (list
12588 #:test-flags
12589 ;; Tests require a network connection
12590 #~(list "-k" (string-append "not test_action"
12591 " and not test_attributes"
12592 " and not test_connection"
12593 " and not test_folders"
12594 " and not test_idle"
12595 " and not test_live"))))
12596 (build-system pyproject-build-system)
12597 (native-inputs
12598 (list python-pytest python-setuptools python-wheel))
12599 (home-page "https://github.com/ikvk/imap_tools")
12600 (synopsis "Work with email and mailbox by IMAP")
12601 (description
12602 "This Python library provides tools to deal with email and mailboxes
12603over IMAP:
12604
12605@itemize
12606@item Parsed email message attributes
12607@item Query builder for searching emails
12608@item Work with emails in folders (copy, delete, flag, move, seen)
12609@item Work with mailbox folders (list, set, get, create, exists, rename, delete, status)
12610@end itemize")
12611 (license license:asl2.0)))
12612
12613(define-public python-giturlparse
12614 (package
12615 (name "python-giturlparse")
12616 (version "0.12.0")
12617 (source
12618 (origin
12619 (method git-fetch)
12620 (uri (git-reference
12621 (url "https://github.com/nephila/giturlparse")
12622 (commit version)))
12623 (file-name (git-file-name name version))
12624 (sha256
12625 (base32 "1fdbxp176p17sn5xc1418mz2vk00hlcsd5qmi2fdcfphqal6raan"))))
12626 (build-system pyproject-build-system)
12627 (native-inputs (list python-pytest python-setuptools))
12628 (home-page "https://github.com/nephila/giturlparse")
12629 (synopsis "Git URL parsing module")
12630 (description
12631 "This package provides a git URL parsing module which supports parsing
12632and rewriting of remote git URLs from various hosting providers.")
12633 (license license:asl2.0)))
12634
12635(define-public python-hstspreload
12636 (package
12637 (name "python-hstspreload")
12638 (version "2025.1.1")
12639 (source
12640 (origin
12641 (method git-fetch)
12642 (uri (git-reference
12643 (url "https://github.com/sethmlarson/hstspreload")
12644 (commit version)))
12645 (file-name (git-file-name name version))
12646 (sha256
12647 (base32 "02mdzhgdz3sprgc26qb084zy639h2zw2yc8d2vm1r18ap9k51ayq"))))
12648 (build-system pyproject-build-system)
12649 (arguments (list #:tests? #f)) ; tests require external resources.
12650 (native-inputs (list python-setuptools))
12651 (home-page "https://github.com/sethmlarson/hstspreload")
12652 (synopsis "Chromium HSTS Preload list as a Python package")
12653 (description
12654 "@code{python-hstspreload} contains Chromium HSTS Preload list
12655as a Python package.")
12656 (license license:bsd-3)))
12657
12658(define-public python-sanic-routing
12659 (package
12660 (name "python-sanic-routing")
12661 (version "23.12.0")
12662 (source
12663 (origin
12664 (method url-fetch)
12665 (uri (pypi-uri "sanic-routing" version))
12666 (sha256
12667 (base32 "014bhkharcgyprdvlk7wjxhjp1pr0cva1nwj4f2qrr23qiidrjhx"))))
12668 (build-system pyproject-build-system)
12669 (arguments
12670 ;; PyPi sources does not contain tests, recursive dependency on
12671 ;; python-sanic.
12672 (list #:tests? #f))
12673 (native-inputs (list python-setuptools python-wheel))
12674 (home-page "https://github.com/sanic-org/sanic-routing/")
12675 (synopsis "Routing component for Sanic")
12676 (description "Internal package for @code{python-sanic}, which provides
12677the @code{BasicRouter}.")
12678 (license license:expat)))
12679
12680(define-public python-sanic-testing
12681 (package
12682 (name "python-sanic-testing")
12683 (version "23.12.0")
12684 (source
12685 (origin
12686 (method url-fetch)
12687 (uri (pypi-uri "sanic-testing" version))
12688 (sha256
12689 (base32 "0gqkzv90sbj9rw7yfly9c58lq9dq30g5hhcgjl3ihzjb66vm571b"))))
12690 (build-system pyproject-build-system)
12691 (arguments
12692 ;; PyPi sources does not contain tests, recursive dependency on
12693 ;; python-sanic.
12694 (list #:tests? #f))
12695 (propagated-inputs (list python-httpx python-sanic-bootstrap))
12696 (native-inputs (list python-setuptools python-wheel))
12697 (home-page "https://github.com/sanic-org/sanic-testing/")
12698 (synopsis "Test clients for Sanic")
12699 (description "Internal package for @code{python-sanic}, which is
12700meant to be the core testing utility and clients for testing Sanic
12701applications.")
12702 (license license:expat)))
12703
12704(define-public python-sanic
12705 (package
12706 (name "python-sanic")
12707 (version "25.12.1")
12708 (source
12709 (origin
12710 (method url-fetch)
12711 (uri (pypi-uri "sanic" version))
12712 (sha256
12713 (base32 "0zxll83cvmcpiad3rri7cn9y8wi8xn7x0b00dimg0c20irhbylbv"))
12714 ;; Loosen requirements for both python-sanic and python-sanic-bootstrap.
12715 (modules '((guix build utils)))
12716 (snippet #~(substitute* "setup.py"
12717 (("setuptools>=[0-9.]*")
12718 "setuptools")))))
12719 (build-system pyproject-build-system)
12720 (arguments
12721 (list
12722 #:test-flags
12723 #~(list "--asyncio-mode=auto"
12724 "--ignore=tests/benchmark/"
12725 "--ignore=tests/typing/test_typing.py"
12726 ;; Most tests hang or fail
12727 "--ignore=tests/test_cli.py"
12728 "--ignore=tests/worker/test_worker_serve.py"
12729 "-k"
12730 (string-append
12731 ;; PyPi sources lack examples module.
12732 "not test_gunicorn_"
12733 ;; Does not expect brotli and reordered headers.
12734 " and not test_raw_headers"
12735 ;; These look like buggy testcases.
12736 " and not test_zero_downtime"
12737 " and not test_non_default_uvloop_config_raises_warning"
12738 " and not test_listeners_triggered"
12739 " and not test_keep_alive_connection_context"
12740 " and not test_keep_alive_client_timeout"
12741 " and not test_conflicting_body_methods_overload"
12742 " and not test_unix_connection"
12743 ;; Unclear why they fail since core-updates merge.
12744 " and not test_missing_sni"
12745 " and not test_no_matching_cert"
12746 " and not test_wildcards"
12747 ;; These tests fail because subprotocols appear to be
12748 ;; parameterized as None
12749 " and not test_websocket_route_with_subprotocols"
12750 ;; AF_UNIX path too long
12751 " and not test_setup_and_teardown_unix"
12752 " and not test_configure_socket"
12753 ;; Freezes
12754 " and not test_server_run_with_repl"
12755 " and not test_server_run"
12756 " and not test_no_workers"
12757 ;; Raises DaemonError: Group 'root' does not exist
12758 " and not test_validate_user_sets_uid_and_gid"
12759 " and not test_validate_group_sets_gid"
12760 ;; Raises AssertionError:
12761 ;; assert 'text/xml; charset=utf-8' == 'application/xml'
12762 " and not test_guess_content_type"
12763 ;; Don't know.
12764 " and not test_chained_exception_handler"))))
12765 (propagated-inputs
12766 (list python-aiofiles
12767 python-aioquic
12768 python-html5tagger
12769 python-httptools
12770 python-multidict
12771 python-sanic-routing
12772 python-tracerite
12773 python-typing-extensions
12774 python-ujson
12775 python-uvloop
12776 python-websockets))
12777 (native-inputs
12778 (list python-bandit
12779 python-beautifulsoup4
12780 python-chardet
12781 python-cryptography
12782 python-docutils
12783 python-pygments
12784 python-pytest
12785 python-pytest-asyncio
12786 python-pytest-benchmark
12787 python-pytest-sanic
12788 python-pytest-xdist
12789 python-sanic-testing
12790 python-setuptools
12791 python-slotscheck
12792 python-towncrier
12793 python-types-ujson
12794 python-uvicorn))
12795 (home-page "https://github.com/sanic-org/sanic/")
12796 (synopsis "Async Python web server/framework")
12797 (description
12798 "Sanic is a Python web server and web framework that's written to go
12799fast. It allows the usage of the @code{async/await} syntax added in Python
128003.5, which makes your code non-blocking and speedy.")
12801 (license license:expat)))
12802
12803(define-public python-sanic-bootstrap
12804 (package
12805 (inherit python-sanic)
12806 (name "python-sanic-bootstrap")
12807 (arguments (list #:tests? #f))
12808 (native-inputs (list python-setuptools))))
12809
12810(define-public python-socketio
12811 (package
12812 (name "python-socketio")
12813 (version "5.16.4")
12814 (source
12815 (origin
12816 (method git-fetch)
12817 (uri (git-reference
12818 (url "https://github.com/miguelgrinberg/python-socketio/")
12819 (commit (string-append "v" version))))
12820 (file-name (git-file-name name version))
12821 (sha256
12822 (base32 "0695mq1nijlljkmpgn3nk6gfv34rzpgxrdsld1l1vix6gxyxna0y"))))
12823 (build-system pyproject-build-system)
12824 (arguments
12825 (list
12826 ;; tests: 642 passed, 5 warnings
12827 #:test-flags
12828 ;; Tests freeze.
12829 #~(list "--ignore=tests/async/test_admin.py"
12830 "--ignore=tests/common/test_admin.py")))
12831 (native-inputs
12832 (list python-msgpack
12833 python-pytest
12834 python-pytest-asyncio
12835 python-pytest-timeout
12836 python-redis
12837 python-setuptools
12838 python-uvicorn
12839 python-valkey))
12840 (propagated-inputs
12841 (list python-bidict
12842 python-engineio
12843 ;; [optional]
12844 python-aiohttp
12845 python-requests
12846 python-websocket-client))
12847 (home-page "https://github.com/miguelgrinberg/python-socketio/")
12848 (synopsis "Python Socket.IO server")
12849 (description
12850 "This package provides a Python implementation of the @code{Socket.IO}
12851realtime client and server.")
12852 (license license:expat)))
12853
12854(define-public python-socks
12855 (package
12856 (name "python-socks")
12857 (version "2.8.1")
12858 (source
12859 (origin
12860 (method git-fetch)
12861 (uri (git-reference
12862 (url "https://github.com/romis2012/python-socks")
12863 (commit (string-append "v" version))))
12864 (file-name (git-file-name name version))
12865 (sha256
12866 (base32 "1x95i9w3izivdgz6hadh5kiil12i4ljk4ashgh3g0rjv2rw33vhj"))))
12867 (build-system pyproject-build-system)
12868 (propagated-inputs (list python-trio))
12869 (native-inputs
12870 (list python-anyio
12871 python-flask
12872 python-pytest
12873 python-pytest-asyncio
12874 python-pytest-trio
12875 python-setuptools
12876 python-tiny-proxy
12877 python-trustme
12878 python-yarl))
12879 (home-page "https://github.com/romis2012/python-socks")
12880 (synopsis
12881 "Core proxy (SOCKS4, SOCKS5, HTTP tunneling) functionality for Python")
12882 (description
12883 "Socks is a library providing core proxy (SOCKS4, SOCKS5, HTTP tunneling)
12884 functionality.")
12885 (license license:asl2.0)))
12886
12887(define-public python-socksio
12888 (package
12889 (name "python-socksio")
12890 (version "1.0.0")
12891 (source
12892 (origin
12893 (method url-fetch)
12894 (uri (pypi-uri "socksio" version))
12895 (sha256
12896 (base32 "1b64j45w35jzhjhnq44bnyad9ydh1iyyd7a6j2c8phxmllyyp2zq"))))
12897 (build-system pyproject-build-system)
12898 (native-inputs
12899 (list python-flit-core python-pytest))
12900 (home-page "https://github.com/sethmlarson/socksio")
12901 (synopsis "Sans-I/O implementation of SOCKS4, SOCKS4A, and SOCKS5")
12902 (description "The @code{socksio} Python module is a client-side sans-I/O
12903SOCKS proxy implementation. It supports SOCKS4, SOCKS4A, and SOCKS5.
12904@code{socksio} is a sans-I/O library similar to @code{h11} or @code{h2}; this
12905means the library itself does not handle the actual sending of the bytes
12906through the network, it only deals with the implementation details of the
12907SOCKS protocols. It can be paired with any I/O library.")
12908 (license license:expat)))
12909
12910(define-public python-simple-websocket
12911 (package
12912 (name "python-simple-websocket")
12913 (version "1.1.0")
12914 (source
12915 (origin
12916 (method url-fetch)
12917 (uri (pypi-uri "simple_websocket" version))
12918 (sha256
12919 (base32 "1r1all55d5dimiw3qwdhj53cxj9yjgnskcysmcscarx0g9726fbr"))))
12920 (build-system pyproject-build-system)
12921 (arguments
12922 ;; Requires Internet access to resolve example.com
12923 (list #:test-flags '(list "--ignore=tests/test_client.py")))
12924 (propagated-inputs (list python-wsproto))
12925 (native-inputs (list python-pytest
12926 python-setuptools))
12927 (home-page "https://github.com/miguelgrinberg/simple-websocket")
12928 (synopsis "Simple WebSocket server and client for Python")
12929 (description "This package provides a simple @code{WebSocket} server and
12930client for Python.")
12931 (license license:expat)))
12932
12933(define-public python-siosocks
12934 (package
12935 (name "python-siosocks")
12936 (version "0.3.0")
12937 (source
12938 (origin
12939 (method git-fetch)
12940 (uri (git-reference
12941 (url "https://github.com/pohmelie/siosocks")
12942 (commit (string-append "v" version))))
12943 (file-name (git-file-name name version))
12944 (sha256
12945 (base32 "0zcib4j5bfxlryfa412wmlkk8ivsiwxrfbpij5s7ag839ii2lxa5"))))
12946 (build-system pyproject-build-system)
12947 (native-inputs
12948 (list python-pytest
12949 python-pytest-asyncio
12950 python-pytest-trio
12951 python-setuptools))
12952 (propagated-inputs (list python-trio))
12953 (home-page "https://github.com/pohmelie/siosocks")
12954 (synopsis "SOCKSv4 & SOCKSv5 TCP proxy protocol implementation in Python")
12955 (description
12956 "This package provides a Python module and framework for sans-io socks proxy
12957client/server with couple io backends.
12958
12959Features:
12960@itemize
12961@item Only TCP connect (no BIND, no UDP)
12962@item Both client and server
12963@item SOCKS versions: 4, 4a, 5
12964@item SOCKSv5 auth: no auth, username/password
12965@item Couple io backends: @code{asyncio}, @code{trio}, @code{socketserver}
12966@item One-shot socks server (@code{python -m siosocks})
12967@end itemize")
12968 (license license:expat)))
12969
12970(define-public python-tiny-proxy
12971 (package
12972 (name "python-tiny-proxy")
12973 (version "0.2.1")
12974 (source
12975 (origin
12976 (method url-fetch)
12977 (uri (pypi-uri "tiny_proxy" version))
12978 (sha256
12979 (base32 "05nq62fn3p7s1a6dkdvnrzmk39d9ddrzb3pqbbli025qs3m9j1bq"))))
12980 (build-system pyproject-build-system)
12981 ;; There are only a handful of tests and they require the as yet
12982 ;; unpackaged httpx_socks.
12983 (arguments (list #:tests? #false))
12984 (propagated-inputs (list python-anyio))
12985 (native-inputs
12986 (list python-httpx
12987 python-pytest
12988 python-setuptools
12989 python-wheel))
12990 (home-page "https://github.com/romis2012/tiny-proxy")
12991 (synopsis "Simple proxy server (SOCKS4(a), SOCKS5(h), HTTP tunnel)")
12992 (description "This package provides a simple proxy server (SOCKS4(a),
12993SOCKS5(h), HTTP tunnel).")
12994 (license license:asl2.0)))
12995
12996(define-public python-google-auth
12997 (package
12998 (name "python-google-auth")
12999 (version "2.56.0")
13000 (source
13001 (origin
13002 (method url-fetch)
13003 (uri (pypi-uri "google_auth" version))
13004 (sha256
13005 (base32 "0lx5cw49lfjqvd9vx1vlslrxyh9q0xd6d46np5a2dab9nlqa03zr"))))
13006 (build-system pyproject-build-system)
13007 (propagated-inputs
13008 (list python-aiohttp
13009 python-cryptography
13010 python-pyasn1-modules
13011 python-requests
13012 python-rsa
13013 python-urllib3))
13014 (native-inputs
13015 (list nss-certs-for-test
13016 python-aiohttp
13017 python-aioresponses
13018 python-flask
13019 python-freezegun
13020 python-grpcio
13021 python-oauth2client
13022 python-packaging
13023 python-pyjwt
13024 python-pyopenssl
13025 python-pytest
13026 python-pytest-asyncio
13027 python-pytest-localserver
13028 python-pyu2f
13029 python-requests
13030 python-responses
13031 python-rsa
13032 python-setuptools
13033 python-urllib3))
13034 (home-page "https://github.com/googleapis/google-auth-library-python")
13035 (synopsis "Google Authentication Library")
13036 (description "This library simplifies using Google's various
13037server-to-server authentication mechanisms to access Google APIs.")
13038 (license license:asl2.0)))
13039
13040(define-public python-google-resumable-media
13041 (package
13042 (name "python-google-resumable-media")
13043 (version "2.8.0")
13044 (source
13045 (origin
13046 (method git-fetch)
13047 (uri (git-reference
13048 (url
13049 "https://github.com/googleapis/google-resumable-media-python")
13050 (commit (string-append "v" version))))
13051 (file-name (git-file-name name version))
13052 (sha256
13053 (base32 "0ndida5yr06bal0m09yri80bvf8x7yy690b14ywnxl4ixi8rlh6s"))))
13054 (build-system pyproject-build-system)
13055 (arguments
13056 (list
13057 #:test-flags
13058 #~(list
13059 ;; XXX: Missing test_utils.retry.
13060 "--ignore-glob=tests*/system/"
13061 ;; XXX: md5_hash is not mock.sentinel.md5_hash
13062 "-k" (string-join
13063 (list "not test_brotli"
13064 "test_constructor"
13065 "test_decompress")
13066 " and not "))))
13067 (propagated-inputs (list python-google-crc32c))
13068 (native-inputs
13069 (list python-google-auth
13070 python-mock
13071 python-pytest
13072 python-pytest-asyncio
13073 python-setuptools
13074 python-test-utils))
13075 (home-page "https://github.com/googleapis/google-resumable-media-python")
13076 (synopsis "Utilities for Google Media Downloads and Resumable Uploads")
13077 (description "This package provides utilities for Google Media Downloads
13078and Resumable Uploads.")
13079 (license license:asl2.0)))
13080
13081(define-public python-googleapis-common-protos
13082 (package
13083 (name "python-googleapis-common-protos")
13084 (version "1.66.0")
13085 (source
13086 (origin
13087 (method git-fetch)
13088 (uri (git-reference
13089 (url "https://github.com/googleapis/python-api-common-protos")
13090 (commit (string-append "v" version))))
13091 (file-name (git-file-name name version))
13092 (sha256
13093 (base32 "1fb7bcmjngmwwhqrldslli6r5z3s6r2kj4ywjmdjj92d1i51c29r"))))
13094 (build-system pyproject-build-system)
13095 (propagated-inputs (list python-protobuf))
13096 (native-inputs (list python-pytest python-setuptools))
13097 (home-page "https://github.com/googleapis/python-api-common-protos")
13098 (synopsis "Common protobufs used in Google APIs")
13099 (description
13100 "This package contains Python classes generated from the common protos in
13101the @code{googleapis/api-common-protos} repository.")
13102 (license license:asl2.0)))
13103
13104(define-public python-google-api-core
13105 (package
13106 (name "python-google-api-core")
13107 (version "2.29.0")
13108 (source
13109 (origin
13110 (method git-fetch)
13111 (uri (git-reference
13112 (url "https://github.com/googleapis/python-api-core")
13113 (commit (string-append "v" version))))
13114 (file-name (git-file-name name version))
13115 (sha256
13116 (base32 "0ahs8abyl7719paarlnspqp8yds149w7vm3w7zz6f7q04sscd862"))))
13117 (build-system pyproject-build-system)
13118 (arguments
13119 (list
13120 #:test-flags
13121 ;; XXX: DeprecationWarning: datetime.datetime.utcfromtimestamp() is
13122 ;; deprecated and scheduled for removal in a future version. Use
13123 ;; timezone-aware objects to represent datetimes in UTC:
13124 ;; datetime.datetime.fromtimestamp(timestamp, datetime.UTC).
13125 #~(list "-W" "ignore::DeprecationWarning")))
13126 (propagated-inputs
13127 (list python-google-auth
13128 python-googleapis-common-protos
13129 python-protobuf
13130 python-proto-plus
13131 python-requests))
13132 (native-inputs
13133 (list python-mock
13134 python-pytest
13135 python-pytest-asyncio
13136 python-pytest-mock
13137 python-setuptools))
13138 (home-page "https://github.com/googleapis/python-api-core")
13139 (synopsis "Google API client core library")
13140 (description
13141 "This library defines common helpers used by all Google API clients.")
13142 (license license:asl2.0)))
13143
13144(define-public python-google-cloud-core
13145 (package
13146 (name "python-google-cloud-core")
13147 (version "2.5.0")
13148 (source
13149 (origin
13150 (method git-fetch)
13151 (uri (git-reference
13152 (url "https://github.com/googleapis/python-cloud-core")
13153 (commit (string-append "v" version))))
13154 (file-name (git-file-name name version))
13155 (sha256
13156 (base32 "1d7li74cakgl9vghxfir9nxwy36980alvxwgwjg0zyla3hgj07cq"))))
13157 (build-system pyproject-build-system)
13158 (arguments
13159 (list
13160 #:test-flags
13161 ;; XXX: DeprecationWarning: datetime.datetime.utcfromtimestamp() is
13162 ;; deprecated and scheduled for removal in a future version. Use
13163 ;; timezone-aware objects to represent datetimes in UTC:
13164 ;; datetime.datetime.fromtimestamp(timestamp, datetime.UTC).
13165 #~(list "-W" "ignore::DeprecationWarning")))
13166 (propagated-inputs (list python-google-api-core python-google-auth))
13167 (native-inputs
13168 (list python-grpcio
13169 python-grpcio-status
13170 python-pytest
13171 python-setuptools))
13172 (home-page "https://github.com/googleapis/python-cloud-core")
13173 (synopsis "Google Cloud API client core library")
13174 (description
13175 "This library defines common helpers (e.g. base @code{Client} classes)
13176used by all of the @code{google-cloud-*} packages.")
13177 (license license:asl2.0)))
13178
13179(define-public python-google-cloud-storage
13180 (package
13181 (name "python-google-cloud-storage")
13182 (version "2.19.0")
13183 (source
13184 (origin
13185 (method git-fetch)
13186 (uri (git-reference
13187 (url "https://github.com/googleapis/python-storage")
13188 (commit (string-append "v" version))))
13189 (file-name (git-file-name name version))
13190 (sha256
13191 (base32 "19w10v2j4ciwlf8j2ylm77f8z1b0kqzg8lkh9rvh2swv1zrhydpj"))))
13192 (build-system pyproject-build-system)
13193 (arguments
13194 (list
13195 #:test-flags
13196 #~(list
13197 ;; XXX: Missing test_utils.retry.
13198 "--ignore=tests/system/"
13199 ;; Needs docker.
13200 "--ignore=tests/conformance/"
13201 ;; XXX: Deprecations.
13202 "-k" (string-join
13203 (list "not test_set_api_request_attr"
13204 "test_create_bucket_w_custom_endpoint"
13205 "test_ctor_w_api_endpoint_override"
13206 "test_ctor_w_custom_endpoint_use_auth"
13207 "test_list_buckets_w_custom_endpoint")
13208 " and not ")
13209 "tests")))
13210 (native-inputs
13211 (list python-googleapis-common-protos
13212 python-mock
13213 python-pytest
13214 python-test-utils
13215 python-setuptools))
13216 (propagated-inputs
13217 (list python-google-api-core
13218 python-google-auth
13219 python-google-cloud-core
13220 python-google-resumable-media
13221 python-protobuf
13222 python-requests))
13223 (home-page "https://github.com/googleapis/python-storage")
13224 (synopsis "Google Cloud Storage API client library")
13225 (description
13226 "Google Cloud Storage allows you to store data on Google infrastructure,
13227and it can be used to distribute large data objects to users via direct
13228download. This package provides a Google Cloud Storage API client library for
13229Python.")
13230 (license license:asl2.0)))
13231
13232(define-public python-smart-open
13233 (package
13234 (name "python-smart-open")
13235 (version "7.3.0")
13236 (source
13237 (origin
13238 (method git-fetch) ;no tests in PyPI archive
13239 (uri (git-reference
13240 (url "https://github.com/piskvorky/smart_open")
13241 (commit (string-append "v" version))))
13242 (file-name (git-file-name name version))
13243 (sha256
13244 (base32 "1jk3dj0j7idv94g1ga5wyvybakj4l150g26cbsjkrjfpy017vxab"))))
13245 (build-system pyproject-build-system)
13246 (arguments
13247 (list
13248 #:test-flags
13249 #~(list "--ignore=ci_helpers/"
13250 "--ignore=integration-tests/"
13251 ;; FIXME: Enable when guix/guix#1436 is resolved.
13252 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri"
13253 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri_contains_question_mark"
13254 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri_contains_slash"
13255 "--deselect=tests/test_smart_open.py::ParseUriTest::test_scheme"
13256 "--ignore=tests/test_gcs.py")))
13257 (propagated-inputs
13258 (list python-azure-common
13259 python-azure-core
13260 python-azure-storage-blob
13261 python-boto3
13262 ;; python-google-cloud-storage ;see guix/guix#1436
13263 python-paramiko
13264 python-requests
13265 python-wrapt
13266 python-zstandard))
13267 (native-inputs
13268 (list python-numpy
13269 python-moto
13270 python-pytest
13271 python-pytest-rerunfailures
13272 python-responses
13273 python-setuptools
13274 python-setuptools-scm
13275 python-wheel))
13276 (home-page "https://github.com/piskvorky/smart_open")
13277 (synopsis "Utilities for streaming large files")
13278 (description
13279 "This package provides utilities for streaming large files (S3, HDFS,
13280GCS, Azure Blob Storage, gzip, bz2, etc.)")
13281 (license license:expat)))
13282
13283(define-public python-smart-open-6
13284 (package
13285 (inherit python-smart-open)
13286 (name "python-smart-open")
13287 (version "6.4.0")
13288 (source
13289 (origin
13290 (method git-fetch)
13291 (uri (git-reference
13292 (url "https://github.com/piskvorky/smart_open")
13293 (commit (string-append "v" version))))
13294 (file-name (git-file-name name version))
13295 (sha256
13296 (base32 "1vpx37b6lsb6iwi59776ywjrqk1czv8arlhaf9073lrsbilqvj3x"))))
13297 (arguments
13298 (list
13299 ;; XXX: Tests need some older native inputs, disable for now.
13300 #:tests? #f))))
13301
13302(define-public python-w3lib
13303 (package
13304 (name "python-w3lib")
13305 (version "2.3.1")
13306 (source
13307 (origin
13308 (method url-fetch)
13309 (uri (pypi-uri "w3lib" version))
13310 (sha256
13311 (base32
13312 "1929layzxwdnf43hhrz7rabv388b2yibj7mnq9s62mr760mc12jw"))))
13313 (build-system pyproject-build-system)
13314 (native-inputs
13315 (list python-pytest python-setuptools python-wheel))
13316 (home-page "https://github.com/scrapy/w3lib")
13317 (synopsis "Python library of web-related functions")
13318 (description
13319 "This is a Python library of web-related functions, such as: remove
13320comments, or tags from HTML snippets, extract base url from HTML snippets,
13321translate entities on HTML strings, among other things.")
13322 (license license:bsd-3)))
13323
13324(define-public python-webcolors
13325 (package
13326 (name "python-webcolors")
13327 (version "25.10.0")
13328 (source
13329 (origin
13330 (method git-fetch)
13331 (uri (git-reference
13332 (url "https://github.com/ubernostrum/webcolors")
13333 (commit version)))
13334 (sha256
13335 (base32 "1wknzir5252y30wcpwxb04ngmrdw1llzqmrpiajyhkm81x2lgrym"))))
13336 (build-system pyproject-build-system)
13337 (native-inputs
13338 (list python-pdm-backend python-pytest))
13339 (home-page "https://github.com/ubernostrum/webcolors")
13340 (synopsis "HTML/CSS color definitions library")
13341 (description "@code{python-webcolors} is a module for working with
13342HTML/CSS color definitions. Normalizing and converting between the following
13343formats is supported.
13344@itemize
13345@item Specification-defined color names
13346@item Six-digit hexadecimal
13347@item Three-digit hexadecimal
13348@item Integer rgb() triplet
13349@item Percentage rgb() triplet
13350@end itemize
13351Only the RGB colorspace is supported. Conversion to/from the HSL colorspace
13352can be handled by the @code{colorsys} module in the Python standard library.")
13353 (license license:bsd-3)))
13354
13355(define-public python-woob
13356 ;; TODO: woob requires backends which are currently installed on the fly in
13357 ;; ~/.local/share/woob/modules/3.7/woob_modules/ , perhaps we should install
13358 ;; them in the store instead. Many modules are included in the modules
13359 ;; directory in the source tree, but it is unclear how to install them.
13360 ;; Many modules require extra dependencies though, so maybe they should be
13361 ;; packaged independently of woob itself.
13362 (package
13363 (name "python-woob")
13364 (version "3.7")
13365 (source
13366 (origin
13367 (method git-fetch)
13368 (uri (git-reference
13369 (url "https://gitlab.com/woob/woob.git")
13370 (commit version)))
13371 (file-name (git-file-name name version))
13372 (sha256
13373 (base32 "1sy0aykff56xs4dnc7ak6m8is2zgz9fprf3i1pk8n861xz1z748i"))))
13374 (build-system pyproject-build-system)
13375 (arguments
13376 (list
13377 #:test-flags
13378 ;; Deselect tests that require DNS lookup.
13379 #~(list
13380 "--deselect=tests/browser/adapters.py::TestAdapter::test_ciphers"
13381 "--deselect=tests/browser/browsers.py::TestBrowser::test_verify")
13382 #:phases
13383 #~(modify-phases %standard-phases
13384 (add-before 'build 'relax-requirements
13385 (lambda _
13386 (substitute* "pyproject.toml"
13387 ;; packaging ~= 23.0
13388 (("\"packaging .*\",")
13389 "")
13390 ;; rich~=13.0
13391 (("\"rich .*\",")
13392 "\"rich\",")))))))
13393 (native-inputs
13394 (list nss-certs-for-test
13395 python-pytest
13396 python-setuptools))
13397 (propagated-inputs
13398 (list python-babel
13399 python-colorama
13400 python-cssselect
13401 python-dateutil
13402 python-feedparser
13403 python-html2text
13404 python-lxml
13405 python-packaging
13406 python-pillow
13407 python-prettytable
13408 python-pycountry
13409 python-pyyaml
13410 python-requests
13411 python-responses
13412 python-rich
13413 python-termcolor
13414 python-unidecode))
13415 (home-page "https://woob.tech/")
13416 (synopsis "Woob, Web Outside Of Browsers")
13417 (description
13418 "Woob is a collection of applications able to interact with
13419websites, without requiring the user to open them in a browser. It also
13420provides well-defined APIs to talk to websites lacking one.")
13421 (license license:lgpl3+)))
13422
13423(define-public python-flask-combo-jsonapi
13424 (let ((commit "3cfff98ecdbadc45d25a3fd443ad67d3743be6f5")
13425 (revision "0"))
13426 (package
13427 (name "python-flask-combo-jsonapi")
13428 (version (git-version "1.1.0" revision commit))
13429 (source
13430 (origin
13431 (method git-fetch)
13432 (uri (git-reference
13433 (url "https://github.com/AdCombo/flask-combo-jsonapi")
13434 (commit commit)))
13435 (file-name (git-file-name name version))
13436 (sha256
13437 (base32 "1lp81v96qh9hdj3c95kvfaq0vy5vd8cm55j03aszc93bs8z5jg7h"))))
13438 (build-system pyproject-build-system)
13439 (arguments
13440 (list
13441 #:test-flags
13442 #~(list
13443 "-k"
13444 (string-join
13445 (list
13446 ;; XXX: This tests a feature that doesn't make sense when dropping
13447 ;; marshmallow < 3 support.
13448 "not test_compute_schema_propagate_context"
13449 ;; The following tests fail for unknown reasons (see:
13450 ;; https://github.com/AdCombo/flask-combo-jsonapi/issues/66).
13451 "test_get_list_with_simple_filter_relationship_custom_qs_api"
13452 "test_get_list_with_simple_filter_relationship_error")
13453 " and not "))
13454 #:phases
13455 #~(modify-phases %standard-phases
13456 (add-after 'unpack 'loosen-requirements
13457 (lambda _
13458 ;; Don't pin specific versions of dependencies.
13459 (substitute* "requirements.txt"
13460 (("^(sqlalchemy|marshmallow|Flask)[=<>].*" _ dep)
13461 (string-append dep "\n"))
13462 (("^marshmallow_jsonapi[=<>].*")
13463 "marshmallow_jsonapi_minfork\n"))
13464 ;; Drop support for marshmallow < 3.
13465 (substitute* (list "flask_combo_jsonapi/data_layers/alchemy.py"
13466 "flask_combo_jsonapi/schema.py")
13467 (("from marshmallow\\.base import SchemaABC")
13468 "from marshmallow import Schema")
13469 (("if isinstance\\(related_schema_cls, SchemaABC\\):")
13470 "if isinstance(related_schema_cls, Schema):"))
13471 (substitute* "tests/test_sqlalchemy_data_layer.py"
13472 (("default=None")
13473 "dump_default=None")
13474 (("missing=")
13475 "load_default=")))))))
13476 (propagated-inputs
13477 (list python-flask
13478 python-marshmallow
13479 python-marshmallow-jsonapi
13480 python-simplejson
13481 python-sqlalchemy
13482 python-apispec
13483 python-simplejson
13484 python-six))
13485 (native-inputs
13486 (list python-pytest python-setuptools))
13487 (home-page "https://github.com/AdCombo/flask-combo-jsonapi")
13488 (synopsis "Flask extension to quickly create JSON:API 1.0 REST Web APIs")
13489 (description
13490 "Flask-COMBO-JSONAPI is a Python Flask extension for building REST Web
13491APIs compliant with the @uref{https://jsonapi.org, JSON:API 1.0}
13492specification.
13493
13494It tries to combine the power of Flask-Restless with the flexibility of
13495Flask-RESTful to quickly build APIs that fit the complexity of existing
13496real-life projects with legacy data and diverse storage providers.")
13497 (license license:expat))))
13498
13499(define-public python-mwparserfromhell
13500 (package
13501 (name "python-mwparserfromhell")
13502 (version "0.7.2")
13503 (source
13504 (origin
13505 (method git-fetch)
13506 (uri (git-reference
13507 (url "https://github.com/earwig/mwparserfromhell")
13508 (commit (string-append "v" version))))
13509 (file-name (git-file-name name version))
13510 (sha256
13511 (base32 "083ir0nccm14431mmn243862gq731ww98fwpd95zm1yccvpzdy68"))))
13512 (build-system pyproject-build-system)
13513 (native-inputs (list python-pytest python-setuptools))
13514 (home-page "https://github.com/earwig/mwparserfromhell")
13515 (synopsis "Python parser for MediaWiki wikicode")
13516 (description
13517 "The MediaWiki Parser From Hell is a python library package that provides
13518a parser for MediaWiki.
13519
13520It exposes parses as normal string objects with additional methods giving
13521access to the special Wikicode features it contains (hyperlinks, tags,
13522templates…). The parser doesn't interpolate strings at all, it remains at a
13523purely formal level.
13524
13525Full documentation may be found at
13526@uref{https://mwparserfromhell.readthedocs.io, ReadTheDocs}")
13527 (license license:expat)))
13528
13529(define-public python-tweepy
13530 (package
13531 (name "python-tweepy")
13532 (version "4.16.0")
13533 (source
13534 (origin
13535 (method git-fetch)
13536 (uri
13537 (git-reference
13538 (url "https://github.com/tweepy/tweepy")
13539 (commit (string-append "v" version))))
13540 (file-name (git-file-name name version))
13541 (sha256
13542 (base32 "1k99qf0h1ykz0c56wdnlsyvd6zrcsrc4rl7rnlaxrpjppxjnpcpn"))))
13543 (build-system pyproject-build-system)
13544 (arguments
13545 ;; tests: 149 passed, 3 skipped, 1 warning
13546 (list #:test-backend #~'unittest
13547 #:test-flags #~(list "discover" "tests")))
13548 (native-inputs
13549 (list nss-certs-for-test
13550 python-flit-core
13551 python-urllib3-1.26
13552 python-vcrpy))
13553 (propagated-inputs
13554 (list python-aiohttp
13555 python-async-lru
13556 python-oauthlib
13557 python-requests
13558 python-requests-oauthlib))
13559 (home-page "https://www.tweepy.org/")
13560 (synopsis "Twitter library for Python")
13561 (description
13562 "This package provides @code{Tweepy}, an easy-to-use Python library for
13563accessing the Twitter API.")
13564 (license license:expat)))
13565
13566(define-public python-quart
13567 (package
13568 (name "python-quart")
13569 (version "0.20.0")
13570 (source
13571 (origin
13572 (method git-fetch)
13573 (uri (git-reference
13574 (url "https://github.com/pallets/quart")
13575 (commit version)))
13576 (file-name (git-file-name name version))
13577 (sha256
13578 (base32 "1gk6vg2cwpn70aald3m50xibjqjamgpz7an11h82w1fig6zmw2il"))))
13579 (build-system pyproject-build-system)
13580 (arguments
13581 (list
13582 #:test-flags
13583 ;; Not sure why test fails; related to a change in dependencies.
13584 #~(list "-k" "not test_cli_blueprints[cli_group2-args2]")))
13585 (native-inputs
13586 (list python-flit-core
13587 python-pytest
13588 python-pytest-asyncio))
13589 (propagated-inputs
13590 (list hypercorn
13591 python-aiofiles
13592 python-blinker
13593 python-click
13594 python-dotenv
13595 python-flask
13596 python-itsdangerous
13597 python-jinja2
13598 python-markupsafe
13599 python-toml
13600 python-werkzeug))
13601 (home-page "https://gitlab.com/pgjones/quart/")
13602 (synopsis "Python ASGI web microframework with the same API as Flask")
13603 (description
13604 "This package provides a Python ASGI web microframework with the same API
13605as Flask.")
13606 (license license:expat)))
13607
13608(define-public python-quart-trio
13609 (package
13610 (name "python-quart-trio")
13611 (version "0.12.0")
13612 (source
13613 (origin
13614 (method url-fetch)
13615 (uri (pypi-uri "quart_trio" version))
13616 (sha256
13617 (base32 "130r8hdk7xxjp380z1r3m28lw86q2a6g9rf0mgp9gs6hk04q9v02"))))
13618 (build-system pyproject-build-system)
13619 (arguments
13620 (list
13621 #:phases
13622 #~(modify-phases %standard-phases
13623 (add-after 'unpack 'remove-coverage-pytest-options
13624 (lambda _
13625 (substitute* "pyproject.toml"
13626 (("--no-cov-on-fail") "")))))))
13627 (native-inputs
13628 (list python-pdm-backend
13629 python-pytest
13630 python-pytest-sugar
13631 python-pytest-trio))
13632 (propagated-inputs
13633 (list hypercorn
13634 python-quart
13635 python-trio))
13636 (home-page "https://github.com/pgjones/quart-trio")
13637 (synopsis "Extension for Quart to support the Trio event loop")
13638 (description
13639 "This package provides a Quart extension to provide Trio support. This
13640is an alternative to using the asyncio event loop present in the Python
13641standard library and supported by default in Quart.")
13642 (license license:expat)))
13643
13644(define-public python-protego
13645 (package
13646 (name "python-protego")
13647 (version "0.4.0")
13648 (source
13649 (origin
13650 (method url-fetch)
13651 (uri (pypi-uri "protego" version))
13652 (sha256
13653 (base32 "1xn2aska8v94jqnbyv4ywczb55gaqvr298q8ybhs168knrifd9ck"))))
13654 (build-system pyproject-build-system)
13655 (native-inputs (list python-pytest python-setuptools python-wheel))
13656 (home-page "https://github.com/scrapy/protego")
13657 (synopsis "Python robots.txt parser with support for modern conventions")
13658 (description "Protego is a pure-Python @file{robots.txt} parser with support
13659for modern conventions.")
13660 (license license:bsd-3)))
13661
13662(define-public python-parsel
13663 (package
13664 (name "python-parsel")
13665 (version "1.10.0")
13666 (source
13667 (origin
13668 (method url-fetch)
13669 (uri (pypi-uri "parsel" version))
13670 (sha256
13671 (base32 "1050v20gzijfcaxpm1d4bvxqw2l7xhyf9pxrawrv8lczanwpvw8l"))))
13672 (build-system pyproject-build-system)
13673 (propagated-inputs
13674 (list python-cssselect
13675 python-jmespath
13676 python-lxml
13677 python-typing-extensions
13678 python-w3lib))
13679 (native-inputs
13680 (list python-psutil python-pytest python-setuptools python-wheel))
13681 (home-page "https://github.com/scrapy/parsel")
13682 (synopsis "Extract data from HTML and XML using XPath and CSS selectors")
13683 (description "Parsel is a library to extract and remove data from
13684HTML and XML using XPath and CSS selectors, optionally combined with
13685regular expressions.")
13686 (license license:bsd-3)))
13687
13688(define-public python-scrapy
13689 (package
13690 (name "python-scrapy")
13691 (version "2.13.3")
13692 (source
13693 (origin
13694 (method url-fetch)
13695 (uri (pypi-uri "scrapy" version))
13696 (sha256
13697 (base32 "0k90pni6vkj7axx3cji0b2x7yg4yfh5kh1csqiq9ssp42265h5xz"))))
13698 (build-system pyproject-build-system)
13699 (arguments
13700 (list #:test-flags
13701 #~(list "--numprocesses" (number->string (parallel-job-count))
13702 "-k" (string-join
13703 ;; ConnectionRefusedError: [Errno 111] Connection
13704 ;; refused
13705 (list "not test_append"
13706 "test_append_active_mode"
13707 "test_overwrite"
13708 "test_overwrite_active_mode"
13709 "test_persist"
13710 ;; AssertionError
13711 "test_start_deprecated_super")
13712 " and not ")
13713 ;; Skip documentation testing.
13714 "--ignore=docs")
13715 #:phases
13716 #~(modify-phases %standard-phases
13717 (add-before 'check 'prepare-test-environment
13718 (lambda _
13719 (setenv "HOME" "/tmp"))))))
13720 (propagated-inputs
13721 (list python-cryptography
13722 python-cssselect
13723 python-defusedxml
13724 python-itemadapter
13725 python-itemloaders
13726 python-lxml
13727 python-packaging
13728 python-parsel
13729 python-protego
13730 python-pydispatcher
13731 python-pyopenssl
13732 python-pypydispatcher
13733 python-queuelib
13734 python-service-identity
13735 python-tldextract
13736 python-twisted
13737 python-w3lib
13738 python-zope-interface))
13739 (native-inputs
13740 (list nss-certs-for-test
13741 python-hatchling
13742 python-pexpect
13743 python-pytest
13744 python-pytest-xdist
13745 python-setuptools
13746 python-sybil
13747 python-testfixtures))
13748 (home-page "https://scrapy.org")
13749 (synopsis "High-level Web crawling and Web scraping framework")
13750 (description "Scrapy is a fast high-level web crawling and web
13751scraping framework, used to crawl websites and extract structured data
13752from their pages. It can be used for a wide range of purposes, from data
13753mining to monitoring and automated testing.")
13754 (license license:bsd-3)))
13755
13756(define sdmx-test-data
13757 (let* ((commit "cd7899341b46e179e9f19b638478d70197e12c74")
13758 (revision "1")
13759 (name "sdmx-test-data")
13760 (version (git-version "0" revision commit)))
13761 (origin
13762 (method git-fetch)
13763 (uri (git-reference
13764 (url "https://github.com/khaeru/sdmx-test-data")
13765 (commit commit)))
13766 (file-name (git-file-name name version))
13767 (sha256
13768 (base32 "1n9y83raxxpgljbi0wjj27lhmyn19fnc2325a6cchwsa3b65ywv7")))))
13769
13770(define-public python-sdmx1
13771 (package
13772 (name "python-sdmx1")
13773 (version "2.26.0")
13774 (source
13775 (origin
13776 (method git-fetch)
13777 (uri (git-reference
13778 (url "https://github.com/khaeru/sdmx")
13779 (commit (string-append "v" version))))
13780 (file-name (git-file-name name version))
13781 (sha256
13782 (base32 "096c60pxzcw71bc9fj3hpjprrdiia365rqalapxx56g6g1vkgka9"))))
13783 (build-system pyproject-build-system)
13784 (arguments
13785 (list
13786 #:test-flags
13787 #~(list
13788 ;; 804 passed, 122 skipped, 28 deselected, 23 xfailed, 1 xpassed, 3 warnings
13789 ;; XXX: 'Version' object has no attribute 'pre'
13790 "--ignore=sdmx/tests/model/test_version.py"
13791 ;; Most of these tests require network connection.
13792 "--ignore=sdmx/tests/test_client.py"
13793 "--ignore=sdmx/tests/test_sources.py"
13794 "--ignore=sdmx/tests/test_docs.py"
13795 "--ignore=sdmx/tests/test_session.py"
13796 "--ignore=sdmx/tests/writer/test_xml.py"
13797 "--ignore=sdmx/tests/reader/test_xml_v21.py"
13798 "--deselect=sdmx/tests/convert/test_pandas.py::test_dataset_constraint"
13799 ;; Wrong python-flaky version
13800 "--deselect=sdmx/tests/format/test_xml.py::test_install_schemas_in_user_cache"
13801 "--deselect=sdmx/tests/format/test_xml.py::test_install_schemas"
13802 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_from_v2_1_samples"
13803 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_from_v3_0_samples"
13804 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_invalid_doc"
13805 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_invalid_message_type"
13806 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_max_errors"
13807 ;; sqlite3.OperationalError
13808 "--deselect=sdmx/tests/util/test_requests.py::TestOfflineAdapter::test_raises")
13809 #:phases
13810 #~(modify-phases %standard-phases
13811 (add-after 'unpack 'fix-version
13812 (lambda _
13813 ;; versioningit needs git tags; patch pyproject.toml to use
13814 ;; static version and create _version.py directly.
13815 (substitute* "pyproject.toml"
13816 (("version.source = \"versioningit\"")
13817 "
13818[tool.hatch.version]
13819path = \"sdmx/_version.py\"")
13820 ((", \"versioningit\"")
13821 ""))
13822 (call-with-output-file "sdmx/_version.py"
13823 (lambda (port)
13824 (format port "__version__ = \"~a\"~%" #$version)))))
13825 (add-before 'check 'pre-check
13826 (lambda _
13827 (setenv "SDMX_TEST_DATA" #$sdmx-test-data)
13828 (setenv "HOME" (dirname (getcwd))))))))
13829 (propagated-inputs
13830 (list python-dateutil
13831 python-lxml
13832 python-pandas
13833 python-platformdirs
13834 python-requests))
13835 (native-inputs
13836 (list python-filelock
13837 python-flaky
13838 python-hatchling
13839 python-jinja2
13840 python-pyarrow
13841 python-pytest
13842 python-pytest-cov
13843 python-pytest-xdist
13844 python-requests-mock
13845 python-requests-cache
13846 python-responses))
13847 (home-page "https://sdmx1.readthedocs.io")
13848 (synopsis "Statistical Data and Metadata eXchange (SDMX) for Python")
13849 (description "This package provides a Python implementation of the
13850SDMX 2.1 and 3.0 standards for Statistical Data and Metadata eXchange.
13851These standards are developed and used by statistical agencies and
13852international organisations. This package can be used to:
13853@itemize
13854@item Explore and retrieve data available from SDMX-REST web services
13855operated by providers including the World Bank, International Monetary
13856Fund, Eurostat, OECD, and United Nations;
13857@item Read and write data and metadata in file formats including
13858SDMX-ML (XML), SDMX-JSON, and SDMX-CSV;
13859@item Convert data and metadata into @code{python-pandas} objects, for
13860use with the analysis, plotting, and other tools in the Python data
13861science ecosystem;
13862@item Apply the SDMX information model (IM) to structure and publish
13863your own data.
13864@end itemize")
13865 (license license:asl2.0)))
13866
13867(define-public python-jstyleson
13868 (let ((commit "8c47cc9e665b3b1744cccfaa7a650de5f3c575dd")
13869 (revision "0"))
13870 (package
13871 (name "python-jstyleson")
13872 (version (git-version "0.0.2" revision commit))
13873 (source
13874 (origin
13875 (method git-fetch)
13876 (uri (git-reference
13877 (url "https://github.com/linjackson78/jstyleson")
13878 (commit commit)))
13879 (file-name (git-file-name name version))
13880 (sha256
13881 (base32 "0r72mq7h294w5icpdbjd202w25kwr1dz7nh79f6m74xisc9cixia"))))
13882 (build-system pyproject-build-system)
13883 (native-inputs (list python-pytest python-setuptools))
13884 (home-page "https://github.com/linjackson78/jstyleson")
13885 (synopsis "JSON parser supporting js-style comments")
13886 (description
13887 "@code{jstyleson} is a Python library to parse JSON. Contrary to the
13888standard Python @code{json} library, it understands js-style comments.
13889Trailing comma is also supported.")
13890 (license license:expat))))
13891
13892(define-public python-html-text
13893 (package
13894 (name "python-html-text")
13895 (version "0.7.0")
13896 (source
13897 (origin
13898 (method url-fetch)
13899 (uri (pypi-uri "html_text" version))
13900 (sha256
13901 (base32 "10lixghras86av966ha9piqfl1iscf7nffg69dmz13sxjh371jrx"))))
13902 (build-system pyproject-build-system)
13903 (native-inputs
13904 (list python-pytest
13905 python-setuptools
13906 python-wheel))
13907 (propagated-inputs
13908 (list python-lxml
13909 python-lxml-html-clean))
13910 (home-page "https://github.com/TeamHG-Memex/html-text")
13911 (synopsis "Extract text from HTML")
13912 (description "HTML to Text is a Python library for extract text from HTML.
13913Contrary to other solution such as LXML or Beautiful Soup, the text extracted
13914with @code{html_text} does not contain elements such as JavaScript or inline
13915styles not normally visible to users. It also normalizes white space
13916characters in a smarter, more visually pleasing style.")
13917 (license license:expat)))
13918
13919(define-public python-mf2py
13920 (package
13921 (name "python-mf2py")
13922 (version "2.0.1")
13923 (source
13924 (origin
13925 (method git-fetch)
13926 (uri (git-reference
13927 (url "https://github.com/microformats/mf2py")
13928 (commit (string-append "v" version))))
13929 (file-name (git-file-name name version))
13930 (sha256
13931 (base32 "0ajnf0zrh1l48fvix9fbs1qvgbqhiljqnrm51rx44p7dbarpw4ls"))))
13932 (build-system pyproject-build-system)
13933 (native-inputs (list python-mock python-poetry-core python-pytest))
13934 (propagated-inputs
13935 (list python-beautifulsoup4 python-html5lib python-requests))
13936 (home-page "https://github.com/microformats/mf2py")
13937 (synopsis "Python Microformats2 parser")
13938 (description
13939 "This Python library provides a Microformats2 parser implementing the
13940full Microformats2 (mf2) specification, including backward compatibility with
13941Microformats1 (mf1).")
13942 (license license:expat)))
13943
13944(define-public python-extruct
13945 (package
13946 (name "python-extruct")
13947 (version "0.18.0")
13948 (source (origin
13949 (method git-fetch) ;for tests
13950 (uri (git-reference
13951 (url "https://github.com/scrapinghub/extruct")
13952 (commit (string-append "v" version))))
13953 (file-name (git-file-name name version))
13954 (sha256
13955 (base32
13956 "03qdldqrvmbsk6klq4nkxvvp3b2a0qqgqg115i3crbmialiaai45"))))
13957 (build-system pyproject-build-system)
13958 (arguments
13959 (list
13960 #:test-flags
13961 ;; 67 passed, 3 deselected
13962 ;; XXX: 3 tests fail with errors in assertion.
13963 #~(list "-k" (string-append
13964 "not test_microformat"
13965 " and not test_microformat"
13966 " and not test_umicroformat"))))
13967 (native-inputs
13968 (list python-pytest
13969 python-setuptools
13970 python-wheel))
13971 (propagated-inputs
13972 (list python-html-text
13973 python-jstyleson
13974 python-lxml
13975 python-mf2py
13976 python-pyrdfa3
13977 python-rdflib
13978 python-w3lib))
13979 (home-page "https://github.com/scrapinghub/extruct")
13980 (synopsis "Extract embedded metadata from HTML markup")
13981 (description "@code{extruct} is a Python library for extracting embedded
13982metadata from HTML markup. Currently, extruct supports:
13983@itemize
13984@item W3C's HTML Microdata
13985@item embedded JSON-LD
13986@item Microformat via mf2py
13987@item Facebook's Open Graph
13988@item (experimental) RDFa via rdflib
13989@item Dublin Core Metadata (DC-HTML-2003)
13990@end itemize")
13991 (license license:bsd-3)))
13992
13993(define-public python-wadllib
13994 (package
13995 (name "python-wadllib")
13996 (version "2.0.0")
13997 (source
13998 (origin
13999 (method url-fetch)
14000 (uri (pypi-uri "wadllib" version))
14001 (sha256
14002 (base32 "09vlfg4mzdmkqk6br7j8ms3116qk5am0nf4v1jkzwd7swhisznqy"))))
14003 (build-system pyproject-build-system)
14004 (arguments
14005 (list
14006 ;; XXX: Doctests are currently failing.
14007 #:tests? #f
14008 #:phases
14009 #~(modify-phases %standard-phases
14010 (replace 'check
14011 (lambda* (#:key tests? #:allow-other-keys)
14012 (if tests?
14013 (invoke "zope-testrunner" "--test-path=src")
14014 (format #t "test suite not run~%")))))))
14015 (native-inputs
14016 (list python-multipart python-setuptools python-zope-testrunner))
14017 (propagated-inputs (list python-lazr-uri))
14018 (home-page "https://launchpad.net/wadllib")
14019 (synopsis "Web Application Description Language (WADL) navigation library")
14020 (description "The @code{wadllib} Python library allows navigating HTTP
14021resources using Web Application Description Language (WADL) files as guides.")
14022 (license license:lgpl3)))
14023
14024(define-public python-zeep
14025 (package
14026 (name "python-zeep")
14027 (version "4.3.1")
14028 (source
14029 (origin
14030 (method url-fetch)
14031 (uri (pypi-uri "zeep" version))
14032 (sha256
14033 (base32 "0vm0asfak0pxfa9i753imcy72hk8gkxbj6pmw185b7dhw7lqalzl"))))
14034 (build-system pyproject-build-system)
14035 (arguments
14036 (list
14037 #:phases
14038 '(modify-phases %standard-phases
14039 (add-after 'unpack 'compatibility
14040 (lambda _
14041 ;; Relax requests-file requirement.
14042 (substitute* "pyproject.toml"
14043 (("\"requests-file.*\",")
14044 "\"requests-file\","))
14045 ;; httpx removed the "proxies" keyword. It's now either "mounts"
14046 ;; or "proxy". See https://github.com/encode/httpx/pull/2879.
14047 (substitute* "src/zeep/transports.py"
14048 (("proxies=") "proxy="))))
14049 ;; One test requires write access
14050 (add-before 'check 'set-HOME
14051 (lambda _ (setenv "HOME" (getcwd)))))))
14052 (propagated-inputs
14053 (list python-attrs
14054 python-isodate
14055 python-lxml
14056 python-platformdirs
14057 python-pytz
14058 python-requests
14059 python-requests-file
14060 python-requests-toolbelt))
14061 (native-inputs
14062 (list nss-certs-for-test
14063 python-freezegun
14064 python-pretend
14065 python-pytest
14066 python-pytest-asyncio
14067 python-pytest-httpx
14068 python-requests-mock
14069 python-setuptools
14070 python-wheel))
14071 (home-page "https://docs.python-zeep.org/en/stable/")
14072 (synopsis "Python SOAP client based on lxml / requests")
14073 (description "Zeep is a Python SOAP client. Highlights:
14074
14075@itemize
14076@item Build on top of @code{lxml} and @code{requests}.
14077@item Support for Soap 1.1, Soap 1.2 and HTTP bindings.
14078@item Support for WS-Addressing headers.
14079@item Support for WSSE (UserNameToken / x.509 signing).
14080@item Support for @code{asyncio} via @code{httpx}.
14081@item Experimental support for XOP messages.
14082@end itemize")
14083 (license license:expat)))
14084
14085(define-public python-http-client
14086 (package
14087 (name "python-http-client")
14088 (version "3.3.7")
14089 (source
14090 (origin
14091 (method git-fetch)
14092 (uri (git-reference
14093 (url "https://github.com/sendgrid/python-http-client")
14094 (commit version)))
14095 (file-name (git-file-name name version))
14096 (sha256
14097 (base32 "0z0ziw3f4zw5fj4spiwhhs2x8qs3i5999ry2p6a5sc8b1lkkj2zi"))))
14098 (build-system pyproject-build-system)
14099 (arguments
14100 (list
14101 #:test-backend #~'unittest
14102 #:phases
14103 #~(modify-phases %standard-phases
14104 (add-after 'unpack 'fix-tests
14105 (lambda _
14106 ;; The test expects the copyright to be updated each year.
14107 (substitute* "tests/test_daterange.py"
14108 (("time\\.strftime\\(\"%Y\"\\)") "2022")))))))
14109 (native-inputs
14110 (list python-setuptools))
14111 (home-page "https://github.com/sendgrid/python-http-client")
14112 (synopsis "HTTP REST client for Python")
14113 (description
14114 "This package provides access to any RESTful or RESTful-like API.")
14115 (license license:expat)))
14116
14117(define-public python-sendgrid
14118 (package
14119 (name "python-sendgrid")
14120 (version "6.9.7")
14121 (source
14122 (origin
14123 (method git-fetch)
14124 (uri (git-reference
14125 (url "https://github.com/sendgrid/sendgrid-python")
14126 (commit version)))
14127 (file-name (git-file-name name version))
14128 (sha256
14129 (base32 "0kvp4gm3bpcsj2mkv05pgvlcv1jlsfhcljcv61wz5kq9d273h7rg"))))
14130 (build-system pyproject-build-system)
14131 (arguments
14132 (list
14133 #:test-flags
14134 #~(list "--ignore=test/integ"
14135 ;; Network access is required.
14136 "--ignore=live_test.py")))
14137 (native-inputs
14138 (list python-pytest
14139 python-setuptools))
14140 (propagated-inputs
14141 (list python-cryptography
14142 python-http-client
14143 python-flask
14144 python-pyyaml
14145 python-six ;hard dependency
14146 python-starkbank-ecdsa
14147 python-werkzeug))
14148 (home-page "https://github.com/sendgrid/sendgrid-python/")
14149 (synopsis "SendGrid API library for Python")
14150 (description
14151 "The @code{sendgrid} Python library allows access to the
14152SendGrid Web API v3. Version 3+ of the library provides full support for all
14153SendGrid Web API v3 endpoints, including the new v3 /mail/send.")
14154 (license license:expat)))
14155
14156(define-public python-sse-starlette
14157 (package
14158 (name "python-sse-starlette")
14159 (version "3.4.4")
14160 (source
14161 (origin
14162 (method git-fetch)
14163 (uri (git-reference
14164 (url "https://github.com/sysid/sse-starlette")
14165 (commit (string-append "v" version))))
14166 (file-name (git-file-name name version))
14167 (sha256
14168 (base32 "0jzy3mjszl7fr524cggyf8k97x6jpykvmxldmm2ckmrqjpyj8jmz"))))
14169 (build-system pyproject-build-system)
14170 (arguments
14171 (list
14172 #:test-flags
14173 #~(list
14174 ;; XXX: Server fails to start.
14175 "--ignore=tests/experimentation/test_multiple_consumers_asyncio.py"
14176 "--ignore=tests/experimentation/test_multiple_consumers_threads.py"
14177 ;; XXX: Missing test dependency - testcontainers, Docker is required.
14178 "--ignore=tests/integration/test_multiple_consumers.py")))
14179 (native-inputs
14180 (list python-asgi-lifespan
14181 python-httpx
14182 python-portend
14183 python-pytest
14184 python-pytest-asyncio
14185 python-psutil
14186 python-setuptools
14187 python-tenacity
14188 python-uvicorn))
14189 (propagated-inputs
14190 (list python-anyio
14191 python-starlette))
14192 (home-page "https://github.com/sysid/sse-starlette")
14193 (synopsis "SSE plugin for Starlette")
14194 (description
14195 "This package provides SSE plugin for Starlette.")
14196 (license license:bsd-3)))
14197
14198(define-public python-sseclient-py
14199 (package
14200 (name "python-sseclient-py")
14201 (version "1.9.0")
14202 (source
14203 (origin
14204 (method git-fetch)
14205 (uri (git-reference
14206 (url "https://github.com/mpetazzoni/sseclient")
14207 (commit (string-append "sseclient-py-" version))))
14208 (file-name (git-file-name name version))
14209 (sha256
14210 (base32 "1yi2v8z89mygsr1vzyc4r3j7flr3jrh6a6kzqfdh86i5a5j5v280"))))
14211 (build-system pyproject-build-system)
14212 (native-inputs (list python-hatchling python-pytest))
14213 (arguments
14214 (list
14215 #:test-backend #~'unittest
14216 #:test-flags #~'("discover" "--verbose" "tests")))
14217 (home-page "https://github.com/mpetazzoni/sseclient")
14218 (synopsis "Pure-Python Server Side Events (SSE) client")
14219 (description
14220 "This package provides a Python client for SSE event sources that
14221seamlessly integrates with @code{urllib3} and @code{requests}.")
14222 (license license:asl2.0)))
14223
14224(define-public python-starlette
14225 (package
14226 (name "python-starlette")
14227 (version "0.49.1")
14228 (source (origin
14229 (method git-fetch)
14230 (uri (git-reference
14231 (url "https://github.com/encode/starlette")
14232 (commit version)))
14233 (file-name (git-file-name name version))
14234 (sha256
14235 (base32
14236 "0w9cyaxpc2p99hqrfw164iypacx3i1gsmn2z0xywgd21alva82ji"))))
14237 (build-system pyproject-build-system)
14238 (propagated-inputs (list python-anyio
14239 python-typing-extensions
14240 ;; [all] extra dependencies:
14241 python-itsdangerous
14242 python-jinja2
14243 python-multipart
14244 python-pyyaml
14245 python-requests))
14246 (native-inputs (list python-hatchling
14247 python-httpx
14248 python-pytest
14249 python-typing-extensions))
14250 (home-page "https://github.com/encode/starlette")
14251 (synopsis "Little ASGI library")
14252 (description
14253 "Starlette is a lightweight ASGI (Asynchronous Server Gateway
14254Interface) framework/toolkit for building async web services in Python.")
14255 (license license:bsd-3)))
14256
14257(define-public python-starsessions
14258 (package
14259 (name "python-starsessions")
14260 (version "1.3.0")
14261 (source (origin
14262 (method git-fetch)
14263 (uri (git-reference
14264 (url "https://github.com/alex-oleshkevich/starsessions")
14265 (commit (string-append "v" version))))
14266 (file-name (git-file-name name version))
14267 (sha256
14268 (base32
14269 "00dkdhp22vfmcn0w4y7f2ii8m1xj5i7409x58g3l8lvk6v5ng2nf"))))
14270 (build-system pyproject-build-system)
14271 (arguments
14272 (list
14273 #:test-flags
14274 ;; These tests require a running redis server
14275 '(list "--ignore=tests/backends/test_redis.py"
14276 ;; XXX: this failure indicates a real compatibility problem, but
14277 ;; it seems restricted to the tests only.
14278 ;; AttributeError: 'Cookies' object has no attribute
14279 ;; 'clear_session_cookies'
14280 "-k"
14281 (string-append "not test_session_clears_on_tab_close"
14282 ;; This fails because an error is not raised.
14283 " and not test_session_wants_secret_key"))
14284 #:phases
14285 '(modify-phases %standard-phases
14286 (add-after 'unpack 'compatibilitiy
14287 (lambda _
14288 ;; aioredis has been renamed
14289 (substitute* "starsessions/backends/redis.py"
14290 (("aioredis") "redis")))))))
14291 (propagated-inputs
14292 (list python-redis
14293 python-itsdangerous
14294 python-starlette))
14295 (native-inputs
14296 (list python-httpx
14297 python-poetry-core
14298 python-pytest
14299 python-pytest-asyncio
14300 python-requests))
14301 (home-page "https://github.com/alex-oleshkevich/starsessions")
14302 (synopsis "Pluggable session support for Starlette and FastAPI")
14303 (description
14304 "This package adds pluggable session backends and ships default
14305@code{InMemoryBackend} and @code{CookieBackend} implementations for Starlette
14306and FastAPI.")
14307 (license license:expat)))
14308
14309(define-public python-whereismyip
14310 (package
14311 (name "python-whereismyip")
14312 (version "0.1.0")
14313 (source
14314 (origin
14315 (method url-fetch)
14316 (uri (pypi-uri "whereismyip" version))
14317 (sha256
14318 (base32 "0psrlvax8249ccs2rvgdygpckzz22vxjcyzr2pql06d48k61gk54"))))
14319 (build-system pyproject-build-system)
14320 (arguments (list #:tests? #false)) ; There are no tests.
14321 (native-inputs (list python-setuptools))
14322 (home-page "https://pypi.org/project/whereismyip/")
14323 (synopsis "Queries multiple geolocation services until one succeeds")
14324 (description
14325 "This package provides a simple Python library that queries multiple geolocation
14326services until one succeeds.")
14327 (license license:gpl3)))
14328
14329(define-public python-whitenoise
14330 (package
14331 (name "python-whitenoise")
14332 (version "6.9.0")
14333 (source (origin
14334 (method git-fetch) ; PyPI missing test fails
14335 (uri (git-reference
14336 (url "https://github.com/evansd/whitenoise")
14337 (commit version)))
14338 (file-name (git-file-name name version))
14339 (sha256
14340 (base32
14341 "0y00a59ww9f631m51d5db5xcnbckzcwfm64wabp5vamn7l1kqqsj"))))
14342 (build-system pyproject-build-system)
14343 (arguments
14344 (list
14345 #:test-flags #~(list "-k" "not test_modified"))) ; HTTP 304 error
14346 (native-inputs (list python-brotli
14347 python-django
14348 python-requests
14349 python-pytest
14350 python-setuptools
14351 python-wheel))
14352 (home-page "https://github.com/evansd/whitenoise")
14353 (synopsis "Static file serving for WSGI applications")
14354 (description
14355 "WhiteNoise allows your web app to serve its own static files, making it
14356a self-contained unit that can be deployed anywhere without relying on nginx,
14357Amazon S3 or any other external service.")
14358 (license license:expat)))
14359
14360(define-public python-suds
14361 (package
14362 (name "python-suds")
14363 (version "1.2.0")
14364 (source
14365 (origin
14366 (method url-fetch)
14367 (uri (pypi-uri "suds" version))
14368 (sha256
14369 (base32 "1byyg7b2ixpr8hc849a6dd0qn5daxqawz6lb3php8lrmsb1n5cc3"))))
14370 (build-system pyproject-build-system)
14371 (arguments
14372 (list #:phases
14373 #~(modify-phases %standard-phases
14374 ;; XXX: chirp expects suds instead of suds_community
14375 (add-after 'install 'add-custom-dist-info
14376 (lambda _
14377 (for-each
14378 (lambda (dir)
14379 (with-directory-excursion (dirname dir)
14380 (symlink
14381 (basename dir)
14382 (string-append "suds-" #$version ".dist-info"))))
14383 (find-files #$output
14384 (lambda (file stat)
14385 (string-suffix? ".dist-info" file))
14386 #:directories? #t)))))))
14387 (native-inputs
14388 (list python-pytest
14389 python-setuptools
14390 python-wheel))
14391 (home-page "https://github.com/suds-community/suds")
14392 (synopsis "Lightweight SOAP python client for consuming Web Services")
14393 (description
14394 "Suds is a lightweight SOAP-based web service client for Python.")
14395 (license license:lgpl3+)))
14396
14397(define-public python-fastapi
14398 (package
14399 (name "python-fastapi")
14400 (version "0.137.1")
14401 (source
14402 (origin
14403 (method url-fetch)
14404 (uri (pypi-uri "fastapi" version))
14405 (sha256
14406 (base32 "072lzn48rwf9rjix4nqb5ym6hnaj2fb3jxclilym7n9h89q608w2"))))
14407 (build-system pyproject-build-system)
14408 (arguments
14409 (list
14410 ;; tests: 1126 passed, 12 skipped, 2 deselected
14411 #:test-backend #~'custom
14412 #:test-flags
14413 #~(list
14414 ;; Cannot import 'scripts' with just 'pytest'.
14415 "-m" "pytest"
14416 ;; Needs strawberry and sqlmodel.
14417 "--ignore=tests/test_tutorial/"
14418 ;; Fails due to failure to capture stdout.
14419 "--ignore=tests/test_fastapi_cli.py")))
14420 (native-inputs
14421 (list python-anyio
14422 python-dirty-equals
14423 python-flask
14424 python-inline-snapshot
14425 python-pdm-backend
14426 ;; python-pwdlib
14427 python-pyjwt
14428 python-pytest
14429 python-pytest-timeout
14430 python-pytest-xdist
14431 python-sqlalchemy-2
14432 ;; python-sqlmodel
14433 python-types-orjson
14434 python-types-ujson))
14435 (propagated-inputs
14436 (list python-starlette
14437 python-pydantic
14438 python-typing-extensions
14439 python-annotated-doc
14440 ;; [optional]
14441 python-email-validator
14442 python-fastapi-cli
14443 ;; python-fastar
14444 python-httpx
14445 python-itsdangerous
14446 python-jinja2
14447 python-multipart
14448 python-orjson
14449 python-pydantic
14450 python-pydantic-extra-types
14451 python-pydantic-settings
14452 python-pyyaml
14453 python-ujson
14454 python-uvicorn))
14455 (home-page "https://github.com/fastapi/fastapi")
14456 (synopsis "Web framework based on type hints")
14457 (description "FastAPI provides a web API framework based on pydantic and
14458starlette.")
14459 (license license:expat)))
14460
14461(define-public python-fastapi-csrf-protect
14462 (package
14463 (name "python-fastapi-csrf-protect")
14464 (version "0.3.3")
14465 (source (origin
14466 (method git-fetch)
14467 (uri (git-reference
14468 (url "https://github.com/aekasitt/fastapi-csrf-protect")
14469 (commit (string-append "v" version))))
14470 (file-name (git-file-name name version))
14471 (sha256
14472 (base32
14473 "181yawlbpd4709mamsradr9zj0jrbp4qvwfvmggs80pd36iiwyy8"))))
14474 (build-system pyproject-build-system)
14475 (propagated-inputs
14476 (list python-fastapi python-itsdangerous
14477 python-pydantic))
14478 (native-inputs
14479 (list python-poetry-core
14480 python-pytest))
14481 (home-page "https://github.com/aekasitt/fastapi-csrf-protect")
14482 (synopsis "Cross-Site Request Forgery (XSRF) protection")
14483 (description
14484 "This package provides a stateless implementation of @dfn{Cross-Site
14485Request Forgery} (XSRF) Protection by using the Double Submit Cookie mitigation
14486pattern.")
14487 (license license:expat)))
14488
14489(define-public python-fastapi-pagination-minimal
14490 (package
14491 (name "python-fastapi-pagination-minimal")
14492 (version "0.15.15")
14493 (source (origin
14494 (method git-fetch)
14495 (uri (git-reference
14496 (url "https://github.com/uriyyo/fastapi-pagination")
14497 (commit version)))
14498 (file-name (git-file-name name version))
14499 (sha256
14500 (base32
14501 "0jfmk5m2yrki9rw9izci2fxamam45mk36gl77rwbd5hnngkqbahv"))))
14502 (build-system pyproject-build-system)
14503 ;; We run the tests in python-fastapi-pagination only.
14504 (arguments (list #:tests? #false))
14505 ;; These are the only required dependencies,
14506 ;; please add all optional dependencies to the
14507 ;; full python-fastapi-pagination below.
14508 (propagated-inputs (list python-fastapi python-pydantic))
14509 (native-inputs (list python-hatchling))
14510 (home-page "https://github.com/uriyyo/fastapi-pagination")
14511 (synopsis "FastAPI pagination library")
14512 (description "@code{fastapi-pagination} is a Python library designed to
14513simplify pagination in FastAPI applications. It provides a set of utility
14514functions and data models to help you paginate your database queries and
14515return paginated responses to your clients.")
14516 (license license:expat)))
14517
14518(define-public python-fastapi-pagination
14519 (package
14520 (inherit python-fastapi-pagination-minimal)
14521 (name "python-fastapi-pagination")
14522 (arguments
14523 (list
14524 #:test-flags
14525 #~(list "--asyncio-mode=auto"
14526 "--ignore=tests/ext"
14527 ;; Netwok access is required.
14528 "-k" (string-join
14529 (list "not test_optional_params[postgres-default]"
14530 "test_optional_params[postgres-limit-offset]"
14531 "test_optional_params[sqlite-default]"
14532 "test_optional_params[sqlite-limit-offset]")
14533 " and not "))
14534 #:phases
14535 '(modify-phases %standard-phases
14536 (add-after 'unpack 'patch-tests
14537 (lambda _
14538 ;; We don't have a package for python-cassandra or motor, but we
14539 ;; also don't need them as we only run the unit tests anyway.
14540 (substitute* "tests/conftest.py"
14541 (("from cassandra.*") "")
14542 (("from motor.*") "")))))))
14543 (propagated-inputs
14544 (modify-inputs (package-propagated-inputs
14545 python-fastapi-pagination-minimal)
14546 (prepend python-asyncpg
14547 python-databases
14548 python-django
14549 python-fastapi
14550 python-pydantic
14551 python-sqlalchemy
14552 (package
14553 (inherit python-tortoise-orm)
14554 (arguments
14555 (substitute-keyword-arguments (package-arguments
14556 python-tortoise-orm)
14557 ((#:phases phases '%standard-phases)
14558 `(modify-phases ,phases
14559 (delete 'sanity-check)))))
14560 (propagated-inputs
14561 (modify-inputs propagated-inputs
14562 (replace "python-aiosqlite" python-aiosqlite)))))))
14563 (native-inputs
14564 (list python-aiosqlite
14565 python-asgi-lifespan
14566 python-asyncpg
14567 python-dirty-equals
14568 python-faker
14569 python-hatchling
14570 python-httpx
14571 python-pytest
14572 python-pytest-asyncio
14573 python-sqlalchemy
14574 python-typing-extensions))
14575 (description
14576 (string-append (package-description python-fastapi-pagination-minimal)
14577 "
14578
14579This package, as opposed to @code{python-fastapi-pagination-minimal}, depends on
14580all available optional dependencies supported by mainline
14581@code{fastapi-pagination}."))))
14582
14583(define-public python-fastapi-cli
14584 (package
14585 (name "python-fastapi-cli")
14586 (version "0.0.7")
14587 (source
14588 (origin
14589 (method url-fetch)
14590 (uri (pypi-uri "fastapi_cli" version))
14591 (sha256
14592 (base32 "0pk0ldmymc25ys4v6mslzd5vsjh9r69hfylh2ljl29pmarcvdcq2"))))
14593 (build-system pyproject-build-system)
14594 ;; Tests require fastapi, which depends on this package.
14595 (arguments (list #:tests? #false))
14596 (propagated-inputs (list python-rich-toolkit python-typer python-uvicorn))
14597 (native-inputs
14598 (list python-inline-snapshot python-pdm-backend python-pytest))
14599 (home-page "https://pypi.org/project/fastapi-cli/")
14600 (synopsis
14601 "Run and manage FastAPI apps from the command line with FastAPI CLI")
14602 (description
14603 "FastAPI CLI is a command line program fastapi that you can use to serve
14604your FastAPI app, manage your FastAPI project, and more.")
14605 (license license:expat)))
14606
14607(define-public python-pyactiveresource
14608 (package
14609 (name "python-pyactiveresource")
14610 (version "2.2.2")
14611 (source
14612 (origin
14613 (method git-fetch)
14614 (uri (git-reference
14615 (url "https://github.com/Shopify/pyactiveresource")
14616 (commit (string-append "v" version))))
14617 (file-name (git-file-name name version))
14618 (sha256
14619 (base32 "03pw6fwqjn09fbd6xmng0arlz75pp6ykw25c8d1snp4bxlzkrwqf"))))
14620 (build-system pyproject-build-system)
14621 ;; XXX: The package is fine, but the tests started failing on [email protected].
14622 ;; The package is not actively maintained, consider removing it once leaf.
14623 (arguments (list #:tests? #f))
14624 (native-inputs
14625 (list python-dateutil python-pytest python-pyyaml python-setuptools))
14626 (propagated-inputs (list python-six))
14627 (home-page "https://github.com/Shopify/pyactiveresource/")
14628 (synopsis "ActiveResource for Python")
14629 (description
14630 "This package provides a Python port of the ActiveResource project.
14631
14632Active Resource attempts to provide a coherent wrapper object-relational
14633mapping for REST web services. It follows the same philosophy as Active
14634Record, in that one of its prime aims is to reduce the amount of code needed
14635to map to these resources. This is made possible by relying on a number of
14636code- and protocol-based conventions that make it easy for Active Resource to
14637infer complex relations and structures.")
14638 (license license:expat)))
14639
14640(define-public python-shopifyapi
14641 (package
14642 (name "python-shopifyapi")
14643 (version "12.7.0")
14644 (source
14645 (origin
14646 (method git-fetch)
14647 (uri (git-reference
14648 (url "https://github.com/Shopify/shopify_python_api")
14649 (commit (string-append "v" version))))
14650 (file-name (git-file-name name version))
14651 (sha256
14652 (base32 "11zjm3aspb247wwlmfmq6wwk6lv3xyv3lqnd78sczjg9anba3779"))))
14653 (build-system pyproject-build-system)
14654 (arguments
14655 (list
14656 #:test-flags
14657 #~'("-k"
14658 ;; Disable a failing test.
14659 "not test_raises_if_aud_doesnt_match_api_key")))
14660 (native-inputs (list python-mock python-pytest python-setuptools))
14661 (propagated-inputs (list python-pyactiveresource python-pyjwt
14662 python-pyyaml python-six))
14663 (home-page "https://github.com/Shopify/shopify_python_api")
14664 (synopsis "Shopify API for Python")
14665 (description
14666 "This package provides the Shopify API for Python.
14667
14668The ShopifyAPI library allows Python developers to programmatically access the
14669admin section of stores using an ActiveResource-like interface similar the
14670ruby Shopify API gem. The library makes HTTP requests to Shopify in order to
14671list, create, update, or delete resources (e.g. Order, Product, Collection).")
14672 (license license:expat)))
14673
14674(define-public python-pybadges
14675 (package
14676 (name "python-pybadges")
14677 (version "3.0.1")
14678 (source (origin
14679 (method git-fetch)
14680 (uri (git-reference
14681 (url "https://github.com/google/pybadges")
14682 (commit version)))
14683 (file-name (git-file-name name version))
14684 (sha256
14685 "1zgb9idz7m3mzf8wvik0gwmyrxp753axqjv2pab326cr5myj1s4b")))
14686 (build-system pyproject-build-system)
14687 (arguments
14688 (list
14689 #:test-flags
14690 #~'("-k"
14691 ;; Disable network dependent tests.
14692 "not test_changes and not test_not_image_url and not test_http_url")))
14693 (propagated-inputs (list python-jinja2 python-requests python-setuptools))
14694 (native-inputs (list python-flask
14695 python-fonttools
14696 python-pillow
14697 python-pytest
14698 python-wheel
14699 python-xmldiff))
14700 (home-page "https://github.com/google/pybadges")
14701 (synopsis "Generate Github-style badges on the command-line")
14702 (description
14703 "This package provides @code{python-pybadges}: a library and command-line
14704tool for generating Github-style badges as SVG images.")
14705 (license license:asl2.0)))
14706
14707(define-public python-grid5000
14708 (package
14709 (name "python-grid5000")
14710 (version "1.2.4")
14711 (source (origin
14712 (method git-fetch)
14713 (uri (git-reference
14714 (url "https://gitlab.inria.fr/msimonin/python-grid5000")
14715 (commit (string-append "v" version))))
14716 (file-name (git-file-name name version))
14717 (sha256
14718 "0px5dr6kn7i5dyy4g42vqap1zpkc4hdvg7prrxdkkl57lfhz5w61")))
14719 (build-system pyproject-build-system)
14720 (arguments
14721 (list #:tests? #f)) ; No tests.
14722 (native-inputs (list python-setuptools))
14723 (propagated-inputs (list python-requests python-ipython python-pyyaml))
14724 (home-page "https://pypi.org/project/python-grid5000/")
14725 (synopsis "Grid5000 python client")
14726 (description
14727 "python-grid5000 is a python package wrapping the Grid5000 REST API.
14728You can use it as a library in your python project or you can explore the
14729Grid5000 resources interactively using the embedded shell.")
14730 (license license:gpl3+)))
14731
14732(define-public python-enoslib
14733 (package
14734 (name "python-enoslib")
14735 (version "8.0.1")
14736 (source
14737 (origin
14738 (method git-fetch)
14739 (uri (git-reference
14740 (url "https://gitlab.inria.fr/discovery/enoslib")
14741 (commit (string-append "v" version))))
14742 (file-name (git-file-name name version))
14743 (sha256 "0vs6b0bnlv95mzv0rjbxqwrhzkgjkn91gqipgwdf7y4ffpz8nybg")))
14744 (arguments
14745 (list
14746 #:test-flags
14747 #~(list "enoslib/tests/unit"
14748 "--ignore" "enoslib/tests/unit/infra/test_utils.py"
14749 "--ignore-glob" "enoslib/tests/unit/infra/enos_iotlab/*")
14750 #:phases
14751 #~(modify-phases %standard-phases
14752 (add-before 'check 'pre-check
14753 (lambda* (#:key tests? #:allow-other-keys)
14754 (when tests?
14755 ;; Otherwise Ansible fails to create its config directory.
14756 (setenv "HOME" "/tmp"))))
14757 ;; Disable the sanity check, which fails with the following error:
14758 ;;
14759 ;; ContextualVersionConflict(rich 12.4.1
14760 ;; (/gnu/store/...-python-rich-12.4.1/lib/python3.9/site-packages),
14761 ;; Requirement.parse('rich[jupyter]~=12.0.0'), {'enoslib'})
14762 ;;
14763 ;; The optional jupyter dependency of rich isn't critical for
14764 ;; EnOSlib to work
14765 (delete 'sanity-check))))
14766 (build-system pyproject-build-system)
14767 (native-inputs
14768 (list python-ddt
14769 python-freezegun
14770 python-pytest
14771 python-setuptools
14772 python-wheel))
14773 (propagated-inputs
14774 (list ansible
14775 python-cryptography
14776 python-grid5000
14777 python-jsonschema
14778 python-netaddr
14779 python-packaging
14780 python-requests
14781 python-rich
14782 python-sshtunnel
14783 python-pytz))
14784 (home-page "https://discovery.gitlabpages.inria.fr/enoslib/index.html")
14785 (synopsis "Deploy distributed testbeds on a variety of platforms")
14786 (description
14787 "EnOSlib is a library to build experimental frameworks on various
14788scientific testbeds. It lets you deploy networks of machines on actual
14789hardware on Grid'5000 or via OpenStack, to Vagrant, Chameleon, and more.")
14790 (license license:gpl3+)))
14791
14792(define-public python-pynetbox
14793 (package
14794 (name "python-pynetbox")
14795 (version "7.4.1")
14796 (source (origin
14797 (method url-fetch)
14798 (uri (pypi-uri "pynetbox" version))
14799 (sha256
14800 (base32
14801 "1hq0mqykwdsmcrj61fxxzdkpc7wnld4grhkcxy560ym79jbbb0iz"))))
14802 (build-system pyproject-build-system)
14803 (arguments
14804 (list
14805 #:test-flags
14806 ;; Integration tests depend on docker.
14807 '(list "--ignore=tests/integration")))
14808 (propagated-inputs (list python-packaging python-requests))
14809 (native-inputs
14810 (list python-pytest
14811 python-setuptools
14812 python-setuptools-scm
14813 python-wheel))
14814 (home-page "https://github.com/netbox-community/pynetbox")
14815 (synopsis "NetBox API client library")
14816 (description "Python module to query and edit data stored in a
14817@url{https://netbox.dev,NetBox} instance.")
14818 (license license:asl2.0)))
14819
14820(define-public python-waybackpack
14821 (package
14822 (name "python-waybackpack")
14823 (version "0.6.4")
14824 (source
14825 (origin
14826 (method url-fetch)
14827 (uri (pypi-uri "waybackpack" version))
14828 (sha256
14829 (base32 "16lcr2hv7gmp199fh3psrnv68j20pfxria8v6gchrpl1jqx9f923"))))
14830 (build-system pyproject-build-system)
14831 (arguments
14832 (list #:tests? #f)) ; would require network (and SSL certificates)
14833 (propagated-inputs (list python-requests))
14834 (native-inputs (list python-pytest python-setuptools python-wheel))
14835 (home-page "https://github.com/jsvine/waybackpack")
14836 (synopsis
14837 "Download the entire Wayback Machine archive for a given URL")
14838 (description
14839 "This package provides a library and a command-line tool that lets
14840you download the entire Wayback Machine archive for a given URL.")
14841 (license license:expat)))
14842
14843(define-public python-xyzservices
14844 (package
14845 (name "python-xyzservices")
14846 (version "2025.4.0")
14847 (source
14848 (origin
14849 (method url-fetch)
14850 (uri (pypi-uri "xyzservices" version))
14851 (sha256
14852 (base32 "1n096zg9bd4n6w6axcm16m9sxdkc6qy1mipva0scbyj86rqn9rvg"))))
14853 (build-system pyproject-build-system)
14854 (arguments
14855 (list
14856 #:test-flags #~(list "-m" "not request")))
14857 (native-inputs
14858 (list python-pytest
14859 python-mercantile
14860 python-requests
14861 python-setuptools
14862 python-setuptools-scm))
14863 (home-page "https://github.com/geopandas/xyzservices")
14864 (synopsis "Source of XYZ tiles providers")
14865 (description "@code{xyzservices} is a lightweight library providing a
14866repository of available XYZ services offering raster basemap tiles. The
14867repository is provided via Python API and as a compressed JSON file.")
14868 (license license:bsd-3)))
14869
14870(define-public s3cmd
14871 (package
14872 (name "s3cmd")
14873 (version "2.4.0")
14874 (source
14875 (origin
14876 (method git-fetch)
14877 (uri (git-reference
14878 (url "https://github.com/s3tools/s3cmd")
14879 (commit (string-append "v" version))))
14880 (file-name (git-file-name name version))
14881 (sha256
14882 (base32 "168c49d1v8r7azv66zz0w07jalf434c2jpg2xzads5jnxzmiy73k"))))
14883 (build-system pyproject-build-system)
14884 (arguments
14885 (list
14886 #:tests? #f ; XXX: Tests require network access.
14887 #:phases
14888 #~(modify-phases %standard-phases
14889 (add-after 'unpack 'hide-wrapping
14890 (lambda _
14891 (substitute* "S3/MultiPart.py"
14892 (("sys\\.argv\\[0\\]")
14893 "\"s3cmd\""))
14894 (substitute* "s3cmd"
14895 (("optparser\\.get_prog_name\\(\\)")
14896 "\"s3cmd\"")))))))
14897 (native-inputs (list python-setuptools))
14898 (inputs (list python-dateutil python-magic))
14899 (home-page "https://s3tools.org/s3cmd")
14900 (synopsis "Command line tool for S3-compatible storage services")
14901 (description
14902 "S3cmd is a command line tool for uploading, retrieving and managing data
14903in storage services that are compatible with the Amazon Simple Storage
14904Service (S3) protocol, including S3 itself. It supports rsync-like backup,
14905GnuPG encryption, and more. It also supports management of Amazon's
14906CloudFront content delivery network.")
14907 (license license:gpl2+)))