projects/guix·blob sysadmin-team · refs

14909 lines · 539.2 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2015 Eric Dvorsak <[email protected]>
3;;; Copyright © 2015-2025 Efraim Flashner <[email protected]>
4;;; Copyright © 2017 Christopher Baines <[email protected]>
5;;; Copyright © 2017 Muriithi Frederick Muriuki <[email protected]>
6;;; Copyright © 2016, 2017 Danny Milosavljevic <[email protected]>
7;;; Copyright © 2013, 2014, 2015, 2016, 2020, 2023 Andreas Enge <[email protected]>
8;;; Copyright © 2016-2023 Marius Bakke <[email protected]>
9;;; Copyright © 2015-2025 Ricardo Wurmus <[email protected]>
10;;; Copyright © 2017, 2021 Roel Janssen <[email protected]>
11;;; Copyright © 2016, 2017, 2020 Julien Lepiller <[email protected]>
12;;; Copyright © 2016, 2017 Nikita <[email protected]>
13;;; Copyright © 2014, 2017, 2021 Eric Bavier <[email protected]>
14;;; Copyright © 2014, 2015 Mark H Weaver <[email protected]>
15;;; Copyright © 2015 Cyril Roelandt <[email protected]>
16;;; Copyright © 2015, 2016, 2017, 2019 Leo Famulari <[email protected]>
17;;; Copyright © 2016, 2019, 2022, 2025 Hartmut Goebel <[email protected]>
18;;; Copyright © 2016–2021 Tobias Geerinckx-Rice <[email protected]>
19;;; Copyright © 2015, 2017 Ben Woodcroft <[email protected]>
20;;; Copyright © 2015, 2016 Christine Lemmer-Webber <[email protected]>
21;;; Copyright © 2017 Adriano Peluso <[email protected]>
22;;; Copyright © 2016 Dylan Jeffers <sapientech@[email protected]>
23;;; Copyright © 2016 David Craven <[email protected]>
24;;; Copyright © 2017 Oleg Pykhalov <[email protected]>
25;;; Copyright © 2015, 2016 David Thompson <[email protected]>
26;;; Copyright © 2017 Mark Meyer <[email protected]>
27;;; Copyright © 2018 Clément Lassieur <[email protected]>
28;;; Copyright © 2018 Tomáš Čech <[email protected]>
29;;; Copyright © 2018, 2019, 2021, 2024 Nicolas Goaziou <[email protected]>
30;;; Copyright © 2018 Mathieu Othacehe <[email protected]>
31;;; Copyright © 2018, 2020, 2021, 2022, 2023 Maxim Cournoyer <[email protected]>
32;;; Copyright © 2018 swedebugia <[email protected]>
33;;; Copyright © 2019 Vagrant Cascadian <[email protected]>
34;;; Copyright © 2019, 2023 Brendan Tildesley <[email protected]>
35;;; Copyright © 2019 Pierre Langlois <[email protected]>
36;;; Copyright © 2019, 2020 Tanguy Le Carrour <[email protected]>
37;;; Copyright © 2020 Jakub Kądziołka <[email protected]>
38;;; Copyright © 2020 Josh Marshall <[email protected]>
39;;; Copyright © 2020 Evan Straw <[email protected]>
40;;; Copyright © 2020 Alexandros Theodotou <[email protected]>
41;;; Copyright © 2020 Holger Peters <[email protected]>
42;;; Copyright © 2020 Noisytoot <[email protected]>
43;;; Copyright © 2020 Edouard Klein <[email protected]>
44;;; Copyright © 2020, 2021, 2022, 2023, 2025 Vinicius Monego <[email protected]>
45;;; Copyright © 2020 Konrad Hinsen <[email protected]>
46;;; Copyright © 2020, 2022, 2024 Giacomo Leidi <[email protected]>
47;;; Copyright © 2020 Raghav Gururajan <[email protected]>
48;;; Copyright © 2021 Ekaitz Zarraga <[email protected]>
49;;; Copyright © 2021 Greg Hogan <[email protected]>
50;;; Copyright © 2021 Maxime Devos <[email protected]>
51;;; Copyright © 2021 Pradana Aumars <[email protected]>
52;;; Copyright © 2021, 2022, 2024, 2026 Arun Isaac <[email protected]>
53;;; Copyright © 2021-2022, 2024-2025 jgart <[email protected]>
54;;; Copyright © 2021 Alice Brenon <[email protected]>
55;;; Copyright © 2021 Mekeor Melire <[email protected]>
56;;; Copyright © 2022 John Kehayias <[email protected]>
57;;; Copyright © 2022 Denis 'GNUtoo' Carikli <[email protected]>
58;;; Copyright © 2022, 2023, 2025 Felix Gruber <[email protected]>
59;;; Copyright © 2022 Peter Polidoro <[email protected]>
60;;; Copyright © 2022 Antero Mejr <[email protected]>
61;;; Copyright © 2022 Luis Henrique Gomes Higino <[email protected]>
62;;; Copyright © 2022, 2025 Nicolas Graves <[email protected]>
63;;; Copyright © 2022 Tomasz Jeneralczyk <[email protected]>
64;;; Copyright © 2022 msimonin <[email protected]>
65;;; Copyright © 2022 Michael Rohleder <[email protected]>
66;;; Copyright © 2022 Baptiste Strazzulla <[email protected]>
67;;; Copyright © 2023 dan <[email protected]>
68;;; Copyright © 2023 John Kehayias <[email protected]>
69;;; Copyright © 2023 Juliana Sims <[email protected]>
70;;; Copyright © 2023 Ivan Vilata-i-Balaguer <[email protected]>
71;;; Copyright © 2024 Fabio Natali <[email protected]>
72;;; Copyright © 2024 Steve George <[email protected]>
73;;; Copyright © 2024 Troy Figiel <[email protected]>
74;;; Copyright © 2024, 2025 Sharlatan Hellseher <[email protected]>
75;;; Copyright © 2024 normally_js <[email protected]>
76;;; Copyright © 2024 Markku Korkeala <[email protected]>
77;;; Copyright © 2024 Nguyễn Gia Phong <[email protected]>
78;;; Copyright © 2024 Zheng Junjie <[email protected]>
79;;; Copyright © 2024 Spencer King <[email protected]>
80;;; Copyright © 2024 Attila Lendvai <[email protected]>
81;;; Copyright © 2025 Daniel Ziltener <[email protected]>
82;;; Copyright © 2025 gemmaro <[email protected]>
83;;; Copyright © 2025 Sergio Pastor Pérez <[email protected]>
84;;; Copyright © 2025 Jake Forster <[email protected]>
85;;; Copyright © 2025 Janneke Nieuwenhuizen <[email protected]>
86;;; Copyright © 2025 Hugo Buddelmeijer <[email protected]>
87;;; Copyright © 2025-2026 Artur Wroblewski <[email protected]>
88;;; Copyright © 2025, 2026 Allan Adair <[email protected]>
89;;; Copyright © 2025 Aaron Covrig <[email protected]>
90;;; Copyright © 2026 Daniel Khodabakhsh <[email protected]>
91;;; Copyright © 2026 mst <[email protected]>
92;;; Copyright © 2026 Goran Vukoman <[email protected]>
93;;;
94;;; This file is part of GNU Guix.
95;;;
96;;; GNU Guix is free software; you can redistribute it and/or modify it
97;;; under the terms of the GNU General Public License as published by
98;;; the Free Software Foundation; either version 3 of the License, or (at
99;;; your option) any later version.
100;;;
101;;; GNU Guix is distributed in the hope that it will be useful, but
102;;; WITHOUT ANY WARRANTY; without even the implied warranty of
103;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
104;;; GNU General Public License for more details.
105;;;
106;;; You should have received a copy of the GNU General Public License
107;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
108
109(define-module (gnu packages python-web)
110 #:use-module (gnu packages admin)
111 #:use-module (gnu packages base)
112 #:use-module (gnu packages bash)
113 #:use-module (gnu packages build-tools)
114 #:use-module (gnu packages check)
115 #:use-module (gnu packages cmake)
116 #:use-module (gnu packages compression)
117 #:use-module (gnu packages curl)
118 #:use-module (gnu packages databases)
119 #:use-module (gnu packages django)
120 #:use-module (gnu packages dns)
121 #:use-module (gnu packages freedesktop)
122 #:use-module (gnu packages glib)
123 #:use-module (gnu packages gnupg)
124 #:use-module (gnu packages graphviz)
125 #:use-module (gnu packages groff)
126 #:use-module (gnu packages iso-codes)
127 #:use-module (gnu packages libevent)
128 #:use-module (gnu packages libffi)
129 #:use-module (gnu packages libidn)
130 #:use-module (gnu packages linux)
131 #:use-module (gnu packages lsof)
132 #:use-module (gnu packages node)
133 #:use-module (gnu packages nss)
134 #:use-module (gnu packages openstack)
135 #:use-module (gnu packages pcre)
136 #:use-module (gnu packages pkg-config)
137 #:use-module (gnu packages protobuf)
138 #:use-module (gnu packages python)
139 #:use-module (gnu packages python-build)
140 #:use-module (gnu packages python-check)
141 #:use-module (gnu packages python-compression)
142 #:use-module (gnu packages python-crypto)
143 #:use-module (gnu packages python-science)
144 #:use-module (gnu packages python-xyz)
145 #:use-module (gnu packages qt)
146 #:use-module (gnu packages rdf)
147 #:use-module (gnu packages rpc)
148 #:use-module (gnu packages rust)
149 #:use-module (gnu packages serialization)
150 #:use-module (gnu packages sphinx)
151 #:use-module (gnu packages texinfo)
152 #:use-module (gnu packages time)
153 #:use-module (gnu packages tls)
154 #:use-module (gnu packages version-control)
155 #:use-module (gnu packages web)
156 #:use-module (gnu packages xml)
157 #:use-module (gnu packages)
158 #:use-module (guix build-system cargo)
159 #:use-module (guix build-system copy)
160 #:use-module (guix build-system pyproject)
161 #:use-module (guix deprecation)
162 #:use-module (guix download)
163 #:use-module (guix gexp)
164 #:use-module (guix git-download)
165 #:use-module ((guix licenses) #:prefix license:)
166 #:use-module (guix packages)
167 #:use-module (guix utils)
168 #:use-module (srfi srfi-1))
169
170(define-public awscli
171 (package
172 ;; Note: updating awscli typically requires updating botocore as well.
173 (name "awscli")
174 (version "1.43.11")
175 (source
176 (origin
177 (method git-fetch)
178 (uri (git-reference
179 (url "https://github.com/aws/aws-cli")
180 (commit version)))
181 (file-name (git-file-name name version))
182 (sha256
183 (base32 "1idvcnc6jw7xr1jqpza472ksj3i2kyk0bv8wr7acz3xnba1v8xmi"))))
184 (build-system pyproject-build-system)
185 (arguments
186 (list
187 ;; tests: 2715 passed, 32 warnings
188 #:test-flags
189 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
190 ;; Complete test suite is huge and compute hungry, run just unit
191 ;; tests.
192 "--ignore=tests/dependencies"
193 "--ignore=tests/functional"
194 "--ignore=tests/integration"
195 ;; TypeError: 'Mock' object is not subscriptable.
196 "-k" "not test_no_groff_or_mandoc_exists")
197 #:phases
198 #~(modify-phases %standard-phases
199 (add-after 'unpack 'fix-reference-to-groff
200 (lambda _
201 ;; XXX: Consider to use wrap-program instead, it tries to parse
202 ;; the PATH.
203 (substitute* "awscli/help.py"
204 (("if self._exists_on_path\\('groff'\\):") "if 'groff':")
205 (("raise ExecutableNotFoundError\\('groff'\\)") "")
206 (("cmdline = \\['groff'")
207 (format #f "cmdline = ['~a/bin/groff'"
208 #$(this-package-input "groff-minimal"))))))
209 (add-before 'check 'set-environment
210 (lambda _
211 ;; PermissionError: [Errno 13] Permission denied:
212 ;; '/homeless-shelter'
213 (setenv "HOME" "/tmp"))))))
214 (native-inputs
215 (list python-pytest
216 python-pytest-xdist
217 python-setuptools
218 python-wheel))
219 (inputs
220 (list groff-minimal
221 python-botocore
222 python-colorama
223 python-docutils-0.19
224 python-pyyaml
225 python-rsa-for-awscli-1
226 python-s3transfer))
227 (home-page "https://aws.amazon.com/cli/")
228 (synopsis "Command line client for AWS")
229 (description
230 "AWS CLI provides a unified command line interface to the Amazon Web
231Services (AWS) API.")
232 (license license:asl2.0)))
233
234(define-public awscli-2
235 (package
236 (inherit awscli)
237 ;; Note: updating awscli-2 typically requires updating python-awscrt.
238 (name "awscli")
239 ;; Upstream practices a very rapid (1h-1d) release cycles try to select
240 ;; any fresh one compatible with current state of dependencies in Guix.
241 (version "2.36.20")
242 (source
243 (origin
244 (method git-fetch)
245 (uri (git-reference
246 (url "https://github.com/aws/aws-cli")
247 (commit version)))
248 (file-name (git-file-name name version))
249 (sha256
250 (base32
251 "1hv2zs5pm86b5bd66j2kfb9r8gz13cqnf8x5hmfv0ddszf9vnfgp"))))
252 (build-system pyproject-build-system)
253 (arguments
254 (list
255 ;; When updating and checking locally be very patient as build phase may
256 ;; hang for 6-8 minutes but eventually passes through.
257 ;;
258 ;; tests: 4189 passed, 1 skipped, 2 warnings
259 #:test-flags
260 '(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
261 ;; Full test suite contains more than 70k tests; ignore network
262 ;; dependent, slow and compute intense tests, keep just unit
263 ;; tests.
264 "--ignore=tests/backends"
265 "--ignore=tests/dependencies"
266 "--ignore=tests/functional"
267 "--ignore=tests/integration"
268 "--ignore=tests/unit/botocore"
269 ;; Flaky, something to do with PATH disappearing from os.environ?
270 ;; Passes when run on its own, so maybe something else is
271 ;; modifying this during the test run.
272 "--ignore=tests/unit/customizations/emr/test_emr_utils.py"
273 ;; TypeError: 'Mock' object is not subscriptable
274 "-k" "not test_no_groff_or_mandoc_exists")
275 #:phases
276 #~(modify-phases %standard-phases
277 (add-after 'unpack 'ignore-deprecations
278 (lambda _
279 (substitute* "pyproject.toml"
280 (("\"error::") "\"ignore::"))))
281 (add-after 'unpack 'fix-reference-to-groff
282 (lambda* (#:key inputs #:allow-other-keys)
283 (substitute* "awscli/help.py"
284 (("if self._exists_on_path\\('groff'\\):") "if True:")
285 (("cmdline = \\['groff'")
286 (string-append "cmdline = ['"
287 (search-input-file inputs "bin/groff")
288 "'")))))
289 (add-before 'check 'pre-check
290 (lambda _ (setenv "HOME" "/tmp"))))))
291 (inputs
292 (list groff
293 ;; less
294 nss-certs-for-test
295 python-awscrt
296 python-colorama
297 python-dateutil
298 python-distro
299 python-docutils
300 python-jmespath
301 python-prompt-toolkit
302 python-ruamel.yaml
303 python-ruamel.yaml.clib
304 python-urllib3
305 python-wcwidth))
306 (native-inputs
307 (list python-flit-core
308 python-pytest
309 python-pytest-xdist))))
310
311;; XXX: This project missed maintainer upstream, see
312;; <https://github.com/joeyespo/grip/issues/387>.
313;; Consider to remove if it keeps failing to build.
314(define-public grip
315 (package
316 (name "grip")
317 (version "4.6.1")
318 (source
319 (origin
320 (method git-fetch)
321 (uri (git-reference
322 (url "https://github.com/joeyespo/grip")
323 (commit (string-append "v" version))))
324 (file-name (git-file-name name version))
325 (sha256
326 (base32 "0vhimd99zw7s1fihwr6yfij6ywahv9gdrfcf5qljvzh75mvzcwh8"))))
327 (build-system pyproject-build-system)
328 (arguments
329 (list
330 #:test-flags
331 ;; All tests fail requiring network access, ignore the whole file.
332 #~(list "--ignore=tests/test_github.py")
333 #:phases
334 #~(modify-phases %standard-phases
335 ;; This fixes the removal of `charset` attribute of requests from
336 ;; Werkzeug 2.3.0.
337 ;; Fixed in grip's commit <2784eb2c1515f1cdb1554d049d48b3bff0f42085>.
338 (add-after 'unpack 'fix-response-encoding
339 (lambda _
340 (substitute* "grip/app.py"
341 (("response.charset")
342 "getattr(response, 'charset', 'utf-8')")))))))
343 (native-inputs
344 (list nss-certs-for-test
345 python-pytest
346 python-responses
347 python-setuptools
348 python-wheel))
349 (propagated-inputs
350 (list python-docopt
351 python-flask
352 python-markdown
353 python-path-and-address
354 python-pygments
355 python-requests))
356 (home-page "https://github.com/joeyespo/grip")
357 (synopsis "Preview Markdown files using the GitHub API")
358 (description
359 "Grip is a command-line server application written in Python that uses
360the GitHub Markdown API to render a local Markdown file. The styles and
361rendering come directly from GitHub, so you'll know exactly how it will
362appear. Changes you make to the file will be instantly reflected in the
363browser without requiring a page refresh.")
364 (license license:expat)))
365
366(define-public gunicorn
367 (package
368 (name "gunicorn")
369 (version "25.3.0")
370 (source
371 (origin
372 (method url-fetch)
373 (uri (pypi-uri "gunicorn" version))
374 (sha256
375 (base32
376 "12g85w735s4dszjfidi4vh786rfxsa5rd60il0fcvxknkwpinkpp"))))
377 (outputs '("out" "doc"))
378 (build-system pyproject-build-system)
379 (arguments
380 `(#:test-flags
381 ;; Disable the geventlet tests because eventlet uses dnspython, which
382 ;; does not work in the build container due to lack of /etc/resolv.conf
383 '("--ignore=tests/workers/test_geventlet.py")
384 #:phases (modify-phases %standard-phases
385 ;; XXX: The wrap phase includes native inputs on PYTHONPATH, (see
386 ;; <https://bugs.gnu.org/25235>), leading to an inflated closure
387 ;; size. Override it to only add the essential entries.
388 (replace 'wrap
389 (lambda* (#:key native-inputs inputs outputs
390 #:allow-other-keys)
391 (let* ((out (assoc-ref outputs "out"))
392 (python (assoc-ref (or native-inputs inputs)
393 "python"))
394 (sitedir (string-append "/lib/python"
395 (python-version python)
396 "/site-packages")))
397 (wrap-program (string-append out "/bin/gunicorn")
398 `("PYTHONPATH" ":" prefix
399 ,(map (lambda (output)
400 (string-append output sitedir))
401 (list python out))))))))))
402 (inputs (list bash-minimal))
403 (native-inputs
404 (list binutils ;for ctypes.util.find_library()
405 python-eventlet
406 python-gevent
407 python-h2
408 python-httpx
409 python-pytest
410 python-pytest-asyncio
411 python-setuptools
412 python-uvloop))
413 (propagated-inputs
414 (list python-packaging
415 python-setuptools
416 python-wheel))
417 (home-page "https://gunicorn.org/")
418 (synopsis "Python WSGI HTTP Server for UNIX")
419 (description
420 "Gunicorn ‘Green Unicorn’ is a Python WSGI HTTP
421Server for UNIX. It’s a pre-fork worker model ported from Ruby’s
422Unicorn project. The Gunicorn server is broadly compatible with
423various web frameworks, simply implemented, light on server resources,
424and fairly speedy.")
425 (license license:expat)))
426
427;; break cyclic dependency for python-aiohttp, which depends on gunicorn for
428;; its tests
429(define-public gunicorn-bootstrap
430 (package
431 (inherit gunicorn)
432 (name "gunicorn")
433 (arguments `(#:tests? #f))
434 (properties '((hidden? . #t)))
435 (native-inputs `())))
436
437(define-public oauth2ms
438 (let ((commit "a1ef0cabfdea57e9309095954b90134604e21c08")
439 (revision "0"))
440 (package
441 (name "oauth2ms")
442 (version (git-version "0.0.0" revision commit))
443 (source (origin
444 (method git-fetch)
445 (uri (git-reference
446 (url "https://github.com/harishkrupo/oauth2ms")
447 (commit commit)))
448 (file-name (git-file-name name version))
449 (sha256
450 (base32
451 "0dqi6n4npdrvb42r672n4sl1jl8z5lsk554fwiiihpj0faa9dx64"))))
452 (build-system copy-build-system)
453 (arguments
454 (list #:install-plan #~`(("oauth2ms" "bin/oauth2ms")
455 ("." #$(string-append "share/doc/" name "-"
456 version "/")
457 #:include-regexp ("\\.org$")))
458 #:phases #~(modify-phases %standard-phases
459 (add-after 'install 'wrap-pythonpath
460 (lambda* (#:key inputs outputs #:allow-other-keys)
461 (let ((path (getenv "GUIX_PYTHONPATH")))
462 (wrap-program (string-append #$output
463 "/bin/oauth2ms")
464 `("GUIX_PYTHONPATH" ":" prefix
465 (,path)))))))))
466 (inputs (list bash-minimal python python-gnupg python-msal python-pyxdg))
467 (home-page "https://github.com/harishkrupo/oauth2ms")
468 (synopsis "XOAUTH2 compatible Microsoft Office 365 token fetcher")
469 (description
470 "Oauth2ms can be used to fetch OAuth 2.0 tokens from the Microsoft Identity
471endpoint. Additionally, it can encode the token in the XOAUTH2 format to be
472used as authentication in IMAP mail servers.")
473 (license license:asl2.0))))
474
475(define-public python-a2wsgi
476 (package
477 (name "python-a2wsgi")
478 (version "1.10.7")
479 (source (origin
480 (method url-fetch)
481 (uri (pypi-uri "a2wsgi" version))
482 (sha256
483 (base32
484 "13ikyfmkx7hlrbg5rpcdm6kw4wcsy00giil3f72hpb6sw7vjyinf"))))
485 (build-system pyproject-build-system)
486 (arguments
487 (list
488 #:test-flags
489 #~(list "-k" (string-join
490 (list "not test_starlette_stream_response"
491 "test_starlette_base_http_middleware"
492 "test_baize_stream_response"
493 ;; Fails because of harmless whitespace differences.
494 "test_wsgi_post")
495 " and not "))
496 #:build-backend "pdm.backend"))
497 (native-inputs
498 (list python-pdm-backend
499 python-pytest
500 ;; python-baize ; not packed yet
501 python-httpx-bootstrap
502 ;; Cycle: python-a2wsgi->python-uvicorn->
503 ;; python-httpx->python-starlette->python-a2wsgi
504 ;; python-starlette
505 python-pytest-asyncio))
506 (home-page "https://github.com/abersheeran/a2wsgi")
507 (synopsis "Convert WSGI to ASGI or vice versa")
508 (description
509 "This program converts a WSGI program to an ASGI program or the other
510way around. It depends only on the Python standard library.")
511 (license license:asl2.0)))
512
513(define-public python-aioboto3
514 (package
515 (name "python-aioboto3")
516 (version "15.5.0")
517 (source
518 (origin
519 (method git-fetch)
520 (uri (git-reference
521 (url "https://github.com/terricain/aioboto3")
522 (commit (string-append "v" version))))
523 (file-name (git-file-name name version))
524 (sha256
525 (base32 "05644x17f9sl8mv9bp8l0rjcmw5x2ssyd5z1v3xmgcspk5qs6qn8"))))
526 (build-system pyproject-build-system)
527 (arguments
528 (list
529 #:tests? #f ;XXX: all tests faild
530 #:phases
531 #~(modify-phases %standard-phases
532 (add-after 'unpack 'relax-requirements
533 (lambda _
534 (substitute* "pyproject.toml"
535 (("aiobotocore\\[boto3\\]==2.25.1")
536 "aiobotocore >= 2.25.1")))))))
537 (native-inputs
538 (list python-setuptools
539 python-setuptools-scm))
540 (propagated-inputs
541 (list python-aiobotocore
542 python-aiofiles
543 ;; [optional]
544 python-boto3
545 python-cryptography))
546 (home-page "https://github.com/terricain/aioboto3")
547 (synopsis "Async boto3 wrapper")
548 (description
549 "This package is mostly just a wrapper combining the great work of boto3
550and aiobotocore.")
551 (license license:asl2.0)))
552
553(define-public python-aiobotocore
554 (package
555 (name "python-aiobotocore")
556 (version "3.0.0")
557 (source
558 (origin
559 (method url-fetch)
560 (uri (pypi-uri "aiobotocore" version))
561 (sha256
562 (base32 "0bcmnbm30hwaks8l895j8xy08cil0dpjcfpidg2qjawbs4a9s0ra"))))
563 (build-system pyproject-build-system)
564 (arguments
565 ;; TODO: Tests need some setupt, see Makefile.
566 (list #:tests? #f))
567 (native-inputs
568 (list python-setuptools))
569 (propagated-inputs
570 (list python-aiohttp
571 python-aioitertools
572 python-botocore
573 python-dateutil
574 python-jmespath
575 python-multidict
576 python-typing-extensions
577 python-wrapt))
578 (home-page "https://github.com/aio-libs/aiobotocore")
579 (synopsis "Async client for AWS services using botocore and aiohttp")
580 (description "This package provides an async client for Amazon services
581using botocore and aiohttp/asyncio. This library is a mostly full featured
582asynchronous version of botocore.")
583 (license license:asl2.0)))
584
585(define-public python-aiocoap
586 (package
587 (name "python-aiocoap")
588 (version "0.4.14")
589 (source
590 (origin
591 (method git-fetch) ; tests miss data and module files in PyPI release
592 (uri (git-reference
593 (url "https://github.com/chrysn/aiocoap")
594 (commit version)))
595 (file-name (git-file-name name version))
596 (sha256
597 (base32 "0yxvcg5llgmccv0a9hfm4nr7zxv9al4wh257m95a06g5c52v6hxz"))))
598 (build-system pyproject-build-system)
599 (arguments
600 (list
601 #:test-flags
602 ;; OSError: [Errno 98] error while attempting to bind on address ('::1',
603 ;; 8683, 0, 0): address already in use
604 #~(list "--ignore=tests/test_server.py"
605 "-k" (string-join
606 ;; TypeError: can only concatenate str (not "NoneType") to
607 ;; str
608 (list "not test_options"
609 "test_uri_parser"
610 "test_help" ; returned non-zero exit status 1.
611 "test_routing" ; address already in use
612 "test_tls")
613 " and not "))))
614 (native-inputs
615 (list openssl ;for tests/test_tls.py
616 python-pytest
617 python-setuptools
618 python-wheel))
619 (propagated-inputs
620 (list ;; python-cbor-diag
621 python-cbor2
622 python-cryptography
623 ;; python-dtlssocket
624 python-filelock
625 ;; python-ge25519
626 python-pygments
627 python-termcolor
628 python-websockets))
629 (home-page "https://github.com/chrysn/aiocoap")
630 (synopsis "Python CoAP library")
631 (description
632 "The aiocoap package is an implementation of @url{@acronym{CoAP, the
633Constrained Application Protocol}, http://coap.space/}. It facilitates
634writing applications that talk to network enabled embedded
635@acronym{IoT,Internet of Things} devices.")
636 (license license:expat)))
637
638(define-public python-aiodns
639 (package
640 (name "python-aiodns")
641 (version "3.5.0")
642 (source
643 (origin
644 (method git-fetch)
645 (uri (git-reference
646 (url "https://github.com/saghul/aiodns")
647 (commit (string-append "v" version))))
648 (file-name (git-file-name name version))
649 (sha256
650 (base32 "1as7l48962dpk3r4zdsifj761dks5nyr35hxs7m8crvkyb1dg9m9"))))
651 (build-system pyproject-build-system)
652 (arguments
653 (list
654 #:tests? #f)) ;tests require internet access
655 (native-inputs
656 (list python-pytest python-pytest-asyncio python-setuptools))
657 (propagated-inputs (list python-pycares))
658 (home-page "https://github.com/saghul/aiodns")
659 (synopsis "Simple DNS resolver for asyncio")
660 (description
661 "@code{aiodns} provides a simple way for doing asynchronous DNS
662resolutions with a synchronous looking interface by using
663@url{https://github.com/saghul/pycares,pycares}.")
664 (license license:expat)))
665
666(define-public python-aioftp
667 (package
668 (name "python-aioftp")
669 (version "0.27.2")
670 (source
671 (origin
672 (method git-fetch)
673 (uri (git-reference
674 (url "https://github.com/aio-libs/aioftp")
675 (commit version)))
676 (file-name (git-file-name name version))
677 (sha256
678 (base32 "1lshyac5zk1w4x7ygkim3726f8gbkvpvlyiqkn9cs6qjxhxn5bxc"))))
679 (build-system pyproject-build-system)
680 (arguments
681 (list
682 #:phases
683 #~(modify-phases %standard-phases
684 (add-after 'unpack 'use-default-asyncio
685 ;; async_timeout is deprecated, upstream recommends to use
686 ;; asyncio, available since Python 3.11.
687 (lambda _
688 (substitute* "tests/conftest.py"
689 (("async_timeout") "asyncio")))))))
690 (native-inputs
691 (list python-pytest
692 python-pytest-mock
693 python-pytest-asyncio
694 python-setuptools
695 python-siosocks
696 python-trustme))
697 (home-page "https://aioftp.readthedocs.io/")
698 (synopsis "FTP client/server for asyncio in Python")
699 (description
700 "FTP client and server for asyncio (Python 3) Library implementing FTP
701protocol, both client and server for Python asyncio module.
702
703 Supported commands as client: USER, PASS, ACCT, PWD, CWD, CDUP, MKD, RMD,
704 MLSD, MLST, RNFR, RNTO, DELE, STOR, APPE, RETR, TYPE, PASV, ABOR, QUIT,
705 REST, LIST (as fallback).
706
707 Supported commands as server: USER, PASS, QUIT, PWD, CWD, CDUP, MKD, RMD,
708 MLSD, LIST (non-standard), MLST, RNFR, RNTO, DELE, STOR, RETR,
709 TYPE (\"I\" and \"A\"), PASV, ABOR, APPE, REST.")
710 (license license:asl2.0)))
711
712(define-public python-aiohappyeyeballs
713 (package
714 (name "python-aiohappyeyeballs")
715 (properties '((commit . "cc53cf8a1d31f7b460a0114214aac66956f0e2ed")
716 (revision . "0")))
717 (version (git-version "2.6.1"
718 (assoc-ref properties 'revision)
719 (assoc-ref properties 'commit)))
720 (source
721 (origin
722 (method git-fetch)
723 (uri (git-reference
724 (url "https://github.com/aio-libs/aiohappyeyeballs")
725 (commit (assoc-ref properties 'commit))))
726 (file-name (git-file-name name version))
727 (sha256
728 (base32 "0nc723f4sxryg5h9z8paysmy9dnqw2jy4srxp9axrxkv9qrawa7n"))))
729 (build-system pyproject-build-system)
730 (native-inputs
731 (list python-poetry-core
732 python-pytest
733 python-pytest-asyncio))
734 (home-page "https://github.com/aio-libs/aiohappyeyeballs")
735 (synopsis "Happy Eyeballs for asyncio")
736 (description "This library exists to allow connecting with Happy
737Eyeballs (RFC 8305) when you already have a list of @code{addrinfo} and not a
738DNS name.")
739 (license license:psfl)))
740
741(define-public python-aiohttp
742 (package
743 (name "python-aiohttp")
744 (version "3.13.5")
745 (source
746 (origin
747 (method git-fetch)
748 (uri (git-reference
749 (url "https://github.com/aio-libs/aiohttp/")
750 (commit (string-append "v" version))))
751 (file-name (git-file-name name version))
752 (sha256
753 (base32 "0l9jcmhqd2v97gy1bxvimwi3aajxhxqn6jkzzgg7cf42mpyza0vc"))
754 (snippet
755 #~(begin
756 (use-modules ((guix build utils)))
757 (delete-file-recursively "vendor")))))
758 (build-system pyproject-build-system)
759 (arguments
760 (list
761 ;; tests: 4003 passed, 80 skipped, 31 xfailed, 2 subtests passed
762 #:test-flags
763 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
764 ;; This tests requires the 'proxy.py' module, not yet packaged.
765 "--ignore=tests/test_proxy_functional.py"
766 ;; No benchamrks.
767 "--ignore-glob=tests/test_benchmarks_*"
768 "-k"
769 (string-join
770 ;; Combinatin of tests failing with similar errors:
771 ;; - Cannot connect to host example.com:443 ssl:default [Could
772 ;; not contact DNS servers].
773 ;; - aiohttp.http_exceptions.ContentEncodingError: 400.
774 ;; - Can not decode content-encoding: br
775 (list "not test_add_static_path_resolution"
776 "test_empty_header_name"
777 "test_http_payload_brotli"
778 "test_http_payload_zstandard"
779 "test_invalid_header_spacing"
780 "test_payload_decompress_size_limit_brotli"
781 "test_reject_obsolete_line_folding"
782 "test_response_with_precompressed_body_brotli"
783 "test_static_file_custom_content_type_compress"
784 "test_static_file_with_encoding_and_enable_compression"
785 "test_tcp_connector_ssl_shutdown_timeout_nonzero_passed"
786 "test_tcp_connector_ssl_shutdown_timeout_passed_to_"
787 "test_tcp_connector_ssl_shutdown_timeout_zero_not_")
788 " and not "))
789 #:phases
790 #~(modify-phases %standard-phases
791 (add-after 'unpack 'set-libllhtp-pkgconfig
792 (lambda _
793 ;; pkg-config can't find the libllhttp library.
794 (if (getenv "PKG_CONFIG_PATH")
795 (setenv "PKG_CONFIG_PATH"
796 (string-append
797 #$(this-package-input "llhttp") "/lib/pkgconfig"
798 (getenv "PKG_CONFIG_PATH")))
799 (setenv "PKG_CONFIG_PATH"
800 (string-append
801 #$(this-package-input "llhttp") "/lib/pkgconfig")))))
802 (add-after 'unpack 'fix-pytest-config
803 (lambda _
804 (substitute* "setup.cfg"
805 (("--numprocesses=auto") "")
806 (("-p pytest_cov") "")
807 (("--cov=aiohttp") "")
808 (("--cov=tests/") ""))))
809 (add-after 'unpack 'fix-tests
810 (lambda _
811 ;; Make sure the timestamp of this file is > 1990, because a few
812 ;; tests like test_static_file_if_modified_since_past_date
813 ;; depend on it.
814 (let ((late-90s (* 60 60 24 365 30)))
815 (utime "tests/data.unknown_mime_type" late-90s late-90s))))
816 (add-before 'build 'pre-build
817 (lambda _
818 (setenv "USE_SYSTEM_DEPS" "true")
819 ;; Help setup.py to determine project's root.
820 (with-output-to-file ".git"
821 (lambda () (display "")))
822 (substitute* "Makefile"
823 (("cythonize: .install-cython") "cythonize:"))
824 (invoke "make" "cythonize")))
825 (add-before 'check 'remove-local-source
826 (lambda _
827 (delete-file-recursively "aiohttp"))))))
828 (native-inputs
829 (list gunicorn-bootstrap
830 python-freezegun
831 python-cython
832 python-pkgconfig
833 ;; python-proxy-py ;not packaged yet in Guix
834 python-pytest
835 python-pytest-mock
836 python-pytest-xdist
837 python-re-assert
838 python-setuptools
839 python-zlib-ng))
840 (inputs
841 (list llhttp))
842 (propagated-inputs
843 (list python-aiohappyeyeballs
844 python-aiosignal
845 python-attrs
846 python-frozenlist
847 python-multidict
848 python-propcache
849 python-yarl
850 ;; [optional]
851 python-aiodns
852 python-backports-zstd ;Python version < 3.14
853 python-brotli))
854 (home-page "https://github.com/aio-libs/aiohttp/")
855 (synopsis "Async HTTP client/server framework (asyncio)")
856 (description "@code{aiohttp} is an asynchronous HTTP client/server
857framework.
858
859Its main features are:
860@itemize
861@item Supports both client and server side of HTTP protocol.
862@item Supports both client and server Web-Sockets out-of-the-box without the
863Callback Hell.
864@item Web-server has middlewares and pluggable routing.
865@end itemize")
866 (license license:asl2.0)))
867
868(define-public python-aiohttp-client-cache
869 (package
870 (name "python-aiohttp-client-cache")
871 (version "0.14.3")
872 (source
873 (origin
874 (method git-fetch)
875 (uri (git-reference
876 (url "https://github.com/requests-cache/aiohttp-client-cache")
877 (commit (string-append "v" version))))
878 (file-name (git-file-name name version))
879 (sha256
880 (base32
881 "13xbmjjvcbzh3yh5z92mc0gwicwfjfq2av5jbqv09sbfzhggs92y"))))
882 (build-system pyproject-build-system)
883 (arguments
884 (list
885 #:test-flags #~(list "--ignore=test/integration/")))
886 (native-inputs
887 (list python-brotli
888 python-faker
889 python-hatchling
890 python-pytest
891 python-pytest-aiohttp
892 python-pytest-asyncio
893 python-types-aiofiles))
894 (propagated-inputs
895 (list python-aiohttp
896 python-attrs
897 python-itsdangerous
898 python-url-normalize
899 ;; [optional]
900 python-aioboto3
901 python-aiobotocore
902 python-aiofiles
903 python-aiosqlite
904 python-pymongo
905 python-redis))
906 (home-page "https://github.com/requests-cache/aiohttp-client-cache")
907 (synopsis "Persistent cache for aiohttp requests")
908 (description
909 "This package is an asynchronous persistent caching library specifically
910designed for @samp{aiohttp} requests in Python. With support for various
911storage backends, it offers flexibility in how and where the cache is stored.
912Please note that MongoDB and DynamoDB backends are not currently supported due
913to the absence of the @samp{motor} and @samp{aioboto3} package dependencies.")
914 (license license:expat)))
915
916(define-public python-aiohttp-cors
917 (package
918 (name "python-aiohttp-cors")
919 (version "0.8.1")
920 (source
921 (origin
922 (method url-fetch)
923 (uri (pypi-uri "aiohttp_cors" version))
924 (sha256
925 (base32 "00qlzc2y65bkl1a5f5v83mmjlrhzmx3a2ngq2pm3jjdnhk5zkb6c"))))
926 (build-system pyproject-build-system)
927 (arguments
928 (list
929 #:tests? #f)) ; network access is required to run tests
930 (native-inputs
931 (list python-setuptools
932 python-wheel))
933 (propagated-inputs
934 (list python-aiohttp))
935 (home-page "https://github.com/aio-libs/aiohttp-cors")
936 (synopsis "CORS support for aiohttp")
937 (description
938 "This library implements @acronym{CORS, Cross Origin Resource Sharing}
939support for aiohttp asyncio-powered asynchronous HTTP server.")
940 (license license:asl2.0)))
941
942(define-public python-aiohttp-oauthlib
943 (package
944 (name "python-aiohttp-oauthlib")
945 (version "0.1.0")
946 (source
947 (origin
948 (method url-fetch)
949 (uri (pypi-uri "aiohttp-oauthlib" version))
950 (sha256
951 (base32 "1dwk0gby27xm7384qyz2p7zw9dqhjx7m8fhfk172w36xknjx2g49"))))
952 (build-system pyproject-build-system)
953 (arguments (list #:tests? #f)) ; none included
954 (propagated-inputs (list python-aiohttp python-oauthlib))
955 (native-inputs (list python-setuptools python-setuptools-scm))
956 (home-page "https://git.sr.ht/~whynothugo/aiohttp-oauthlib")
957 (synopsis "OAuthlib authentication support for aiohttp")
958 (description "Aiohttp-oauthlib uses the Python aiohttp and OAuthlib libraries to
959provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
960 (license license:isc)))
961
962(define-public python-aiohttp-retry
963 (package
964 (name "python-aiohttp-retry")
965 (version "2.9.1")
966 (source
967 (origin
968 (method git-fetch)
969 (uri (git-reference
970 (url "https://github.com/inyutin/aiohttp_retry")
971 (commit (string-append "v" version))))
972 (file-name (git-file-name name version))
973 (sha256
974 (base32 "0r5lxnxc4s8js7l86pfmdxl455v9lg3m41nz6m1xg4kwwf6j0bpi"))))
975 (build-system pyproject-build-system)
976 (native-inputs
977 (list python-pytest
978 python-pytest-aiohttp
979 python-setuptools))
980 (propagated-inputs
981 (list python-aiohttp))
982 (home-page "https://github.com/inyutin/aiohttp_retry")
983 (synopsis "Simple retry client for aiohttp")
984 (description
985 "This package implements @code{RetryClient} for @code{aiohttp} to retry
986connection to provided endpoint with timeouts logic or use:
987
988@itemize
989@item @code{ExponentialRetry} with exponential backoff
990@item @code{RandomRetry} for random backoff
991@item @code{ListRetry} with backoff you predefine by list
992@item @code{FibonacciRetry} with backoff that looks like fibonacci sequence
993@item @code{JitterRetry} exponential retry with a bit of randomness
994@end itemize")
995 (license license:expat)))
996
997(define-public python-aiohttp-socks
998 (package
999 (name "python-aiohttp-socks")
1000 (version "0.10.1")
1001 (source
1002 (origin
1003 (method url-fetch)
1004 (uri (pypi-uri "aiohttp_socks" version))
1005 (sha256
1006 (base32
1007 "0s70jpcr9wc8ld2v1w309cz7r8mm2bipf6zbkdqqaa0z0pwf3wj9"))))
1008 (build-system pyproject-build-system)
1009 (arguments (list #:tests? #false)) ;none included
1010 (propagated-inputs
1011 (list python-aiohttp python-socks))
1012 (native-inputs (list python-setuptools python-wheel))
1013 (home-page "https://github.com/romis2012/aiohttp-socks")
1014 (synopsis "SOCKS proxy connector for aiohttp")
1015 (description "This package provides a SOCKS proxy connector for
1016aiohttp. It supports SOCKS4(a) and SOCKS5.")
1017 (license license:asl2.0)))
1018
1019(define-public python-aioitertools
1020 (package
1021 (name "python-aioitertools")
1022 (version "0.12.0")
1023 (source
1024 (origin
1025 (method url-fetch)
1026 (uri (pypi-uri "aioitertools" version))
1027 (sha256
1028 (base32 "0syxv2r90d6410hc68jxhk610pdgx19n1n5rc7shaxxv9xdhbaf2"))))
1029 (build-system pyproject-build-system)
1030 (arguments
1031 (list #:test-backend #~'custom
1032 #:test-flags #~(list "-m" "aioitertools.tests")))
1033 (native-inputs
1034 (list python-flit-core))
1035 (home-page "https://pypi.org/project/aioitertools/")
1036 (synopsis "Itertools and builtins for AsyncIO and mixed iterables")
1037 (description
1038 "This package provides an implementation of itertools, builtins, and more
1039for AsyncIO and mixed-type iterables.")
1040 (license license:expat)))
1041
1042(define-public python-aioquic
1043 (package
1044 (name "python-aioquic")
1045 (version "1.3.0")
1046 (source
1047 (origin
1048 (method git-fetch)
1049 (uri (git-reference
1050 (url "https://github.com/aiortc/aioquic")
1051 (commit version)))
1052 (file-name (git-file-name name version))
1053 (sha256
1054 (base32 "0dyzh8xipxbd7fcykfz8g5bgri38prwg050szqawq2p0pg538dgb"))))
1055 (build-system pyproject-build-system)
1056 (native-inputs
1057 (list nss-certs-for-test
1058 python-pytest
1059 python-setuptools))
1060 (inputs
1061 (list openssl))
1062 (propagated-inputs
1063 (list python-certifi
1064 python-cryptography
1065 python-pylsqpack
1066 python-pyopenssl
1067 python-service-identity))
1068 (home-page "https://github.com/aiortc/aioquic")
1069 (synopsis "QUIC and HTTP3 implementation in Python")
1070 (description
1071 "@code{aioquic} is a library for the QUIC network protocol in Python.
1072It features a minimal TLS 1.3 implementation, a QUIC stack and an HTTP/3 stack.")
1073 (license license:bsd-3)))
1074
1075(define-public python-aiorpcx
1076 (package
1077 (name "python-aiorpcx")
1078 (version "0.25.0")
1079 (source
1080 (origin
1081 (method git-fetch)
1082 ;; PyPI misses the util.py file used for tests.
1083 (uri (git-reference
1084 (url "https://github.com/kyuupichan/aiorpcX")
1085 (commit version)))
1086 (file-name (git-file-name name version))
1087 (sha256
1088 (base32
1089 "0sn4xxlpy0kb5b25bqrjzh2m6bskdyydc6cq8bigb7g5dacksn4q"))))
1090 (build-system pyproject-build-system)
1091 (arguments
1092 (list
1093 #:test-flags
1094 ;; This test opens a remote connection.
1095 #~(list "-k" "not test_create_connection_resolve_good")))
1096 (native-inputs (list python-pytest
1097 python-pytest-asyncio-0.26
1098 python-setuptools))
1099 (propagated-inputs
1100 (list python-attrs python-websockets))
1101 (home-page "https://github.com/kyuupichan/aiorpcX")
1102 (synopsis "Generic asyncio RPC implementation")
1103 (description
1104 "The aiorpcX library is a generic asyncio implementation of RPC suitable
1105for an application that is a client, server or both.
1106
1107The package includes a module with full coverage of JSON RPC versions 1.0 and
11082.0, JSON RPC protocol auto-detection, and arbitrary message framing. It also
1109comes with a SOCKS proxy client.")
1110 (license (list license:expat license:bsd-2))))
1111
1112(define-public python-aiosignal
1113 (package
1114 (name "python-aiosignal")
1115 (version "1.4.0")
1116 (source
1117 (origin
1118 (method url-fetch)
1119 (uri (pypi-uri "aiosignal" version))
1120 (sha256
1121 (base32 "1isin9bp256scp59lbr35h48nw5p5i84b6f9kh1c50w08vcyqzpl"))))
1122 (build-system pyproject-build-system)
1123 (arguments
1124 (list
1125 #:phases
1126 #~(modify-phases %standard-phases
1127 (add-after 'unpack 'avoid-pytest-cov-preload
1128 (lambda _
1129 (substitute* "pytest.ini"
1130 (("-p pytest_cov") "")))))))
1131 (native-inputs
1132 (list python-pytest
1133 python-pytest-asyncio
1134 python-setuptools))
1135 (propagated-inputs
1136 (list python-frozenlist))
1137 (home-page "https://github.com/aio-libs/aiosignal")
1138 (synopsis "Callback manager for Python @code{asyncio} projects")
1139 (description "This Python module provides @code{Signal}, an abstraction to
1140register asynchronous callbacks. The @code{Signal} abstraction can be used
1141for adding, removing and dropping callbacks.")
1142 (license license:asl2.0)))
1143
1144(define-public python-aiostream
1145 (package
1146 (name "python-aiostream")
1147 (version "0.7.0")
1148 (source
1149 (origin
1150 (method git-fetch) ;no tests in PyPI archive
1151 (uri (git-reference
1152 (url "https://github.com/vxgmichel/aiostream")
1153 (commit (string-append "v" version))))
1154 (file-name (git-file-name name version))
1155 (sha256
1156 (base32 "1wf89l9f0ivlv796pklpgykx6j6ksfqrmvzikd8w5j6ldln7bv50"))))
1157 (build-system pyproject-build-system)
1158 (native-inputs
1159 (list python-pytest python-pytest-asyncio python-setuptools))
1160 (propagated-inputs
1161 (list python-typing-extensions))
1162 (home-page "https://github.com/vxgmichel/aiostream")
1163 (synopsis "Generator-based operators for asynchronous iteration")
1164 (description "@code{aiostream} provides a collection of stream operators that can
1165be combined to create asynchronous pipelines of operations. It can be seen as an
1166asynchronous version of @code{itertools}, although some aspects are slightly
1167different. All the provided operators return a unified interface called a stream. A
1168stream is an enhanced asynchronous iterable.")
1169 (license license:gpl3)))
1170
1171(define-public python-ajsonrpc
1172 (package
1173 (name "python-ajsonrpc")
1174 (version "1.2.0")
1175 (source
1176 (origin
1177 (method git-fetch)
1178 (uri (git-reference
1179 (url "https://github.com/pavlov99/ajsonrpc")
1180 (commit version)))
1181 (file-name (git-file-name name version))
1182 (sha256
1183 (base32 "0c7jxfkv5q2m95j54dn650gcvdbpag2qcki7phvmrwsgb36w09kd"))))
1184 (build-system pyproject-build-system)
1185 (arguments
1186 (list
1187 #:phases
1188 #~(modify-phases %standard-phases
1189 (add-after 'unpack 'set-version
1190 (lambda _
1191 (substitute* "ajsonrpc/__init__.py"
1192 (("^__version__ = .*")
1193 (string-append "__version__ = \"" #$version "\"\n"))))))))
1194 (native-inputs
1195 (list python-pytest
1196 python-setuptools))
1197 (propagated-inputs
1198 (list python-quart
1199 python-sanic
1200 python-tornado))
1201 (home-page "https://github.com/pavlov99/ajsonrpc")
1202 (synopsis "Async JSON-RPC 2.0 protocol and server")
1203 (description
1204 "This package provides a Python JSON-RPC 2.0 protocol and server powered
1205by asyncio.")
1206 (license license:expat)))
1207
1208(define-public python-alpaca-py
1209 (package
1210 (name "python-alpaca-py")
1211 (version "0.43.5")
1212 (source
1213 (origin
1214 (method git-fetch)
1215 (uri (git-reference
1216 (url "https://github.com/alpacahq/alpaca-py")
1217 (commit (string-append "v" version))))
1218 (file-name (git-file-name name version))
1219 (sha256
1220 (base32 "1kiq8b1v58yj7fypmnfn4mij1n96ym1i9lxsd4gmbv0cgpn10nqv"))))
1221 (build-system pyproject-build-system)
1222 (native-inputs
1223 (list python-poetry-core
1224 python-poetry-dynamic-versioning
1225 python-pytest
1226 python-pytest-asyncio
1227 python-requests-mock))
1228 (propagated-inputs
1229 (list python-msgpack
1230 python-pandas
1231 python-pydantic
1232 python-pytz
1233 python-requests
1234 python-sseclient-py
1235 python-websockets))
1236 (home-page "https://alpaca.markets/sdks/python/")
1237 (synopsis "Alpaca API official Python SDK")
1238 (description
1239 "Alpaca-py provides an interface to REST, WebSocket and SSE endpoints
1240that allow interaction with the @url{https://alpaca.markets/, Alpaca} API.")
1241 (license license:asl2.0)))
1242
1243(define-public python-anaconda-client
1244 (package
1245 (name "python-anaconda-client")
1246 (version "1.13.1")
1247 (source
1248 (origin
1249 (method git-fetch)
1250 (uri (git-reference
1251 (url "https://github.com/Anaconda-Platform/anaconda-client")
1252 (commit version)))
1253 (file-name (git-file-name name version))
1254 (sha256
1255 (base32 "06nn3cwhrrajsbn9pils2539lzplfnyhn9java3xrpm3ksxq9g72"))))
1256 (build-system pyproject-build-system)
1257 (arguments
1258 (list
1259 #:test-flags
1260 #~(list "--deselect=tests/utils/test_conda.py::test_find_conda"
1261 "--deselect=tests/utils/test_conda.py::test_conda_vars")
1262 #:phases
1263 #~(modify-phases %standard-phases
1264 (add-after 'unpack 'fix-pytest-config
1265 (lambda _
1266 (substitute* "setup.cfg"
1267 (("addopts=.*") "addopts=\n")))))))
1268 (native-inputs
1269 (list python-freezegun
1270 python-pytest
1271 python-setuptools))
1272 (propagated-inputs
1273 (list python-anaconda-cli-base
1274 python-conda-package-handling
1275 python-conda-package-streaming
1276 python-dateutil
1277 python-defusedxml
1278 python-nbformat
1279 python-pillow
1280 python-platformdirs
1281 python-pytz
1282 python-pyyaml
1283 python-requests
1284 python-requests-toolbelt
1285 python-setuptools
1286 python-tqdm
1287 python-urllib3))
1288 (home-page "https://github.com/Anaconda-Platform/anaconda-client")
1289 (synopsis "Anaconda Cloud command line client library")
1290 (description
1291 "Anaconda Cloud command line client library provides an interface to
1292Anaconda Cloud. Anaconda Cloud is useful for sharing packages, notebooks and
1293environments.")
1294 (license license:bsd-3)))
1295
1296(define-public python-apiron
1297 (package
1298 (name "python-apiron")
1299 (version "5.1.0")
1300 (source
1301 (origin
1302 (method url-fetch)
1303 (uri (pypi-uri "apiron" version))
1304 (sha256
1305 (base32 "1qwbqn47sf0aqznj1snbv37v8ijx476qqkjf5l9pac7xjkxsr8qk"))))
1306 (build-system pyproject-build-system)
1307 (arguments
1308 (list #:test-flags '(list "-k" "not test_call")))
1309 (propagated-inputs
1310 (list python-requests))
1311 (native-inputs
1312 (list python-pytest
1313 python-setuptools
1314 python-wheel))
1315 (home-page "https://github.com/ithaka/apiron")
1316 (synopsis "Python wrapper for interacting with RESTful APIs")
1317 (description
1318 "@code{apiron} provides a declarative, structured configuration of
1319services and endpoints with a unified interface for interacting with RESTful
1320APIs.")
1321 (license license:expat)))
1322
1323(define-public python-apprise
1324 (package
1325 (name "python-apprise")
1326 (version "1.9.4")
1327 (source
1328 (origin
1329 (method url-fetch)
1330 (uri (pypi-uri "apprise" version))
1331 (sha256
1332 (base32 "126951n9lnlqrw5lbsvs9xs7jzg33bqqxm7cfnqag2csw6p24ca8"))))
1333 (build-system pyproject-build-system)
1334 (arguments
1335 (list
1336 ;; These tests used to be ran with --numprocesses, but that seems to have
1337 ;; made them non-deterministic.
1338 #:test-flags
1339 #~(list "--ignore=tests/test_plugin_macosx.py"
1340 "-k" "not test_plugin_glib_send_raises_generic")))
1341 (native-inputs
1342 (list python-babel
1343 python-pytest
1344 python-pytest-mock
1345 python-setuptools))
1346 (propagated-inputs
1347 (list python-certifi
1348 python-click
1349 python-markdown
1350 python-pygobject
1351 python-pyyaml
1352 python-requests
1353 python-requests-oauthlib))
1354 (home-page "https://github.com/caronc/apprise")
1355 (synopsis "Push notification library")
1356 (description
1357 "Apprise is a Python library that allows sending push notifications to a
1358broad range of notification services, such as Telegram, Discord, Slack, Amazon
1359SNS, Gotify, etc.")
1360 (license license:bsd-2)))
1361
1362(define-public python-arxiv
1363 (package
1364 (name "python-arxiv")
1365 (version "4.0.0")
1366 (source
1367 (origin
1368 (method git-fetch)
1369 (uri (git-reference
1370 (url "https://github.com/lukasschwab/arxiv.py")
1371 (commit version)))
1372 (file-name (git-file-name name version))
1373 (sha256
1374 (base32 "13363igvv3q5aj04jcrrc0cfliinlk8js84h2a9xhpwizsq96l4j"))))
1375 (build-system pyproject-build-system)
1376 (arguments
1377 (list #:test-flags
1378 #~(list "-k" ;to skip intenet connection tests
1379 (string-append "not (TestAPIBugs "
1380 "or TestClient "
1381 "or TestResult "
1382 "or TestDownload)"))
1383 #:phases
1384 #~(modify-phases %standard-phases
1385 (add-after 'unpack 'relax-dependencies
1386 (lambda _
1387 (substitute* "pyproject.toml"
1388 ;; pyproject.toml wants 6.10, guix has 6.02, seems fine
1389 (("\"lxml.*\"") "\"lxml\"")
1390 ;; artificial capped at <2.34 by dependabot
1391 (("\"requests.*\"") "\"requests\"")))))))
1392 (native-inputs
1393 (list python-pytest
1394 python-hatch-vcs
1395 python-hatchling))
1396 (propagated-inputs
1397 (list python-feedparser
1398 python-lxml
1399 python-requests))
1400 (home-page "https://github.com/lukasschwab/arxiv.py")
1401 (synopsis "Python wrapper for the arXiv API")
1402 (description "Python wrapper for the @code{arXiv} API.")
1403 (license license:expat)))
1404
1405(define-public python-asgi-csrf
1406 (package
1407 (name "python-asgi-csrf")
1408 (version "0.11")
1409 (source (origin
1410 (method git-fetch) ;for tests
1411 (uri (git-reference
1412 (url "https://github.com/simonw/asgi-csrf")
1413 (commit version)))
1414 (file-name (git-file-name name version))
1415 (sha256
1416 (base32
1417 "1dn9v47z2b599cnwahxvzsll2w28940ycgh5skxgq04vcqqssf29"))
1418 (patches
1419 (search-patches "python-asgi-csrf-fix-formparser.patch"))))
1420 (build-system pyproject-build-system)
1421 (propagated-inputs (list python-itsdangerous python-multipart))
1422 (native-inputs (list python-asgi-lifespan
1423 python-httpx
1424 python-pytest
1425 python-pytest-asyncio
1426 python-starlette
1427 python-setuptools
1428 python-wheel))
1429 (home-page "https://github.com/simonw/asgi-csrf")
1430 (synopsis "ASGI middleware for protecting against CSRF attacks")
1431 (description "This Asynchronous Server Gateway Interface (ASGI)
1432middleware protects against Cross-site request forgery (CSRF) attacks.
1433It implements the Double Submit Cookie pattern, where a cookie is set
1434that is then compared to a @code{csrftoken} hidden form field or a
1435@code{x-csrftoken} HTTP header.")
1436 (license license:asl2.0)))
1437
1438(define-public python-asgi-lifespan
1439 (package
1440 (name "python-asgi-lifespan")
1441 (version "2.1.0")
1442 (source (origin
1443 (method git-fetch) ;for tests
1444 (uri (git-reference
1445 (url "https://github.com/florimondmanca/asgi-lifespan")
1446 (commit version)))
1447 (file-name (git-file-name name version))
1448 (sha256
1449 (base32
1450 "0iqa3h61gsq1qd6j9v68k989596m9n9k1dx8zv6135rmhzzrs296"))))
1451 (build-system pyproject-build-system)
1452 (arguments
1453 (list
1454 #:test-flags
1455 '(list "-k"
1456 (string-append
1457 ;; XXX: Some tests fail because of "Exceptions from Trio nursery"
1458 "not (test_lifespan_manager[trio-None-None-StartupFailed]"
1459 " or test_lifespan_manager[trio-None-BodyFailed-None]"
1460 " or test_lifespan_manager[trio-None-BodyFailed-StartupFailed]"
1461 " or test_lifespan_manager[trio-ShutdownFailed-None-None]"
1462 " or test_lifespan_manager[trio-ShutdownFailed-None-StartupFailed]"
1463 " or test_lifespan_manager[trio-ShutdownFailed-BodyFailed-StartupFailed]"
1464 " or test_lifespan_timeout[trio-slow_shutdown]"
1465 " or test_lifespan_not_supported[trio-http_only]"
1466 " or test_lifespan_not_supported[trio-http_no_assert]"
1467 " or test_lifespan_not_supported[trio-http_no_assert_before_receive_request]"
1468 ")"))
1469 #:phases
1470 '(modify-phases %standard-phases
1471 (add-after 'unpack 'compatibility
1472 (lambda _
1473 ;; httpx version 0.28.0 removed the "app" shortcut.
1474 (substitute* "tests/test_manager.py"
1475 (("app=manager.app")
1476 "transport=httpx.ASGITransport(manager.app)")))))))
1477 (native-inputs (list python-httpx
1478 python-pytest
1479 python-pytest-asyncio
1480 python-pytest-trio
1481 python-starlette
1482 python-setuptools
1483 python-wheel))
1484 (propagated-inputs (list python-sniffio))
1485 (home-page "https://github.com/florimondmanca/asgi-lifespan")
1486 (synopsis "Programmatic startup/shutdown of ASGI apps")
1487 (description "Programmatically send startup/shutdown lifespan events
1488into Asynchronous Server Gateway Interface (ASGI) applications. When
1489used in combination with an ASGI-capable HTTP client such as HTTPX, this
1490allows mocking or testing ASGI applications without having to spin up an
1491ASGI server.")
1492 (license license:expat)))
1493
1494(define-public python-asgiref
1495 (package
1496 (name "python-asgiref")
1497 (version "3.11.1")
1498 (source
1499 (origin
1500 (method git-fetch)
1501 (uri (git-reference
1502 (url "https://github.com/django/asgiref/")
1503 (commit version)))
1504 (file-name (git-file-name name version))
1505 (sha256
1506 (base32 "19l03mx81dqhnnqa98073x1q243ndlknax0kva7azr9g12ixl69j"))))
1507 (build-system pyproject-build-system)
1508 (native-inputs
1509 (list python-pytest
1510 python-pytest-asyncio
1511 python-setuptools))
1512 (home-page "https://github.com/django/asgiref/")
1513 (synopsis "ASGI specs, helper code, and adapters")
1514 (description
1515 "ASGI is a standard for Python asynchronous web apps and servers to
1516communicate with each other, and positioned as an asynchronous successor to
1517WSGI. This package includes libraries for implementing ASGI servers.")
1518 (license license:bsd-3)))
1519
1520(define-public python-asyncer
1521 (package
1522 (name "python-asyncer")
1523 (version "0.0.17")
1524 (source
1525 (origin
1526 (method git-fetch)
1527 (uri (git-reference
1528 (url "https://github.com/fastapi/asyncer")
1529 (commit version)))
1530 (file-name (git-file-name name version))
1531 (sha256
1532 (base32 "1f4ids6sxwmz89yj98z0qc4qvfkklh0psbxv5px39k807g9aq7p2"))))
1533 (build-system pyproject-build-system)
1534 (native-inputs
1535 (list python-pdm-backend
1536 python-pytest))
1537 (propagated-inputs
1538 (list python-anyio
1539 python-sniffio
1540 python-typing-extensions))
1541 (home-page "https://asyncer.tiangolo.com/")
1542 (synopsis "Asyncer, async and await, focused on developer experience")
1543 (description
1544 "Asyncer is a small library built on top of
1545@url{https://anyio.readthedocs.io/en/stable/, AnyIO}.
1546
1547The main goal of Asyncer is to improve developer experience by providing
1548better support for autocompletion and inline errors in the editor, and more
1549certainty that the code is bug-free by providing better support for type
1550checking tools like mypy.")
1551 (license license:expat)))
1552
1553(define-public python-asyncudp
1554 (package
1555 (name "python-asyncudp")
1556 (version "0.11.0")
1557 (source
1558 (origin
1559 (method git-fetch)
1560 (uri (git-reference
1561 (url "https://github.com/eerimoq/asyncudp")
1562 (commit version)))
1563 (file-name (git-file-name name version))
1564 (sha256
1565 (base32 "1i2s8mmmggzq6vk5aldz3g85jnqfbgxfqi60wl58jpn2lbr8fqlr"))))
1566 (build-system pyproject-build-system)
1567 (native-inputs (list python-pytest python-setuptools))
1568 (home-page (git-reference-url (origin-uri source)))
1569 (synopsis "High level UDP sockets for asyncio")
1570 (description
1571 "This package provides a Python library offering high level UDP sockets
1572for asyncio. Import it alongside asyncio and use its API to send and receive
1573UDP packets.")
1574 (license license:expat)))
1575
1576(define-public python-authlib
1577 (package
1578 (name "python-authlib")
1579 (version "1.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.11.1")
7006 (source
7007 (origin
7008 (method url-fetch)
7009 (uri (pypi-uri "cssutils" version))
7010 (sha256
7011 (base32
7012 "1qpq7xvzqp4cfcb8837rnd30x4hws3rkp33qpvmnxbxn2djsfqq5"))))
7013 (build-system pyproject-build-system)
7014 (arguments
7015 (list
7016 #:phases
7017 #~(modify-phases %standard-phases
7018 (replace 'check
7019 (lambda _
7020 (invoke "pytest" "-vv" "-k"
7021 (string-append "not encutils "
7022 "and not website.logging")))))))
7023 (native-inputs
7024 (list python-cssselect
7025 python-jaraco-test
7026 python-lxml
7027 python-pytest
7028 python-setuptools
7029 python-wheel))
7030 (propagated-inputs
7031 (list python-more-itertools))
7032 (home-page "https://github.com/jaraco/cssutils")
7033 (synopsis
7034 "CSS Cascading Style Sheets library for Python")
7035 (description
7036 "Cssutils is a Python package for parsing and building CSS
7037Cascading Style Sheets. Currently it provides a DOM only and no rendering
7038options.")
7039 (license license:lgpl3+)))
7040
7041(define-public python-css-parser
7042 (package
7043 (inherit python-cssutils)
7044 (name "python-css-parser")
7045 (version "1.0.10")
7046 (source
7047 (origin
7048 (method url-fetch)
7049 (uri (pypi-uri "css-parser" version))
7050 (sha256
7051 (base32 "0qs375slcwqd7slizh6hzkwxx7cdj36v8kwn0qrfji1kscm9f7mz"))))
7052 (home-page "https://github.com/ebook-utils/css-parser")
7053 (synopsis "Fork of cssutils modified for parsing ebooks")
7054 (description
7055 "Css-parser is a Python package for parsing and building CSS
7056Cascading Style Sheets. Currently it provides a DOM only and no rendering
7057options.
7058
7059It's a fork of cssutils 1.0.2, updated and modified for parsing ebooks, due to
7060cssutils not receiving updates as of 1.0.2.")
7061 (license license:lgpl3+)))
7062
7063(define-public python-cssselect
7064 (package
7065 (name "python-cssselect")
7066 (version "1.4.0")
7067 (source
7068 (origin
7069 (method git-fetch)
7070 (uri (git-reference
7071 (url "https://github.com/scrapy/cssselect")
7072 (commit (string-append "v" version))))
7073 (file-name (git-file-name name version))
7074 (sha256
7075 (base32 "110l98x1mz1mxcal89xscsg28vg624sc0y6b5x1n2clwa19q5g4y"))))
7076 (build-system pyproject-build-system)
7077 (native-inputs
7078 (list python-hatchling python-lxml python-pytest))
7079 (home-page "https://github.com/scrapy/cssselect")
7080 (synopsis "CSS3 selector parser and translator to XPath 1.0")
7081 (description
7082 "Cssselect ia a Python module that parses CSS3 Selectors and translates
7083them to XPath 1.0 expressions. Such expressions can be used in lxml or
7084another XPath engine to find the matching elements in an XML or HTML document.")
7085 (license license:bsd-3)))
7086
7087(define-public python-databricks-cli
7088 (package
7089 (name "python-databricks-cli")
7090 (version "0.18.0")
7091 (home-page "https://github.com/databricks/databricks-cli")
7092 (source (origin
7093 (method git-fetch)
7094 (uri (git-reference (url home-page) (commit version)))
7095 (file-name (git-file-name name version))
7096 (sha256
7097 (base32
7098 "1avag4kwqk2f24r5i0vcmhm6s1gsw6maykhlyj2ixz0qc05pjzvl"))))
7099 (build-system pyproject-build-system)
7100 (arguments
7101 (list #:phases #~(modify-phases %standard-phases
7102 (replace 'check
7103 (lambda _
7104 (invoke "pytest" "tests" "-vv"))))))
7105 (native-inputs
7106 ;; For tests.
7107 (list python-decorator
7108 python-mock
7109 python-pytest
7110 python-requests-mock
7111 python-setuptools
7112 python-wheel))
7113 (propagated-inputs
7114 (list python-click
7115 python-oauthlib
7116 python-pyjwt
7117 python-requests
7118 python-six
7119 python-tabulate))
7120 (synopsis "Command line interface for Databricks")
7121 (description
7122 "The Databricks Command Line Interface is a tool which provides an easy
7123to use interface to the Databricks platform. The CLI is built on top of the
7124Databricks REST APIs.")
7125 (license license:asl2.0)))
7126
7127(define-public python-openid-cla
7128 ;; XXX: Last updated in 2015.
7129 (package
7130 (name "python-openid-cla")
7131 (version "1.2")
7132 (source
7133 (origin
7134 (method url-fetch)
7135 (uri (pypi-uri "python-openid-cla" version))
7136 (sha256
7137 (base32
7138 "102hy2qisvjxp5s0v9lvwqi4f2dk0dhns40vjgn008yxc7k0h3cr"))))
7139 (build-system pyproject-build-system)
7140 (arguments '(#:tests? #f)) ; No tests.
7141 (native-inputs (list python-setuptools python-wheel))
7142 (propagated-inputs (list python-openid python-six))
7143 (home-page "https://github.com/puiterwijk/python-openid-cla/")
7144 (synopsis "Implementation of the OpenID CLA extension for python-openid")
7145 (description "@code{openid-cla} is an implementation of the OpenID
7146contributor license agreement extension for python-openid.")
7147 (license license:bsd-3)))
7148
7149(define-public python-openid-teams
7150 ;; XXX: Last updated in 2018.
7151 (package
7152 (name "python-openid-teams")
7153 (version "1.1")
7154 (source
7155 (origin
7156 (method url-fetch)
7157 (uri (pypi-uri "python-openid-teams" version))
7158 (sha256
7159 (base32
7160 "05zrh78alav24rxkbqlpbad6d3x2nljk6z6j7kflxf3vdqa7w969"))))
7161 (build-system pyproject-build-system)
7162 (arguments '(#:tests? #f)) ; No tests.
7163 (native-inputs (list python-setuptools python-wheel))
7164 (propagated-inputs (list python-openid python-six))
7165 (home-page "https://github.com/puiterwijk/python-openid-teams/")
7166 (synopsis "Implementation of the OpenID teams extension for python-openid")
7167 (description
7168 "@code{openid-teams} is an implementation of the OpenID
7169teams extension for python-openid.")
7170 (license license:bsd-3)))
7171
7172(define-public python-priority
7173 (package
7174 (name "python-priority")
7175 (version "2.0.0")
7176 (source
7177 (origin
7178 (method url-fetch)
7179 (uri (pypi-uri "priority" version))
7180 (sha256
7181 (base32 "1h0qpa949bxx7za95v1apwnngkrngi695cwx8wchn3cd3d7xarf9"))))
7182 (build-system pyproject-build-system)
7183 (native-inputs
7184 (list python-pytest python-setuptools python-wheel))
7185 (home-page "https://python-hyper.org/projects/priority/en/latest/")
7186 (synopsis "Pure-Python implementation of the HTTP/2 priority tree")
7187 (description
7188 "Priority is a pure-Python implementation of the priority logic for HTTP/2,
7189set out in RFC 7540 Section 5.3 (Stream Priority).")
7190 (license license:expat)))
7191
7192(define-public python-weblate-language-data
7193 (package
7194 (name "python-weblate-language-data")
7195 (version "2025.8")
7196 (source
7197 (origin
7198 (method url-fetch)
7199 (uri (pypi-uri "weblate_language_data" version))
7200 (sha256
7201 (base32 "0byj1xl6xldam790b6wg62dk1b4i6qdlsp4lqzlv65wnp2klvrkf"))))
7202 (build-system pyproject-build-system)
7203 (arguments (list #:tests? #f)) ;not tests, just data files
7204 (native-inputs
7205 (list python-setuptools))
7206 (propagated-inputs
7207 (list python-translate-toolkit))
7208 (home-page "https://github.com/WeblateOrg/language-data")
7209 (synopsis "Language definitions for Weblate")
7210 (description
7211 "This package provides language definitions used by
7212@url{https://weblate.org/, Weblate}i.")
7213 (license license:expat)))
7214
7215(define-public python-wikidata
7216 (package
7217 (name "python-wikidata")
7218 (version "0.8.1")
7219 (source
7220 (origin
7221 (method git-fetch)
7222 (uri (git-reference
7223 (url "https://github.com/dahlia/wikidata")
7224 (commit version)))
7225 (file-name (git-file-name name version))
7226 (sha256
7227 (base32 "06zg74h249phszn1znfcjdz6c3lz350fiabdzn7iqb2xg4xh69a5"))))
7228 (build-system pyproject-build-system)
7229 (native-inputs
7230 (list python-pytest python-setuptools))
7231 (home-page "https://github.com/dahlia/wikidata")
7232 (synopsis "Wikidata client library")
7233 (description
7234 "This package provides a Python interface to @url{https://www.wikidata.org/,
7235Wikidata}.")
7236 (license license:gpl3+)))
7237
7238(define-public python-wsproto
7239 (package
7240 (name "python-wsproto")
7241 (version "1.3.2")
7242 (source
7243 (origin
7244 (method git-fetch)
7245 (uri (git-reference
7246 (url "https://github.com/python-hyper/wsproto/")
7247 (commit version)))
7248 (file-name (git-file-name name version))
7249 (sha256
7250 (base32 "1n67xnnq3mvnxp61r4d8730hh8hzrq8i9bdrv8jivhj369fhndn9"))))
7251 (build-system pyproject-build-system)
7252 (native-inputs
7253 (list python-pytest
7254 python-setuptools))
7255 (propagated-inputs
7256 (list python-h11))
7257 (home-page "https://github.com/python-hyper/wsproto/")
7258 (synopsis "WebSockets state-machine based protocol implementation")
7259 (description
7260 "@code{wsproto} is a pure-Python implementation of a WebSocket protocol
7261stack. It's written from the ground up to be embeddable in whatever program
7262you choose to use, ensuring that you can communicate via WebSockets, as
7263defined in RFC6455, regardless of your programming paradigm.")
7264 (license license:expat)))
7265
7266(define-public hypercorn
7267 (package
7268 (name "hypercorn")
7269 (version "0.18.0")
7270 (source
7271 (origin
7272 (method git-fetch) ;PyPI does not have tests
7273 (uri (git-reference
7274 (url "https://github.com/pgjones/hypercorn")
7275 (commit version)))
7276 (file-name (git-file-name name version))
7277 (sha256
7278 (base32 "0jdi05n5isxn0rysq242p198lz03gbwsnizzb9yp6rxr7ajapns4"))))
7279 (build-system pyproject-build-system)
7280 ;; Propagate because Hypercorn also exposes functionality over a module.
7281 (propagated-inputs (list python-h11
7282 python-h2
7283 python-priority
7284 python-tomli
7285 python-wsproto))
7286 (native-inputs (list nss-certs-for-test
7287 python-httpx
7288 python-pdm-backend
7289 python-poetry-core
7290 python-pytest
7291 python-pytest-asyncio
7292 python-pytest-trio
7293 python-trio))
7294 (home-page "https://gitlab.com/pgjones/hypercorn/")
7295 (synopsis "ASGI Server based on Hyper libraries")
7296 (description
7297 "Hypercorn is an ASGI web server based on the sans-io hyper, h11, h2, and
7298wsproto libraries and inspired by Gunicorn. It supports HTTP/1, HTTP/2,
7299WebSockets (over HTTP/1 and HTTP/2), ASGI/2, and ASGI/3 specifications. It
7300can utilise asyncio, uvloop, or trio worker types.")
7301 (license license:expat)))
7302
7303(define-public python-querystring-parser
7304 (package
7305 (name "python-querystring-parser")
7306 (version "1.2.4")
7307 (source
7308 (origin
7309 (method git-fetch)
7310 (uri (git-reference
7311 (url "https://github.com/bernii/querystring-parser")
7312 (commit version)))
7313 (file-name (git-file-name name version))
7314 (sha256
7315 (base32 "15n89bf1x9dgp1vi697pa238nvn0vbqp3ghf0xrcyqqa9gn1l6fb"))))
7316 (build-system pyproject-build-system)
7317 (arguments
7318 (list
7319 #:test-backend #~'custom
7320 #:test-flags #~(list "querystring_parser/tests.py")
7321 #:phases
7322 #~(modify-phases %standard-phases
7323 (add-after 'unpack 'fix-python-incompatibilities
7324 (lambda _
7325 (substitute* "querystring_parser/tests.py"
7326 ;; XXX FIXME: This test is broken with Python 3.7:
7327 ;; https://github.com/bernii/querystring-parser/issues/35
7328 (("self\\.assertEqual\\(self\\.knownValuesNormalized, result\\)")
7329 "True")
7330 ;; Removed in Python 3.12.
7331 (("assertEquals")
7332 "assertEqual")))))))
7333 (native-inputs (list python-setuptools))
7334 (propagated-inputs (list python-six))
7335 (home-page "https://github.com/bernii/querystring-parser")
7336 (synopsis "QueryString parser that correctly handles nested dictionaries")
7337 (description
7338 "This package provides a query string parser for Python and Django
7339projects that correctly creates nested dictionaries from sent form/querystring
7340data.")
7341 (license license:expat)))
7342
7343(define-public python-tornado
7344 (package
7345 (name "python-tornado")
7346 (version "6.4.2")
7347 (source
7348 (origin
7349 (method url-fetch)
7350 (uri (pypi-uri "tornado" version))
7351 (sha256
7352 (base32 "02v2mlvr58xg0l0gh08nswl53z73wkf23sziggypk63ffjsdbflj"))))
7353 (build-system pyproject-build-system)
7354 (arguments
7355 (list
7356 #:test-flags
7357 ;; AttributeError: 'TestIOStreamWebMixin' object has no attribute 'io_loop'
7358 #~(list "--ignore=tornado/test/iostream_test.py")))
7359 (native-inputs
7360 (list python-certifi
7361 python-pytest
7362 python-setuptools))
7363 (home-page "https://www.tornadoweb.org/")
7364 (synopsis "Python web framework and asynchronous networking library")
7365 (description
7366 "Tornado is a Python web framework and asynchronous networking library,
7367originally developed at FriendFeed. By using non-blocking network I/O,
7368Tornado can scale to tens of thousands of open connections, making it ideal
7369for long polling, WebSockets, and other applications that require a long-lived
7370connection to each user.")
7371 (license license:asl2.0)))
7372
7373(define-public python-tornado-http-auth
7374 (package
7375 (name "python-tornado-http-auth")
7376 (version "1.1.1")
7377 (source
7378 (origin
7379 (method git-fetch)
7380 (uri (git-reference
7381 (url "https://github.com/gvalkov/tornado-http-auth")
7382 (commit (string-append "v" version))))
7383 (file-name (git-file-name name version))
7384 (sha256
7385 (base32 "1v9sin1zlck9wvkwx0ldqb1b271xlkq63562w8g1yb7v6qka9q4f"))))
7386 (build-system pyproject-build-system)
7387 ;; XXX: This version is incompatible with current tornado.testing.
7388 (arguments (list #:tests? #f))
7389 (native-inputs (list python-setuptools))
7390 (propagated-inputs (list python-tornado))
7391 (home-page "https://github.com/gvalkov/tornado-http-auth")
7392 (synopsis "Digest and basic authentication module for Tornado")
7393 (description
7394 "Provides support for adding authentication to services using the Tornado
7395web framework, either via the basic or digest authentication schemes.")
7396 (license license:asl2.0)))
7397
7398(define-public python-wsgi-intercept
7399 (package
7400 (name "python-wsgi-intercept")
7401 (version "1.13.1")
7402 (source (origin
7403 (method url-fetch)
7404 (uri (pypi-uri "wsgi_intercept" version))
7405 (sha256
7406 (base32
7407 "1h94dj7h7n7zdj3ll4imqjhq5vk21yidk2niwnmpw7xik9inrgbr"))))
7408 (build-system pyproject-build-system)
7409 (arguments
7410 (list
7411 ;; XXX: tests required internet access
7412 #:tests? #f))
7413 (propagated-inputs
7414 (list python-six))
7415 (native-inputs
7416 (list python-httplib2
7417 python-pytest
7418 python-requests
7419 python-setuptools
7420 python-urllib3
7421 python-wheel))
7422 (synopsis "Puts a WSGI application in place of a real URI for testing")
7423 (description "Wsgi_intercept installs a WSGI application in place of a real
7424URI for testing. Testing a WSGI application normally involves starting a
7425server at a local host and port, then pointing your test code to that address.
7426Instead, this library lets you intercept calls to any specific host/port
7427combination and redirect them into a WSGI application importable by your test
7428program. Thus, you can avoid spawning multiple processes or threads to test
7429your Web app.")
7430 (home-page "https://github.com/cdent/wsgi-intercept")
7431 (license license:expat)))
7432
7433(define-public python-webob
7434 (package
7435 (name "python-webob")
7436 (version "1.8.10")
7437 (source
7438 (origin
7439 (method url-fetch)
7440 (uri (pypi-uri "webob" version))
7441 (sha256
7442 (base32
7443 "0avwfsqqva46aix1p61jbwjsw7kh6zkxvfds9xi3zg07yc8km5hw"))))
7444 (build-system pyproject-build-system)
7445 ;; tests: 2394 passed, 9 skipped, 1 xfailed, 35 warnings
7446 (native-inputs
7447 (list python-pytest
7448 python-setuptools))
7449 (home-page "https://webob.org/")
7450 (synopsis "WSGI request and response object")
7451 (description
7452 "WebOb provides wrappers around the WSGI request environment, and an
7453object to help create WSGI responses.")
7454 (license license:expat)))
7455
7456(define-public python-yewtube-search
7457 (package
7458 (name "python-yewtube-search")
7459 ;; Original repository for python-youtube-search package is archived, see:
7460 ;; <https://github.com/alexmercerind/youtube-search-python/issues/189>.
7461 ;; The most promising fork was
7462 ;; <https://github.com/ahmedayyad-dev/youtube-search-python-fork> which is
7463 ;; archived since <2026-04-04>. This is another fork with a different PyPI
7464 ;; name for python-yewtube.
7465 (version "1.6.7")
7466 (source
7467 (origin
7468 (method url-fetch)
7469 (uri (pypi-uri "yewtube_search_python" version))
7470 (sha256
7471 (base32 "0vjh4wrlqx4lv9qi6572jx2d0rsp6gkvaqf0f2ar4npdz0ldgl47"))))
7472 (build-system pyproject-build-system)
7473 (arguments (list #:tests? #f)) ;no tests in repository
7474 (native-inputs
7475 (list python-setuptools))
7476 (propagated-inputs
7477 (list python-httpx))
7478 (home-page "https://github.com/iamtalhaasghar/youtube-search-python")
7479 (synopsis "Search for YouTube videos, channels & playlists")
7480 (description
7481 "This package provides tools to search for @code{YouTube} videos,
7482channels and playlists; as well as getting video metadata from links. This
7483package does not rely on the @code{YouTube} Data API v3.")
7484 (license license:expat)))
7485
7486(define-public python-zc-lockfile
7487 (package
7488 (name "python-zc-lockfile")
7489 (version "4.0")
7490 (source
7491 (origin
7492 (method git-fetch)
7493 (uri (git-reference
7494 (url "https://github.com/zopefoundation/zc.lockfile")
7495 (commit version)))
7496 (file-name (git-file-name name version))
7497 (sha256
7498 (base32 "0b1kkwx2d4wf392sd3bfjvzgkdrknwsxg9mby121mq8zl7c490gg"))))
7499 (build-system pyproject-build-system)
7500 (arguments
7501 (list
7502 #:phases
7503 #~(modify-phases %standard-phases
7504 (replace 'check
7505 (lambda* (#:key tests? #:allow-other-keys)
7506 (if tests?
7507 (invoke "zope-testrunner" "--test-path=src")
7508 (format #t "test suite not run~%")))))))
7509 (native-inputs (list python-zope-testing python-zope-testrunner
7510 python-setuptools))
7511 (home-page "https://github.com/zopefoundation/zc.lockfile")
7512 (synopsis "Interprocess locks using lock files")
7513 (description
7514 "This package provides an implementation of interprocess locks using lock
7515files. These locks can also be used to mediate access to other files.")
7516 (license license:zpl2.1)))
7517
7518(define-public python-zconfig
7519 (package
7520 (name "python-zconfig")
7521 (version "4.3")
7522 (source
7523 (origin
7524 (method git-fetch)
7525 (uri (git-reference
7526 (url "https://github.com/zopefoundation/ZConfig/")
7527 (commit version)))
7528 (file-name (git-file-name name version))
7529 (sha256
7530 (base32 "06c4vffk51fw03q87r31s81b0xbxg2qqvjfmcl2z4hg21fr088c2"))))
7531 (build-system pyproject-build-system)
7532 (arguments
7533 (list
7534 #:phases
7535 #~(modify-phases %standard-phases
7536 (replace 'check
7537 (lambda* (#:key tests? #:allow-other-keys)
7538 (if tests?
7539 (begin
7540 ;; This test assumes we still have setup.py in the
7541 ;; directory from which we import zconfig, which
7542 ;; does not work after installing the package.
7543 (delete-file-recursively
7544 "src/ZConfig/tests/test_readme.py")
7545 (invoke "zope-testrunner" "-vv" "--test-path=src" "--all"))
7546 (format #t "test suite not run~%")))))))
7547 (native-inputs (list python-docutils python-manuel python-zope-exceptions
7548 python-zope-testrunner python-setuptools))
7549 (home-page "https://github.com/zopefoundation/ZConfig/")
7550 (synopsis "Structured configuration library intended for general use")
7551 (description
7552 "@code{zconfig} is a configuration library intended for general use. It
7553supports a hierarchical schema-driven configuration model that allows a schema
7554to specify data conversion routines written in Python. Its model is very
7555different from the model supported by the @code{configparser} module found in
7556Python's standard library, and is more suitable to configuration-intensive
7557applications.")
7558 (license license:zpl2.1)))
7559
7560(define-public python-zodb
7561 (package
7562 (name "python-zodb")
7563 (version "6.0.1")
7564 (source
7565 (origin
7566 (method url-fetch)
7567 (uri (pypi-uri "zodb" version))
7568 (sha256
7569 (base32 "02cmvf8j2nin5z26wvy2vq2k9mj12hqrr4276lj3w4jj32p0zxw9"))))
7570 (build-system pyproject-build-system)
7571 (arguments
7572 (list
7573 #:phases
7574 #~(modify-phases %standard-phases
7575 (replace 'check
7576 (lambda* (#:key tests? #:allow-other-keys)
7577 (if tests?
7578 (begin
7579 ;; This test does not work after installing the
7580 ;; package, since it expects the ZODB source code
7581 ;; to reside in the src/ directory.
7582 (delete-file-recursively
7583 "src/ZODB/tests/testdocumentation.py")
7584 (invoke "zope-testrunner" "-vv" "--test-path=src"
7585 "--all"))
7586 (format #t "test suite not run~%")))))))
7587 (native-inputs
7588 (list python-manuel
7589 python-wheel
7590 python-zope-testing
7591 python-zope-testrunner))
7592 (propagated-inputs
7593 (list python-btrees
7594 python-persistent
7595 python-transaction
7596 python-zc-lockfile
7597 python-zconfig
7598 python-zodbpickle
7599 python-zope-interface))
7600 (home-page "http://zodb-docs.readthedocs.io")
7601 (synopsis "Object-oriented database for Python")
7602 (description
7603 "@code{ZODB} provides an object-oriented and @acronym{ACID,
7604Atomicity Consistency Isolation Durability} compliant database for Python with
7605a high degree of transparency. @code{ZODB} is an object-oriented database,
7606not an object-relational mapping. This comes with several advantaged:
7607
7608@itemize
7609@item no separate language for database operations
7610@item very little impact on your code to make objects persistent
7611@item no database mapper that partially hides the database.
7612@item almost no seam between code and database.
7613@end itemize")
7614 (license license:zpl2.1)))
7615
7616(define-public python-zodbpickle
7617 (package
7618 (name "python-zodbpickle")
7619 (version "3.2")
7620 (source
7621 (origin
7622 (method url-fetch)
7623 (uri (pypi-uri "zodbpickle" version))
7624 (sha256
7625 (base32 "035bjrksl4h92mvjkx6id4gjcpc1k4mbci8ryjl6l9mki7ihx77b"))))
7626 (build-system pyproject-build-system)
7627 (arguments
7628 '(#:phases (modify-phases %standard-phases
7629 (replace 'check
7630 (lambda* (#:key tests? #:allow-other-keys)
7631 (if tests?
7632 (invoke "zope-testrunner" "-vv" "--test-path=src"
7633 "--all")
7634 (format #t "test suite not run~%")))))))
7635 (native-inputs (list python-zope-testrunner python-setuptools python-wheel))
7636 (home-page "https://github.com/zopefoundation/zodbpickle")
7637 (synopsis "Uniform pickling interface for @code{zodb}")
7638 (description
7639 "This package is a fork of the @code{pickle} module (and the
7640supporting C extension) from both Python 3.2 and Python 3.3. The fork adds
7641support for the @code{noload} operations used by @code{zodb}.")
7642 (license (list license:psfl license:zpl2.1))))
7643
7644(define-public python-zope-dottedname
7645 (package
7646 (name "python-zope-dottedname")
7647 (version "7.0")
7648 (source
7649 (origin
7650 (method git-fetch)
7651 (uri (git-reference
7652 (url "https://github.com/zopefoundation/zope.dottedname")
7653 (commit version)))
7654 (file-name (git-file-name name version))
7655 (sha256
7656 (base32 "0h7a637zsl1a3f0rpb2nw41mzxv0pqyj8ahn6h60n2c1px912rbd"))))
7657 (build-system pyproject-build-system)
7658 (arguments
7659 (list #:test-backend #~'custom
7660 #:test-flags #~(list "src/zope/dottedname/tests.py")))
7661 (native-inputs (list python-setuptools))
7662 (home-page "https://zopedottedname.readthedocs.io")
7663 (synopsis "Resolver for Python dotted names")
7664 (description
7665 "This package provides a @code{resolve()} function that resolves strings
7666containing dotted names into the appropriate Python object.")
7667 (license license:zpl2.1)))
7668
7669(define-public python-zope-event
7670 (package
7671 (name "python-zope-event")
7672 (version "6.0")
7673 (source
7674 (origin
7675 (method git-fetch)
7676 (uri (git-reference
7677 (url "https://github.com/zopefoundation/zope.event")
7678 (commit version)))
7679 (file-name (git-file-name name version))
7680 (sha256
7681 (base32 "0la3q47c59aq50s036q468bhnmzgs71f1cygv89w6qkk1hkn35ym"))))
7682 (build-system pyproject-build-system)
7683 (arguments
7684 (list
7685 #:test-flags
7686 #~(list "src/zope/event/tests.py")))
7687 (native-inputs (list python-pytest python-setuptools))
7688 (home-page "https://zopeevent.readthedocs.io/en/latest/")
7689 (synopsis "Event publishing system for Python")
7690 (description
7691 "Zope.event provides an event publishing API, intended for use by
7692applications which are unaware of any subscribers to their events. It is a
7693simple event-dispatching system on which more sophisticated event dispatching
7694systems can be built.")
7695 (license license:zpl2.1)))
7696
7697(define-public python-zope-interface
7698 (package
7699 (name "python-zope-interface")
7700 (version "7.2")
7701 (source
7702 (origin
7703 (method git-fetch)
7704 (uri (git-reference
7705 (url "https://github.com/zopefoundation/zope.interface")
7706 (commit version)))
7707 (file-name (git-file-name name version))
7708 (sha256
7709 (base32 "01snm1lbqhx3ird4m76nciaqasxvf8dd6817zm35v684g5hbzd2s"))))
7710 (build-system pyproject-build-system)
7711 (arguments
7712 ;; XXX: test suite can't find python-zope-testing
7713 (list #:tests? #f))
7714 (native-inputs (list python-setuptools))
7715 (home-page "https://zopeinterface.readthedocs.io")
7716 (synopsis "\"Design by contract\" methodology in Python")
7717 (description
7718 "Zope.interface provides an implementation of \"object interfaces\" for
7719Python. Interfaces are a mechanism for labeling objects as conforming to a
7720given API or contract.")
7721 (license license:zpl2.1)))
7722
7723(define-public python-zope-exceptions
7724 (package
7725 (name "python-zope-exceptions")
7726 (version "6.0")
7727 (source
7728 (origin
7729 (method git-fetch)
7730 (uri (git-reference
7731 (url "https://github.com/zopefoundation/zope.exceptions")
7732 (commit version)))
7733 (file-name (git-file-name name version))
7734 (sha256
7735 (base32 "0fmsw2j8islaiv6zf2mxh2s43y7virqny6s8gk8v2zkcxpy95cic"))))
7736 (build-system pyproject-build-system)
7737 (arguments
7738 (list
7739 #:phases
7740 #~(modify-phases %standard-phases
7741 (replace 'check
7742 (lambda* (#:key tests? #:allow-other-keys)
7743 (if tests?
7744 (invoke "zope-testrunner" "--test-path=src")
7745 (format #t "test suite not run~%")))))))
7746 (native-inputs (list python-setuptools python-zope-testrunner-bootstrap))
7747 (propagated-inputs (list python-zope-interface))
7748 (home-page "https://github.com/zopefoundation/zope.exceptions")
7749 (synopsis "Zope exceptions")
7750 (description
7751 "Zope.exceptions provides general-purpose exception types that have uses
7752outside of the Zope framework.")
7753 (license license:zpl2.1)))
7754
7755(define (python-zope-bootstrap-package orig)
7756 (package
7757 (inherit orig)
7758 (name (string-append (package-name orig) "-bootstrap"))
7759 (arguments
7760 (if (null? (package-arguments orig))
7761 (list
7762 #:tests? #f
7763 #:phases #~(modify-phases %standard-phases
7764 (delete 'sanity-check)))
7765 (substitute-keyword-arguments arguments
7766 ((#:tests? _ #f) #f)
7767 ((#:phases phases '%standard-phases)
7768 #~(modify-phases #$phases
7769 (delete 'sanity-check))))))
7770 (propagated-inputs `())
7771 (native-inputs (list python-setuptools))
7772 (properties `((hidden? . #t)))))
7773
7774(define-public python-zope-exceptions-bootstrap
7775 (python-zope-bootstrap-package python-zope-exceptions))
7776
7777(define-public python-zope-testing
7778 (package
7779 (name "python-zope-testing")
7780 (version "6.0")
7781 (source
7782 (origin
7783 (method git-fetch)
7784 (uri (git-reference
7785 (url "https://github.com/zopefoundation/zope.testing")
7786 (commit version)))
7787 (file-name (git-file-name name version))
7788 (sha256
7789 (base32 "0zqipsgv7qj7f8hrd3x6xpqwszdiac8vpjdm8ak5kljl5napw7d7"))))
7790 (build-system pyproject-build-system)
7791 (arguments
7792 (list
7793 #:phases
7794 #~(modify-phases %standard-phases
7795 (replace 'check
7796 (lambda* (#:key tests? #:allow-other-keys)
7797 (if tests?
7798 (invoke "zope-testrunner" "--test-path=src")
7799 (format #t "test suite not run~%")))))))
7800 (native-inputs (list python-setuptools
7801 python-zope-interface
7802 python-zope-testrunner-bootstrap))
7803 (home-page "https://zopetesting.readthedocs.io/")
7804 (synopsis "Zope testing helpers")
7805 (description
7806 "Zope.testing provides a number of testing utilities for HTML forms, HTTP
7807servers, regular expressions, and more.")
7808 (license license:zpl2.1)))
7809
7810(define-public python-zope-testrunner
7811 (package
7812 (name "python-zope-testrunner")
7813 (version "7.4")
7814 (source
7815 (origin
7816 (method git-fetch)
7817 (uri (git-reference
7818 (url "https://github.com/zopefoundation/zope.testrunner")
7819 (commit version)))
7820 (file-name (git-file-name name version))
7821 (sha256
7822 (base32 "0gd5rnzw6vzbx766jxqr4zc6qx7gk75r2c0nqqvhkb12hzk5ca2g"))))
7823 (build-system pyproject-build-system)
7824 (arguments
7825 (list
7826 #:phases
7827 #~(modify-phases %standard-phases
7828 (add-after 'unpack 'remove-problematic-test
7829 (lambda _
7830 ;; This test contains invalid syntax, which breaks bytecode
7831 ;; compilation. For simplicity just remove it.
7832 (delete-file
7833 "src/zope/testrunner/tests/testrunner-ex/sample2/badsyntax.py")))
7834 (replace 'check
7835 (lambda* (#:key tests? #:allow-other-keys)
7836 (if tests?
7837 (invoke "zope-testrunner" "--test-path=src")
7838 (format #t "test suite not run~%")))))))
7839 (native-inputs (list python-setuptools python-zope-testing))
7840 (propagated-inputs (list python-zope-exceptions python-zope-interface))
7841 (home-page "https://zopetestrunner.readthedocs.io")
7842 (synopsis "Zope testrunner script")
7843 (description "This package provides a script for running Python tests.")
7844 (license license:zpl2.1)))
7845
7846(define-public python-zope-testrunner-bootstrap
7847 (package
7848 (inherit (python-zope-bootstrap-package python-zope-testrunner))
7849 (propagated-inputs
7850 (list python-six python-zope-exceptions-bootstrap))
7851 (properties `((hidden? . #t)))))
7852
7853(define-public python-zope-i18nmessageid
7854 (package
7855 (name "python-zope-i18nmessageid")
7856 (version "7.0")
7857 (source
7858 (origin
7859 (method git-fetch)
7860 (uri (git-reference
7861 (url "https://github.com/zopefoundation/zope.i18nmessageid")
7862 (commit version)))
7863 (file-name (git-file-name name version))
7864 (sha256
7865 (base32 "192ixj8r9n467avbxrmhakmqiaflc1vw37k08z096ajcjgbfrm5d"))))
7866 (build-system pyproject-build-system)
7867 (arguments
7868 (list
7869 #:phases
7870 #~(modify-phases %standard-phases
7871 (replace 'check
7872 (lambda* (#:key tests? #:allow-other-keys)
7873 (if tests?
7874 (invoke "zope-testrunner" "--test-path=src")
7875 (format #t "test suite not run~%")))))))
7876 (native-inputs (list python-setuptools python-zope-testrunner))
7877 (home-page "https://zopei18nmessageid.readthedocs.io")
7878 (synopsis "Message identifiers for internationalization")
7879 (description "Zope.i18nmessageid provides facilities for declaring
7880internationalized messages within program source text.")
7881 (license license:zpl2.1)))
7882
7883(define-public python-zope-schema
7884 (package
7885 (name "python-zope-schema")
7886 (version "7.0.1")
7887 (source
7888 (origin
7889 (method git-fetch)
7890 (uri (git-reference
7891 (url "https://github.com/zopefoundation/zope.schema")
7892 (commit version)))
7893 (file-name (git-file-name name version))
7894 (sha256
7895 (base32 "1hj6j0gqgvv9a5pyaz54wbn8n7wf9lyg4njb2cfs980z0d5faj39"))))
7896 (build-system pyproject-build-system)
7897 (arguments
7898 (list
7899 #:phases
7900 #~(modify-phases %standard-phases
7901 (replace 'check
7902 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
7903 (add-installed-pythonpath inputs outputs)
7904 (if tests?
7905 (invoke "zope-testrunner" "--test-path=src")
7906 (format #t "test suite not run.~%")))))))
7907 (propagated-inputs (list python-zope-event python-zope-interface))
7908 (native-inputs (list python-zope-i18nmessageid python-zope-testing
7909 python-zope-testrunner python-setuptools))
7910 (home-page "https://zopeschema.readthedocs.io")
7911 (synopsis "Zope data schemas")
7912 (description "Zope.scheme provides extensions to zope.interface for
7913defining data schemas.")
7914 (license license:zpl2.1)))
7915
7916(define-public python-zope-sqlalchemy
7917 (package
7918 (name "python-zope-sqlalchemy")
7919 (version "1.6")
7920 (source
7921 (origin
7922 (method git-fetch)
7923 (uri (git-reference
7924 (url "https://github.com/zopefoundation/zope.sqlalchemy")
7925 (commit version)))
7926 (file-name (git-file-name name version))
7927 (sha256
7928 (base32 "1z4gw4i95dyqxsvrahk4fav008045n8kyxpn3fa887snmpvcjhng"))))
7929 (build-system pyproject-build-system)
7930 (arguments
7931 (list
7932 #:phases
7933 #~(modify-phases %standard-phases
7934 (replace 'check
7935 (lambda* (#:key tests? #:allow-other-keys)
7936 (if tests?
7937 (invoke "zope-testrunner" "--test-path=src")
7938 (format #t "test suite not run~%")))))))
7939 (propagated-inputs (list python-sqlalchemy python-transaction
7940 python-zope-interface))
7941 (native-inputs (list python-zope-testing python-zope-testrunner
7942 python-setuptools))
7943 (home-page "https://github.com/zopefoundation/zope.sqlalchemy")
7944 (synopsis "Minimal SQLAlchemy transaction integration for Zope")
7945 (description
7946 "The aim of this package is to unify the plethora of existing packages
7947integrating SQLAlchemy with Zope's transaction management. As such,it only
7948provides a data manager and makes no attempt to define a @i{zopeish} way to
7949configure engines.")
7950 (license license:zpl2.1)))
7951
7952(define-public python-zope-configuration
7953 (package
7954 (name "python-zope-configuration")
7955 (version "7.0")
7956 (source
7957 (origin
7958 (method git-fetch)
7959 (uri (git-reference
7960 (url "https://github.com/zopefoundation/zope.configuration")
7961 (commit version)))
7962 (file-name (git-file-name name version))
7963 (sha256
7964 (base32 "11lr6z3jpz9835a1if89g3x7k31sviq2d0xvvic5xi4c980dbkhv"))))
7965 (build-system pyproject-build-system)
7966 (arguments
7967 (list
7968 #:phases
7969 #~(modify-phases %standard-phases
7970 (replace 'check
7971 (lambda* (#:key tests? #:allow-other-keys)
7972 (if tests?
7973 (invoke "zope-testrunner" "--test-path=src")
7974 (format #t "test suite not run~%")))))))
7975 (native-inputs (list python-manuel python-setuptools python-zope-testing
7976 python-zope-testrunner))
7977 (propagated-inputs (list python-zope-i18nmessageid python-zope-interface
7978 python-zope-schema))
7979 (home-page "https://zopeconfiguration.readthedocs.io")
7980 (synopsis "Zope Configuration Markup Language")
7981 (description "Zope.configuration implements ZCML, the Zope Configuration
7982Markup Language.")
7983 (license license:zpl2.1)))
7984
7985(define-public python-zope-configuration-bootstrap
7986 (python-zope-bootstrap-package python-zope-configuration))
7987
7988(define-public python-zope-copy
7989 (package
7990 (name "python-zope-copy")
7991 (version "6.0")
7992 (source
7993 (origin
7994 (method git-fetch)
7995 (uri (git-reference
7996 (url "https://github.com/zopefoundation/zope.copy")
7997 (commit version)))
7998 (file-name (git-file-name name version))
7999 (sha256
8000 (base32 "1ym82p9scpfi3rflxnlv55v0a7hra3rq4rrlw759maq05i8qp1w5"))))
8001 (build-system pyproject-build-system)
8002 (arguments
8003 (list
8004 #:phases
8005 #~(modify-phases %standard-phases
8006 (replace 'check
8007 (lambda* (#:key tests? #:allow-other-keys)
8008 (if tests?
8009 (invoke "zope-testrunner" "--test-path=src")
8010 (format #t "test suite not run~%")))))))
8011 (propagated-inputs (list python-zope-interface))
8012 (native-inputs
8013 (list python-zodbpickle
8014 python-zope-component-bootstrap
8015 python-zope-location-bootstrap
8016 python-zope-proxy
8017 python-zope-schema
8018 python-zope-testing
8019 python-zope-testrunner
8020 python-setuptools))
8021 (home-page "https://zopecopy.readthedocs.io")
8022 (synopsis "Pluggable object copying mechanism")
8023 (description
8024 "This package provides a pluggable mechanism for copying persistent objects.")
8025 (license license:zpl2.1)))
8026
8027(define-public python-zope-proxy
8028 (package
8029 (name "python-zope-proxy")
8030 (version "7.0")
8031 (source
8032 (origin
8033 (method git-fetch)
8034 (uri (git-reference
8035 (url "https://github.com/zopefoundation/zope.proxy")
8036 (commit version)))
8037 (file-name (git-file-name name version))
8038 (sha256
8039 (base32 "00r9f4n0cl3fyc5gyf5l43zh95cmzx1gz6wr04k17d7wm2gmivyn"))))
8040 (build-system pyproject-build-system)
8041 (arguments
8042 (list
8043 #:phases
8044 #~(modify-phases %standard-phases
8045 (replace 'check
8046 (lambda* (#:key tests? #:allow-other-keys)
8047 (if tests?
8048 (invoke "zope-testrunner" "--test-path=src")
8049 (format #t "test suite not run~%")))))))
8050 (native-inputs
8051 (list python-zope-location-bootstrap
8052 python-zope-security-bootstrap
8053 python-zope-testrunner
8054 python-setuptools))
8055 (propagated-inputs (list python-zope-interface))
8056 (home-page "https://zopeproxy.readthedocs.io")
8057 (synopsis "Generic, transparent proxies")
8058 (description
8059 "Zope.proxy provides generic, transparent proxies for Python. Proxies are
8060special objects which serve as mostly-transparent wrappers around another
8061object, intervening in the apparent behavior of the wrapped object only when
8062necessary to apply the policy (e.g., access checking, location brokering,
8063etc.) for which the proxy is responsible.")
8064 (license license:zpl2.1)))
8065
8066(define-public python-zope-proxy-bootstrap
8067 (python-zope-bootstrap-package python-zope-proxy))
8068
8069(define-public python-zope-hookable
8070 (package
8071 (name "python-zope-hookable")
8072 (version "7.0")
8073 (source
8074 (origin
8075 (method git-fetch)
8076 (uri (git-reference
8077 (url "https://github.com/zopefoundation/zope.hookable")
8078 (commit version)))
8079 (file-name (git-file-name name version))
8080 (sha256
8081 (base32 "1l94xzzpyslpgv2ghvl5qzpfcsq02kp04fmvl95d6jcmivmmr4m8"))))
8082 (build-system pyproject-build-system)
8083 (arguments
8084 (list
8085 #:phases
8086 #~(modify-phases %standard-phases
8087 (replace 'check
8088 (lambda* (#:key tests? #:allow-other-keys)
8089 (if tests?
8090 (invoke "zope-testrunner" "--test-path=src")
8091 (format #t "test suite not run~%")))))))
8092 (native-inputs (list python-zope-testing python-zope-testrunner
8093 python-setuptools))
8094 (home-page "https://zopehookable.readthedocs.io")
8095 (synopsis "Zope hookable")
8096 (description
8097 "This package supports the efficient creation of hookable objects, which
8098are callable objects that are meant to be optionally replaced. The idea is
8099that you create a function that does some default thing and make i hookable.
8100Later, someone can modify what it does by calling its sethook method and
8101changing its implementation. All users of the function, including those that
8102imported it, will see the change.")
8103 (license license:zpl2.1)))
8104
8105(define-public python-zope-location
8106 (package
8107 (name "python-zope-location")
8108 (version "6.0")
8109 (source
8110 (origin
8111 (method git-fetch)
8112 (uri (git-reference
8113 (url "https://github.com/zopefoundation/zope.location")
8114 (commit version)))
8115 (file-name (git-file-name name version))
8116 (sha256
8117 (base32 "1jfsmbxj6hz7kmk5b0351b63ssm7qfkgqmz9v7xb7wwlmxsxkcdk"))))
8118 (build-system pyproject-build-system)
8119 (arguments
8120 (list
8121 #:phases
8122 #~(modify-phases %standard-phases
8123 (replace 'check
8124 (lambda* (#:key tests? #:allow-other-keys)
8125 (if tests?
8126 (invoke "zope-testrunner" "--test-path=src")
8127 (format #t "test suite not run~%")))))))
8128 (native-inputs (list python-zope-testrunner python-setuptools))
8129 (propagated-inputs (list python-zope-interface python-zope-proxy
8130 python-zope-schema))
8131 (home-page "https://zopelocation.readthedocs.io")
8132 (synopsis "Zope location library")
8133 (description
8134 "Zope.location implements the concept of \"locations\" in Zope3, which
8135are are special objects that have a structural location.")
8136 (license license:zpl2.1)))
8137
8138(define-public python-zope-location-bootstrap
8139 (python-zope-bootstrap-package python-zope-location))
8140
8141(define-public python-zope-security
8142 (package
8143 (name "python-zope-security")
8144 (version "7.3")
8145 (source
8146 (origin
8147 (method git-fetch)
8148 (uri (git-reference
8149 (url "https://github.com/zopefoundation/zope.security")
8150 (commit version)))
8151 (file-name (git-file-name name version))
8152 (sha256
8153 (base32 "06x6qcls2mdl05xnsyy5h70mbgij8xb6ksxbawzrc23cq04nkvx7"))))
8154 (build-system pyproject-build-system)
8155 (arguments
8156 (list
8157 #:phases
8158 #~(modify-phases %standard-phases
8159 (replace 'check
8160 (lambda* (#:key tests? #:allow-other-keys)
8161 (if tests?
8162 (invoke "zope-testrunner" "--test-path=src")
8163 (format #t "test suite not run~%")))))))
8164 (propagated-inputs
8165 (list python-zope-component
8166 python-zope-i18nmessageid
8167 python-zope-interface
8168 python-zope-location
8169 python-zope-proxy
8170 python-zope-schema))
8171 (native-inputs
8172 (list python-btrees
8173 python-zope-component-bootstrap
8174 python-zope-configuration-bootstrap
8175 python-zope-location-bootstrap
8176 python-zope-testing
8177 python-zope-testrunner
8178 python-setuptools))
8179 (home-page "https://zopesecurity.readthedocs.io")
8180 (synopsis "Zope security framework")
8181 (description "Zope.security provides a generic mechanism to implement
8182security policies on Python objects.")
8183 (license license:zpl2.1)))
8184
8185(define-public python-zope-security-bootstrap
8186 (package
8187 (inherit (python-zope-bootstrap-package python-zope-security))
8188 (propagated-inputs
8189 (list python-zope-i18nmessageid
8190 python-zope-interface
8191 python-zope-proxy-bootstrap
8192 python-zope-schema))))
8193
8194(define-public python-zope-component
8195 (package
8196 (name "python-zope-component")
8197 (version "7.0")
8198 (source
8199 (origin
8200 (method git-fetch)
8201 (uri (git-reference
8202 (url "https://github.com/zopefoundation/zope.component")
8203 (commit version)))
8204 (file-name (git-file-name name version))
8205 (sha256
8206 (base32 "1jygzhcg9rppsrd8cwvm0944naq1ldjf0vcpgsz0glwcdnr7cyfw"))))
8207 (build-system pyproject-build-system)
8208 (arguments
8209 (list
8210 #:phases
8211 #~(modify-phases %standard-phases
8212 (replace 'check
8213 (lambda* (#:key tests? #:allow-other-keys)
8214 (if tests?
8215 (invoke "zope-testrunner" "--test-path=src")
8216 (format #t "test suite not run~%")))))))
8217 (native-inputs
8218 (list python-persistent
8219 python-zope-configuration-bootstrap
8220 python-zope-i18nmessageid
8221 python-zope-location-bootstrap
8222 python-zope-proxy-bootstrap
8223 python-zope-security-bootstrap
8224 python-zope-testing
8225 python-zope-testrunner
8226 python-setuptools))
8227 (propagated-inputs
8228 (list python-zope-deferredimport python-zope-deprecation
8229 python-zope-event python-zope-hookable python-zope-interface))
8230 (home-page "https://zopecomponent.readthedocs.io")
8231 (synopsis "Zope Component Architecture")
8232 (description
8233 "Zope.component represents the core of the Zope Component Architecture.
8234Together with the zope.interface package, it provides facilities for defining,
8235registering and looking up components.")
8236 (license license:zpl2.1)))
8237
8238(define-public python-zope-component-bootstrap
8239 (python-zope-bootstrap-package python-zope-component))
8240
8241(define-public python-zope-deferredimport
8242 (package
8243 (name "python-zope-deferredimport")
8244 (version "6.0")
8245 (source
8246 (origin
8247 (method git-fetch)
8248 (uri (git-reference
8249 (url "https://github.com/zopefoundation/zope.deferredimport")
8250 (commit version)))
8251 (file-name (git-file-name name version))
8252 (sha256
8253 (base32 "08j728nn1la570nny1xz1xvxcm9hf2mcc3im1bzcxxrrxh4kw3zd"))))
8254 (build-system pyproject-build-system)
8255 (arguments
8256 (list
8257 #:phases
8258 #~(modify-phases %standard-phases
8259 (replace 'check
8260 (lambda* (#:key tests? #:allow-other-keys)
8261 (if tests?
8262 (invoke "zope-testrunner" "--test-path=src")
8263 (format #t "test suite not run~%")))))))
8264 (propagated-inputs (list python-zope-proxy))
8265 (native-inputs (list python-zope-testrunner python-setuptools))
8266 (home-page "https://zopedeferredimport.readthedocs.io")
8267 (synopsis "Defer imports until used by code")
8268 (description
8269 "Often, especially for package modules, you want to import names for
8270convenience, but not actually perform the imports until necessary. The
8271@code{zope.deferredimport} package provided facilities for defining names in
8272modules that will be imported from somewhere else when used. You can also cause
8273deprecation warnings to be issued when a variable is used.")
8274 (license license:zpl2.1)))
8275
8276(define-public python-ndg-httpsclient
8277 (package
8278 (name "python-ndg-httpsclient")
8279 (version "0.5.1")
8280 (source
8281 (origin
8282 (method git-fetch)
8283 (uri (git-reference
8284 (url "https://github.com/cedadev/ndg_httpsclient/")
8285 (commit version)))
8286 (file-name (git-file-name name version))
8287 (sha256
8288 (base32 "0lhsgs4am4xyjssng5p0vkfwqncczj1dpa0vss4lrhzq86mnn5rz"))))
8289 (build-system pyproject-build-system)
8290 (arguments
8291 (list
8292 #:tests? #f)) ;Tests appear to require networking.
8293 (native-inputs (list python-setuptools))
8294 (propagated-inputs (list python-pyasn1 python-pyopenssl))
8295 (synopsis "HTTPS support for Python's httplib and urllib2")
8296 (description
8297 "This is a HTTPS client implementation for httplib and urllib2 based on
8298PyOpenSSL. PyOpenSSL provides a more fully-featured SSL implementation over
8299the default provided with Python and, importantly, enables full verification
8300of the SSL peer.")
8301 (home-page "https://github.com/cedadev/ndg_httpsclient/")
8302 (license license:bsd-3)))
8303
8304(define-public python-netaddr
8305 (package
8306 (name "python-netaddr")
8307 (version "1.3.0")
8308 (source
8309 (origin
8310 (method url-fetch)
8311 (uri (pypi-uri "netaddr" version))
8312 (sha256
8313 (base32 "12p4ysgawhgkka0sz1dkwgwc2za80dxdp9wvfxivfldmjnc3sg2w"))))
8314 (build-system pyproject-build-system)
8315 (native-inputs (list python-poetry-core
8316 python-pytest
8317 python-setuptools
8318 python-wheel))
8319 (home-page "https://netaddr.readthedocs.io")
8320 (synopsis "Pythonic manipulation of network addresses")
8321 (description
8322 "A Python library for representing and manipulating IPv4, IPv6, CIDR, EUI
8323and MAC network addresses.")
8324 (license license:bsd-3)))
8325
8326(define-public python-nh3
8327 (package
8328 (name "python-nh3")
8329 (version "0.2.20")
8330 (source
8331 (origin
8332 (method url-fetch)
8333 (uri (pypi-uri "nh3" version))
8334 (sha256
8335 (base32 "1mcf3y5294glji9lhzh57wymw4srbvzdg0kcakm0p2pqgwnw81cp"))))
8336 (build-system pyproject-build-system)
8337 (arguments
8338 (list
8339 #:imported-modules `(,@%cargo-build-system-modules
8340 ,@%pyproject-build-system-modules)
8341 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
8342 (guix build pyproject-build-system)
8343 (guix build utils))
8344 #:phases
8345 #~(modify-phases %standard-phases
8346 (add-after 'unpack 'prepare-cargo-build-system
8347 (lambda args
8348 (for-each
8349 (lambda (phase)
8350 (format #t "Running cargo phase: ~a~%" phase)
8351 (apply (assoc-ref cargo:%standard-phases phase)
8352 #:cargo-target #$(cargo-triplet)
8353 args))
8354 '(unpack-rust-crates
8355 configure
8356 check-for-pregenerated-files
8357 patch-cargo-checksums)))))))
8358 (native-inputs
8359 (append
8360 (list maturin python-pytest rust `(,rust "cargo"))
8361 (or (and=> (%current-target-system)
8362 (compose list make-rust-sysroot))
8363 '())))
8364 (inputs (cargo-inputs 'python-nh3))
8365 (home-page "https://nh3.readthedocs.io")
8366 (synopsis "Python bindings to Ammonia HTML sanitization library")
8367 (description "This package provides Python bindings to Ammonia HTML
8368sanitizer Rust crate.")
8369 (license license:expat)))
8370
8371(define-public python-noiseprotocol
8372 (package
8373 (name "python-noiseprotocol")
8374 (version "0.3.1")
8375 (source
8376 (origin
8377 (method git-fetch)
8378 (uri (git-reference
8379 (url "https://github.com/plizonczyk/noiseprotocol")
8380 (commit (string-append "v" version))))
8381 (file-name (git-file-name name version))
8382 (sha256
8383 (base32 "1mk0rqpjifdv3v1cjwkdnjbrfmzzjm9f3qqs1r8vii4j2wvhm6am"))))
8384 (build-system pyproject-build-system)
8385 (propagated-inputs (list python-cryptography))
8386 (native-inputs (list python-setuptools python-pytest))
8387 (home-page "https://github.com/plizonczyk/noiseprotocol")
8388 (synopsis "Implementation of Noise Protocol Framework")
8389 (description
8390 "This package provides an implementation of Noise Protocol Framework.")
8391 (license license:expat)))
8392
8393(define-public python-webrtcvad-wheels
8394 (package
8395 (name "python-webrtcvad-wheels")
8396 (version "2.0.14")
8397 (source
8398 (origin
8399 (method git-fetch)
8400 (uri (git-reference
8401 (url "https://github.com/daanzu/py-webrtcvad-wheels")
8402 (commit (string-append "v" version))))
8403 (file-name (git-file-name name version))
8404 (sha256
8405 (base32 "0sqgg8jmg2j14f4h96h0rs42kr460v65lhanps6lhdvj5zp81cbh"))))
8406 (build-system pyproject-build-system)
8407 (native-inputs (list python-psutil python-pytest python-setuptools))
8408 (home-page "https://github.com/daanzu/py-webrtcvad-wheels")
8409 (synopsis "Python interface to the WebRTC Voice Activity Detector (VAD)")
8410 (description
8411 "This package provides a Python interface to the Google
8412@url{https://webrtc.org/, WebRTC} @acronym{VAD, Voice Activity Detector}.")
8413 (license license:expat)))
8414
8415(define-public python-websocket-client
8416 (package
8417 (name "python-websocket-client")
8418 (version "1.8.0")
8419 (source
8420 (origin
8421 (method url-fetch)
8422 (uri (pypi-uri "websocket_client" version))
8423 (sha256
8424 (base32 "1nn3qi5g59j55wfy2z02j6lq2cm281fq0wi406b2yqys8jgxyf9j"))))
8425 (build-system pyproject-build-system)
8426 (arguments
8427 (list
8428 #:test-flags
8429 ;; This test requires networking.
8430 '(list "-k" "not testConnect")))
8431 (native-inputs
8432 (list python-pysocks
8433 python-pytest
8434 python-setuptools
8435 python-websockets
8436 python-wheel))
8437 (home-page "https://github.com/websocket-client/websocket-client")
8438 (synopsis "WebSocket client for Python")
8439 (description "The Websocket-client module provides the low level APIs for
8440WebSocket usage in Python programs.")
8441 (license license:lgpl2.1+)))
8442
8443(define-public python-websocket-client-0.59
8444 (package
8445 (inherit python-websocket-client)
8446 (version "0.59.0")
8447 (source
8448 (origin
8449 (method url-fetch)
8450 (uri (pypi-uri "websocket-client" version))
8451 (sha256
8452 (base32 "0p0cz2mdissq7iw1n7jrmsfir0jfmgs1dvnpnrx477ffx9hbsxnk"))))
8453 (native-inputs
8454 (modify-inputs native-inputs
8455 (append python-six)))))
8456
8457(define-public python-purl
8458 (package
8459 (name "python-purl")
8460 (version "1.6")
8461 (source
8462 (origin
8463 (method git-fetch)
8464 (uri (git-reference
8465 (url "https://github.com/codeinthehole/purl")
8466 (commit version)))
8467 (file-name (git-file-name name version))
8468 (sha256
8469 (base32 "01zngf0s0qfsrsk0skn57frbzyscwv8467pfjk6hxdfgdx2wkg95"))))
8470 (build-system pyproject-build-system)
8471 (arguments
8472 (list
8473 #:test-flags #~(list "--pyargs" "./tests")))
8474 (native-inputs (list python-pytest python-setuptools))
8475 (propagated-inputs (list python-six))
8476 (home-page "https://github.com/codeinthehole/purl")
8477 (synopsis "Python package for URL manipulation")
8478 (description "Purl is a Python package for handling URLs.")
8479 (license license:expat)))
8480
8481(define-public python-requests
8482 (package
8483 (name "python-requests")
8484 (version "2.34.2")
8485 (source (origin
8486 (method url-fetch)
8487 (uri (pypi-uri "requests" version))
8488 (sha256
8489 (base32
8490 "1vdrc3lq9x848760n7mdhn8whsfslk30pmnnk0v4caafmr69527j"))))
8491 (build-system pyproject-build-system)
8492 (arguments
8493 (list #:test-flags
8494 ;; These require internet access
8495 '(list "--ignore=tests/test_requests.py"
8496 "-k" (string-append "not test_use_proxy_from_environment"
8497 " and not requests.sessions.Session"
8498 " and not requests.models.PreparedRequest"
8499 " and not requests.api.request")
8500 "tests/")))
8501 (propagated-inputs
8502 (list python-certifi
8503 python-charset-normalizer
8504 python-idna
8505 python-urllib3))
8506 (native-inputs
8507 (list python-pytest
8508 python-pytest-mock
8509 python-setuptools))
8510 (home-page "https://requests.readthedocs.io/")
8511 (synopsis "Python HTTP library")
8512 (description
8513 "Requests is a Python HTTP client library. It aims to be easier to use
8514than Python’s urllib2 library.")
8515 (license license:asl2.0)))
8516
8517(define-public python-requests-kerberos
8518 (package
8519 (name "python-requests-kerberos")
8520 (version "0.14.0")
8521 ;; No tests in the PyPI tarball.
8522 (source
8523 (origin
8524 (method git-fetch)
8525 (uri (git-reference
8526 (url "https://github.com/requests/requests-kerberos")
8527 (commit (string-append "v" version))))
8528 (file-name (git-file-name name version))
8529 (sha256
8530 (base32 "0s30pcnlir3j2jmf7yh065f294cf3x0x5i3ldskn8mm0a3657mv3"))))
8531 (build-system pyproject-build-system)
8532 (propagated-inputs (list python-cryptography
8533 python-pyspnego
8534 python-requests))
8535 (native-inputs (list python-pytest python-pytest-mock python-setuptools
8536 python-wheel))
8537 (home-page "https://github.com/requests/requests-kerberos")
8538 (synopsis "Kerberos authentication handler for python-requests")
8539 (description "This package provides a Kerberos authentication handler for
8540python-requests.")
8541 (license license:isc)))
8542
8543(define-public python-requests-unixsocket2
8544 (package
8545 (name "python-requests-unixsocket2")
8546 (version "1.0.1")
8547 (source
8548 (origin
8549 (method git-fetch)
8550 (uri (git-reference
8551 (url "https://gitlab.com/thelabnyc/requests-unixsocket2")
8552 (commit (string-append "v" version))))
8553 (sha256
8554 (base32 "0wb8ckagal9d6lfyl3pf9m45xn1krq6vg8kzciwv12chq9wwh0ra"))))
8555 (build-system pyproject-build-system)
8556 (native-inputs
8557 (list nss-certs-for-test
8558 python-hatchling
8559 python-pytest
8560 python-waitress))
8561 (propagated-inputs
8562 (list python-requests
8563 python-urllib3))
8564 (home-page "https://gitlab.com/thelabnyc/requests-unixsocket2")
8565 (synopsis "Talk HTTP via a UNIX domain socket")
8566 (description
8567 "This Python package lets you use the @code{requests} library to talk
8568HTTP via a UNIX domain socket.")
8569 (license license:asl2.0)))
8570
8571(define-public python-requests-ntlm
8572 (package
8573 (name "python-requests-ntlm")
8574 (version "1.3.0")
8575 (source
8576 (origin
8577 (method git-fetch)
8578 (uri (git-reference
8579 (url "https://github.com/requests/requests-ntlm")
8580 (commit (string-append "v" version))))
8581 (file-name (git-file-name name version))
8582 (sha256
8583 (base32 "0snsk66zdihdlyfjz2zgpyfgdyjg814m3cc4g3my09hdnb5xvagv"))))
8584 (build-system pyproject-build-system)
8585 (arguments
8586 (list
8587 #:test-flags
8588 ;; XXX: Connection refused.
8589 #~(list "-k" (string-join
8590 (list "not test_ntlm_http_with_cbt"
8591 "test_ntlm_http_without_cbt"
8592 "test_ntlm_https_with_cbt"
8593 "test_ntlm_https_without_cbt")
8594 " and not "))
8595 #:phases
8596 #~(modify-phases %standard-phases
8597 (add-before 'check 'spawn-test-server
8598 (lambda _
8599 ;; Taken from .github/workflows/ci.yml.
8600 (spawn "python"
8601 (list "python" "-m" "tests.test_server")))))))
8602 (propagated-inputs
8603 (list python-cryptography python-pyspnego python-requests))
8604 (native-inputs (list python-flask python-pytest python-setuptools))
8605 (home-page "https://github.com/requests/requests-ntlm")
8606 (synopsis "NTLM authentication support for Requests")
8607 (description
8608 "This package allows for HTTP NTLM authentication using the requests
8609library.")
8610 (license license:isc)))
8611
8612(define-public python-requests-mock
8613 (package
8614 (name "python-requests-mock")
8615 (version "1.12.1")
8616 (source
8617 (origin
8618 (method url-fetch)
8619 (uri (pypi-uri "requests-mock" version))
8620 (sha256
8621 (base32 "008l6xysgs6ax56lairg1li5i4bb04i2z19w5bl5claj7crjxqg9"))))
8622 (build-system pyproject-build-system)
8623 (native-inputs
8624 (list python-purl
8625 python-pytest
8626 python-requests-futures
8627 python-setuptools
8628 python-setuptools-scm
8629 python-testtools))
8630 (propagated-inputs
8631 (list python-requests))
8632 (home-page "https://requests-mock.readthedocs.org/")
8633 (synopsis "Mock out responses from the requests package")
8634 (description
8635 "This module provides a building block to stub out the HTTP requests
8636portions of your testing code.")
8637 (license license:asl2.0)))
8638
8639(define-public python-requests-toolbelt
8640 (package
8641 (name "python-requests-toolbelt")
8642 (version "1.0.0")
8643 (source
8644 (origin
8645 (method url-fetch)
8646 (uri (pypi-uri "requests-toolbelt" version))
8647 (sha256
8648 (base32 "1ijvip427ki177ycrblcn1mfgsq7ixzpvqqfvidjn0a7s2is10bn"))))
8649 (build-system pyproject-build-system)
8650 (arguments
8651 (list
8652 #:test-flags
8653 ;; Requiring networking or fail due not valid certs: AttributeError:
8654 ;; 'MockHTTPResponse' object has no attribute 'close'
8655 #~(list "-k" (string-append "not test_dump_all"
8656 " and not test_dump_response"
8657 " and not test_prepared_request_override_base"
8658 " and not test_prepared_request_with_base"
8659 " and not test_request_override_base"
8660 " and not test_request_with_base"))))
8661 (native-inputs
8662 (list python-betamax
8663 python-mock
8664 python-pyopenssl
8665 python-pytest
8666 python-setuptools
8667 python-trustme
8668 python-wheel))
8669 (propagated-inputs
8670 (list python-requests))
8671 (synopsis "Extensions to python-requests")
8672 (description "This is a toolbelt of useful classes and functions to be used
8673with python-requests.")
8674 (home-page "https://github.com/requests/toolbelt/")
8675 (license license:asl2.0)))
8676
8677(define-public python-requests-ftp
8678 (package
8679 (name "python-requests-ftp")
8680 (version "0.3.1")
8681 (source
8682 (origin
8683 (method git-fetch)
8684 (uri (git-reference
8685 (url "https://github.com/Lukasa/requests-ftp")
8686 (commit (string-append "v" version))))
8687 (file-name (git-file-name name version))
8688 (sha256
8689 (base32 "1c7xbz2fxb12ldaw2pkfg5qd29g6slf4a2gavhqvz26cd1r82ny7"))))
8690 (build-system pyproject-build-system)
8691 (arguments
8692 ;; XXX: No connection adapters found.
8693 (list #:test-flags #~(list "--ignore=tests/test_ftp_proxy.py")))
8694 (native-inputs
8695 (list python-pyftpdlib python-pytest python-setuptools python-six))
8696 (propagated-inputs (list python-requests))
8697 (home-page "https://github.com/Lukasa/requests-ftp")
8698 (synopsis "FTP Transport Adapter for Requests")
8699 (description "Requests-FTP is an implementation of a simple FTP transport
8700adapter for use with the Requests library.")
8701 (license license:asl2.0)))
8702
8703(define-public python-mohawk
8704 (let ((commit "b7899166880e890f01cf2531b5686094ba08df8f")
8705 (revision "0"))
8706 (package
8707 (name "python-mohawk")
8708 (version (git-version "1.1.0" revision commit))
8709 (source
8710 (origin
8711 (method git-fetch)
8712 (uri (git-reference
8713 (url "https://github.com/kumar303/mohawk")
8714 (commit commit)))
8715 (file-name (git-file-name name version))
8716 (sha256
8717 (base32 "00y9fimcj851rk2770wqk61fac9pnxfnzca4fvsci57zw18i50m6"))
8718 (patches
8719 (search-patches "python-mohawk-pytest.patch"))))
8720 (build-system pyproject-build-system)
8721 (arguments
8722 (list #:test-flags #~(list "mohawk/tests.py")))
8723 (native-inputs (list python-pytest python-setuptools))
8724 (propagated-inputs (list python-six)) ;TODO: remove python-mohawk when
8725 ;python-six is removed?
8726 (home-page "https://github.com/kumar303/mohawk")
8727 (synopsis "Library for Hawk HTTP authorization")
8728 (description
8729 "Mohawk is an alternate Python implementation of the Hawk HTTP
8730authorization scheme.")
8731 (license license:bsd-3))))
8732
8733(define-public python-msal
8734 (package
8735 (name "python-msal")
8736 (version "1.34.0")
8737 (home-page
8738 "https://github.com/AzureAD/microsoft-authentication-library-for-python")
8739 (source
8740 (origin
8741 (method git-fetch)
8742 (uri (git-reference
8743 (url home-page)
8744 (commit version)))
8745 (file-name (git-file-name name version))
8746 (sha256
8747 (base32 "1xcyiv742ihnzypjw7syamnhqffdy6wsvvv0f5jcl3pap0apbk0z"))
8748 (patches (search-patches "python-msal-requests.patch"))))
8749 (build-system pyproject-build-system)
8750 (arguments
8751 (list
8752 #:test-flags
8753 #~(list
8754 "--ignore=tests/test_benchmark.py"
8755 ;; XXX: Ignoring cryptography version scheme tests.
8756 "-k"
8757 "not test_ceiling_should_be_latest_cryptography_version_plus_three"
8758 ;; XXX: These tests try to access the network.
8759 "--ignore=tests/test_application.py"
8760 "--ignore=tests/test_ccs.py"
8761 ;; XXX: These tests assume they are run on Windows.
8762 "--ignore=tests/test_mi.py")
8763 #:phases
8764 #~(modify-phases %standard-phases
8765 (add-after 'unpack 'set-cryptography-version
8766 (lambda _
8767 (substitute* "tests/test_cryptography.py"
8768 (("^latest_cryptography_version = @version@")
8769 (format #f "latest_cryptography_version = ~s"
8770 #$(package-version
8771 (this-package-input "python-cryptography")))))))
8772 (add-before 'check 'configure-tests
8773 (lambda* (#:key tests? #:allow-other-keys)
8774 (when tests?
8775 (setenv "TRAVIS_TAG" "1")))))))
8776 (native-inputs
8777 (list nss-certs-for-test python-mock python-pytest python-setuptools))
8778 (propagated-inputs (list python-cryptography python-pyjwt python-requests))
8779 (synopsis "Microsoft Authentication Library (MSAL) for Python")
8780 (description
8781 "The Microsoft Authentication Library for Python enables applications to
8782integrate with the Microsoft identity platform. It allows you to sign in
8783users or apps with Microsoft identities (Azure AD, Microsoft Accounts and
8784Azure AD B2C accounts) and obtain tokens to call Microsoft APIs such as
8785Microsoft Graph or your own APIs registered with the Microsoft identity
8786platform. It is built using industry standard OAuth2 and OpenID Connect
8787protocols.")
8788 (license license:expat)))
8789
8790(define-public python-oauthlib
8791 (package
8792 (name "python-oauthlib")
8793 (version "3.3.1")
8794 (source
8795 (origin
8796 (method git-fetch)
8797 (uri (git-reference
8798 (url "https://github.com/oauthlib/oauthlib")
8799 (commit (string-append "v" version))))
8800 (file-name (git-file-name name version))
8801 (sha256
8802 (base32 "0aa38lpa6s1k56v7w7kw2w4l159kaz4gn03m698a8hfdjkx92fb5"))))
8803 (build-system pyproject-build-system)
8804 (native-inputs (list python-pytest python-mock python-setuptools))
8805 (propagated-inputs (list python-cryptography python-pyjwt python-blinker))
8806 (home-page "https://github.com/oauthlib/oauthlib")
8807 (synopsis "OAuth implementation for Python")
8808 (description
8809 "Oauthlib is a generic, spec-compliant, thorough implementation of the
8810OAuth request-signing logic.")
8811 (license license:bsd-3)))
8812
8813(define-public python-urllib3
8814 (package
8815 (name "python-urllib3")
8816 (version "2.7.0")
8817 (source
8818 (origin
8819 (method url-fetch)
8820 (uri (pypi-uri "urllib3" version))
8821 (sha256
8822 (base32
8823 "0k2za0kdl4y8mdhay0wbnf6522n4ybr61gk7gik19srwnv1hw7i3"))))
8824 (build-system pyproject-build-system)
8825 (arguments `(#:tests? #f))
8826 (native-inputs
8827 (list python-hatch-vcs
8828 python-hatchling
8829 python-setuptools-scm))
8830 (propagated-inputs
8831 (append
8832 ;; These 5 inputs are used to build urrlib3[secure]
8833 (list python-certifi
8834 python-idna
8835 python-pysocks)
8836 (if (member (%current-system)
8837 (package-transitive-supported-systems python-cryptography))
8838 (list python-cryptography)
8839 '())
8840 (if (member (%current-system)
8841 (package-transitive-supported-systems python-pyopenssl))
8842 (list python-pyopenssl)
8843 '())))
8844 (home-page "https://urllib3.readthedocs.io/")
8845 (synopsis "HTTP library with thread-safe connection pooling")
8846 (description
8847 "Urllib3 supports features left out of urllib and urllib2 libraries. It
8848can reuse the same socket connection for multiple requests, it can POST files,
8849supports url redirection and retries, and also gzip and deflate decoding.")
8850 (license license:expat)))
8851
8852(define-public python-urllib3-1.26
8853 (package
8854 (inherit python-urllib3)
8855 (version "1.26.17")
8856 (source
8857 (origin
8858 (method url-fetch)
8859 (uri (pypi-uri "urllib3" version))
8860 (sha256
8861 (base32
8862 "08fzhaf77kbjj5abpl9xag6fpfxkdp1k5s7sqd3ayacdq91a5mi4"))))
8863 (native-inputs
8864 (list python-setuptools
8865 python-wheel))))
8866
8867(define-public python-wsgiproxy2
8868 (package
8869 (name "python-wsgiproxy2")
8870 (version "0.5.1")
8871 (source
8872 (origin
8873 (method git-fetch)
8874 (uri (git-reference
8875 (url "https://github.com/gawel/WSGIProxy2/")
8876 (commit version)))
8877 (file-name (git-file-name name version))
8878 (sha256
8879 (base32 "0aw9ibla2cqzlbm3vzyk1yk3d8pccpbpdkqx99q30hq1fz1izsm2"))))
8880 (build-system pyproject-build-system)
8881 (arguments (list #:test-backend #~'unittest))
8882 (native-inputs (list python-webtest python-setuptools))
8883 (propagated-inputs (list python-requests python-six python-urllib3
8884 python-webob))
8885 (home-page "https://github.com/gawel/WSGIProxy2/")
8886 (synopsis "WSGI Proxy with various http client backends")
8887 (description
8888 "WSGI turns HTTP requests into WSGI function calls. WSGIProxy turns WSGI
8889function calls into HTTP requests. It also includes code to sign requests and
8890pass private data, and to spawn subprocesses to handle requests.")
8891 (license license:expat)))
8892
8893(define-public python-pastedeploy
8894 (package
8895 (name "python-pastedeploy")
8896 (version "3.1.0")
8897 (source
8898 (origin
8899 (method url-fetch)
8900 (uri (pypi-uri "PasteDeploy" version))
8901 (sha256
8902 (base32 "15as15mgz9xn33abwrp0x0mbj537ib3q47z8ky5475c05wasznwx"))))
8903 (build-system pyproject-build-system)
8904 (native-inputs (list python-pytest python-setuptools))
8905 (home-page "https://pylonsproject.org/")
8906 (synopsis "Load, configure, and compose WSGI applications and servers")
8907 (description
8908 "This tool provides code to load WSGI applications and servers from URIs;
8909these URIs can refer to Python Eggs for INI-style configuration files. Paste
8910Script provides commands to serve applications based on this configuration
8911file.")
8912 (license license:expat)))
8913
8914(define-public python-webtest
8915 (package
8916 (name "python-webtest")
8917 (version "3.0.6")
8918 (source
8919 (origin
8920 (method url-fetch)
8921 (uri (pypi-uri "webtest" version))
8922 (sha256
8923 (base32 "0jwl8i9xvm5xim1h2jrwfbqac1g3fpiazfdwfp2md3s4899gsmj2"))))
8924 (build-system pyproject-build-system)
8925 (arguments
8926 ;; Tests require python-pyquery, which creates a circular dependency.
8927 `(#:tests? #f))
8928 (native-inputs
8929 (list python-setuptools))
8930 (propagated-inputs
8931 (list python-beautifulsoup4
8932 python-waitress
8933 python-webob))
8934 (home-page "https://docs.pylonsproject.org/projects/webtest/")
8935 (synopsis "Helper to test WSGI applications")
8936 (description
8937 "Webtest allows you to test your Python web applications without
8938starting an HTTP server. It supports anything that supports the minimum of
8939WSGI.")
8940 (license license:expat)))
8941
8942(define-public python-flask
8943 (package
8944 (name "python-flask")
8945 (version "3.1.3")
8946 (source
8947 (origin
8948 (method git-fetch)
8949 (uri (git-reference
8950 (url "https://github.com/pallets/flask")
8951 (commit version)))
8952 (file-name (git-file-name name version))
8953 (sha256
8954 (base32 "006s5rm4syg48ymmwlnrkx8f8j758waksvhdsfiqx51zv52c0p8l"))))
8955 (build-system pyproject-build-system)
8956 (arguments
8957 (list
8958 #:test-flags
8959 ;; assert 404 == 400
8960 ;; This test is removed on master branch.
8961 #~(list (string-append "--deselect=tests/test_reqctx.py"
8962 "::test_bad_environ_raises_bad_request"))))
8963 (native-inputs
8964 (list python-flit-core
8965 python-pytest))
8966 (propagated-inputs
8967 (list python-blinker
8968 python-click
8969 python-itsdangerous
8970 python-jinja2
8971 python-markupsafe
8972 python-werkzeug
8973 ;; [optional]
8974 python-asgiref
8975 python-dotenv))
8976 (home-page "https://palletsprojects.com/p/flask/")
8977 (synopsis "Microframework based on Werkzeug, Jinja2 and good intentions")
8978 (description "Flask is a micro web framework based on the Werkzeug toolkit
8979and Jinja2 template engine. It is called a micro framework because it does not
8980presume or force a developer to use a particular tool or library.")
8981 (license license:bsd-3)))
8982
8983(define-public python-flask-compress
8984 (package
8985 (name "python-flask-compress")
8986 (version "1.24")
8987 (source
8988 (origin
8989 (method git-fetch)
8990 (uri (git-reference
8991 (url "https://github.com/colour-science/flask-compress")
8992 (commit (string-append "v" version))))
8993 (file-name (git-file-name name version))
8994 (sha256
8995 (base32 "0mid5c34r75vax1r7l2l5sjjhs6bl8rbsdmhc7kz39snq6xw3cr5"))))
8996 (build-system pyproject-build-system)
8997 (native-inputs
8998 (list python-flask-caching
8999 python-pytest
9000 python-setuptools
9001 python-setuptools-scm))
9002 (propagated-inputs
9003 (list python-backports-zstd
9004 python-brotli
9005 python-flask))
9006 (home-page "https://github.com/colour-science/flask-compress")
9007 (synopsis "Compress responses in a Flask app")
9008 (description
9009 "This package lets you compress Flask application responses and static
9010files with gzip, deflate or brotli. Flask-Compress both adds the various
9011headers required for a compressed response and compresses the response data.")
9012 (license license:expat)))
9013
9014(define-public python-flask-seasurf
9015 (package
9016 (name "python-flask-seasurf")
9017 (version "2.0.0")
9018 (source (origin
9019 (method url-fetch)
9020 (uri (pypi-uri "Flask-SeaSurf" version))
9021 (sha256
9022 (base32
9023 "0g5dsm2ikv8q4qcrb2446pbs972l5wkxyfmxsriqdsl02nz06h4f"))))
9024 (build-system pyproject-build-system)
9025 (arguments
9026 (list #:tests? #false)) ;there are none
9027 (propagated-inputs (list python-flask))
9028 (native-inputs (list python-setuptools python-wheel))
9029 (home-page "https://github.com/maxcountryman/flask-seasurf/")
9030 (synopsis "CSRF extension for Flask")
9031 (description "SeaSurf is a Flask extension for preventing cross-site
9032request forgery (CSRF). CSRF attacks are problematic because the mechanism
9033they use is relatively easy to exploit. This extension attempts to aid you in
9034securing your application from such attacks. This extension is based on the
9035Django middleware.")
9036 (license license:bsd-3)))
9037
9038(define-public python-flask-wtf
9039 (package
9040 (name "python-flask-wtf")
9041 (version "1.2.2")
9042 (source
9043 (origin
9044 (method url-fetch)
9045 (uri (pypi-uri "Flask-WTF" version))
9046 (sha256
9047 (base32
9048 "0sv6hjva1fdizb7sr46230pplx8qz8rnb4bxrfy71xbc8cgfxlkr"))))
9049 (build-system pyproject-build-system)
9050 (propagated-inputs
9051 (list python-flask python-flask python-itsdangerous python-wtforms))
9052 (native-inputs
9053 (list python-hatchling python-pytest))
9054 (home-page "https://github.com/lepture/flask-wtf")
9055 (synopsis "Simple integration of Flask and WTForms")
9056 (description "Flask-WTF integrates Flask and WTForms, including CSRF, file
9057upload, and reCAPTCHA.")
9058 (license license:bsd-3)))
9059
9060(define-public python-flask-multistatic
9061 (package
9062 (name "python-flask-multistatic")
9063 (version "1.0")
9064 (source
9065 (origin
9066 (method url-fetch)
9067 (uri (pypi-uri "flask-multistatic" version))
9068 (sha256
9069 (base32
9070 "0p4v50rwv64wcd0zlq7rzl4waprwr4hj19s3cgf1isywa7jcisgm"))))
9071 (build-system pyproject-build-system)
9072 (arguments (list #:tests? #f)) ; No tests upstream.
9073 (native-inputs (list python-setuptools))
9074 (propagated-inputs (list python-flask))
9075 (home-page "https://pagure.io/flask-multistatic")
9076 (synopsis "Flask plugin to allow overriding static files")
9077 (description "@code{flask-multistatic} is a flask plugin that adds support
9078for overriding static files.")
9079 (license license:gpl3+)))
9080
9081(define-public python-responses
9082 (package
9083 (name "python-responses")
9084 (version "0.25.3")
9085 (source (origin
9086 (method url-fetch)
9087 (uri (pypi-uri "responses" version))
9088 (sha256
9089 (base32
9090 "1fld6lsa143md4lxccwxq9iyqm9d8a05i9sp7lqjibnrmd3r4yv1"))))
9091 (build-system pyproject-build-system)
9092 (native-inputs
9093 (list python-pytest
9094 python-pytest-asyncio
9095 python-pytest-httpserver
9096 python-setuptools
9097 python-tomli
9098 python-tomli-w
9099 python-wheel))
9100 (propagated-inputs
9101 (list python-requests
9102 python-pyyaml
9103 python-urllib3))
9104 (home-page "https://github.com/getsentry/responses")
9105 (synopsis "Utility for mocking out the `requests` Python library")
9106 (description "A utility library for mocking out the `requests` Python
9107library.")
9108 (license license:asl2.0)))
9109
9110(define-public python-grequests
9111 (let ((commit "60f70e99e942a2df378b4e4f6202dcf862754c2d")
9112 (revision "0"))
9113 (package
9114 (name "python-grequests")
9115 (version (git-version "0.7.0" revision commit))
9116 (source
9117 (origin
9118 (method git-fetch)
9119 (uri (git-reference
9120 (url "https://github.com/kennethreitz/grequests")
9121 (commit commit)))
9122 (file-name (git-file-name name version))
9123 (sha256
9124 (base32 "0132yv1rr4pmrmwasrnasqbnd80pi6rgy52608731p7lidkmxz9a"))))
9125 (build-system pyproject-build-system)
9126 (arguments
9127 (list
9128 ;; XXX: Most failing tests seem to be caused by network access,
9129 ;; but there is no easy/flag way to disable tests selectively.
9130 #:tests? #f
9131 #:test-backend #~'unittest
9132 #:test-flags #~(list "tests.py")))
9133 (propagated-inputs (list python-gevent python-requests))
9134 (native-inputs (list python-setuptools))
9135 (home-page "https://github.com/kennethreitz/grequests")
9136 (synopsis "Python library for asynchronous HTTP requests")
9137 (description
9138 "GRequests is a Python library that allows you to use @code{Requests}
9139with @code{Gevent} to make asynchronous HTTP Requests easily.")
9140 (license license:bsd-2))))
9141
9142(define-public python-gwebsockets
9143 (package
9144 (name "python-gwebsockets")
9145 (version "0.7")
9146 (source
9147 (origin
9148 (method git-fetch)
9149 (uri (git-reference
9150 (url "https://github.com/sugarlabs/gwebsockets")
9151 (commit (string-append "v" version))))
9152 (file-name (git-file-name name version))
9153 (sha256
9154 (base32 "0w422yz0qdix5xb6aqrrci1s1hy4whncspwb03m9ankqww0s1yv2"))))
9155 (build-system pyproject-build-system)
9156 (arguments (list #:tests? #f)) ; No tests upstream.
9157 (native-inputs (list python-setuptools))
9158 (propagated-inputs (list python-pygobject))
9159 (home-page "https://github.com/sugarlabs/gwebsockets")
9160 (synopsis "GLib based websockets server")
9161 (description
9162 "This package provides a websocket server written in Python. It uses GIO
9163for network communication and hence it easily integrates with the GLib
9164mainloop.")
9165 (license license:asl2.0)))
9166
9167(define-public python-dpkt
9168 (package
9169 (name "python-dpkt")
9170 (version "1.9.8")
9171 (source
9172 (origin
9173 (method git-fetch)
9174 (uri (git-reference
9175 (url "https://github.com/kbandla/dpkt")
9176 (commit (string-append "v" version))))
9177 (file-name (git-file-name name version))
9178 (sha256
9179 (base32 "0dhy8l4sqfxqdda6lishb95g3v6hnw14l20ipqpzb6vaw1vf7mzj"))))
9180 (build-system pyproject-build-system)
9181 (arguments
9182 (list
9183 #:test-flags
9184 #~(list "--pyargs" "dpkt")))
9185 (native-inputs (list python-pytest python-setuptools))
9186 (home-page "https://github.com/kbandla/dpkt")
9187 (synopsis "Packet generator and parser for TCP/IP protocols")
9188 (description
9189 "The dpkt module is a fast, simple packet generator and parser for the
9190basic TCP/IP protocols.")
9191 (license license:bsd-3)))
9192
9193(define-public python-geventhttpclient
9194 (package
9195 (name "python-geventhttpclient")
9196 (version "2.3.9")
9197 (source (origin
9198 (method git-fetch)
9199 (uri (git-reference
9200 (url "https://github.com/geventhttpclient/geventhttpclient")
9201 (commit version)
9202 (recursive? #true)))
9203 (file-name (git-file-name name version))
9204 (sha256
9205 (base32
9206 "1diq6n9sr92rsqbpxlbhbn1d22hrlzp6swykz9bfzh7sxpywa6j8"))))
9207 (build-system pyproject-build-system)
9208 (arguments
9209 (list
9210 #:test-flags
9211 ;; Disable network tests.
9212 '(list "-k"
9213 (string-append "not test_client_simple"
9214 " and not test_client_ssl"
9215 " and not test_client_with_default_headers"
9216 " and not test_client_without_leading_slash"
9217 " and not test_download"
9218 " and not test_fail_invalid_ca_certificate"
9219 " and not test_httpbin_multipart"
9220 " and not test_multi_queries_greenlet_safe"
9221 " and not test_no_form_encode_header"
9222 " and not test_no_form_encoded_header"
9223 " and not test_request_with_headers"
9224 " and not test_response_context_manager"
9225 " and not test_urllib_request"))))
9226 (native-inputs (list nss-certs-for-test
9227 python-dpkt python-pytest python-requests
9228 python-setuptools python-wheel))
9229 (propagated-inputs (list python-brotli python-certifi python-gevent
9230 python-urllib3))
9231 (home-page "https://github.com/geventhttpclient/geventhttpclient")
9232 (synopsis "HTTP client library for gevent")
9233 (description "@code{python-geventhttpclient} is a high performance,
9234concurrent HTTP client library for python using @code{gevent}.")
9235 (license license:expat)))
9236
9237(define-public python-gevent-websocket
9238 (package
9239 (name "python-gevent-websocket")
9240 (version "0.10.1")
9241 (source
9242 (origin
9243 (method url-fetch)
9244 (uri (pypi-uri "gevent-websocket" version))
9245 (sha256
9246 (base32 "1c2zv2rahp1gil3cj66hfsqgy0n35hz9fny3ywhr2319d0lz7bky"))))
9247 (build-system pyproject-build-system)
9248 (arguments
9249 (list #:tests? #f)) ; no tests in PyPI or git
9250 (native-inputs
9251 (list python-setuptools
9252 python-wheel))
9253 (propagated-inputs
9254 (list python-gevent))
9255 (home-page "https://gitlab.com/noppo/gevent-websocket")
9256 (synopsis "Websocket handler for the gevent pywsgi server")
9257 (description
9258 "Websocket handler for the gevent pywsgi server, a Python network
9259library.
9260
9261Features include:
9262@itemize
9263@item integration on both socket level or using an abstract interface
9264@item RPC and PubSub framework using @acronym{WebSocket Application Messaging
9265Protocol, WAMP}
9266@item easily extendible using a simple WebSocket protocol plugin API
9267@end itemize")
9268 (license license:asl2.0)))
9269
9270(define-public python-requests-oauthlib
9271 (package
9272 (name "python-requests-oauthlib")
9273 (version "2.0.0")
9274 (source
9275 (origin
9276 (method git-fetch)
9277 (uri (git-reference (url
9278 "https://github.com/requests/requests-oauthlib")
9279 (commit (string-append "v" version))))
9280 (file-name (git-file-name name version))
9281 (sha256 (base32 "0i0vnanxqilnf2rgng7n96rl8fzq0dbcl3rpl7zkxj50kv66nqwl"))))
9282 (build-system pyproject-build-system)
9283 (arguments
9284 (list
9285 #:test-flags
9286 #~(list
9287 "--ignore=tests/test_core.py" ; requires network access.
9288 "--ignore=tests/examples/test_native_spa_pkce_auth0.py"
9289 "-k" "not test_fetch_access_token"))) ; flaky tests.
9290 (native-inputs
9291 (list python-requests-mock python-pytest python-setuptools))
9292 (propagated-inputs
9293 (list python-oauthlib python-requests))
9294 (home-page "https://github.com/requests/requests-oauthlib")
9295 (synopsis "OAuthlib authentication support for Requests")
9296 (description
9297 "Requests-OAuthlib uses the Python Requests and OAuthlib libraries to
9298provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
9299 (license license:isc)))
9300
9301(define-public python-cachecontrol
9302 (package
9303 (name "python-cachecontrol")
9304 (version "0.14.1")
9305 (source
9306 (origin
9307 (method git-fetch)
9308 (uri (git-reference
9309 (url "https://github.com/ionrock/cachecontrol")
9310 (commit (string-append "v" version))))
9311 (file-name (git-file-name name version))
9312 (sha256
9313 (base32
9314 "07ifs4dhahhsgj4vxgfl5ymnmb4my5l2wb8jiinn6fncszcfmr59"))))
9315 (build-system pyproject-build-system)
9316 (propagated-inputs
9317 (list python-filelock python-msgpack python-requests))
9318 (native-inputs
9319 (list python-cherrypy python-flit-core python-pytest))
9320 (home-page "https://github.com/ionrock/cachecontrol")
9321 (synopsis "The httplib2 caching algorithms for use with requests")
9322 (description "CacheControl is a port of the caching algorithms in
9323@code{httplib2} for use with @code{requests} session objects.")
9324 (license license:asl2.0)))
9325
9326(define-public python-s3fs
9327 (package
9328 (name "python-s3fs")
9329 (version "2026.1.0")
9330 (source
9331 (origin
9332 (method url-fetch)
9333 (uri (pypi-uri "s3fs" version))
9334 (sha256
9335 (base32 "17fhx4qnpcwhrfckn27wdjvlxink1kcpaiganxij4fjmp7gm58xp"))))
9336 (build-system pyproject-build-system)
9337 ;; TODO: Many tests fail with "No such file or directory" raised by the
9338 ;; HTTP client.
9339 (arguments (list #:tests? #false))
9340 (native-inputs
9341 (list python-setuptools))
9342 (propagated-inputs
9343 (list python-aiobotocore
9344 python-aiohttp
9345 python-fsspec))
9346 (home-page "https://github.com/fsspec/s3fs/")
9347 (synopsis "Convenient filesystem interface over S3")
9348 (description "This package provides a convenient filesystem interface over
9349S3.")
9350 (license license:bsd-3)))
9351
9352(define-public python-s3transfer
9353 (package
9354 (name "python-s3transfer")
9355 (version "0.16.0")
9356 (source
9357 (origin
9358 (method url-fetch)
9359 (uri (pypi-uri "s3transfer" version))
9360 (sha256
9361 (base32 "087rmdwsn9drkh5rwwbfym5p8qvirc8gllnd54i7j9c04q9hz6cf"))))
9362 (build-system pyproject-build-system)
9363 (arguments
9364 (list
9365 ;; tests: 630 passed, 51 skipped
9366 #:test-flags
9367 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
9368 ;; Tests require networking.
9369 "--ignore" "tests/integration")))
9370 (native-inputs
9371 (list python-pytest
9372 python-pytest-xdist
9373 python-setuptools))
9374 (propagated-inputs
9375 (list python-botocore))
9376 (home-page "https://github.com/boto/s3transfer")
9377 (synopsis "Amazon S3 Transfer Manager")
9378 (description
9379 "S3transfer is a Python library for managing Amazon S3 transfers.")
9380 (license license:asl2.0)))
9381
9382(define-public python-flask-restful
9383 (package
9384 (name "python-flask-restful")
9385 (version "0.3.10")
9386 (source
9387 (origin
9388 (method url-fetch)
9389 (uri (pypi-uri "Flask-RESTful" version))
9390 (sha256
9391 (base32
9392 "0dzckjjz3aw8nmisr5g9mnv02s2nqlhblykr9ydqzpr703pz4jpy"))))
9393 (build-system pyproject-build-system)
9394 (arguments
9395 ;; See <https://github.com/flask-restful/flask-restful/issues/980>.
9396 (list #:tests? #f))
9397 (propagated-inputs
9398 (list python-aniso8601 python-flask python-pytz))
9399 (native-inputs
9400 (list python-blinker
9401 python-mock
9402 python-pytest
9403 python-setuptools
9404 python-six))
9405 (home-page "https://github.com/flask-restful/flask-restful/")
9406 (synopsis "Flask module for creating REST APIs")
9407 (description
9408 "This package contains a Flask module for creating REST APIs.")
9409 (license license:bsd-3)))
9410
9411(define-public python-flask-sqlalchemy
9412 (package
9413 (name "python-flask-sqlalchemy")
9414 ;; Released version fails tests in Python 3.12.
9415 (properties '((commit . "168cb4b7b50fe5176307a10d873781bfafc6eeda")
9416 (revision . "0")))
9417 (version (git-version "3.1.1"
9418 (assoc-ref properties 'revision)
9419 (assoc-ref properties 'commit)))
9420 (source
9421 (origin
9422 (method git-fetch)
9423 (uri (git-reference
9424 (url "https://github.com/pallets-eco/flask-sqlalchemy")
9425 (commit (assoc-ref properties 'commit))))
9426 (file-name (git-file-name name version))
9427 (sha256
9428 (base32
9429 "0xw8v1540m21x9crpgb0i3rxyhh1d24ldg354vndw9cif74ls5p6"))))
9430 (build-system pyproject-build-system)
9431 (arguments
9432 (list
9433 #:test-flags
9434 #~(list "-k" (string-append "not test_explicit_table[db2]"
9435 " and not test_explicit_table[db4]")
9436 "-W" "ignore::DeprecationWarning")))
9437 (native-inputs
9438 (list python-flit-core
9439 python-pytest))
9440 (propagated-inputs
9441 (list python-flask
9442 python-sqlalchemy-2))
9443 (home-page "https://github.com/mitsuhiko/flask-sqlalchemy")
9444 (synopsis "Module adding SQLAlchemy support to your Flask application")
9445 (description
9446 "This package adds SQLAlchemy support to your Flask application.")
9447 (license license:bsd-3)))
9448
9449(define-public python-flask-restful-swagger
9450 (package
9451 (name "python-flask-restful-swagger")
9452 (version "0.20.1")
9453 ;; XXX: Unbundle minified javascript.
9454 (source
9455 (origin
9456 (method git-fetch)
9457 (uri (git-reference
9458 (url "https://github.com/rantav/flask-restful-swagger")
9459 (commit version)))
9460 (file-name (git-file-name name version))
9461 (sha256
9462 (base32 "1ppdwn25ijf8b3zchxkvwj4ipc68v3p522i8mm51jm0w6mg5bvsh"))))
9463 (build-system pyproject-build-system)
9464 (arguments (list #:tests? #f)) ; No tests.
9465 (native-inputs (list python-setuptools))
9466 (propagated-inputs (list python-flask-restful python-six))
9467 (home-page "https://github.com/rantav/flask-restful-swagger")
9468 (synopsis "Extract Swagger specs from Flask-Restful projects")
9469 (description "This package lets you extract Swagger API documentation
9470specs from your Flask-Restful projects.")
9471 (license license:expat)))
9472
9473(define-public python-htmlmin
9474 (package
9475 (name "python-htmlmin")
9476 (version "0.1.12")
9477 (source
9478 (origin
9479 (method url-fetch)
9480 (uri (pypi-uri "htmlmin" version))
9481 (sha256
9482 (base32
9483 "0y51xhabw6x8jk8k93xl8vznshpz3jb6l28075r5sjip613fzhah"))))
9484 (build-system pyproject-build-system)
9485 (arguments
9486 (list #:tests? #f)) ; no tests
9487 (native-inputs (list python-setuptools))
9488 (home-page "https://htmlmin.readthedocs.org/en/latest/")
9489 (synopsis "HTML minifier")
9490 (description "@code{htmlmin} is an HTML minifier that just works.
9491It comes with safe defaults and easily configurable options.")
9492 (license license:bsd-3)))
9493
9494;; XXX: Forked renamed and updated version.
9495(define-public python-htmlmin2
9496 (package/inherit python-htmlmin
9497 (name "python-htmlmin2")
9498 (version "0.1.13")
9499 (source
9500 (origin
9501 (method git-fetch)
9502 (uri (git-reference
9503 (url "https://github.com/wilhelmer/htmlmin")
9504 (commit (string-append "v" version))))
9505 (file-name (git-file-name name version))
9506 (sha256
9507 (base32 "1y7mcx8d451hwa1wrg2lffg7ccdy3w5m7xwb5xqp8h2852pypfh2"))))
9508 (build-system pyproject-build-system)
9509 (arguments (list #:test-backend #~'unittest))
9510 (native-inputs (list python-setuptools))
9511 (home-page "https://github.com/wilhelmer/htmlmin")
9512 (description
9513 "@code{htmlmin2} is an HTML minifier that just works. It comes with safe
9514defaults and easily configurable options. This variant is an updated fork of
9515the original @code{python-htmlmin}.")
9516 (license license:bsd-3)))
9517
9518(define-public python-flask-htmlmin
9519 (package
9520 (name "python-flask-htmlmin")
9521 (version "3.0.0")
9522 (source
9523 (origin
9524 (method git-fetch)
9525 (uri (git-reference
9526 (url "https://github.com/hamidfzm/Flask-HTMLmin")
9527 (commit (string-append "v" version))))
9528 (file-name (git-file-name name version))
9529 (sha256
9530 (base32 "0ybqssnqwa9zgv61azp5r1grgnq28ypfhr80p9rp61x2z0y0zl32"))))
9531 (build-system pyproject-build-system)
9532 (native-inputs (list python-pytest python-setuptools))
9533 (propagated-inputs (list python-cssmin python-flask python-htmlmin2))
9534 (home-page "https://github.com/hamidfzm/Flask-HTMLmin")
9535 (synopsis "HTML response minifier for Flask")
9536 (description
9537 "Minify @code{text/html} MIME type responses when using @code{Flask}.")
9538 (license license:bsd-3)))
9539
9540(define-public python-jsmin
9541 (package
9542 (name "python-jsmin")
9543 (version "3.0.1")
9544 (source
9545 (origin
9546 (method url-fetch)
9547 (uri (pypi-uri "jsmin" version))
9548 (sha256
9549 (base32
9550 "1z1brjsvni0260bypldkl8a05sgp0qk18x560zl44igr3q99m5f0"))))
9551 (build-system pyproject-build-system)
9552 (arguments (list #:test-backend #~'unittest))
9553 (native-inputs
9554 (list python-setuptools))
9555 (home-page "https://github.com/tikitu/jsmin/")
9556 (synopsis "Python JavaScript minifier")
9557 (description
9558 "@code{jsmin} is a JavaScript minifier, usable from both Python code and
9559on the command line.")
9560 (license license:expat)))
9561
9562(define-public python-flask-login
9563 (let ((commit "c8bba84b9ba6768e878317fc46c54bd13fa1ac07")
9564 (revision "0"))
9565 (package
9566 (name "python-flask-login")
9567 (version (git-version "0.6.3" revision commit))
9568 (source
9569 (origin
9570 (method git-fetch)
9571 (uri (git-reference
9572 (url "https://github.com/maxcountryman/flask-login")
9573 (commit commit)))
9574 (file-name (git-file-name name version))
9575 (sha256
9576 (base32 "0q0ga1zwm06kvpnsf50ckmsc77959i1spx7z2y3jkbwaa4klsyli"))))
9577 (build-system pyproject-build-system)
9578 (propagated-inputs
9579 (list python-flask))
9580 (native-inputs
9581 ;; For tests.
9582 (list python-blinker
9583 python-flit-core
9584 python-mock
9585 python-pytest
9586 python-semantic-version
9587 python-werkzeug))
9588 (home-page "https://github.com/maxcountryman/flask-login")
9589 (synopsis "User session management for Flask")
9590 (description
9591 "@code{Flask-Login} provides user session management for Flask. It
9592handles the common tasks of logging in, logging out, and remembering your
9593users' sessions over extended periods of time.")
9594 (license license:expat))))
9595
9596(define-public python-oauth2client
9597 (package
9598 (name "python-oauth2client")
9599 (version "4.1.3")
9600 (source
9601 (origin
9602 (method git-fetch)
9603 (uri (git-reference
9604 (url "https://github.com/google/oauth2client/")
9605 (commit (string-append "v" version))))
9606 (file-name (git-file-name name version))
9607 (sha256
9608 (base32 "0xm19dv5kmi82zzrx3d4mp326irr3x37q818hlspz514dzjq2ad1"))))
9609 (build-system pyproject-build-system)
9610 (arguments
9611 (list #:tests? #f))
9612 (native-inputs
9613 (list python-setuptools))
9614 (propagated-inputs
9615 (list python-httplib2
9616 python-pyasn1
9617 python-pyasn1-modules
9618 python-pyparsing
9619 python-rsa
9620 python-six))
9621 (home-page "https://github.com/google/oauth2client/")
9622 (synopsis "OAuth 2.0 client library")
9623 (description "@code{python-oauth2client} provides an OAuth 2.0 client
9624library for Python")
9625 (license license:asl2.0)))
9626
9627(define-public python-flask-oidc
9628 (package
9629 (name "python-flask-oidc")
9630 (version "2.3.1")
9631 (source
9632 (origin
9633 (method url-fetch)
9634 (uri (pypi-uri "flask_oidc" version))
9635 (sha256
9636 (base32
9637 "1200xhqiqlqfmrq54v2p6cf3nny86njjw8r7sk5j59hlk9a683zk"))))
9638 (build-system pyproject-build-system)
9639 (propagated-inputs
9640 (list python-authlib
9641 python-blinker
9642 python-flask
9643 python-requests
9644 python-responses))
9645 (native-inputs
9646 (list python-pytest python-poetry-core))
9647 (home-page "https://github.com/puiterwijk/flask-oidc")
9648 (synopsis "OpenID Connect extension for Flask")
9649 (description "@code{python-flask-oidc} provides an OpenID Connect extension
9650for Flask.")
9651 (license license:bsd-2)))
9652
9653(define-public python-webassets
9654 (package
9655 (name "python-webassets")
9656 (version "3.0.0")
9657 (source
9658 (origin
9659 (method git-fetch)
9660 (uri (git-reference
9661 (url "https://github.com/miracle2k/webassets")
9662 (commit version)))
9663 (file-name (git-file-name name version))
9664 (sha256
9665 (base32 "11hxvdqw86q6r665iryjzwx21ys8jh2c63mw016ldr6j49l0zyyh"))))
9666 (build-system pyproject-build-system)
9667 (propagated-inputs (list python-pyyaml python-zope-dottedname))
9668 (native-inputs (list python-hatchling python-pytest))
9669 (home-page "https://github.com/miracle2k/webassets")
9670 (synopsis "Media asset management")
9671 (description
9672 "This package provides utilities to merge, minify and compress Javascript
9673and CSS files,supporting a variety of different filters, including YUI, jsmin,
9674jspacker or CSS tidy. It also supports URL rewriting in CSS files.")
9675 (license license:bsd-2)))
9676
9677(define-public python-cssmin
9678 (package
9679 (name "python-cssmin")
9680 (version "0.2.0")
9681 (source
9682 (origin
9683 (method git-fetch)
9684 (uri (git-reference
9685 (url "https://github.com/zacharyvoase/cssmin")
9686 (commit (string-append "v" version))))
9687 (file-name (git-file-name name version))
9688 (sha256
9689 (base32 "04bzpal6j26pjjjf3p7iq6g2wcr61j4g0ygqz6h847h4hsyah9qg"))))
9690 (build-system pyproject-build-system)
9691 (arguments (list #:tests? #f)) ; No tests.
9692 (native-inputs (list python-setuptools))
9693 (home-page "https://github.com/zacharyvoase/cssmin")
9694 (synopsis "Python port of the YUI CSS Compressor")
9695 (description "Python port of the YUI CSS Compressor.")
9696 (license (list license:expat license:bsd-3))))
9697
9698(define-public python-elastic-transport
9699 (package
9700 (name "python-elastic-transport")
9701 (version "9.1.0")
9702 (source
9703 (origin
9704 (method url-fetch)
9705 (uri (pypi-uri "elastic_transport" version))
9706 (sha256
9707 (base32 "0g879z8rqrfbwkxsm6xcycjha1swl7gdgs6m0y0j1zmh4m5f940m"))))
9708 (build-system pyproject-build-system)
9709 (arguments
9710 (list
9711 #:test-flags
9712 ;; Deselect failing tests (mostly due to network not reachable)
9713 #~(list "-k"
9714 (string-append
9715 "not .badssl.com"
9716 " and not test_assert_fingerprint_in_cert_chain_failure"))))
9717 (propagated-inputs (list python-certifi python-urllib3))
9718 (native-inputs (list nss-certs-for-test
9719 python-aiohttp
9720 ;; python-furo
9721 python-httpx
9722 python-opentelemetry-api
9723 python-opentelemetry-sdk
9724 python-orjson
9725 python-pytest
9726 python-pytest-asyncio-0.26
9727 ;; python-pytest-cov
9728 python-pytest-httpbin
9729 python-pytest-httpserver
9730 python-pytest-mock
9731 python-requests
9732 python-respx ;test
9733 python-setuptools
9734 ;; python-sphinx
9735 ;; python-sphinx-autodoc-typehints
9736 python-trustme
9737 python-wheel))
9738 (home-page "https://github.com/elastic/elastic-transport-python")
9739 (synopsis "Common library for Python Elastic client libraries")
9740 (description
9741 "This library was lifted from @code{elasticsearch-py} and then transformed to
9742be used across all Elastic services rather than only Elasticsearch. It
9743provides transport classes and utilities shared among Python Elastic client
9744libraries.")
9745 ;; Apache-2.0 in setup.py and LICENSE file.
9746 (license license:asl2.0)))
9747
9748(define-public python-elasticsearch
9749 (package
9750 (name "python-elasticsearch")
9751 (version "9.1.1")
9752 (source
9753 (origin
9754 (method git-fetch) ; no tests in PyPI release
9755 (uri (git-reference
9756 (url "https://github.com/elastic/elasticsearch-py")
9757 (commit (string-append "v" version))))
9758 (file-name (git-file-name name version))
9759 (sha256
9760 (base32 "015x73y84nyigcyg00lh32p2pfrqf834fr7clfnzymgzrrxa73jf"))))
9761 (build-system pyproject-build-system)
9762 (native-inputs
9763 (list nss-certs-for-test
9764 python-aiohttp
9765 python-dateutil
9766 python-mock
9767 python-orjson
9768 python-pytest
9769 python-pytest-asyncio
9770 python-pytz
9771 python-pyyaml
9772 python-requests
9773 python-hatchling))
9774 (propagated-inputs
9775 (list python-certifi
9776 python-elastic-transport))
9777 (home-page "https://github.com/elastic/elasticsearch-py")
9778 (synopsis "Low-level client for Elasticsearch")
9779 (description "Official low-level client for Elasticsearch. Its goal is to
9780provide common ground for all Elasticsearch-related code in Python; because of
9781this it tries to be opinion-free and very extendable.")
9782 ;; Apache-2.0 in setup.py and LICENSE file.
9783 (license license:asl2.0)))
9784
9785(define-public python-engineio
9786 (package
9787 (name "python-engineio")
9788 (version "4.13.4")
9789 (source
9790 (origin
9791 (method git-fetch)
9792 (uri (git-reference
9793 (url "https://github.com/miguelgrinberg/python-engineio/")
9794 (commit (string-append "v" version))))
9795 (file-name (git-file-name name version))
9796 (sha256
9797 (base32 "1ndp68cqssjpvln958v236rg5jgpzy57vs3z45sz7xfscmbi893r"))))
9798 (build-system pyproject-build-system)
9799 (native-inputs
9800 (list python-pytest
9801 python-pytest-asyncio
9802 python-setuptools
9803 python-tornado))
9804 (propagated-inputs
9805 (list python-simple-websocket
9806 ;; [optional]
9807 python-aiohttp
9808 python-requests
9809 python-websocket-client))
9810 (home-page "https://github.com/miguelgrinberg/python-engineio/")
9811 (synopsis "Engine.IO server")
9812 (description "This package provides a Python implementation of the
9813@code{Engine.IO} realtime client and server.")
9814 (license license:expat)))
9815
9816(define-public python-ephemeral-port-reserve
9817 (package
9818 (name "python-ephemeral-port-reserve")
9819 (version "1.1.4")
9820 (source
9821 (origin
9822 (method git-fetch)
9823 (uri (git-reference
9824 (url "https://github.com/Yelp/ephemeral-port-reserve")
9825 (commit (string-append "v" version))))
9826 (file-name (git-file-name name version))
9827 (sha256
9828 (base32 "1ifmf5zcw7mhbm73awmf5jwc4rw8lhk81mn4zp797lwkysjm38s7"))))
9829 (build-system pyproject-build-system)
9830 (native-inputs
9831 (list python-pytest
9832 python-setuptools))
9833 (home-page "https://github.com/Yelp/ephemeral-port-reserve/")
9834 (synopsis "Find an unused port, reliably")
9835 (description
9836 "Bind to an ephemeral port, force it into the TIME_WAIT state, and unbind
9837it.")
9838 (license license:expat)))
9839
9840(define-public python-flask-migrate
9841 (package
9842 (name "python-flask-migrate")
9843 (version "4.1.0")
9844 (home-page "https://github.com/miguelgrinberg/flask-migrate/")
9845 (source (origin
9846 (method git-fetch)
9847 (uri (git-reference (url home-page)
9848 (commit (string-append "v" version))))
9849 (file-name (git-file-name name version))
9850 (sha256
9851 (base32
9852 "09qw1hhyssa5gahm199x67d55c55m3k9m23xp2bdacwsiv8jw57g"))))
9853 (build-system pyproject-build-system)
9854 (propagated-inputs
9855 (list python-flask python-alembic python-flask-sqlalchemy))
9856 (native-inputs
9857 (list python-pytest python-setuptools python-wheel))
9858 (synopsis "SQLAlchemy database migrations for Flask programs using
9859Alembic")
9860 (description "This package contains SQLAlchemy database migration tools
9861for Flask programs that are using @code{python-alembic}.")
9862 (license license:expat)))
9863
9864(define-public python-genshi
9865 (package
9866 (name "python-genshi")
9867 (version "0.7.10")
9868 (source
9869 (origin
9870 (method git-fetch)
9871 (uri (git-reference
9872 (url "https://github.com/edgewall/genshi")
9873 (commit version)))
9874 (file-name (git-file-name name version))
9875 (sha256
9876 (base32 "1dmf0ggp0s3371jv483kjriw9jscawxcik6q70a0wqjdfh5383i6"))))
9877 (build-system pyproject-build-system)
9878 (arguments (list #:test-backend #~'unittest))
9879 (native-inputs (list python-setuptools))
9880 (propagated-inputs (list python-six))
9881 (home-page "https://genshi.edgewall.org/")
9882 (synopsis "Toolkit for generation of output for the web")
9883 (description "Genshi is a Python library that provides an integrated set
9884of components for parsing, generating, and processing HTML, XML or other
9885textual content for output generation on the web.")
9886 (license license:bsd-3)))
9887
9888(define-public python-flask-principal
9889 (package
9890 (name "python-flask-principal")
9891 (version "0.4.0")
9892 (source
9893 (origin
9894 (method git-fetch)
9895 (uri (git-reference
9896 (url "https://github.com/pallets-eco/flask-principal")
9897 (commit version)))
9898 (file-name (git-file-name name version))
9899 (sha256
9900 (base32 "0hcqcj768inmyfsw1y2vk6pa9p22dh138ll809rhpz9vjz6spnqk"))))
9901 (build-system pyproject-build-system)
9902 (propagated-inputs (list python-blinker))
9903 (native-inputs (list python-flask python-pynose python-setuptools))
9904 (home-page "https://github.com/pallets-eco/flask-principal")
9905 (synopsis "Identity management for Flask")
9906 (description
9907 "@code{flask_principal} is a identity management library for Flask. It
9908supports managing both authentication and authorization data in a thread-local
9909variable.")
9910 (license license:expat)))
9911
9912(define-public python-flask-httpauth
9913 (package
9914 (name "python-flask-httpauth")
9915 (version "4.8.0")
9916 (source
9917 (origin
9918 (method url-fetch)
9919 (uri (pypi-uri "Flask-HTTPAuth" version))
9920 (sha256
9921 (base32
9922 "0yh9fn6pak64has89pcy03f1cn198vkil872y5jjr53kph2qlmk6"))))
9923 (build-system pyproject-build-system)
9924 (propagated-inputs (list python-flask))
9925 (native-inputs
9926 (list nss-certs-for-test
9927 python-pytest
9928 python-setuptools
9929 python-wheel))
9930 (home-page "https://github.com/miguelgrinberg/flask-httpauth/")
9931 (synopsis "Basic and Digest HTTP authentication for Flask routes")
9932 (description "@code{flask_httpauth} provides Basic and Digest HTTP
9933authentication for Flask routes.")
9934 (license license:expat)))
9935
9936(define-public python-uritemplate
9937 (package
9938 (name "python-uritemplate")
9939 (version "4.2.0")
9940 (source
9941 (origin
9942 (method url-fetch)
9943 (uri (pypi-uri "uritemplate" version))
9944 (sha256
9945 (base32
9946 "03lxxkk0kjn6z7z1f9hqvsaqfrny1qds7vi36f35b2c7h38jw328"))))
9947 (build-system pyproject-build-system)
9948 (native-inputs (list python-pytest python-setuptools))
9949 (home-page "https://uritemplate.readthedocs.io/")
9950 (synopsis "Library to deal with URI Templates")
9951 (description "@code{uritemplate} provides Python library to deal with URI
9952Templates.")
9953 ;; The software is made available under the terms of *either* of the
9954 ;; licenses found in LICENSE.APACHE or LICENSE.BSD. Contributions
9955 ;; are made under *both* licenses (excerpt from the LICENSE file).
9956 (license (list license:bsd-2 license:asl2.0))))
9957
9958(define-public python-uritemplate-3
9959 (package
9960 (inherit python-uritemplate)
9961 (name "python-uritemplate")
9962 (version "3.0.1")
9963 (source (origin
9964 (method url-fetch)
9965 (uri (pypi-uri "uritemplate" version))
9966 (sha256
9967 (base32 "1bkwmgr0ia9gcn4bszs2xlvml79f0bi2s4a87xg22ky9rq8avy2s"))))))
9968
9969(define-public python-publicsuffix2
9970 (package
9971 (name "python-publicsuffix2")
9972 (version "2.2019-12-21")
9973 (source
9974 (origin
9975 (method git-fetch)
9976 (uri (git-reference
9977 (url "https://github.com/pombredanne/python-publicsuffix2")
9978 (commit (string-append "release-" version))))
9979 (file-name (git-file-name name version))
9980 (sha256
9981 (base32 "1dkvfvl0izq9hqzilnw8ipkbgjs9xyad9p21i3864hzinbh0wp9r"))))
9982 (build-system pyproject-build-system)
9983 (arguments
9984 (list
9985 #:tests? #f ;the test suite requires network access
9986 #:phases
9987 #~(modify-phases %standard-phases
9988 (add-after 'unpack 'ignore-maintainer-inputs
9989 (lambda _
9990 ;; Comment out a demand for python-requests, which is used only by
9991 ;; the unused ‘update_psl’ helper command.
9992 (substitute* "setup.py"
9993 (("'requests " match)
9994 (format #f "# ~a" match))))))))
9995 (native-inputs (list python-setuptools))
9996 (home-page "https://github.com/pombredanne/python-publicsuffix2")
9997 (synopsis
9998 "Get a public suffix for a domain name using the Public Suffix List")
9999 (description
10000 "Get a public suffix for a domain name using the Public Suffix List.
10001Forked from and using the same API as the publicsuffix package.")
10002 (license (list license:expat license:mpl2.0))))
10003
10004(define-public python-werkzeug
10005 (package
10006 (name "python-werkzeug")
10007 (version "3.1.8")
10008 (source
10009 (origin
10010 (method git-fetch)
10011 (uri (git-reference
10012 (url "https://github.com/pallets/werkzeug")
10013 (commit version)))
10014 (file-name (git-file-name name version))
10015 (sha256
10016 (base32 "1jwrrjv50n5rcfzax4qf0237znkcpcafd17hx0r77f997yv3ghlv"))))
10017 (build-system pyproject-build-system)
10018 (arguments
10019 (list
10020 #:test-flags
10021 #~(list "-m" "not dev_server")))
10022 (native-inputs
10023 (list python-ephemeral-port-reserve
10024 python-flit-core
10025 python-pytest
10026 python-pytest-timeout
10027 python-watchdog))
10028 (propagated-inputs
10029 (list python-markupsafe))
10030 (home-page "https://palletsprojects.com/p/werkzeug/")
10031 (synopsis "Utilities for WSGI applications")
10032 (description "One of the most advanced WSGI utility modules. It includes a
10033powerful debugger, full-featured request and response objects, HTTP utilities to
10034handle entity tags, cache control headers, HTTP dates, cookie handling, file
10035uploads, a powerful URL routing system and a bunch of community-contributed
10036addon modules.")
10037 (license license:x11)))
10038
10039(define-public python-werkzeug-1.0
10040 (package
10041 (inherit python-werkzeug)
10042 (version "1.0.1")
10043 (source (origin
10044 (method url-fetch)
10045 (uri (pypi-uri "Werkzeug" version))
10046 (sha256
10047 (base32
10048 "0z74sa1xw5h20yin9faj0vvdbq713cgbj84klc72jr9nmpjv303c"))
10049 (patches (search-patches "python-werkzeug-tests.patch"))))
10050 (arguments
10051 (list
10052 #:phases
10053 '(modify-phases %standard-phases
10054 (add-after 'unpack 'ignore-warnings
10055 (lambda _
10056 (substitute* "setup.cfg"
10057 ((" error.*") "")))))))
10058 (propagated-inputs
10059 (list python-requests))
10060 (native-inputs
10061 (list python-pytest python-pytest-timeout python-setuptools
10062 python-wheel))))
10063
10064(define-public python-wtforms
10065 (package
10066 (name "python-wtforms")
10067 (version "3.2.2")
10068 (source
10069 (origin
10070 (method url-fetch)
10071 (uri (pypi-uri "wtforms" version))
10072 (sha256
10073 (base32 "14qbayp2gfmahaqn5migwyz2h1cq3gcdr4q2vd75vwvhhqzwf03v"))))
10074 (build-system pyproject-build-system)
10075 (native-inputs
10076 (list python-babel
10077 python-email-validator
10078 python-hatchling
10079 python-pytest
10080 python-setuptools))
10081 (propagated-inputs (list python-markupsafe))
10082 (home-page "https://wtforms.readthedocs.io/")
10083 (synopsis
10084 "Form validation and rendering library for Python web development")
10085 (description
10086 "WTForms is a flexible forms validation and rendering library
10087for Python web development. It is very similar to the web form API
10088available in Django, but is a standalone package.")
10089 (license license:bsd-3)))
10090
10091(define-public python-wtforms-sqlalchemy
10092 (package
10093 (name "python-wtforms-sqlalchemy")
10094 (version "0.4.1")
10095 (source
10096 (origin
10097 (method url-fetch)
10098 (uri (pypi-uri "WTForms-SQLAlchemy" version))
10099 (sha256
10100 (base32 "1nx4x0ifanlbrzh3f9ns8ihnchlkzf54ilvqmgcgcz2j72vm43rp"))))
10101 (build-system pyproject-build-system)
10102 (native-inputs (list python-pytest python-setuptools python-wheel))
10103 (propagated-inputs (list python-sqlalchemy python-wtforms))
10104 (home-page "https://github.com/wtforms/wtforms-sqlalchemy/")
10105 (synopsis "SQLAlchemy tools for WTForms")
10106 (description
10107 "WTForms-SQLAlchemy is a fork of the @code{wtforms.ext.sqlalchemy}
10108package from WTForms. The package has been renamed to
10109@code{wtforms_sqlalchemy} but otherwise should function the same as
10110@code{wtforms.ext.sqlalchemy} did.")
10111 (license license:bsd-3)))
10112
10113(define-public python-urlgrabber
10114 (package
10115 (name "python-urlgrabber")
10116 (version "4.1.0")
10117 (source
10118 (origin
10119 (method url-fetch)
10120 (uri (pypi-uri "urlgrabber" version))
10121 (sha256
10122 (base32 "0fg16zlw49cw7pjq9dhpc5vd35d5zz1mlki55m464qxfmfpzhnh7"))))
10123 (build-system pyproject-build-system)
10124 (arguments
10125 (list
10126 #:tests? #f ; Most tests require network access.
10127 #:phases
10128 #~(modify-phases %standard-phases
10129 (replace 'check
10130 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
10131 (when tests?
10132 (invoke "python" "test/runtests.py")))))))
10133 (native-inputs (list python-setuptools))
10134 (propagated-inputs
10135 (list python-pycurl python-setuptools python-six))
10136 (home-page "http://urlgrabber.baseurl.org/") ; no HTTPS
10137 (synopsis "High-level cross protocol url-grabber")
10138 (description
10139 "@code{urlgrabber} is a library that unifies access to files available on
10140the web, FTP or locally. It supports HTTP, FTP and file:// protocols, it
10141supports features like HTTP keep-alive, reget, throttling and more.")
10142 (license license:lgpl2.1+)))
10143
10144(define-public python-pycares
10145 (package
10146 (name "python-pycares")
10147 (version "4.11.0")
10148 (source
10149 (origin
10150 (method git-fetch)
10151 (uri (git-reference
10152 (url "https://github.com/saghul/pycares")
10153 (commit (string-append "v" version))))
10154 (file-name (git-file-name name version))
10155 (sha256
10156 (base32 "18syxp9bpm70zfiw427p7cpp6wg0ybrw6b32c1zvdp2i8jgd82xl"))
10157 (snippet #~(begin
10158 (rmdir "deps/c-ares")))))
10159 (build-system pyproject-build-system)
10160 (arguments
10161 (list
10162 ;; XXX: Half of the tests require internet access
10163 ;; There is currently no markers to avoid running them.
10164 #:tests? #f
10165 #:phases
10166 #~(modify-phases %standard-phases
10167 (add-after 'unpack 'configure-system-lib
10168 (lambda _
10169 (setenv "PYCARES_USE_SYSTEM_LIB" "1"))))))
10170 (native-inputs (list python-pytest python-setuptools))
10171 (inputs (list c-ares))
10172 (propagated-inputs (list python-cffi))
10173 (home-page "https://github.com/saghul/pycares")
10174 (synopsis "Python interface for @code{c-ares}")
10175 (description
10176 "@code{pycares} is a Python module which provides an interface to
10177@code{c-ares}, a C library that performs DNS requests and name resolutions
10178asynchronously.")
10179 (license license:expat)))
10180
10181(define-public python-yarl
10182 (package
10183 (name "python-yarl")
10184 (version "1.18.3")
10185 (source
10186 (origin
10187 (method url-fetch)
10188 (uri (pypi-uri "yarl" version))
10189 (sha256
10190 (base32
10191 "1qfj6kvdxr8bzka4lp0bh0xfgr5mzx7zzvj2jb4vcxxzbk20265c"))))
10192 (build-system pyproject-build-system)
10193 (arguments
10194 (list
10195 #:test-flags '(list "--ignore-glob=tests/test_*_benchmarks.py")
10196 #:phases
10197 '(modify-phases %standard-phases
10198 (add-after 'unpack 'avoid-pytest-cov-preload
10199 (lambda _
10200 (substitute* "pytest.ini"
10201 (("-p pytest_cov") ""))))
10202 (add-after 'unpack 'patch-build-system
10203 (lambda _
10204 ;; XXX: I don't know how to tell it to build the extensions in
10205 ;; place.
10206 (substitute* "packaging/pep517_backend/_backend.py"
10207 (("build_inplace=False") "build_inplace=True")))))))
10208 (native-inputs
10209 (list python-cython
10210 python-expandvars
10211 python-pytest
10212 python-pytest-xdist
10213 python-setuptools
10214 python-tomli))
10215 (propagated-inputs
10216 (list python-packaging python-idna python-multidict python-propcache))
10217 (home-page "https://github.com/aio-libs/yarl/")
10218 (synopsis "Yet another URL library")
10219 (description "@code{yarl} module provides handy @code{URL} class
10220for URL parsing and changing.")
10221 (license license:asl2.0)))
10222
10223(define-public python-canvasapi
10224 (package
10225 (name "python-canvasapi")
10226 (version "3.4.0")
10227 (source (origin
10228 (method git-fetch)
10229 (uri (git-reference
10230 (url "https://github.com/ucfopen/canvasapi")
10231 (commit (string-append "v" version))))
10232 (file-name (git-file-name name version))
10233 (sha256
10234 (base32
10235 "017gashyd4avxzlz3imwn18vmfd0cjyhbm063isra3d2wk3ivrkx"))))
10236 (build-system pyproject-build-system)
10237 (propagated-inputs (list python-arrow python-pytz python-requests))
10238 (native-inputs (list python-pytest
10239 python-requests-mock
10240 python-setuptools
10241 python-urllib3))
10242 (home-page "https://github.com/ucfopen/canvasapi")
10243 (synopsis "API wrapper for the Canvas LMS")
10244 (description
10245 "CanvasAPI is a Python library for accessing Instructure’s Canvas LMS API.
10246The library enables developers to programmatically manage Canvas courses,
10247users, gradebooks, and more.")
10248 (license license:expat)))
10249
10250(define-public python-google
10251 (package
10252 (name "python-google")
10253 (version "3.0.0")
10254 (source
10255 (origin
10256 (method url-fetch)
10257 (uri (pypi-uri "google" version))
10258 (sha256
10259 (base32 "1gncv3l11za0mpxvmpaf5n5j3jzp282rz62yml4ha4z55q930d8l"))))
10260 (build-system pyproject-build-system)
10261 (arguments (list #:tests? #f)) ;There are no tests.
10262 (native-inputs (list python-setuptools))
10263 (propagated-inputs (list python-beautifulsoup4))
10264 (home-page "https://breakingcode.wordpress.com/")
10265 (synopsis "Python bindings to the Google search engine")
10266 (description
10267 "This package provides Python bindings for using the Google search
10268engine. Its module is called @code{googlesearch}.")
10269 (license license:bsd-3)))
10270
10271(define-public python-google-api-client
10272 (package
10273 (name "python-google-api-client")
10274 (version "2.198.0")
10275 (source
10276 (origin
10277 (method git-fetch)
10278 (uri (git-reference
10279 (url "https://github.com/google/google-api-python-client")
10280 (commit (string-append "v" version))))
10281 (file-name (git-file-name name version))
10282 (sha256
10283 (base32 "1adjr3ylp8bwbvywxm11hs4y913pvaga0dn6nwmb3622y62zxfhg"))))
10284 (build-system pyproject-build-system)
10285 (arguments
10286 (list
10287 #:test-flags
10288 #~(list
10289 "-k"
10290 (string-join
10291 (list
10292 ;; XXX: Deprecated behavior.
10293 "not test_client_options_universe_configured_with_mtls"
10294 "test_universe_env_var_configured_with_mtls"
10295 ;; XXX: Requires CA certificates.
10296 "test_credentials_and_credentials_file_mutually_exclusive")
10297 " and not ")
10298 "tests")))
10299 (native-inputs
10300 (list python-parameterized
10301 python-pytest
10302 python-setuptools))
10303 (propagated-inputs
10304 (list python-google-api-core
10305 python-google-auth
10306 python-google-auth-httplib2
10307 python-httplib2
10308 python-pyparsing
10309 python-uritemplate-3))
10310 (home-page "https://github.com/google/google-api-python-client")
10311 (synopsis "Core Python library for accessing Google APIs")
10312 (description "Python client library for Google's discovery based APIs")
10313 (license license:asl2.0)))
10314
10315(define-public python-google-auth-httplib2
10316 (package
10317 (name "python-google-auth-httplib2")
10318 (version "0.4.0")
10319 (source (origin
10320 (method url-fetch)
10321 (uri (pypi-uri "google_auth_httplib2" version))
10322 (sha256
10323 (base32 "0dgdzy2ps3z71dc2b4s1fhmyx094nq0sg75sagav995p0ji31c6m"))))
10324 (build-system pyproject-build-system)
10325 (propagated-inputs
10326 (list python-google-auth python-httplib2))
10327 (native-inputs
10328 (list python-pytest
10329 python-pyparsing
10330 python-pytest-localserver
10331 python-flask
10332 python-setuptools))
10333 (home-page "https://github.com/googleapis/google-cloud-python")
10334 (synopsis "Google Authentication Library: httplib2 transport")
10335 (description "This package provides a Google Authentication Library plugin
10336for httplib2 transport.")
10337 (license license:asl2.0)))
10338
10339(define-public python-google-auth-oauthlib
10340 (package
10341 (name "python-google-auth-oauthlib")
10342 (version "1.2.4")
10343 (home-page
10344 "https://github.com/GoogleCloudPlatform/\
10345google-auth-library-python-oauthlib")
10346 (source
10347 (origin
10348 (method git-fetch)
10349 (uri (git-reference
10350 (url home-page)
10351 (commit (string-append "v" version))))
10352 (file-name (git-file-name name version))
10353 (sha256
10354 (base32 "1j25kdbs2j1x23pdv4n49xl9pz2ppn55vsav65ir796kq4lf9nca"))))
10355 (build-system pyproject-build-system)
10356 (propagated-inputs (list python-google-auth python-requests-oauthlib))
10357 (native-inputs
10358 (list python-click python-mock python-pytest python-setuptools))
10359 (synopsis "Google Authentication Library: oauthlib")
10360 (description "This package provides a Google Authentication Library plugin
10361with oauthlib.")
10362 (license license:asl2.0)))
10363
10364(define-public whoogle-search
10365 (package
10366 (name "whoogle-search")
10367 (version "0.8.4")
10368 (source (origin
10369 (method url-fetch)
10370 (uri (pypi-uri "whoogle-search" version))
10371 (sha256
10372 (base32
10373 "0hsy4l98nzj6i1lf63wvqd0yharkaz44zsxh863ymy47rxnwimz7"))))
10374 (build-system pyproject-build-system)
10375 (arguments
10376 (list
10377 ;; The tests need network access
10378 #:tests? #f))
10379 (propagated-inputs
10380 (list python-beautifulsoup4
10381 python-brotli
10382 python-cryptography
10383 python-cssutils
10384 python-defusedxml
10385 python-flask
10386 python-dotenv
10387 python-requests
10388 python-stem
10389 python-validators
10390 python-waitress))
10391 (native-inputs (list python-setuptools python-wheel))
10392 (home-page "https://github.com/benbusby/whoogle-search")
10393 (synopsis "Self-hosted, ad-free, privacy-respecting metasearch engine")
10394 (description
10395 "Get Google results, but without any ads, javascript, AMP links,
10396cookies, or IP address tracking. Quick and simple to implement as a primary
10397search engine replacement on both desktop and mobile.")
10398 (license license:expat)))
10399
10400(define-public python-hawkauthlib
10401 (package
10402 (name "python-hawkauthlib")
10403 (version "2.0.0")
10404 (source
10405 (origin
10406 (method git-fetch)
10407 (uri (git-reference
10408 (url "https://github.com/mozilla-services/hawkauthlib")
10409 (commit (string-append "v" version))))
10410 (file-name (git-file-name name version))
10411 (sha256
10412 (base32 "0pdpk3fp87ngfsyp4lm2z7z8b203jxsmvbz59q6r6xgg9sp4cl3l"))))
10413 (build-system pyproject-build-system)
10414 (arguments
10415 (list
10416 #:test-backend #~'unittest
10417 #:phases
10418 #~(modify-phases %standard-phases
10419 (add-after 'unpack 'fix-python-incompatibilities
10420 (lambda _
10421 (substitute* (find-files "hawkauthlib/tests" "\\.py$")
10422 (("assertEquals") "assertEqual")))))))
10423 (native-inputs (list python-setuptools))
10424 (propagated-inputs (list python-requests python-webob))
10425 (home-page "https://github.com/mozilla-services/hawkauthlib")
10426 (synopsis "Hawk Access Authentication protocol")
10427 (description
10428 "This is a low-level Python library for implementing Hawk Access
10429Authentication, a simple HTTP request-signing scheme.")
10430 (license license:mpl2.0)))
10431
10432(define-public python-pybrowserid
10433 (package
10434 (name "python-pybrowserid")
10435 (version "0.14.0")
10436 (source
10437 (origin
10438 (method git-fetch)
10439 (uri (git-reference
10440 (url "https://github.com/mozilla/PyBrowserID")
10441 (commit version)))
10442 (file-name (git-file-name name version))
10443 (sha256
10444 (base32 "0in0sbj56wrz5mlrj6wkd3h7rrp7714c5rkxvkfwp60s2hr6ynj6"))))
10445 (build-system pyproject-build-system)
10446 (arguments
10447 (list
10448 #:test-backend #~'unittest
10449 #:phases
10450 #~(modify-phases %standard-phases
10451 (add-after 'unpack 'python-3.12-compatibility
10452 (lambda _
10453 (substitute* (find-files "browserid/tests" "\\.py")
10454 (("assertEquals") "assertEqual")))))))
10455 (propagated-inputs (list python-requests))
10456 (native-inputs (list python-mock python-setuptools))
10457 (home-page "https://github.com/mozilla/PyBrowserID")
10458 (synopsis "Python library for the BrowserID protocol")
10459 (description
10460 "This is a Python client library for the BrowserID protocol that
10461underlies Mozilla Persona.")
10462 (license license:mpl2.0)))
10463
10464(define-public python-pyfxa
10465 (package
10466 (name "python-pyfxa")
10467 (version "0.8.1")
10468 (source
10469 (origin
10470 (method git-fetch)
10471 (uri (git-reference
10472 (url "https://github.com/mozilla/PyFxA")
10473 (commit (string-append "v" version))))
10474 (file-name (git-file-name name version))
10475 (sha256
10476 (base32 "11iaw50x5ic9cqp3jwkvhk8mz00dhg8xhl1kkx45zrb8nnrfw2vs"))))
10477 (build-system pyproject-build-system)
10478 (arguments
10479 (list
10480 ;; These tests require network access
10481 #:test-flags #~(list "--ignore=fxa/tests/test_core.py")))
10482 (propagated-inputs
10483 (list python-cryptography
10484 python-pyjwt
10485 python-parameterized
10486 python-hawkauthlib
10487 python-requests))
10488 (native-inputs
10489 (list python-grequests
10490 python-hatchling
10491 python-mock
10492 python-pytest
10493 python-responses))
10494 (home-page "https://github.com/mozilla/PyFxA")
10495 (synopsis "Firefox Accounts client library for Python")
10496 (description
10497 "This is a Python library for interacting with the Firefox Accounts
10498ecosystem.")
10499 (license license:mpl2.0)))
10500
10501(define-public python-hyperlink
10502 (package
10503 (name "python-hyperlink")
10504 (version "21.0.0")
10505 (source
10506 (origin
10507 (method url-fetch)
10508 (uri (pypi-uri "hyperlink" version))
10509 (sha256
10510 (base32
10511 "0sx50lkivsfjxx9zr4yh7l9gll2l9kvl0v0w8w4wk2x5v9bzjyj2"))))
10512 (build-system pyproject-build-system)
10513 (arguments
10514 (list #:phases
10515 #~(modify-phases %standard-phases
10516 (add-before 'check 'pretend-to-be-CI
10517 (lambda _
10518 ;; Pretend to be a CI system to skip flaky tests.
10519 (setenv "CI" "true"))))))
10520 (native-inputs
10521 (list python-pytest python-setuptools python-wheel))
10522 (propagated-inputs
10523 (list python-idna))
10524 (home-page "https://github.com/python-hyper/hyperlink")
10525 (synopsis "Python module to create immutable URLs according to spec")
10526 (description "This package provides a Python module to create immutable, and
10527correct URLs for Python according to RFCs 3986 and 3987.")
10528 (license license:expat)))
10529
10530(define-public python-treq
10531 (package
10532 (name "python-treq")
10533 (version "24.9.1")
10534 (source
10535 (origin
10536 (method url-fetch)
10537 (uri (pypi-uri "treq" version))
10538 (sha256
10539 (base32
10540 "1a7yrq2m7hf77fia4fc0c6zanvwnykpgirdbs1cyvr7k0k27znhm"))))
10541 (build-system pyproject-build-system)
10542 (native-inputs
10543 (list python-httpbin
10544 python-pytest
10545 python-service-identity
10546 python-setuptools
10547 python-wheel))
10548 (propagated-inputs
10549 (list python-attrs
10550 python-hyperlink
10551 python-incremental
10552 python-requests
10553 python-twisted
10554 python-typing-extensions))
10555 (home-page "https://github.com/twisted/treq")
10556 (synopsis "Requests-like API built on top of twisted.web's Agent")
10557 (description "This package provides an HTTP library inspired by
10558@code{requests} but written on top of Twisted's @code{Agents}. It offers a
10559high level API for making HTTP requests when using Twisted.")
10560 (license license:expat)))
10561
10562(define-public python-ws4py
10563 (package
10564 (name "python-ws4py")
10565 (version "0.6.0")
10566 (source
10567 (origin
10568 (method git-fetch)
10569 (uri (git-reference
10570 (url "https://github.com/Lawouach/WebSocket-for-Python")
10571 (commit version)))
10572 (file-name (git-file-name name version))
10573 (sha256
10574 (base32
10575 "00y6s8gk20936njqbxr8vjliviiz7r7pqrlwg7xi8zzs6903xvv6"))))
10576 (build-system pyproject-build-system)
10577 (arguments
10578 (list
10579 #:phases
10580 #~(modify-phases %standard-phases
10581 (add-after 'unpack 'remove-cherrypy-support
10582 (lambda _
10583 (delete-file "ws4py/server/cherrypyserver.py")
10584 (delete-file "test/test_cherrypy.py"))))))
10585 (native-inputs (list python-setuptools python-pytest))
10586 (propagated-inputs
10587 (list python-gevent python-tornado))
10588 (home-page "https://github.com/Lawouach/WebSocket-for-Python")
10589 (synopsis "WebSocket client and server library")
10590 (description
10591 "This package provides a WebSocket client and server library for Python.")
10592 (license license:bsd-3)))
10593
10594(define-public python-slowapi
10595 (package
10596 (name "python-slowapi")
10597 (version "0.1.9")
10598 (source
10599 (origin
10600 (method git-fetch)
10601 (uri (git-reference
10602 (url "https://github.com/laurents/slowapi")
10603 (commit (string-append "v" version))))
10604 (file-name (git-file-name name version))
10605 (sha256
10606 (base32 "1lc1n6lvh01dhhrc507qri9rz1w72l2riii03ixh7n7n1gwjpws7"))))
10607 (build-system pyproject-build-system)
10608 (arguments
10609 (list
10610 #:test-flags
10611 ;; These tests fail because the timestamp contains more decimal points
10612 ;; than expected, so a simple equality comparison fails.
10613 '(list "-k" (string-append "not test_headers_no_breach"
10614 " and not test_headers_breach"))))
10615 (propagated-inputs (list python-limits python-redis))
10616 (native-inputs
10617 (list python-fastapi
10618 python-hiro
10619 python-mock
10620 python-poetry-core
10621 python-pytest))
10622 (home-page "https://github.com/laurents/slowapi")
10623 (synopsis "Rate limiting extension for Starlette and Fastapi")
10624 (description
10625 "This package provides a rate limiting extension for Starlette and
10626Fastapi.")
10627 (license license:expat)))
10628
10629(define-public python-slugify
10630 (package
10631 (name "python-slugify")
10632 (version "8.0.4")
10633 (source
10634 (origin
10635 (method git-fetch)
10636 (uri (git-reference
10637 (url "https://github.com/un33k/python-slugify")
10638 (commit (string-append "v" version))))
10639 (file-name (git-file-name name version))
10640 (sha256
10641 (base32 "0z83nwy7acc72mb2jv3516nfplah1wm61wkmnzl71dh8i4q985yd"))))
10642 (build-system pyproject-build-system)
10643 (arguments (list #:test-backend #~'unittest))
10644 (native-inputs (list python-setuptools))
10645 (propagated-inputs (list python-unidecode python-text-unidecode))
10646 (home-page "https://github.com/un33k/python-slugify")
10647 (synopsis "Python Slugify application that handles Unicode")
10648 (description "This package provides a @command{slufigy} command and
10649library to create slugs from unicode strings while keeping it DRY.")
10650 (license license:expat)))
10651
10652(define-public python-tinycss2
10653 (package
10654 (name "python-tinycss2")
10655 (version "1.5.1")
10656 (source
10657 (origin
10658 (method git-fetch)
10659 (uri (git-reference
10660 (url "https://github.com/Kozea/tinycss2")
10661 (commit (string-append "v" version))
10662 (recursive? #true)))
10663 (file-name (git-file-name name version))
10664 (sha256
10665 (base32 "1ww5m8rmpva9mq04cz1h9rx76vg2h5nnijzi0vprf5wzp8g9snb5"))))
10666 (build-system pyproject-build-system)
10667 (native-inputs
10668 (list python-flit-core
10669 python-pytest))
10670 (propagated-inputs
10671 (list python-webencodings))
10672 (home-page "https://doc.courtbouillon.org/tinycss2/stable/")
10673 (synopsis "Low-level CSS parser for Python")
10674 (description "@code{tinycss2} can parse strings, return Python objects
10675representing tokens and blocks, and generate CSS strings corresponding to
10676these objects.
10677
10678Based on the CSS Syntax Level 3 specification, @code{tinycss2} knows the
10679grammar of CSS but doesn’t know specific rules, properties or values supported
10680in various CSS modules.")
10681 (license license:bsd-3)))
10682
10683(define-public python-tinyhtml5
10684 (package
10685 (name "python-tinyhtml5")
10686 (version "2.1.0")
10687 (source
10688 (origin
10689 (method git-fetch)
10690 (uri (git-reference
10691 (url "https://github.com/CourtBouillon/tinyhtml5")
10692 (commit version)))
10693 (file-name (git-file-name name version))
10694 (sha256
10695 (base32 "1q8z2ym2q6083ky0f9vwf73k3gimffnbfwlpmd69bp6anc4fa81x"))))
10696 (build-system pyproject-build-system)
10697 (propagated-inputs
10698 (list python-webencodings))
10699 (native-inputs
10700 (list python-flit-core
10701 python-pytest))
10702 (home-page "https://github.com/CourtBouillon/tinyhtml5")
10703 (synopsis "Small HTML parser based on the WHATWG HTML specification")
10704 (description "This Python module is a HTML5 parser that transforms a
10705possibly malformed HTML document into an ElementTree tree. This module is a
10706simplified fork of html5lib.")
10707 (license license:expat)))
10708
10709(define-public python-cssselect2
10710 (package
10711 (name "python-cssselect2")
10712 (version "0.9.0")
10713 (source
10714 (origin
10715 (method git-fetch)
10716 (uri (git-reference
10717 (url "https://github.com/Kozea/cssselect2")
10718 (commit version)))
10719 (file-name (git-file-name name version))
10720 (sha256
10721 (base32 "1drvb83siq9s6dygyhab6kzk2v2ib6cv51ls42p4jrxs9q8cdiw0"))))
10722 (build-system pyproject-build-system)
10723 (propagated-inputs
10724 (list python-tinycss2))
10725 (native-inputs
10726 (list python-flit-core
10727 python-pytest))
10728 (home-page "https://doc.courtbouillon.org/cssselect2/stable/")
10729 (synopsis "CSS selectors for Python ElementTree")
10730 (description "@code{cssselect2} is a straightforward implementation of
10731CSS3 Selectors for markup documents (HTML, XML, etc.) that can be read by
10732ElementTree-like parsers (including cElementTree, lxml, html5lib, etc.).
10733
10734Unlike the Python package @code{cssselect}, it does not translate selectors to
10735XPath and therefore does not have all the correctness corner cases that are
10736hard or impossible to fix in cssselect.")
10737 (license license:bsd-3)))
10738
10739(define-public python-uvloop
10740 (package
10741 (name "python-uvloop")
10742 (version "0.22.1")
10743 (source
10744 (origin
10745 (method git-fetch)
10746 (uri (git-reference
10747 (url "https://github.com/MagicStack/uvloop")
10748 (commit (string-append "v" version))))
10749 (file-name (git-file-name name version))
10750 (sha256
10751 (base32 "1qbykwwz4ac3f7472g22z4i5rrd5kcr8hmxn5kswmja57j1nxlpl"))
10752 (modules '((guix build utils)))
10753 (snippet
10754 '(begin
10755 (delete-file-recursively "vendor")))))
10756 (build-system pyproject-build-system)
10757 (arguments
10758 (list
10759 ;; tests: 470 passed, 32 skipped, 8 deselected, 5 warnings, 104 subtests passed
10760 #:test-flags
10761 ;; The tests are prone to get stuck. Use pytest-timeout’s --timeout flag
10762 ;; to get a meaningful idea about where.
10763 #~(list "--timeout=300"
10764 "--timeout-method=thread"
10765 "-k" (string-join
10766 (list
10767 ;; Timeout, because SIGINT cannot be sent to child.
10768 "not test_signals_sigint_pycode_continue"
10769 "test_signals_sigint_pycode_stop"
10770 "test_signals_sigint_uvcode"
10771 "test_signals_sigint_uvcode_two_loop_runs"
10772 #$@(if (target-riscv64?)
10773 `("test_renegotiation")
10774 `()))
10775 " and not "))
10776 #:phases
10777 #~(modify-phases %standard-phases
10778 (add-after 'unpack 'preparations
10779 (lambda _
10780 ;; Use packaged libuv.
10781 (substitute* "setup.py" (("self.use_system_libuv = False")
10782 "self.use_system_libuv = True"))
10783 ;; Replace hardcoded shell command.
10784 (substitute* "uvloop/loop.pyx"
10785 (("b'/bin/sh'") (string-append "b'" (which "sh") "'")))
10786 (substitute* "tests/test_process.py"
10787 (("'env'") (string-append "'" (which "env") "'")))))
10788 #$@(if (target-riscv64?)
10789 `((add-after 'unpack 'adjust-test-timeouts
10790 (lambda _
10791 (substitute* '("tests/test_tcp.py"
10792 "tests/test_unix.py")
10793 (("SSL_HANDSHAKE_TIMEOUT = 15\\.0")
10794 "SSL_HANDSHAKE_TIMEOUT = 30.0")))))
10795 '())
10796 (add-before 'check 'pre-check
10797 (lambda* (#:key tests? #:allow-other-keys)
10798 (when tests?
10799 ;; Remove Python module, which conflicts with the installed
10800 ;; version, but lacks the built C module.
10801 (delete-file-recursively "uvloop")))))))
10802 (native-inputs
10803 (list python-aiohttp
10804 python-cython
10805 python-psutil
10806 python-pyopenssl
10807 python-pytest
10808 python-pytest-timeout
10809 python-setuptools))
10810 (inputs
10811 (list libuv))
10812 (home-page "https://github.com/MagicStack/uvloop")
10813 (synopsis "Fast implementation of asyncio event loop on top of libuv")
10814 (description
10815 "@code{uvloop} is a fast, drop-in replacement of the built-in asyncio
10816event loop. It is implemented in Cython and uses libuv under the hood.")
10817 (license license:expat)))
10818
10819(define-public python-httptools
10820 (package
10821 (name "python-httptools")
10822 (version "0.7.1")
10823 (source
10824 (origin
10825 ;; PyPI tarball comes with a vendored http-parser and no tests.
10826 (method git-fetch)
10827 (uri (git-reference
10828 (url "https://github.com/MagicStack/httptools")
10829 (commit (string-append "v" version))))
10830 (file-name (git-file-name name version))
10831 (sha256
10832 (base32 "0j9c1av3y1smg6lgh0i031l07i9plzbvv14jj53vpzm35sy7kbl7"))
10833 (modules '((guix build utils)))
10834 (snippet
10835 #~(begin (delete-file-recursively "vendor")))))
10836 (build-system pyproject-build-system)
10837 (arguments
10838 (list
10839 #:test-flags
10840 ;; XXX: AssertionError: HttpParserError not raised.
10841 #~(list "-k" "not test_parser_response_leninent_headers_1")
10842 #:phases
10843 #~(modify-phases %standard-phases
10844 (add-after 'unpack 'configure-build-ext
10845 (lambda _
10846 (with-output-to-file "setup.cfg"
10847 (lambda ()
10848 (display "\
10849[build_ext]
10850use_system_llhttp = true
10851use_system_http_parser = true
10852cython_always = true"))))))))
10853 (native-inputs
10854 (list python-cython
10855 python-pytest
10856 python-setuptools))
10857 (inputs
10858 (list http-parser
10859 llhttp))
10860 (home-page "https://github.com/MagicStack/httptools")
10861 (synopsis "Collection of framework independent HTTP protocol utils")
10862 (description
10863 "@code{httptools} is a Python binding for the nodejs HTTP parser.")
10864 (license license:expat)))
10865
10866(define-public python-uvicorn
10867 (package
10868 (name "python-uvicorn")
10869 ;; 0.49.0 (2026-06-03), release does not work with python-websockets 16.0,
10870 ;; see: <https://github.com/Kludex/uvicorn/pull/2985>.
10871 (properties '((commit . "e8a31bca03254b8457c4c89596e310282cc33edc")
10872 (revision . "0")))
10873 (version (git-version "0.49.0"
10874 (assoc-ref properties 'revision)
10875 (assoc-ref properties 'commit)))
10876 (source
10877 (origin
10878 (method git-fetch)
10879 (uri (git-reference
10880 (url "https://github.com/encode/uvicorn")
10881 (commit (assoc-ref properties 'commit))))
10882 (file-name (git-file-name name version))
10883 (sha256
10884 (base32 "1vd1680a1k3jcdgc3jd5p3a6zmhz4r8bgzb7v7zhpxrkkdsisrxj"))))
10885 (build-system pyproject-build-system)
10886 (arguments
10887 (list
10888 #:test-flags
10889 #~(list "--ignore=tests/benchmarks"
10890 #$@(cond
10891 ((or (target-aarch64?)
10892 (target-riscv64?))
10893 '("-k not test_send_binary_data_to_server_bigger_than_default_on_websockets"))
10894 (#t '())))))
10895 (native-inputs
10896 (list nss-certs-for-test
10897 python-a2wsgi
10898 python-hatchling
10899 python-httpx-bootstrap
10900 python-pytest
10901 python-pytest-asyncio
10902 python-pytest-mock
10903 python-pytest-xdist
10904 python-requests
10905 python-trustme
10906 python-wsproto))
10907 (propagated-inputs
10908 (list python-a2wsgi
10909 python-click
10910 python-dotenv
10911 python-h11
10912 python-httptools
10913 python-pyyaml
10914 python-uvloop
10915 python-watchfiles
10916 python-websockets))
10917 (home-page "https://github.com/encode/uvicorn")
10918 (synopsis "Fast ASGI server implementation")
10919 (description
10920 "@code{uvicorn} is a fast ASGI server implementation, using @code{uvloop}
10921and @code{httptools}. It currently supports HTTP/1.1 and WebSockets. Support
10922for HTTP/2 is planned.")
10923 (license license:bsd-3)))
10924
10925(define-public python-translation-finder
10926 (package
10927 (name "python-translation-finder")
10928 (version "2.22")
10929 (source
10930 (origin
10931 (method url-fetch)
10932 (uri (pypi-uri "translation_finder" version))
10933 (sha256
10934 (base32 "1hav99ccijvk2w8wpvba2pc7ba1z150vja2wvaimd069mc08pjd2"))))
10935 (build-system pyproject-build-system)
10936 (arguments
10937 (list
10938 #:test-flags
10939 ;; AssertionError: 31 != 30 : Mismatched count of results
10940 #~(list "--deselect=translation_finder/test_api.py::APITest::test_discover_file")))
10941 (native-inputs
10942 (list python-pytest
10943 python-setuptools))
10944 (propagated-inputs
10945 (list python-charset-normalizer
10946 python-ruamel.yaml
10947 python-weblate-language-data))
10948 (home-page "https://weblate.org/")
10949 (synopsis "Translation file finder for Weblate")
10950 (description "This package provides a function to find translation file in
10951the source code of a project. It supports many translation file formats and
10952is part of the Weblate translation platform.")
10953 (license license:gpl3+)))
10954
10955(define-public python-gitlab
10956 (package
10957 (name "python-gitlab")
10958 (version "7.0.0")
10959 (source
10960 (origin
10961 (method git-fetch)
10962 (uri (git-reference
10963 (url "https://github.com/python-gitlab/python-gitlab")
10964 (commit (string-append "v" version))))
10965 (file-name (git-file-name name version))
10966 (sha256
10967 (base32 "0rf1hz5n724f8sfc7g3fzfz96jsv9y145pi6gc8qscsjq3z4vi37"))))
10968 (build-system pyproject-build-system)
10969 (arguments
10970 (list
10971 #:test-flags
10972 #~(list "--ignore=tests/unit/test_graphql.py"
10973 ;; XXX: Missing helper script.
10974 "-k" "not test_data_from_helper" "tests/unit")))
10975 (native-inputs
10976 (list python-anyio
10977 python-pytest
10978 python-responses
10979 python-setuptools))
10980 (propagated-inputs (list python-requests python-requests-toolbelt))
10981 (home-page "https://github.com/python-gitlab/python-gitlab")
10982 (synopsis "Interact with GitLab API")
10983 (description "This package provides an extended library for interacting
10984with GitLab instances through their API.")
10985 (license license:lgpl3+)))
10986
10987(define-public python-path-and-address
10988 (package
10989 (name "python-path-and-address")
10990 (version "2.0.1")
10991 (source
10992 (origin
10993 (method git-fetch)
10994 (uri (git-reference
10995 (url "https://github.com/joeyespo/path-and-address")
10996 (commit (string-append "v" version))))
10997 (file-name (git-file-name name version))
10998 (sha256
10999 (base32 "0b0afpsaim06mv3lhbpm8fmawcraggc11jhzr6h72kdj1cqjk5h6"))))
11000 (build-system pyproject-build-system)
11001 (native-inputs
11002 (list python-pytest python-setuptools))
11003 (home-page "https://github.com/joeyespo/path-and-address")
11004 (synopsis "Functions for command-line server tools used by humans")
11005 (description "Path-and-address resolves ambiguities of command-line
11006interfaces, inferring which argument is the path, and which is the address.")
11007 (license license:expat)))
11008
11009(define-public python-port-for
11010 (package
11011 (name "python-port-for")
11012 (version "0.7.4")
11013 (source
11014 (origin
11015 (method url-fetch)
11016 (uri (pypi-uri "port_for" version))
11017 (sha256
11018 (base32 "13826s2d4hzzmv69wws6a7ryhminclv2bqaw6cpl929gnbki6xzw"))))
11019 (build-system pyproject-build-system)
11020 (propagated-inputs
11021 (list python-urllib3))
11022 (native-inputs
11023 (list python-pytest python-setuptools python-wheel))
11024 (home-page "https://github.com/kmike/port-for/")
11025 (synopsis "TCP localhost port finder and association manager")
11026 (description
11027 "This package provides a utility that helps with local TCP ports
11028management. It can find an unused TCP localhost port and remember the
11029association.")
11030 (license license:expat)))
11031
11032(define-public python-livereload
11033 (package
11034 (name "python-livereload")
11035 (version "2.7.1")
11036 (source
11037 (origin
11038 (method git-fetch)
11039 (uri (git-reference
11040 (url "https://github.com/lepture/python-livereload")
11041 (commit (string-append "v" version))))
11042 (file-name (git-file-name name version))
11043 (sha256
11044 (base32 "19wkdd1grw6mcd4qi8iaw4jdr207h3m24951vgy69j7g904lynjq"))))
11045 (build-system pyproject-build-system)
11046 (arguments (list #:test-backend #~'unittest))
11047 (native-inputs (list python-django python-setuptools))
11048 (propagated-inputs (list python-tornado))
11049 (home-page "https://github.com/lepture/python-livereload")
11050 (synopsis "Python LiveReload")
11051 (description
11052 "Python LiveReload provides a command line utility, @command{livereload},
11053for starting a web server in a directory. It can trigger arbitrary commands
11054and serve updated contents upon changes to the directory.")
11055 (license license:bsd-3)))
11056
11057(define-public python-vf-1
11058 (package
11059 (name "python-vf-1")
11060 (version "1.0.0")
11061 (source
11062 (origin
11063 (method git-fetch)
11064 (uri (git-reference
11065 (url "https://git.sr.ht/~solderpunk/VF-1")
11066 (commit (string-append "v" version))))
11067 (file-name (git-file-name name version))
11068 (sha256
11069 (base32 "1j8l4xivm6rs8jms1ixx0i9fz4yxr84hbz1pdc498jgkgzy1v8ih"))))
11070 (build-system pyproject-build-system)
11071 (arguments (list #:tests? #f)) ; No tests.
11072 (native-inputs (list python-setuptools))
11073 (home-page "https://git.sr.ht/~solderpunk/VF-1")
11074 (synopsis "Command line gopher client")
11075 (description "@code{VF-1} is a command line gopher client with
11076@acronym{TLS, Transport Layer Security} support.")
11077 (license license:bsd-2)))
11078
11079(define-public python-httpcore
11080 (package
11081 (name "python-httpcore")
11082 (version "1.0.9")
11083 (source
11084 (origin
11085 ;; PyPI tarball does not contain tests.
11086 (method git-fetch)
11087 (uri (git-reference
11088 (url "https://github.com/encode/httpcore")
11089 (commit version)))
11090 (file-name (git-file-name name version))
11091 (sha256
11092 (base32 "0yhm2n8qflpwjsjggyj757m0gw3n68al0my0ljybndwp933ipl32"))))
11093 (build-system pyproject-build-system)
11094 (native-inputs
11095 (list nss-certs-for-test
11096 python-hatch-fancy-pypi-readme
11097 python-hatchling
11098 python-pytest
11099 python-pytest-asyncio
11100 python-pytest-httpbin
11101 python-pytest-trio
11102 python-uvicorn
11103 python-trustme))
11104 (propagated-inputs
11105 (list python-anyio
11106 python-certifi
11107 python-h11
11108 python-h2
11109 python-sniffio
11110 python-socksio
11111 python-trio
11112 python-trio-typing))
11113 (home-page "https://github.com/encode/httpcore")
11114 (synopsis "Minimal, low-level HTTP client")
11115 (description
11116 "HTTP Core provides a minimal and low-level HTTP client, which does one
11117thing only: send HTTP requests.
11118
11119Some things HTTP Core does do:
11120
11121@itemize
11122@item Sending HTTP requests.
11123@item Provides both sync and async interfaces.
11124@item Supports HTTP/1.1 and HTTP/2.
11125@item Async backend support for asyncio and trio.
11126@item Automatic connection pooling.
11127@item HTTP(S) proxy support.
11128@end itemize")
11129 (license license:bsd-3)))
11130
11131;;; Variant used to break a cycle between python-httpx and python-uvicorn.
11132(define-public python-httpcore-bootstrap
11133 (hidden-package
11134 (package/inherit python-httpcore
11135 (name "python-httpcore-bootstrap")
11136 (arguments (list #:tests? #f))
11137 (native-inputs (list python-hatchling
11138 python-hatch-fancy-pypi-readme)))))
11139
11140(define-public python-httpx
11141 (package
11142 (name "python-httpx")
11143 (version "0.28.1")
11144 (source
11145 (origin
11146 ;; PyPI tarball does not contain tests.
11147 (method git-fetch)
11148 (uri (git-reference
11149 (url "https://github.com/encode/httpx")
11150 (commit version)))
11151 (file-name (git-file-name name version))
11152 (sha256
11153 (base32 "00d6rb21xwazwb0sj68zhra0qxxcwkd0vv7bg3k1jg94dmk2w7xl"))))
11154 (build-system pyproject-build-system)
11155 (arguments
11156 (list
11157 ;; 1401 passed, 1 skipped, 5 deselected
11158 #:test-flags
11159 #~(list "-o" "asyncio_mode=auto"
11160 ;; CLI tests are broken.
11161 "--ignore=tests/test_main.py"
11162 "-k" (string-join
11163 ;; These tests try to open an outgoing connection.
11164 (list "not test_async_proxy_close"
11165 "test_sync_proxy_clos"
11166 "test_write_timeout")
11167 " and not "))))
11168 (native-inputs
11169 (list nss-certs-for-test
11170 python-chardet
11171 python-cryptography
11172 python-hatch-fancy-pypi-readme
11173 python-hatchling
11174 python-pytest
11175 python-pytest-asyncio
11176 python-pytest-trio
11177 python-setuptools
11178 python-trio
11179 python-trustme
11180 python-uvicorn))
11181 (propagated-inputs
11182 (list python-anyio
11183 python-certifi
11184 python-httpcore
11185 python-idna
11186 ;; [brotli]
11187 python-brotli
11188 ;; [http2]
11189 python-h2
11190 ;; [socks]
11191 python-socksio
11192 ;; [zstd]
11193 python-zstandard
11194 ;; For trio, see:
11195 ;; <https://github.com/python-trio/trio/issues/2802>.
11196 python-sniffio))
11197 (home-page "https://www.python-httpx.org/")
11198 (synopsis "HTTP client for Python")
11199 (description
11200 "HTTPX is a fully featured HTTP client for Python 3, which provides sync
11201and async APIs, and support for both HTTP/1.1 and HTTP/2.
11202
11203HTTPX builds on the well-established usability of requests, and gives you:
11204
11205@itemize
11206@item A broadly requests-compatible API.
11207@item Standard synchronous interface, but with async support if you need it.
11208@item HTTP/1.1 and HTTP/2 support.
11209@item Ability to make requests directly to WSGI applications or ASGI applications.
11210@item Strict timeouts everywhere.
11211@item Fully type annotated.
11212@item 99% test coverage.
11213@end itemize
11214
11215Plus all the standard features of requests:
11216
11217@itemize
11218@item International Domains and URLs
11219@item Keep-Alive & Connection Pooling
11220@item Sessions with Cookie Persistence
11221@item Browser-style SSL Verification
11222@item Basic/Digest Authentication
11223@item Elegant Key/Value Cookies
11224@item Automatic Decompression
11225@item Automatic Content Decoding
11226@item Unicode Response Bodies
11227@item Multipart File Uploads
11228@item HTTP(S) Proxy Support
11229@item Connection Timeouts
11230@item Streaming Downloads
11231@item .netrc Support
11232@item Chunked Requests
11233@end itemize")
11234 (license license:bsd-3)))
11235
11236;;; Variant used to break a cycle with python-uvicorn.
11237(define-public python-httpx-bootstrap
11238 (hidden-package
11239 (package/inherit python-httpx
11240 (name "python-httpx-bootstrap")
11241 (arguments (list #:tests? #f))
11242 (native-inputs
11243 (list python-hatchling
11244 python-hatch-fancy-pypi-readme))
11245 (propagated-inputs
11246 (modify-inputs propagated-inputs
11247 (replace "python-httpcore" python-httpcore-bootstrap))))))
11248
11249(define-public python-httpx-sse
11250 (package
11251 (name "python-httpx-sse")
11252 (version "0.4.3")
11253 (source
11254 (origin
11255 (method git-fetch)
11256 (uri (git-reference
11257 (url "https://github.com/florimondmanca/httpx-sse")
11258 (commit version)))
11259 (file-name (git-file-name name version))
11260 (sha256
11261 (base32 "0zliqd1rkvc0mjppscvqmg8j17hsiwvxn439yhn6qbjvk5ydncz8"))))
11262 (build-system pyproject-build-system)
11263 (native-inputs
11264 (list python-pytest
11265 python-pytest-asyncio
11266 python-setuptools
11267 python-setuptools-scm
11268 python-sse-starlette))
11269 (propagated-inputs (list python-httpx))
11270 (home-page "https://github.com/florimondmanca/httpx-sse")
11271 (synopsis "Consume Server-Sent Event (SSE) messages with HTTPX.")
11272 (description "Consume Server-Sent Event (SSE) messages with HTTPX.")
11273 (license license:expat)))
11274
11275(define-public python-httpx-ws
11276 (package
11277 (name "python-httpx-ws")
11278 (version "0.9.0")
11279 (source
11280 (origin
11281 (method git-fetch)
11282 (uri (git-reference
11283 (url "https://github.com/frankie567/httpx-ws")
11284 (commit (string-append "v" version))))
11285 (file-name (git-file-name name version))
11286 (sha256
11287 (base32 "1hin6fndvfnx3mjgy30x0ghgjalikxavyj24klcknnly9sqzg83v"))))
11288 (build-system pyproject-build-system)
11289 (propagated-inputs
11290 (list python-anyio
11291 python-httpcore
11292 python-httpx
11293 python-wsproto))
11294 (native-inputs
11295 (list nss-certs-for-test
11296 python-hatch-regex-commit
11297 python-hatchling
11298 python-pytest
11299 python-pytest-cov
11300 python-starlette
11301 python-uvicorn))
11302 (home-page "https://github.com/frankie567/httpx-ws")
11303 (synopsis "WebSockets support for HTTPX")
11304 (description "This package provides @code{WebSockets} support for HTTPX.")
11305 (license license:expat)))
11306
11307(define-public python-wsgiprox
11308 (package
11309 (name "python-wsgiprox")
11310 (version "1.5.2")
11311 (source
11312 (origin
11313 (method url-fetch)
11314 (uri (pypi-uri "wsgiprox" version))
11315 (sha256
11316 (base32 "11fsm199pvwbmqx2lccznvws65aam1rqqv0w79gal8hispwgd5rs"))))
11317 (build-system pyproject-build-system)
11318 (arguments
11319 ;; The test suite hangs (see:
11320 ;; https://github.com/webrecorder/wsgiprox/issues/6).
11321 (list
11322 #:tests? #f
11323 #:phases
11324 #~(modify-phases %standard-phases
11325 (add-after 'unpack 'fix-pytest-argument
11326 (lambda _
11327 ;; See: https://github.com/webrecorder/wsgiprox/issues/7.
11328 (substitute* "setup.py"
11329 (("--doctest-module")
11330 "--doctest-modules")))))))
11331 (propagated-inputs
11332 (list python-certauth
11333 python-gevent
11334 python-six
11335 python-websocket-client))
11336 (native-inputs
11337 (list python-mock python-waitress python-setuptools))
11338 (home-page "https://github.com/webrecorder/wsgiprox")
11339 (synopsis "HTTP/S proxy with WebSockets over WSGI")
11340 (description
11341 "@code{wsgiprox} is a Python WSGI (Web Server Gateway Interface)
11342middle-ware for adding HTTP and HTTPS proxy support to a WSGI application.
11343The library accepts HTTP and HTTPS proxy connections, and routes them to a
11344designated prefix.")
11345 (license license:asl2.0)))
11346
11347(define-public python-warcio
11348 ;; The PyPI release is missing some test support files (see:
11349 ;; https://github.com/webrecorder/warcio/issues/132).
11350 (package
11351 (name "python-warcio")
11352 (version "1.8.1")
11353 (source
11354 (origin
11355 (method git-fetch)
11356 (uri (git-reference
11357 (url "https://github.com/webrecorder/warcio")
11358 (commit (string-append "v" version))))
11359 (file-name (git-file-name name version))
11360 (sha256
11361 (base32
11362 "19wwg7zmx33c942dbahdkng1byiwr4c9cd1ayrsh13f818n17zps"))))
11363 (build-system pyproject-build-system)
11364 (arguments
11365 (list
11366 #:test-flags ; These tests fail due to networking requirements.
11367 '(list "-k" (format #f "not ~a"
11368 (string-join
11369 '("test_post_chunked"
11370 "test_remote"
11371 "test_capture_http_proxy"
11372 "test_capture_https_proxy"
11373 "test_capture_https_proxy_same_session")
11374 " and not "))
11375 ; The following test requires the hookdns package.
11376 "--ignore=test/test_capture_http_proxy.py")))
11377 (native-inputs
11378 (list python-httpbin
11379 python-pytest
11380 python-requests
11381 python-setuptools
11382 python-wsgiprox))
11383 (home-page "https://github.com/webrecorder/warcio")
11384 (synopsis "Streaming web archival archive (WARC) library")
11385 (description "warcio is a Python library to read and write the WARC format
11386commonly used in Web archives. It is designed for fast, low-level access to
11387web archival content, oriented around a stream of WARC records rather than
11388files.")
11389 (license license:asl2.0)))
11390
11391(define-public python-websockets
11392 (package
11393 (name "python-websockets")
11394 (version "16.0")
11395 (source
11396 (origin
11397 (method git-fetch)
11398 (uri (git-reference
11399 (url "https://github.com/aaugustin/websockets")
11400 (commit version)))
11401 (file-name (git-file-name name version))
11402 (sha256
11403 (base32
11404 "1f71siwmjxn8b671x8lkkxx56q3xm99f2kmjqpzfcv3air9n94gg"))))
11405 (build-system pyproject-build-system)
11406 (arguments
11407 (list #:test-backend #~'unittest
11408 #:phases
11409 #~(modify-phases %standard-phases
11410 (add-before 'check 'extend-test-timeout
11411 (lambda _
11412 ;; Some architectures need an even longer timeout. Make it
11413 ;; long enough that it should never fail due to timeout.
11414 #$@(if (target-riscv64?)
11415 #~((setenv "WEBSOCKETS_TESTS_TIMEOUT_FACTOR" "100"))
11416 #~((setenv "WEBSOCKETS_TESTS_TIMEOUT_FACTOR" "10"))))))))
11417 (native-inputs
11418 (list python-setuptools))
11419 (home-page "https://github.com/aaugustin/websockets")
11420 (synopsis
11421 "Python implementation of the WebSocket Protocol (RFC 6455 & 7692)")
11422 (description
11423 "@code{websockets} is a library for building WebSocket servers and clients
11424in Python with a focus on correctness and simplicity.
11425
11426Built on top of @code{asyncio}, Python's standard asynchronous I/O framework,
11427it provides an elegant coroutine-based API.")
11428 (license license:bsd-3)))
11429
11430(define-public selenium-manager
11431 (package
11432 (name "selenium-manager")
11433 (version "4.34.2")
11434 (source
11435 (origin
11436 (method git-fetch)
11437 (uri (git-reference
11438 (url "https://github.com/SeleniumHQ/selenium")
11439 (commit (string-append "selenium-" version "-python"))))
11440 (file-name (git-file-name name version))
11441 (sha256
11442 (base32 "14fg8r4rm9d7169rlm29l5yn08wgllmqk1zc6six3dlrzzf5mxil"))))
11443 (build-system cargo-build-system)
11444 (arguments
11445 (list
11446 ;; XXX: Almost all tests require either browsers or network access.
11447 #:tests? #f
11448 #:install-source? #f ; Most likely intended as a leaf.
11449 #:phases
11450 #~(modify-phases %standard-phases
11451 (add-after 'unpack 'chdir
11452 (lambda _
11453 (chdir "rust"))))))
11454 (native-inputs (list pkg-config))
11455 (inputs (cons* (list zstd "lib") xz
11456 (cargo-inputs 'selenium-manager)))
11457 (home-page "https://www.selenium.dev")
11458 (synopsis "CLI tool to manager the browser test infrastructure")
11459 (description
11460 "Selenium simplifies web browser automation. It specifically provides
11461infrastructure for the W3C WebDriver specification — a platform and
11462language-neutral coding interface compatible with all major web browsers.
11463
11464Selenium Manager is a CLI tool that automatically manages the browser/driver
11465infrastructure required by Selenium.")
11466 (license license:asl2.0)))
11467
11468(define-public python-selenium
11469 (package/inherit selenium-manager
11470 (name "python-selenium")
11471 (build-system pyproject-build-system)
11472 (arguments
11473 (list
11474 ;; XXX: Disable failing tests.
11475 #:test-flags
11476 #~(list "--ignore-glob=test/selenium/webdriver/*"
11477 ;; Probably requires those.
11478 "--ignore-glob=test/unit/selenium/webdriver/chrome/*"
11479 "--ignore-glob=test/unit/selenium/webdriver/firefox/*"
11480 ;; XXX: SSL certificates access.
11481 "--ignore=test/unit/selenium/webdriver/remote/remote_connection_tests.py"
11482 "-k" "not test_missing_cdp_devtools_version_falls_back")
11483 #:phases
11484 #~(modify-phases %standard-phases
11485 (add-after 'unpack 'chdir
11486 (lambda _
11487 (chdir "py")))
11488 (add-after 'chdir 'inject-selenium-manager-binary
11489 (lambda* (#:key inputs #:allow-other-keys)
11490 (substitute* "selenium/webdriver/common/selenium_manager.py"
11491 (("compiled_path = Path.*")
11492 (format #f "return Path(~s)~%"
11493 (search-input-file inputs "bin/selenium-manager"))))
11494 (substitute* "pyproject.toml"
11495 (("\\[\\[tool\\.setuptools-rust\\.bins\\]\\]")
11496 "")
11497 (("target = \"selenium\\.webdriver\\.common.*\"")
11498 ""))))
11499 (add-after 'chdir 'relax-requirements
11500 (lambda _
11501 (substitute* "pyproject.toml"
11502 (("\"(typing_extensions|trio|urllib3.*)~=.*\"," _ target)
11503 (format #f "~s," target))))))))
11504 (propagated-inputs (list python-certifi
11505 python-trio
11506 python-trio-websocket
11507 python-typing-extensions
11508 python-urllib3
11509 python-websocket-client))
11510 (inputs (list selenium-manager))
11511 (native-inputs (list python-filetype
11512 python-pytest
11513 python-pytest-mock
11514 python-pytest-trio
11515 python-setuptools
11516 python-setuptools-rust))
11517 (synopsis "Python bindings for Selenium")
11518 (description
11519 "Selenium enables web browser automation. It specifically provides
11520infrastructure for the W3C WebDriver specification — a platform and
11521language-neutral coding interface compatible with all major web browsers.")))
11522
11523(define-public python-rapidjson
11524 (package
11525 (name "python-rapidjson")
11526 (version "1.23")
11527 (source
11528 (origin
11529 (method git-fetch)
11530 (uri (git-reference
11531 (url "https://github.com/python-rapidjson/python-rapidjson")
11532 (commit (string-append "v" version))))
11533 (file-name (git-file-name name version))
11534 (sha256
11535 (base32 "0ajf919gg3qmi68jb0m6v80al2n65cn2ac36qz46s0h6zh92cl86"))
11536 (modules '((guix build utils)))
11537 (snippet
11538 '(delete-file-recursively "rapidjson"))))
11539 (build-system pyproject-build-system)
11540 (arguments
11541 (list
11542 #:test-flags '(list "tests")
11543 #:phases
11544 #~(modify-phases %standard-phases
11545 ;; We cannot seem to use #:configure-flags with the
11546 ;; pyproject-build-system to override rj_include_dir.
11547 (add-after 'unpack 'override-rapidjson-sources
11548 (lambda _
11549 (substitute* "setup.py"
11550 (("^rj_include_dir =.*")
11551 (string-append "rj_include_dir = '"
11552 #$(this-package-native-input "rapidjson")
11553 "/include/rapidjson" "'"))
11554 (("if not os.path.isdir.*") "if False:")))))))
11555 (native-inputs
11556 (list rapidjson python-pytest python-pytz python-setuptools))
11557 (home-page "https://github.com/python-rapidjson/python-rapidjson")
11558 (synopsis "Python wrapper around rapidjson")
11559 (description "This package provides a python wrapper around rapidjson.")
11560 (license license:expat)))
11561
11562(define-public python-venusian
11563 (package
11564 (name "python-venusian")
11565 (version "3.1.1")
11566 (source
11567 (origin
11568 (method url-fetch)
11569 (uri (pypi-uri "venusian" version))
11570 (sha256
11571 (base32 "0h8cdwx5x6i1ydc9s0hxwvy73l6iwlqijn2l77mq74k6anrv6ksk"))))
11572 (build-system pyproject-build-system)
11573 (native-inputs
11574 (list python-pytest
11575 python-setuptools))
11576 (home-page "https://docs.pylonsproject.org/projects/venusian")
11577 (synopsis "Library for deferring decorator actions")
11578 (description
11579 "Venusian is a library which allows framework authors to defer decorator
11580actions. Instead of taking actions when a function (or class) decorator is
11581executed at import time, you can defer the action usually taken by the
11582decorator until a separate scan phase.")
11583 (license license:repoze)))
11584
11585(define-public python-zope-deprecation
11586 (package
11587 (name "python-zope-deprecation")
11588 (version "6.0")
11589 (source (origin
11590 (method url-fetch)
11591 (uri (pypi-uri "zope_deprecation" version))
11592 (sha256
11593 (base32
11594 "0pzimp7xr8m0836bbsrx8wa9ybl58s5hwacas95nsfp6m2ypwwhq"))))
11595 (build-system pyproject-build-system)
11596 (arguments
11597 (list #:tests? #f)) ;no tests in PyPI
11598 (native-inputs
11599 (list python-setuptools))
11600 (home-page "https://zopedeprecation.readthedocs.io/")
11601 (synopsis "Function for marking deprecations")
11602 (description "The @code{zope.deprecation} module provides a function for
11603marking modules, classes, functions, methods and properties as deprecated,
11604displaying warnings when usaged in application code.")
11605 (license license:zpl2.1)))
11606
11607(define-public python-translationstring
11608 (package
11609 (name "python-translationstring")
11610 (version "1.4")
11611 (source (origin
11612 (method url-fetch)
11613 (uri (pypi-uri "translationstring" version))
11614 (sha256
11615 (base32
11616 "1wvncdzi1wj37x226qcf0yycz7js6l83na0pmc9blsbfsww7b55z"))))
11617 (build-system pyproject-build-system)
11618 (native-inputs
11619 (list python-pytest
11620 python-setuptools))
11621 (home-page "https://docs.pylonsproject.org/projects/translationstring")
11622 (synopsis "Internationalization tooling for the Pylons project")
11623 (description "This package provides a library used by various Pylons
11624project packages for internationalization (i18n) duties related to
11625translation.")
11626 (license license:repoze)))
11627
11628(define-public python-plaster
11629 (package
11630 (name "python-plaster")
11631 (version "1.1.2")
11632 (source (origin
11633 (method url-fetch)
11634 (uri (pypi-uri "plaster" version))
11635 (sha256
11636 (base32
11637 "167gfh0ahdll9m96ypgasji6yry2hkn9f0ml1b0lf4ccpxagrgpq"))))
11638 (build-system pyproject-build-system)
11639 (native-inputs
11640 (list python-pytest
11641 python-setuptools))
11642 (home-page "https://docs.pylonsproject.org/projects/plaster/en/latest/")
11643 (synopsis "Configuration loader for multiple config file formats")
11644 (description
11645 "Plaster is a loader interface around multiple config file formats. It
11646exists to define a common API for applications to use when they wish to load
11647configuration. The library itself does not aim to handle anything except a
11648basic API that applications may use to find and load configuration settings.
11649Any specific constraints should be implemented in a pluggable loader which can
11650be registered via an entrypoint.")
11651 (license license:repoze)))
11652
11653(define-public python-plaster-pastedeploy
11654 (package
11655 (name "python-plaster-pastedeploy")
11656 (version "1.0.1")
11657 (source (origin
11658 (method url-fetch)
11659 (uri (pypi-uri "plaster_pastedeploy" version))
11660 (sha256
11661 (base32
11662 "04hl71p76wnwiy195p5w51bn3c6ba0lgx8nsfm42d9s15rnjw9my"))))
11663 (build-system pyproject-build-system)
11664 (native-inputs
11665 (list python-pytest
11666 python-setuptools))
11667 (propagated-inputs
11668 (list python-plaster python-pastedeploy))
11669 (home-page "https://github.com/Pylons/plaster_pastedeploy")
11670 (synopsis "Plugin for python-plaster adding PasteDeploy syntax")
11671 (description
11672 "This plugin for @code{python-plaster} adds support for PasteDeploy
11673syntax, it provides a plaster @code{Loader} object that can parse ini files
11674according to the standard set by PasteDeploy")
11675 (license license:expat)))
11676
11677(define-public python-hupper
11678 (package
11679 (name "python-hupper")
11680 (version "1.12.1")
11681 (source
11682 (origin
11683 (method url-fetch)
11684 (uri (pypi-uri "hupper" version))
11685 (sha256
11686 (base32 "1srj7sqxdgxr0nnhh9lw8jmp64chwgg8iwfm9b4g9v7l1wbm9gq6"))))
11687 (build-system pyproject-build-system)
11688 (arguments
11689 (list
11690 ;; RuntimeError: timeout waiting for change to
11691 ;; file=/tmp/guix-build-python-hupper-1.12.1.drv-0/tmpm9n4697p
11692 #:test-flags #~(list "--ignore=tests/test_it.py")))
11693 (native-inputs
11694 (list python-pytest python-setuptools python-wheel))
11695 (propagated-inputs
11696 (list python-watchdog))
11697 (home-page "https://readthedocs.org/projects/hupper")
11698 (synopsis "Integrated process monitor tracking changes to imported Python files")
11699 (description
11700 "Hupper is an integrated process monitor that will track changes to any
11701imported Python files in sys.modules as well as custom paths. When files are
11702changed the process is restarted.")
11703 (license license:expat)))
11704
11705(define-public python-pyowm
11706 (package
11707 (name "python-pyowm")
11708 (version "3.3.0")
11709 (source
11710 (origin
11711 (method git-fetch)
11712 (uri (git-reference
11713 (url "https://github.com/csparpa/pyowm")
11714 (commit version)))
11715 (file-name (git-file-name name version))
11716 (sha256
11717 (base32
11718 "1ha4pp96y3jk33qnyir5851cnj4dc06q6wqn1b0w54l3fsds28vi"))))
11719 (build-system pyproject-build-system)
11720 (arguments (list #:test-flags #~(list "tests/unit")))
11721 (native-inputs (list python-pytest python-setuptools python-wheel))
11722 (propagated-inputs
11723 (list python-geojson-for-pyowm
11724 python-pysocks
11725 python-requests))
11726 (home-page "https://github.com/csparpa/pyowm")
11727 (synopsis "Python wrapper around OpenWeatherMap web APIs")
11728 (description
11729 "This package provides a Python wrapper around OpenWeatherMap web APIs.")
11730 (license license:expat)))
11731
11732(define-public python-pyramid
11733 (package
11734 (name "python-pyramid")
11735 (version "2.1")
11736 (source
11737 (origin
11738 (method git-fetch)
11739 (uri (git-reference
11740 (url "https://github.com/Pylons/pyramid")
11741 (commit version)))
11742 (file-name (git-file-name name version))
11743 (sha256
11744 (base32 "0my03b81009w9zqx5cdn9qixh0jah49hr0379n98kx2j3b8cfk1p"))))
11745 (build-system pyproject-build-system)
11746 (native-inputs
11747 (list python-pytest
11748 python-setuptools
11749 python-webtest
11750 python-zope-component))
11751 (propagated-inputs
11752 (list python-hupper
11753 python-plaster
11754 python-plaster-pastedeploy
11755 python-translationstring
11756 python-venusian
11757 python-webob
11758 python-zope-deprecation
11759 python-zope-interface))
11760 (home-page "https://trypyramid.com/")
11761 (synopsis "Python web-framework suitable for small and large sites")
11762 (description
11763 "Pyramid makes it easy to write web applications. From minimal
11764request/response web apps to larger, grown applications.")
11765 (license license:repoze)))
11766
11767(define-public python-pyramid-chameleon
11768 ;; PyPI lacks a fresh release, use the latest commit associated with
11769 ;; unrleased version, see:
11770 ;; <https://github.com/Pylons/pyramid_chameleon/issues/27>
11771 (let ((commit "956c77ba37120c430e871c834d3cd4ed5ac8dccf")
11772 (revision "0"))
11773 (package
11774 (name "python-pyramid-chameleon")
11775 (version (git-version "0.4.dev0" revision commit))
11776 (source
11777 (origin
11778 (method git-fetch)
11779 (uri (git-reference
11780 (url "https://github.com/Pylons/pyramid_chameleon")
11781 (commit commit)))
11782 (file-name (git-file-name name version))
11783 (sha256
11784 (base32 "0rsb921xi7736h1xikc904bq2zzmrj1g8qgyimjw5wxdcd8927b1"))))
11785 (build-system pyproject-build-system)
11786 (native-inputs
11787 (list python-pytest
11788 python-setuptools))
11789 (propagated-inputs
11790 (list python-chameleon
11791 python-pyramid))
11792 (home-page "https://github.com/Pylons/pyramid_chameleon")
11793 (synopsis "Chameleon template compiler for pyramid")
11794 (description
11795 "These package provides bindings for the Chameleon templating system
11796 for the Pyramid web framework.")
11797 (license license:repoze))))
11798
11799(define-public python-pyramid-debugtoolbar
11800 (package
11801 (name "python-pyramid-debugtoolbar")
11802 (version "4.12.1")
11803 (source
11804 (origin
11805 (method git-fetch)
11806 (uri (git-reference
11807 (url "https://github.com/Pylons/pyramid_debugtoolbar")
11808 (commit version)))
11809 (file-name (git-file-name name version))
11810 (sha256
11811 (base32 "0kalb5rsrlcz62zv9a39kp28mvwg9j6gymvzxbybdnvk51v9if56"))))
11812 (build-system pyproject-build-system)
11813 (arguments
11814 (list
11815 #:test-flags
11816 ;; Large diff assertion not equal faileurs.
11817 #~(list #$@(map (lambda (test)
11818 (string-append "--deselect=tests"
11819 "/test_panels/test_sqla.py::" test))
11820 (list "TestSimpleSelect::test_panel"
11821 "TestTransactionCommit::test_panel"
11822 "TestTransactionRollback::test_panel")))))
11823 (native-inputs
11824 (list python-pytest
11825 python-setuptools
11826 python-webtest))
11827 (propagated-inputs
11828 (list python-pyramid
11829 python-pyramid-chameleon
11830 python-pyramid-jinja2
11831 python-pyramid-mako
11832 python-selenium
11833 python-sqlalchemy
11834 python-waitress))
11835 (home-page "https://github.com/Pylons/pyramid_debugtoolbar")
11836 (synopsis "Pyramid debug toolbar")
11837 (description
11838 "This package provides an interactive HTML debugger for Pyramid
11839application development.")
11840 (license license:bsd-3)))
11841
11842(define-public python-pyramid-jinja2
11843 (package
11844 (name "python-pyramid-jinja2")
11845 (version "2.10.1")
11846 (source
11847 (origin
11848 (method url-fetch)
11849 (uri (pypi-uri "pyramid_jinja2" version))
11850 (sha256
11851 (base32 "0xqnqbqhx9bkrg2ic3blflsk8xc8kh7i2dm2kha9apqkbjrqql4c"))))
11852 (build-system pyproject-build-system)
11853 (arguments
11854 (list
11855 #:test-flags
11856 ;; Two tests failed with assertion not equal.
11857 #~(list "-k" "not test_it_relative_to_package and not test_options")))
11858 (native-inputs
11859 (list python-pytest
11860 python-setuptools
11861 python-webtest))
11862 (propagated-inputs
11863 (list python-jinja2
11864 python-markupsafe
11865 python-pyramid
11866 python-zope-deprecation))
11867 (home-page "https://github.com/Pylons/pyramid_jinja2")
11868 (synopsis "Jinja2 template bindings for the Pyramid web framework")
11869 (description "This package provides Jinja2 template bindings for the
11870Pyramid web framework.")
11871 (license license:repoze)))
11872
11873(define-public python-pyramid-mako
11874 ;; 1.1.0 was released in 2019, there a lot of compatibility changes on
11875 ;; master, us the latest commit for now.
11876 (let ((commit "1a6f4c00c7134530d2975f34d904b64a41b28b21")
11877 (revision "0"))
11878 (package
11879 (name "python-pyramid-mako")
11880 (version (git-version "1.1.0" revision commit))
11881 (source
11882 (origin
11883 (method git-fetch)
11884 (uri (git-reference
11885 (url "https://github.com/Pylons/pyramid_mako")
11886 (commit commit)))
11887 (file-name (git-file-name name version))
11888 (sha256
11889 (base32 "0v0571z2gby4apsalkdk83gs0d5mw79d56518h3bwwxzbq32kkns"))))
11890 (build-system pyproject-build-system)
11891 (native-inputs
11892 (list python-pytest
11893 python-setuptools))
11894 (propagated-inputs
11895 (list python-mako
11896 python-pyramid))
11897 (home-page "https://github.com/Pylons/pyramid_mako")
11898 (synopsis "Mako template bindings for the Pyramid web framework")
11899 (description
11900 "This package provides Mako template bindings for the Pyramid web
11901framework.")
11902 (license license:repoze))))
11903
11904(define-public python-pyramid-retry
11905 (package
11906 (name "python-pyramid-retry")
11907 (version "2.1.1")
11908 (source
11909 (origin
11910 (method url-fetch)
11911 (uri (pypi-uri "pyramid_retry" version))
11912 (sha256
11913 (base32 "1jf07v6zhli0abgm2qajzfwg68bl9zy4xygjwl4svawbwrm2ga5s"))))
11914 (build-system pyproject-build-system)
11915 (native-inputs
11916 (list python-pytest
11917 python-setuptools
11918 python-webtest))
11919 (propagated-inputs
11920 (list python-pyramid
11921 python-zope-interface))
11922 (home-page "https://github.com/Pylons/pyramid_retry")
11923 (synopsis "Pyramid execution policy supporting retrying failed requests")
11924 (description
11925 "@code{pyramid_retry} is an execution policy for Pyramid that wraps requests
11926and can retry them a configurable number of times under certain \"retryable\"
11927error conditions before indicating a failure to the client.")
11928 (license license:expat)))
11929
11930(define-public python-pyramid-tm
11931 (package
11932 (name "python-pyramid-tm")
11933 (version "2.6")
11934 (source
11935 (origin
11936 (method url-fetch)
11937 (uri (pypi-uri "pyramid_tm" version))
11938 (sha256
11939 (base32 "173hg16hldfh5n3mn482xx64nldk308dzri31jd0qa4528cx4j41"))))
11940 (build-system pyproject-build-system)
11941 (native-inputs
11942 (list python-pytest
11943 python-setuptools
11944 python-webtest))
11945 (propagated-inputs
11946 (list python-pyramid
11947 python-transaction))
11948 (home-page "https://github.com/Pylons/pyramid_tm")
11949 (synopsis "Centralized transaction management for Pyramid")
11950 (description
11951 "@code{pyramid_tm} is a package which allows Pyramid requests to join the
11952active @url{https://pypi.org/project/transaction/, transaction} as provided by
11953the Python transaction package.")
11954 (license license:repoze)))
11955
11956(define-public python-random-user-agent
11957 (package
11958 (name "python-random-user-agent")
11959 (version "1.0.1")
11960 (source
11961 (origin
11962 (method url-fetch)
11963 (uri (pypi-uri "random_user_agent" version))
11964 (sha256
11965 (base32 "04nhzdh2ki7ybhjrmghxci6hcm6i03vvin2q2ynj87fbr1pa534g"))))
11966 (build-system pyproject-build-system)
11967 (arguments (list #:tests? #f)) ; No tests.
11968 (native-inputs (list python-setuptools))
11969 (home-page "https://github.com/Luqman-Ud-Din/random_user_agent")
11970 (synopsis "List of user agents")
11971 (description
11972 "This package provides a list of user agents, from a collection of more
11973than 326,000 known user-agents. Users can pick a random one, or select one
11974based on filters.")
11975 (license license:expat)))
11976
11977(define-public python-rangehttpserver
11978 (package
11979 (name "python-rangehttpserver")
11980 (version "1.4.0")
11981 (source
11982 (origin
11983 (method git-fetch)
11984 (uri (git-reference
11985 (url "https://github.com/danvk/RangeHTTPServer")
11986 (commit version)))
11987 (file-name (git-file-name name version))
11988 (sha256
11989 (base32 "1dx533fsbq1mbz3by7qkm5bh2c253nwvm8214pqbwbfq07kqkwf2"))))
11990 (build-system pyproject-build-system)
11991 (native-inputs
11992 (list python-pytest
11993 python-requests
11994 python-setuptools))
11995 (home-page "https://github.com/danvk/RangeHTTPServer")
11996 (synopsis "SimpleHTTPServer with support for range requests")
11997 (description
11998 "This tool provides a simple HTTP server with support for Range
11999requests.")
12000 (license license:asl2.0)))
12001
12002(define-public python-flask-restx
12003 (package
12004 (name "python-flask-restx")
12005 (version "1.3.0")
12006 (source
12007 (origin
12008 (method git-fetch) ;no tests in PyPI archive
12009 (uri (git-reference
12010 (url "https://github.com/python-restx/flask-restx")
12011 (commit version)))
12012 (file-name (git-file-name name version))
12013 (sha256
12014 (base32 "1qmm3i1cdv0bvzsc1gn4ql2dsf1fbx85fk69vcmzpsdxzczmw508"))))
12015 (build-system pyproject-build-system)
12016 (arguments
12017 (list
12018 ;; 1214 passed, 6 skipped, 16 deselected, 3 warnings
12019 #:test-flags
12020 #~(list "--benchmark-skip"
12021 ;; ValueError: http://www.google.com is not a valid URL. Domain
12022 ;; does not exists.
12023 "--deselect=tests/test_inputs.py::URLTest::test_check"
12024 "-k" (string-join
12025 ;; See: <https://github.com/python-restx/flask-restx/issues/620>.
12026 (list "not test_rfc822_value"
12027 "test_iso8601_value"
12028 ;; assert 404 == 2000
12029 "test_specs_endpoint_host_and_subdomain"
12030 ;; ValueError: [email protected] is not a valid email
12031 "test_valid_value_check")
12032 " and not "))))
12033 (native-inputs
12034 (list python-blinker
12035 python-faker
12036 python-pytest
12037 python-pytest-benchmark
12038 python-pytest-flask
12039 python-pytest-mock
12040 python-setuptools))
12041 (propagated-inputs
12042 (list python-aniso8601
12043 python-flask
12044 python-importlib-resources
12045 python-jsonschema
12046 python-pytz
12047 python-werkzeug))
12048 (home-page "https://github.com/python-restx/flask-restx")
12049 (synopsis
12050 "Framework for fast, easy and documented API development with Flask")
12051 (description
12052 "Flask-RESTX is an extension for Flask that adds support for quickly building
12053REST APIs. Flask-RESTX encourages best practices with minimal setup. If you are familiar
12054 with Flask, Flask-RESTX should be easy to pick up. It provides a coherent collection of
12055decorators and tools to describe your API and expose its documentation properly using
12056Swagger.")
12057 (license license:bsd-3)))
12058
12059(define-public python-flask-socketio
12060 (package
12061 (name "python-flask-socketio")
12062 (version "5.6.1")
12063 (source
12064 (origin
12065 (method git-fetch)
12066 (uri (git-reference
12067 (url "https://github.com/miguelgrinberg/Flask-SocketIO/")
12068 (commit (string-append "v" version))))
12069 (file-name (git-file-name name version))
12070 (sha256
12071 (base32 "1bs594bxggwn78yhf86whv6bcs8gb7mhrm5dnk5x4c3jb20nhfmm"))))
12072 (build-system pyproject-build-system)
12073 (native-inputs
12074 (list python-pytest
12075 python-redis
12076 python-setuptools))
12077 (propagated-inputs
12078 (list python-flask
12079 python-socketio))
12080 (home-page "https://github.com/miguelgrinberg/Flask-SocketIO/")
12081 (synopsis "Socket.IO integration for Flask applications")
12082 (description "Socket.IO integration for Flask applications")
12083 (license license:expat)))
12084
12085(define-public python-manuel
12086 (package
12087 (name "python-manuel")
12088 (version "1.13.0")
12089 (source
12090 (origin
12091 (method url-fetch)
12092 (uri (pypi-uri "manuel" version))
12093 (sha256
12094 (base32 "0nl8psji3fizbxw34gdg22dndlg9lf5f56mnh1vr4vgsx06i4qsx"))))
12095 (build-system pyproject-build-system)
12096 (arguments
12097 (list
12098 ;; FIXME: Tests are broken, see: <https://github.com/benji-york/manuel/pull/32>.
12099 #:tests? #f))
12100 (propagated-inputs
12101 (list python-setuptools)) ;install requires
12102 (home-page "https://pypi.org/project/manuel/")
12103 (synopsis "Build tested documentation")
12104 (description
12105 "Manuel lets you mix and match traditional doctests with custom test syntax.")
12106 (license license:asl2.0)))
12107
12108(define-public python-marshmallow-jsonapi
12109 (package
12110 (name "python-marshmallow-jsonapi")
12111 (version "0.26.0")
12112 (source
12113 (origin
12114 (method git-fetch)
12115 (uri (git-reference
12116 ;; XXX: Deprecated upstream: This repository has been archived
12117 ;; by the owner on Jun 6, 2024. It is now read-only.
12118 ;; Using a maintained fork. The pypi name of this fork
12119 ;; is marshmallow-jsonapi-minfork.
12120 (url "https://github.com/tadams42/marshmallow-jsonapi")
12121 (commit version)))
12122 (file-name (git-file-name name version))
12123 (sha256
12124 (base32 "07sizh4m03rrk1139ci3psh5npk42cdsdfsdp574pz1fd5ncrq91"))))
12125 (build-system pyproject-build-system)
12126 (native-inputs
12127 (list python-faker
12128 python-flask
12129 python-pytest
12130 python-setuptools))
12131 (propagated-inputs (list python-marshmallow))
12132 (home-page "https://github.com/marshmallow-code/marshmallow-jsonapi")
12133 (synopsis "JSON:API 1.0 formatting with Marshmallow")
12134 (description
12135 "The marshmallow-jsonapi package provides a simple way to produce
12136@uref{https://jsonapi.org, JSON:API}-compliant data in any Python Web
12137framework. It includes optional utilities to integrate with Flask. This is a
12138forked version whose pypi name is @code{marshmallow_jsonapi_minfork}.")
12139 (license license:expat)))
12140
12141(define-public python-pecan
12142 (package
12143 (name "python-pecan")
12144 (version "1.8.0")
12145 (source
12146 (origin
12147 (method git-fetch)
12148 (uri (git-reference
12149 (url "https://github.com/pecan/pecan")
12150 (commit version)))
12151 (file-name (git-file-name name version))
12152 (sha256
12153 (base32 "0w693jpnjy358992f3jrrlf31knkqn0jvz2jx0iz7ziikprc61p8"))))
12154 (build-system pyproject-build-system)
12155 (arguments
12156 (list
12157 #:test-flags '(list "--pyargs" "pecan")))
12158 (native-inputs
12159 (list gunicorn
12160 python-genshi
12161 python-jinja2
12162 python-pytest
12163 python-sqlalchemy-2
12164 python-webtest))
12165 (propagated-inputs
12166 (list python-mako
12167 python-webob))
12168 (home-page "http://github.com/pecan/pecan")
12169 (synopsis "WSGI object-dispatching web framework")
12170 (description "This package provides a WSGI object-dispatching web
12171framework, designed to be lean and fast, with few dependencies.")
12172 (license license:bsd-3)))
12173
12174(define-public python-persistent
12175 (package
12176 (name "python-persistent")
12177 (version "6.1.1")
12178 (source
12179 (origin
12180 (method git-fetch)
12181 (uri (git-reference
12182 (url "https://github.com/zopefoundation/persistent/")
12183 (commit version)))
12184 (file-name (git-file-name name version))
12185 (sha256
12186 (base32 "19qwqg49zql2c8l4vjxjb9haw0bzd6lk8p4v3hip2irch6a4578a"))))
12187 (build-system pyproject-build-system)
12188 (arguments
12189 (list
12190 #:phases
12191 #~(modify-phases %standard-phases
12192 (replace 'check
12193 (lambda* (#:key tests? #:allow-other-keys)
12194 (if tests?
12195 (invoke "zope-testrunner" "--test-path=src"
12196 ;; XXX: Ignore doc tests.
12197 "!persistent.tests.test_docs")
12198 (format #t "test suite not run~%")))))))
12199 (propagated-inputs
12200 (list python-cffi
12201 python-zope-deferredimport
12202 python-zope-interface
12203 python-zope-testrunner))
12204 (native-inputs
12205 (list python-manuel python-zope-testrunner python-setuptools))
12206 (home-page "https://github.com/zopefoundation/persistent/")
12207 (synopsis "Translucent persistent objects")
12208 (description
12209 "This package contains a generic persistence implementation for Python.
12210It forms the core protocol for making objects interact \"transparently\" with
12211a database such as the ZODB.")
12212 (license license:zpl2.1)))
12213
12214(define-public python-transaction
12215 (package
12216 (name "python-transaction")
12217 (version "5.0")
12218 (source
12219 (origin
12220 (method url-fetch)
12221 (uri (pypi-uri "transaction" version))
12222 (sha256
12223 (base32 "0x0i5graxb93aa8bwf5rmm9zq7d7r6q2b4pw358wph5whbbpnvhh"))))
12224 (build-system pyproject-build-system)
12225 (native-inputs
12226 (list python-pytest
12227 python-setuptools))
12228 (propagated-inputs
12229 (list python-zope-interface))
12230 (home-page "https://github.com/zopefoundation/transaction")
12231 (synopsis "Transaction management for Python")
12232 (description "This package contains a generic transaction implementation
12233for Python. It is mainly used by the ZODB.")
12234 (license license:zpl2.1)))
12235
12236(define-public python-truststore
12237 (package
12238 (name "python-truststore")
12239 (version "0.10.4")
12240 (source
12241 (origin
12242 (method url-fetch)
12243 (uri (pypi-uri "truststore" version))
12244 (sha256
12245 (base32 "00f3xc7720rkddsn291yrw871kfnimi6d9xbwi75xbb3ci1vv4cx"))))
12246 (build-system pyproject-build-system)
12247 (arguments
12248 (list #:tests? #f)) ;all tests require Internet access
12249 (native-inputs
12250 (list python-flit-core))
12251 (home-page "https://github.com/sethmlarson/truststore")
12252 (synopsis "Verify certificates using native system trust stores")
12253 (description
12254 "Truststore is a library which exposes native system certificate stores (ie
12255\"trust stores\") through an @code{ssl.SSLContext-like} API. This means that
12256Python applications no longer need to rely on certifi as a root certificate
12257store.")
12258 (license license:expat)))
12259
12260(define-public python-robot-detection
12261 (package
12262 (name "python-robot-detection")
12263 (version "0.4.0")
12264 (source
12265 (origin
12266 (method git-fetch)
12267 (uri (git-reference
12268 (url "https://github.com/rory/robot-detection")
12269 (commit (string-append "v" version))))
12270 (file-name (git-file-name name version))
12271 (sha256
12272 (base32 "1gxk13rn0gw5pfc4abhfnzg8qi05xa0ygs26pgkp0swygkzq6wsq"))))
12273 (build-system pyproject-build-system)
12274 (arguments (list #:test-backend #~'unittest))
12275 (native-inputs (list python-setuptools))
12276 (propagated-inputs (list python-six))
12277 (home-page "https://github.com/rory/robot-detection")
12278 (synopsis "Detect web crawlers")
12279 (description
12280 "@code{robot_detection} is a python module to detect if a given HTTP User
12281Agent is a web crawler. It uses the list of registered robots from
12282@url{http://www.robotstxt.org}.")
12283 (license license:gpl3+)))
12284
12285(define-public python-robotframework-requests
12286 (package
12287 (name "python-robotframework-requests")
12288 (version "0.9.7")
12289 (source
12290 (origin
12291 (method git-fetch) ; no tests in PyPI release
12292 (uri (git-reference
12293 (url "https://github.com/MarketSquare/robotframework-requests")
12294 (commit (string-append "v" version))))
12295 (file-name (git-file-name name version))
12296 (sha256
12297 (base32 "077j8p5k41v53slyv8h32fcmqfi7m6z3r4gmyqqaawm5szfmy61m"))))
12298 (build-system pyproject-build-system)
12299 (native-inputs
12300 (list python-pytest
12301 python-setuptools
12302 python-wheel))
12303 (propagated-inputs
12304 (list python-requests
12305 python-robotframework))
12306 (home-page "https://github.com/MarketSquare/robotframework-requests")
12307 (synopsis "Robot Framework keyword library wrapper around requests")
12308 (description
12309 "@code{RequestsLibrary} is a @url{https://robotframework.org/, Robot
12310Framework} library aimed to provide HTTP API testing functionalities by
12311wrapping the @code{requests} Python library.")
12312 (license license:expat)))
12313
12314(define-public python-pysolr
12315 (package
12316 (name "python-pysolr")
12317 (version "3.10.0")
12318 (source
12319 (origin
12320 (method url-fetch)
12321 (uri (pypi-uri "pysolr" version))
12322 (sha256
12323 (base32 "02gl1sma5cnpd7srpri1g68lpsg3s5n3lr462p5ll8v9s4nllyqj"))))
12324 (build-system pyproject-build-system)
12325 (arguments
12326 '(#:tests? #f)) ; Tests require network access.
12327 (native-inputs
12328 (list python-setuptools
12329 python-setuptools-scm
12330 python-wheel))
12331 (propagated-inputs
12332 (list python-requests))
12333 (home-page "https://github.com/django-haystack/pysolr/")
12334 (synopsis "Lightweight python wrapper for Apache Solr")
12335 (description
12336 "This module provides an interface that queries the Apache Solr server
12337using a pure Python implementation.")
12338 (license license:bsd-3)))
12339
12340(define-public python-pyjsparser
12341 ;; XXX: This project is potentially abandonware, consider to remove in next
12342 ;; refresh cycle, see:
12343 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/28>,
12344 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/39>, and
12345 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/40>.
12346 (package
12347 (name "python-pyjsparser")
12348 (version "2.7.1")
12349 (source
12350 (origin
12351 (method url-fetch)
12352 (uri (pypi-uri "pyjsparser" version))
12353 (sha256
12354 (base32 "0ycmf9fsvwliqmm1n6sfz7x71y7i2kbfgn39d8lsbiccfxmxlq5y"))))
12355 (build-system pyproject-build-system)
12356 (arguments
12357 '(#:tests? #f)) ;no tests in PyPI
12358 (native-inputs (list python-setuptools))
12359 (home-page "https://github.com/PiotrDabkowski/pyjsparser")
12360 (synopsis "Fast JavaScript parser")
12361 (description
12362 "This package provides a fast JavaScript parser (based on esprima.js)")
12363 (license license:expat)))
12364
12365(define-public python-js2py
12366 (package
12367 (name "python-js2py")
12368 (properties '((commit . "2e017b86e2f18a6c8a842293b1687f2ce7baa12e")
12369 (revision . "0")))
12370 (version (git-version "0.74"
12371 (assoc-ref properties 'revision)
12372 (assoc-ref properties 'commit)))
12373 (source
12374 (origin
12375 (method git-fetch)
12376 (uri (git-reference
12377 (url "https://github.com/PiotrDabkowski/Js2Py")
12378 (commit (assoc-ref properties 'commit))))
12379 (file-name (git-file-name name version))
12380 (sha256
12381 (base32 "0rsac03shkm0yxq91hzxdvhb96wy168bxdw8azi25bvlm8s3l27p"))
12382 (patches
12383 (list
12384 (origin
12385 (method url-fetch)
12386 (uri (string-append "https://github.com/PiotrDabkowski/Js2Py/commit"
12387 "/fd7df4a91fb08060914c7b1d9e94583d18f3371b"
12388 ".patch"))
12389 (file-name (string-append name "-" version "-pull-327.patch"))
12390 (sha256
12391 (base32 "14v89v8qqrsq0d63xbilkvx19l1rk59mlrbxvd4sj138lk7160ki")))))))
12392 (build-system pyproject-build-system)
12393 (arguments
12394 (list #:tests? #f)) ; tests require Node
12395 (native-inputs
12396 (list python-setuptools))
12397 (propagated-inputs
12398 (list python-pyjsparser
12399 python-six
12400 python-tzlocal))
12401 (home-page "https://github.com/PiotrDabkowski/Js2Py")
12402 (synopsis "JavaScript to Python translator")
12403 (description
12404 "This package provides a JavaScript to Python translator and a JavaScript
12405interpreter written in pure Python.")
12406 (license license:expat)))
12407
12408(define-public python-http-ece
12409 (package
12410 (name "python-http-ece")
12411 (version "1.2.1")
12412 (source
12413 (origin
12414 (method git-fetch)
12415 (uri (git-reference
12416 (url "https://github.com/web-push-libs/encrypted-content-encoding")
12417 (commit (string-append "v" version))))
12418 (file-name (git-file-name name version))
12419 (sha256
12420 (base32 "16kd9dsfpyfvq4iw6bbrrqrvsnf5lwgwa6p9f3b1y56ab18y0kzx"))))
12421 (build-system pyproject-build-system)
12422 (arguments
12423 `(#:phases
12424 (modify-phases %standard-phases
12425 (add-after 'unpack 'change-directory
12426 (lambda _ (chdir "python") #t)))))
12427 (native-inputs
12428 (list python-pytest python-setuptools))
12429 (propagated-inputs
12430 (list python-cryptography))
12431 (home-page "https://github.com/web-push-libs/encrypted-content-encoding")
12432 (synopsis "Encrypted Content Encoding for HTTP")
12433 (description
12434 "This package provides a simple implementation of Encrypted Content
12435Encoding for HTTP.")
12436 (license license:expat)))
12437
12438(define-public python-cloud-init
12439 (package
12440 (name "python-cloud-init")
12441 (version "24.2")
12442 (source
12443 (origin
12444 (method git-fetch)
12445 (uri (git-reference
12446 (url "https://github.com/canonical/cloud-init")
12447 (commit version)))
12448 (file-name (git-file-name name version))
12449 (sha256
12450 (base32 "18872z2y9wkh558y1bx5r0rksb4i584jbc8z4g8marwawhwxq506"))))
12451 (build-system pyproject-build-system)
12452 (arguments
12453 (list
12454 #:test-flags
12455 '(list
12456 ;; This requires usermod
12457 "--ignore=tests/unittests/distros/test_create_users.py"
12458 ;; This writes to /var
12459 "--ignore=tests/unittests/net/test_dhcp.py"
12460 "-k"
12461 (string-append
12462 ;; This test messes with PATH, so it cannot find mkdir
12463 "not test_path_env_gets_set_from_main"
12464 " and not test_apt_configure_sources_list_"
12465 ;; These all fail because /bin/sh doesn't exist. We cannot patch
12466 ;; this because the generated scripts must use /bin/sh as they are
12467 ;; supposed to be run on minimal systems.
12468 " and not test_handler_creates_and_runs_bootcmd_script_with_instance_id"
12469 " and not test_handler_runs_bootcmd_script_with_error"
12470 " and not test_subp_combined_stderr_stdout"
12471 " and not test_handle_part"))
12472 #:phases
12473 #~(modify-phases %standard-phases
12474 (add-after 'unpack 'patch-references
12475 (lambda _
12476 (substitute* "tests/unittests/cmd/test_clean.py"
12477 (("#!/bin/sh") (string-append "#!" (which "sh"))))))
12478 (add-after 'install 'move-files
12479 (lambda* (#:key inputs outputs #:allow-other-keys)
12480 (for-each (lambda (dir)
12481 (let ((source (string-append (site-packages inputs outputs) "/" dir))
12482 (target (string-append #$output "/" (basename dir))))
12483 (copy-recursively source target)
12484 (delete-file-recursively source)))
12485 (list "etc" "lib" "usr/lib" "usr/share")))))))
12486 (propagated-inputs
12487 (list python-configobj
12488 python-jinja2
12489 python-jsonpatch
12490 python-jsonschema
12491 python-netifaces
12492 python-oauthlib
12493 python-pyserial
12494 python-pyyaml
12495 python-responses))
12496 (native-inputs
12497 (list procps ;for ps when running tests
12498 python-pytest
12499 python-pytest-mock
12500 python-passlib
12501 python-setuptools
12502 python-wheel))
12503 (home-page "https://github.com/canonical/cloud-init")
12504 (synopsis "Cloud instance initialization tools")
12505 (description
12506 "Cloud-init is the multi-distribution method for cross-platform cloud
12507instance initialization. It is supported across all major public cloud
12508providers, provisioning systems for private cloud infrastructure, and
12509bare-metal installations.")
12510 ;; Either license can be chosen
12511 (license (list license:asl2.0 license:gpl3))))
12512
12513(define-public python-cloudscraper
12514 (package
12515 (name "python-cloudscraper")
12516 (version "3.0.0")
12517 (source
12518 (origin
12519 (method git-fetch)
12520 (uri (git-reference
12521 (url "https://github.com/VeNoMouS/cloudscraper")
12522 (commit version)))
12523 (file-name (git-file-name name version))
12524 (sha256
12525 (base32 "13w0ywz2y8x0zwpwzrnn46wyq307hfpdcz49zy33yyf46rq9n10n"))
12526 (modules '((guix build utils)))
12527 (snippet
12528 '(with-directory-excursion "cloudscraper"
12529 (for-each delete-file
12530 '("captcha/9kw.py" "captcha/anticaptcha.py"))
12531 (substitute* "__init__.py"
12532 ;; Perhaps it's a joke, but don't promote proprietary software.
12533 (("([Th]is feature is not available) in the .*'" _ prefix)
12534 (string-append prefix ".'")))))))
12535 (build-system pyproject-build-system)
12536 (arguments
12537 (list
12538 #:test-flags
12539 #~(list "-k" "not test_403_handling")
12540 #:phases
12541 #~(modify-phases %standard-phases
12542 (add-after 'unpack 'relax-requirements
12543 (lambda _
12544 ;; XXX: Relax brotli dependency.
12545 (substitute* "pyproject.toml"
12546 (("\"brotli>=.*\"")
12547 "\"brotli\""))
12548 ;; XXX: Dependencies, that have not yet been packaged
12549 ;; and cause an import error when included.
12550 (delete-file "cloudscraper/interpreters/v8.py")))
12551 (add-after 'unpack 'fix-references
12552 (lambda _
12553 (substitute* "cloudscraper/interpreters/nodejs.py"
12554 (("'node'")
12555 (string-append "'" (which "node") "'"))))))))
12556 (inputs (list node-lts))
12557 (propagated-inputs
12558 (list python-pycryptodome
12559 python-brotli
12560 python-js2py
12561 python-polling2
12562 python-requests
12563 python-requests-toolbelt
12564 python-responses
12565 python-pyparsing
12566 python-websocket-client))
12567 (native-inputs (list python-pytest python-setuptools))
12568 (home-page "https://github.com/venomous/cloudscraper")
12569 (synopsis "Cloudflare anti-bot bypass")
12570 (description
12571 "This module acts as a webbrowser solving Cloudflare's Javascript
12572challenges.")
12573 (license license:expat)))
12574
12575(define-public python-imap-tools
12576 (package
12577 (name "python-imap-tools")
12578 (version "1.9.0")
12579 (source
12580 (origin
12581 (method git-fetch) ; no tests in PyPI release
12582 (uri (git-reference
12583 (url "https://github.com/ikvk/imap_tools")
12584 (commit (string-append "v" version))))
12585 (file-name (git-file-name name version))
12586 (sha256
12587 (base32 "0iawc6shxn8p0ysiqiahfic5rp1r16f7rfn11c8y2fl8falckynr"))))
12588 (arguments
12589 (list
12590 #:test-flags
12591 ;; Tests require a network connection
12592 #~(list "-k" (string-append "not test_action"
12593 " and not test_attributes"
12594 " and not test_connection"
12595 " and not test_folders"
12596 " and not test_idle"
12597 " and not test_live"))))
12598 (build-system pyproject-build-system)
12599 (native-inputs
12600 (list python-pytest python-setuptools python-wheel))
12601 (home-page "https://github.com/ikvk/imap_tools")
12602 (synopsis "Work with email and mailbox by IMAP")
12603 (description
12604 "This Python library provides tools to deal with email and mailboxes
12605over IMAP:
12606
12607@itemize
12608@item Parsed email message attributes
12609@item Query builder for searching emails
12610@item Work with emails in folders (copy, delete, flag, move, seen)
12611@item Work with mailbox folders (list, set, get, create, exists, rename, delete, status)
12612@end itemize")
12613 (license license:asl2.0)))
12614
12615(define-public python-giturlparse
12616 (package
12617 (name "python-giturlparse")
12618 (version "0.12.0")
12619 (source
12620 (origin
12621 (method git-fetch)
12622 (uri (git-reference
12623 (url "https://github.com/nephila/giturlparse")
12624 (commit version)))
12625 (file-name (git-file-name name version))
12626 (sha256
12627 (base32 "1fdbxp176p17sn5xc1418mz2vk00hlcsd5qmi2fdcfphqal6raan"))))
12628 (build-system pyproject-build-system)
12629 (native-inputs (list python-pytest python-setuptools))
12630 (home-page "https://github.com/nephila/giturlparse")
12631 (synopsis "Git URL parsing module")
12632 (description
12633 "This package provides a git URL parsing module which supports parsing
12634and rewriting of remote git URLs from various hosting providers.")
12635 (license license:asl2.0)))
12636
12637(define-public python-hstspreload
12638 (package
12639 (name "python-hstspreload")
12640 (version "2025.1.1")
12641 (source
12642 (origin
12643 (method git-fetch)
12644 (uri (git-reference
12645 (url "https://github.com/sethmlarson/hstspreload")
12646 (commit version)))
12647 (file-name (git-file-name name version))
12648 (sha256
12649 (base32 "02mdzhgdz3sprgc26qb084zy639h2zw2yc8d2vm1r18ap9k51ayq"))))
12650 (build-system pyproject-build-system)
12651 (arguments (list #:tests? #f)) ; tests require external resources.
12652 (native-inputs (list python-setuptools))
12653 (home-page "https://github.com/sethmlarson/hstspreload")
12654 (synopsis "Chromium HSTS Preload list as a Python package")
12655 (description
12656 "@code{python-hstspreload} contains Chromium HSTS Preload list
12657as a Python package.")
12658 (license license:bsd-3)))
12659
12660(define-public python-sanic-routing
12661 (package
12662 (name "python-sanic-routing")
12663 (version "23.12.0")
12664 (source
12665 (origin
12666 (method url-fetch)
12667 (uri (pypi-uri "sanic-routing" version))
12668 (sha256
12669 (base32 "014bhkharcgyprdvlk7wjxhjp1pr0cva1nwj4f2qrr23qiidrjhx"))))
12670 (build-system pyproject-build-system)
12671 (arguments
12672 ;; PyPi sources does not contain tests, recursive dependency on
12673 ;; python-sanic.
12674 (list #:tests? #f))
12675 (native-inputs (list python-setuptools python-wheel))
12676 (home-page "https://github.com/sanic-org/sanic-routing/")
12677 (synopsis "Routing component for Sanic")
12678 (description "Internal package for @code{python-sanic}, which provides
12679the @code{BasicRouter}.")
12680 (license license:expat)))
12681
12682(define-public python-sanic-testing
12683 (package
12684 (name "python-sanic-testing")
12685 (version "23.12.0")
12686 (source
12687 (origin
12688 (method url-fetch)
12689 (uri (pypi-uri "sanic-testing" version))
12690 (sha256
12691 (base32 "0gqkzv90sbj9rw7yfly9c58lq9dq30g5hhcgjl3ihzjb66vm571b"))))
12692 (build-system pyproject-build-system)
12693 (arguments
12694 ;; PyPi sources does not contain tests, recursive dependency on
12695 ;; python-sanic.
12696 (list #:tests? #f))
12697 (propagated-inputs (list python-httpx python-sanic-bootstrap))
12698 (native-inputs (list python-setuptools python-wheel))
12699 (home-page "https://github.com/sanic-org/sanic-testing/")
12700 (synopsis "Test clients for Sanic")
12701 (description "Internal package for @code{python-sanic}, which is
12702meant to be the core testing utility and clients for testing Sanic
12703applications.")
12704 (license license:expat)))
12705
12706(define-public python-sanic
12707 (package
12708 (name "python-sanic")
12709 (version "25.12.1")
12710 (source
12711 (origin
12712 (method url-fetch)
12713 (uri (pypi-uri "sanic" version))
12714 (sha256
12715 (base32 "0zxll83cvmcpiad3rri7cn9y8wi8xn7x0b00dimg0c20irhbylbv"))
12716 ;; Loosen requirements for both python-sanic and python-sanic-bootstrap.
12717 (modules '((guix build utils)))
12718 (snippet #~(substitute* "setup.py"
12719 (("setuptools>=[0-9.]*")
12720 "setuptools")))))
12721 (build-system pyproject-build-system)
12722 (arguments
12723 (list
12724 #:test-flags
12725 #~(list "--asyncio-mode=auto"
12726 "--ignore=tests/benchmark/"
12727 "--ignore=tests/typing/test_typing.py"
12728 ;; Most tests hang or fail
12729 "--ignore=tests/test_cli.py"
12730 "--ignore=tests/worker/test_worker_serve.py"
12731 "-k"
12732 (string-append
12733 ;; PyPi sources lack examples module.
12734 "not test_gunicorn_"
12735 ;; Does not expect brotli and reordered headers.
12736 " and not test_raw_headers"
12737 ;; These look like buggy testcases.
12738 " and not test_zero_downtime"
12739 " and not test_non_default_uvloop_config_raises_warning"
12740 " and not test_listeners_triggered"
12741 " and not test_keep_alive_connection_context"
12742 " and not test_keep_alive_client_timeout"
12743 " and not test_conflicting_body_methods_overload"
12744 " and not test_unix_connection"
12745 ;; Unclear why they fail since core-updates merge.
12746 " and not test_missing_sni"
12747 " and not test_no_matching_cert"
12748 " and not test_wildcards"
12749 ;; These tests fail because subprotocols appear to be
12750 ;; parameterized as None
12751 " and not test_websocket_route_with_subprotocols"
12752 ;; AF_UNIX path too long
12753 " and not test_setup_and_teardown_unix"
12754 " and not test_configure_socket"
12755 ;; Freezes
12756 " and not test_server_run_with_repl"
12757 " and not test_server_run"
12758 " and not test_no_workers"
12759 ;; Raises DaemonError: Group 'root' does not exist
12760 " and not test_validate_user_sets_uid_and_gid"
12761 " and not test_validate_group_sets_gid"
12762 ;; Raises AssertionError:
12763 ;; assert 'text/xml; charset=utf-8' == 'application/xml'
12764 " and not test_guess_content_type"
12765 ;; Don't know.
12766 " and not test_chained_exception_handler"))))
12767 (propagated-inputs
12768 (list python-aiofiles
12769 python-aioquic
12770 python-html5tagger
12771 python-httptools
12772 python-multidict
12773 python-sanic-routing
12774 python-tracerite
12775 python-typing-extensions
12776 python-ujson
12777 python-uvloop
12778 python-websockets))
12779 (native-inputs
12780 (list python-bandit
12781 python-beautifulsoup4
12782 python-chardet
12783 python-cryptography
12784 python-docutils
12785 python-pygments
12786 python-pytest
12787 python-pytest-asyncio
12788 python-pytest-benchmark
12789 python-pytest-sanic
12790 python-pytest-xdist
12791 python-sanic-testing
12792 python-setuptools
12793 python-slotscheck
12794 python-towncrier
12795 python-types-ujson
12796 python-uvicorn))
12797 (home-page "https://github.com/sanic-org/sanic/")
12798 (synopsis "Async Python web server/framework")
12799 (description
12800 "Sanic is a Python web server and web framework that's written to go
12801fast. It allows the usage of the @code{async/await} syntax added in Python
128023.5, which makes your code non-blocking and speedy.")
12803 (license license:expat)))
12804
12805(define-public python-sanic-bootstrap
12806 (package
12807 (inherit python-sanic)
12808 (name "python-sanic-bootstrap")
12809 (arguments (list #:tests? #f))
12810 (native-inputs (list python-setuptools))))
12811
12812(define-public python-socketio
12813 (package
12814 (name "python-socketio")
12815 (version "5.16.4")
12816 (source
12817 (origin
12818 (method git-fetch)
12819 (uri (git-reference
12820 (url "https://github.com/miguelgrinberg/python-socketio/")
12821 (commit (string-append "v" version))))
12822 (file-name (git-file-name name version))
12823 (sha256
12824 (base32 "0695mq1nijlljkmpgn3nk6gfv34rzpgxrdsld1l1vix6gxyxna0y"))))
12825 (build-system pyproject-build-system)
12826 (arguments
12827 (list
12828 ;; tests: 642 passed, 5 warnings
12829 #:test-flags
12830 ;; Tests freeze.
12831 #~(list "--ignore=tests/async/test_admin.py"
12832 "--ignore=tests/common/test_admin.py")))
12833 (native-inputs
12834 (list python-msgpack
12835 python-pytest
12836 python-pytest-asyncio
12837 python-pytest-timeout
12838 python-redis
12839 python-setuptools
12840 python-uvicorn
12841 python-valkey))
12842 (propagated-inputs
12843 (list python-bidict
12844 python-engineio
12845 ;; [optional]
12846 python-aiohttp
12847 python-requests
12848 python-websocket-client))
12849 (home-page "https://github.com/miguelgrinberg/python-socketio/")
12850 (synopsis "Python Socket.IO server")
12851 (description
12852 "This package provides a Python implementation of the @code{Socket.IO}
12853realtime client and server.")
12854 (license license:expat)))
12855
12856(define-public python-socks
12857 (package
12858 (name "python-socks")
12859 (version "2.8.1")
12860 (source
12861 (origin
12862 (method git-fetch)
12863 (uri (git-reference
12864 (url "https://github.com/romis2012/python-socks")
12865 (commit (string-append "v" version))))
12866 (file-name (git-file-name name version))
12867 (sha256
12868 (base32 "1x95i9w3izivdgz6hadh5kiil12i4ljk4ashgh3g0rjv2rw33vhj"))))
12869 (build-system pyproject-build-system)
12870 (propagated-inputs (list python-trio))
12871 (native-inputs
12872 (list python-anyio
12873 python-flask
12874 python-pytest
12875 python-pytest-asyncio
12876 python-pytest-trio
12877 python-setuptools
12878 python-tiny-proxy
12879 python-trustme
12880 python-yarl))
12881 (home-page "https://github.com/romis2012/python-socks")
12882 (synopsis
12883 "Core proxy (SOCKS4, SOCKS5, HTTP tunneling) functionality for Python")
12884 (description
12885 "Socks is a library providing core proxy (SOCKS4, SOCKS5, HTTP tunneling)
12886 functionality.")
12887 (license license:asl2.0)))
12888
12889(define-public python-socksio
12890 (package
12891 (name "python-socksio")
12892 (version "1.0.0")
12893 (source
12894 (origin
12895 (method url-fetch)
12896 (uri (pypi-uri "socksio" version))
12897 (sha256
12898 (base32 "1b64j45w35jzhjhnq44bnyad9ydh1iyyd7a6j2c8phxmllyyp2zq"))))
12899 (build-system pyproject-build-system)
12900 (native-inputs
12901 (list python-flit-core python-pytest))
12902 (home-page "https://github.com/sethmlarson/socksio")
12903 (synopsis "Sans-I/O implementation of SOCKS4, SOCKS4A, and SOCKS5")
12904 (description "The @code{socksio} Python module is a client-side sans-I/O
12905SOCKS proxy implementation. It supports SOCKS4, SOCKS4A, and SOCKS5.
12906@code{socksio} is a sans-I/O library similar to @code{h11} or @code{h2}; this
12907means the library itself does not handle the actual sending of the bytes
12908through the network, it only deals with the implementation details of the
12909SOCKS protocols. It can be paired with any I/O library.")
12910 (license license:expat)))
12911
12912(define-public python-simple-websocket
12913 (package
12914 (name "python-simple-websocket")
12915 (version "1.1.0")
12916 (source
12917 (origin
12918 (method url-fetch)
12919 (uri (pypi-uri "simple_websocket" version))
12920 (sha256
12921 (base32 "1r1all55d5dimiw3qwdhj53cxj9yjgnskcysmcscarx0g9726fbr"))))
12922 (build-system pyproject-build-system)
12923 (arguments
12924 ;; Requires Internet access to resolve example.com
12925 (list #:test-flags '(list "--ignore=tests/test_client.py")))
12926 (propagated-inputs (list python-wsproto))
12927 (native-inputs (list python-pytest
12928 python-setuptools))
12929 (home-page "https://github.com/miguelgrinberg/simple-websocket")
12930 (synopsis "Simple WebSocket server and client for Python")
12931 (description "This package provides a simple @code{WebSocket} server and
12932client for Python.")
12933 (license license:expat)))
12934
12935(define-public python-siosocks
12936 (package
12937 (name "python-siosocks")
12938 (version "0.3.0")
12939 (source
12940 (origin
12941 (method git-fetch)
12942 (uri (git-reference
12943 (url "https://github.com/pohmelie/siosocks")
12944 (commit (string-append "v" version))))
12945 (file-name (git-file-name name version))
12946 (sha256
12947 (base32 "0zcib4j5bfxlryfa412wmlkk8ivsiwxrfbpij5s7ag839ii2lxa5"))))
12948 (build-system pyproject-build-system)
12949 (native-inputs
12950 (list python-pytest
12951 python-pytest-asyncio
12952 python-pytest-trio
12953 python-setuptools))
12954 (propagated-inputs (list python-trio))
12955 (home-page "https://github.com/pohmelie/siosocks")
12956 (synopsis "SOCKSv4 & SOCKSv5 TCP proxy protocol implementation in Python")
12957 (description
12958 "This package provides a Python module and framework for sans-io socks proxy
12959client/server with couple io backends.
12960
12961Features:
12962@itemize
12963@item Only TCP connect (no BIND, no UDP)
12964@item Both client and server
12965@item SOCKS versions: 4, 4a, 5
12966@item SOCKSv5 auth: no auth, username/password
12967@item Couple io backends: @code{asyncio}, @code{trio}, @code{socketserver}
12968@item One-shot socks server (@code{python -m siosocks})
12969@end itemize")
12970 (license license:expat)))
12971
12972(define-public python-tiny-proxy
12973 (package
12974 (name "python-tiny-proxy")
12975 (version "0.2.1")
12976 (source
12977 (origin
12978 (method url-fetch)
12979 (uri (pypi-uri "tiny_proxy" version))
12980 (sha256
12981 (base32 "05nq62fn3p7s1a6dkdvnrzmk39d9ddrzb3pqbbli025qs3m9j1bq"))))
12982 (build-system pyproject-build-system)
12983 ;; There are only a handful of tests and they require the as yet
12984 ;; unpackaged httpx_socks.
12985 (arguments (list #:tests? #false))
12986 (propagated-inputs (list python-anyio))
12987 (native-inputs
12988 (list python-httpx
12989 python-pytest
12990 python-setuptools
12991 python-wheel))
12992 (home-page "https://github.com/romis2012/tiny-proxy")
12993 (synopsis "Simple proxy server (SOCKS4(a), SOCKS5(h), HTTP tunnel)")
12994 (description "This package provides a simple proxy server (SOCKS4(a),
12995SOCKS5(h), HTTP tunnel).")
12996 (license license:asl2.0)))
12997
12998(define-public python-google-auth
12999 (package
13000 (name "python-google-auth")
13001 (version "2.56.0")
13002 (source
13003 (origin
13004 (method url-fetch)
13005 (uri (pypi-uri "google_auth" version))
13006 (sha256
13007 (base32 "0lx5cw49lfjqvd9vx1vlslrxyh9q0xd6d46np5a2dab9nlqa03zr"))))
13008 (build-system pyproject-build-system)
13009 (propagated-inputs
13010 (list python-aiohttp
13011 python-cryptography
13012 python-pyasn1-modules
13013 python-requests
13014 python-rsa
13015 python-urllib3))
13016 (native-inputs
13017 (list nss-certs-for-test
13018 python-aiohttp
13019 python-aioresponses
13020 python-flask
13021 python-freezegun
13022 python-grpcio
13023 python-oauth2client
13024 python-packaging
13025 python-pyjwt
13026 python-pyopenssl
13027 python-pytest
13028 python-pytest-asyncio
13029 python-pytest-localserver
13030 python-pyu2f
13031 python-requests
13032 python-responses
13033 python-rsa
13034 python-setuptools
13035 python-urllib3))
13036 (home-page "https://github.com/googleapis/google-auth-library-python")
13037 (synopsis "Google Authentication Library")
13038 (description "This library simplifies using Google's various
13039server-to-server authentication mechanisms to access Google APIs.")
13040 (license license:asl2.0)))
13041
13042(define-public python-google-resumable-media
13043 (package
13044 (name "python-google-resumable-media")
13045 (version "2.8.0")
13046 (source
13047 (origin
13048 (method git-fetch)
13049 (uri (git-reference
13050 (url
13051 "https://github.com/googleapis/google-resumable-media-python")
13052 (commit (string-append "v" version))))
13053 (file-name (git-file-name name version))
13054 (sha256
13055 (base32 "0ndida5yr06bal0m09yri80bvf8x7yy690b14ywnxl4ixi8rlh6s"))))
13056 (build-system pyproject-build-system)
13057 (arguments
13058 (list
13059 #:test-flags
13060 #~(list
13061 ;; XXX: Missing test_utils.retry.
13062 "--ignore-glob=tests*/system/"
13063 ;; XXX: md5_hash is not mock.sentinel.md5_hash
13064 "-k" (string-join
13065 (list "not test_brotli"
13066 "test_constructor"
13067 "test_decompress")
13068 " and not "))))
13069 (propagated-inputs (list python-google-crc32c))
13070 (native-inputs
13071 (list python-google-auth
13072 python-mock
13073 python-pytest
13074 python-pytest-asyncio
13075 python-setuptools
13076 python-test-utils))
13077 (home-page "https://github.com/googleapis/google-resumable-media-python")
13078 (synopsis "Utilities for Google Media Downloads and Resumable Uploads")
13079 (description "This package provides utilities for Google Media Downloads
13080and Resumable Uploads.")
13081 (license license:asl2.0)))
13082
13083(define-public python-googleapis-common-protos
13084 (package
13085 (name "python-googleapis-common-protos")
13086 (version "1.66.0")
13087 (source
13088 (origin
13089 (method git-fetch)
13090 (uri (git-reference
13091 (url "https://github.com/googleapis/python-api-common-protos")
13092 (commit (string-append "v" version))))
13093 (file-name (git-file-name name version))
13094 (sha256
13095 (base32 "1fb7bcmjngmwwhqrldslli6r5z3s6r2kj4ywjmdjj92d1i51c29r"))))
13096 (build-system pyproject-build-system)
13097 (propagated-inputs (list python-protobuf))
13098 (native-inputs (list python-pytest python-setuptools))
13099 (home-page "https://github.com/googleapis/python-api-common-protos")
13100 (synopsis "Common protobufs used in Google APIs")
13101 (description
13102 "This package contains Python classes generated from the common protos in
13103the @code{googleapis/api-common-protos} repository.")
13104 (license license:asl2.0)))
13105
13106(define-public python-google-api-core
13107 (package
13108 (name "python-google-api-core")
13109 (version "2.29.0")
13110 (source
13111 (origin
13112 (method git-fetch)
13113 (uri (git-reference
13114 (url "https://github.com/googleapis/python-api-core")
13115 (commit (string-append "v" version))))
13116 (file-name (git-file-name name version))
13117 (sha256
13118 (base32 "0ahs8abyl7719paarlnspqp8yds149w7vm3w7zz6f7q04sscd862"))))
13119 (build-system pyproject-build-system)
13120 (arguments
13121 (list
13122 #:test-flags
13123 ;; XXX: DeprecationWarning: datetime.datetime.utcfromtimestamp() is
13124 ;; deprecated and scheduled for removal in a future version. Use
13125 ;; timezone-aware objects to represent datetimes in UTC:
13126 ;; datetime.datetime.fromtimestamp(timestamp, datetime.UTC).
13127 #~(list "-W" "ignore::DeprecationWarning")))
13128 (propagated-inputs
13129 (list python-google-auth
13130 python-googleapis-common-protos
13131 python-protobuf
13132 python-proto-plus
13133 python-requests))
13134 (native-inputs
13135 (list python-mock
13136 python-pytest
13137 python-pytest-asyncio
13138 python-pytest-mock
13139 python-setuptools))
13140 (home-page "https://github.com/googleapis/python-api-core")
13141 (synopsis "Google API client core library")
13142 (description
13143 "This library defines common helpers used by all Google API clients.")
13144 (license license:asl2.0)))
13145
13146(define-public python-google-cloud-core
13147 (package
13148 (name "python-google-cloud-core")
13149 (version "2.5.0")
13150 (source
13151 (origin
13152 (method git-fetch)
13153 (uri (git-reference
13154 (url "https://github.com/googleapis/python-cloud-core")
13155 (commit (string-append "v" version))))
13156 (file-name (git-file-name name version))
13157 (sha256
13158 (base32 "1d7li74cakgl9vghxfir9nxwy36980alvxwgwjg0zyla3hgj07cq"))))
13159 (build-system pyproject-build-system)
13160 (arguments
13161 (list
13162 #:test-flags
13163 ;; XXX: DeprecationWarning: datetime.datetime.utcfromtimestamp() is
13164 ;; deprecated and scheduled for removal in a future version. Use
13165 ;; timezone-aware objects to represent datetimes in UTC:
13166 ;; datetime.datetime.fromtimestamp(timestamp, datetime.UTC).
13167 #~(list "-W" "ignore::DeprecationWarning")))
13168 (propagated-inputs (list python-google-api-core python-google-auth))
13169 (native-inputs
13170 (list python-grpcio
13171 python-grpcio-status
13172 python-pytest
13173 python-setuptools))
13174 (home-page "https://github.com/googleapis/python-cloud-core")
13175 (synopsis "Google Cloud API client core library")
13176 (description
13177 "This library defines common helpers (e.g. base @code{Client} classes)
13178used by all of the @code{google-cloud-*} packages.")
13179 (license license:asl2.0)))
13180
13181(define-public python-google-cloud-storage
13182 (package
13183 (name "python-google-cloud-storage")
13184 (version "2.19.0")
13185 (source
13186 (origin
13187 (method git-fetch)
13188 (uri (git-reference
13189 (url "https://github.com/googleapis/python-storage")
13190 (commit (string-append "v" version))))
13191 (file-name (git-file-name name version))
13192 (sha256
13193 (base32 "19w10v2j4ciwlf8j2ylm77f8z1b0kqzg8lkh9rvh2swv1zrhydpj"))))
13194 (build-system pyproject-build-system)
13195 (arguments
13196 (list
13197 #:test-flags
13198 #~(list
13199 ;; XXX: Missing test_utils.retry.
13200 "--ignore=tests/system/"
13201 ;; Needs docker.
13202 "--ignore=tests/conformance/"
13203 ;; XXX: Deprecations.
13204 "-k" (string-join
13205 (list "not test_set_api_request_attr"
13206 "test_create_bucket_w_custom_endpoint"
13207 "test_ctor_w_api_endpoint_override"
13208 "test_ctor_w_custom_endpoint_use_auth"
13209 "test_list_buckets_w_custom_endpoint")
13210 " and not ")
13211 "tests")))
13212 (native-inputs
13213 (list python-googleapis-common-protos
13214 python-mock
13215 python-pytest
13216 python-test-utils
13217 python-setuptools))
13218 (propagated-inputs
13219 (list python-google-api-core
13220 python-google-auth
13221 python-google-cloud-core
13222 python-google-resumable-media
13223 python-protobuf
13224 python-requests))
13225 (home-page "https://github.com/googleapis/python-storage")
13226 (synopsis "Google Cloud Storage API client library")
13227 (description
13228 "Google Cloud Storage allows you to store data on Google infrastructure,
13229and it can be used to distribute large data objects to users via direct
13230download. This package provides a Google Cloud Storage API client library for
13231Python.")
13232 (license license:asl2.0)))
13233
13234(define-public python-smart-open
13235 (package
13236 (name "python-smart-open")
13237 (version "7.3.0")
13238 (source
13239 (origin
13240 (method git-fetch) ;no tests in PyPI archive
13241 (uri (git-reference
13242 (url "https://github.com/piskvorky/smart_open")
13243 (commit (string-append "v" version))))
13244 (file-name (git-file-name name version))
13245 (sha256
13246 (base32 "1jk3dj0j7idv94g1ga5wyvybakj4l150g26cbsjkrjfpy017vxab"))))
13247 (build-system pyproject-build-system)
13248 (arguments
13249 (list
13250 #:test-flags
13251 #~(list "--ignore=ci_helpers/"
13252 "--ignore=integration-tests/"
13253 ;; FIXME: Enable when guix/guix#1436 is resolved.
13254 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri"
13255 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri_contains_question_mark"
13256 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri_contains_slash"
13257 "--deselect=tests/test_smart_open.py::ParseUriTest::test_scheme"
13258 "--ignore=tests/test_gcs.py")))
13259 (propagated-inputs
13260 (list python-azure-common
13261 python-azure-core
13262 python-azure-storage-blob
13263 python-boto3
13264 ;; python-google-cloud-storage ;see guix/guix#1436
13265 python-paramiko
13266 python-requests
13267 python-wrapt
13268 python-zstandard))
13269 (native-inputs
13270 (list python-numpy
13271 python-moto
13272 python-pytest
13273 python-pytest-rerunfailures
13274 python-responses
13275 python-setuptools
13276 python-setuptools-scm
13277 python-wheel))
13278 (home-page "https://github.com/piskvorky/smart_open")
13279 (synopsis "Utilities for streaming large files")
13280 (description
13281 "This package provides utilities for streaming large files (S3, HDFS,
13282GCS, Azure Blob Storage, gzip, bz2, etc.)")
13283 (license license:expat)))
13284
13285(define-public python-smart-open-6
13286 (package
13287 (inherit python-smart-open)
13288 (name "python-smart-open")
13289 (version "6.4.0")
13290 (source
13291 (origin
13292 (method git-fetch)
13293 (uri (git-reference
13294 (url "https://github.com/piskvorky/smart_open")
13295 (commit (string-append "v" version))))
13296 (file-name (git-file-name name version))
13297 (sha256
13298 (base32 "1vpx37b6lsb6iwi59776ywjrqk1czv8arlhaf9073lrsbilqvj3x"))))
13299 (arguments
13300 (list
13301 ;; XXX: Tests need some older native inputs, disable for now.
13302 #:tests? #f))))
13303
13304(define-public python-w3lib
13305 (package
13306 (name "python-w3lib")
13307 (version "2.3.1")
13308 (source
13309 (origin
13310 (method url-fetch)
13311 (uri (pypi-uri "w3lib" version))
13312 (sha256
13313 (base32
13314 "1929layzxwdnf43hhrz7rabv388b2yibj7mnq9s62mr760mc12jw"))))
13315 (build-system pyproject-build-system)
13316 (native-inputs
13317 (list python-pytest python-setuptools python-wheel))
13318 (home-page "https://github.com/scrapy/w3lib")
13319 (synopsis "Python library of web-related functions")
13320 (description
13321 "This is a Python library of web-related functions, such as: remove
13322comments, or tags from HTML snippets, extract base url from HTML snippets,
13323translate entities on HTML strings, among other things.")
13324 (license license:bsd-3)))
13325
13326(define-public python-webcolors
13327 (package
13328 (name "python-webcolors")
13329 (version "25.10.0")
13330 (source
13331 (origin
13332 (method git-fetch)
13333 (uri (git-reference
13334 (url "https://github.com/ubernostrum/webcolors")
13335 (commit version)))
13336 (sha256
13337 (base32 "1wknzir5252y30wcpwxb04ngmrdw1llzqmrpiajyhkm81x2lgrym"))))
13338 (build-system pyproject-build-system)
13339 (native-inputs
13340 (list python-pdm-backend python-pytest))
13341 (home-page "https://github.com/ubernostrum/webcolors")
13342 (synopsis "HTML/CSS color definitions library")
13343 (description "@code{python-webcolors} is a module for working with
13344HTML/CSS color definitions. Normalizing and converting between the following
13345formats is supported.
13346@itemize
13347@item Specification-defined color names
13348@item Six-digit hexadecimal
13349@item Three-digit hexadecimal
13350@item Integer rgb() triplet
13351@item Percentage rgb() triplet
13352@end itemize
13353Only the RGB colorspace is supported. Conversion to/from the HSL colorspace
13354can be handled by the @code{colorsys} module in the Python standard library.")
13355 (license license:bsd-3)))
13356
13357(define-public python-woob
13358 ;; TODO: woob requires backends which are currently installed on the fly in
13359 ;; ~/.local/share/woob/modules/3.7/woob_modules/ , perhaps we should install
13360 ;; them in the store instead. Many modules are included in the modules
13361 ;; directory in the source tree, but it is unclear how to install them.
13362 ;; Many modules require extra dependencies though, so maybe they should be
13363 ;; packaged independently of woob itself.
13364 (package
13365 (name "python-woob")
13366 (version "3.7")
13367 (source
13368 (origin
13369 (method git-fetch)
13370 (uri (git-reference
13371 (url "https://gitlab.com/woob/woob.git")
13372 (commit version)))
13373 (file-name (git-file-name name version))
13374 (sha256
13375 (base32 "1sy0aykff56xs4dnc7ak6m8is2zgz9fprf3i1pk8n861xz1z748i"))))
13376 (build-system pyproject-build-system)
13377 (arguments
13378 (list
13379 #:test-flags
13380 ;; Deselect tests that require DNS lookup.
13381 #~(list
13382 "--deselect=tests/browser/adapters.py::TestAdapter::test_ciphers"
13383 "--deselect=tests/browser/browsers.py::TestBrowser::test_verify")
13384 #:phases
13385 #~(modify-phases %standard-phases
13386 (add-before 'build 'relax-requirements
13387 (lambda _
13388 (substitute* "pyproject.toml"
13389 ;; packaging ~= 23.0
13390 (("\"packaging .*\",")
13391 "")
13392 ;; rich~=13.0
13393 (("\"rich .*\",")
13394 "\"rich\",")))))))
13395 (native-inputs
13396 (list nss-certs-for-test
13397 python-pytest
13398 python-setuptools))
13399 (propagated-inputs
13400 (list python-babel
13401 python-colorama
13402 python-cssselect
13403 python-dateutil
13404 python-feedparser
13405 python-html2text
13406 python-lxml
13407 python-packaging
13408 python-pillow
13409 python-prettytable
13410 python-pycountry
13411 python-pyyaml
13412 python-requests
13413 python-responses
13414 python-rich
13415 python-termcolor
13416 python-unidecode))
13417 (home-page "https://woob.tech/")
13418 (synopsis "Woob, Web Outside Of Browsers")
13419 (description
13420 "Woob is a collection of applications able to interact with
13421websites, without requiring the user to open them in a browser. It also
13422provides well-defined APIs to talk to websites lacking one.")
13423 (license license:lgpl3+)))
13424
13425(define-public python-flask-combo-jsonapi
13426 (let ((commit "3cfff98ecdbadc45d25a3fd443ad67d3743be6f5")
13427 (revision "0"))
13428 (package
13429 (name "python-flask-combo-jsonapi")
13430 (version (git-version "1.1.0" revision commit))
13431 (source
13432 (origin
13433 (method git-fetch)
13434 (uri (git-reference
13435 (url "https://github.com/AdCombo/flask-combo-jsonapi")
13436 (commit commit)))
13437 (file-name (git-file-name name version))
13438 (sha256
13439 (base32 "1lp81v96qh9hdj3c95kvfaq0vy5vd8cm55j03aszc93bs8z5jg7h"))))
13440 (build-system pyproject-build-system)
13441 (arguments
13442 (list
13443 #:test-flags
13444 #~(list
13445 "-k"
13446 (string-join
13447 (list
13448 ;; XXX: This tests a feature that doesn't make sense when dropping
13449 ;; marshmallow < 3 support.
13450 "not test_compute_schema_propagate_context"
13451 ;; The following tests fail for unknown reasons (see:
13452 ;; https://github.com/AdCombo/flask-combo-jsonapi/issues/66).
13453 "test_get_list_with_simple_filter_relationship_custom_qs_api"
13454 "test_get_list_with_simple_filter_relationship_error")
13455 " and not "))
13456 #:phases
13457 #~(modify-phases %standard-phases
13458 (add-after 'unpack 'loosen-requirements
13459 (lambda _
13460 ;; Don't pin specific versions of dependencies.
13461 (substitute* "requirements.txt"
13462 (("^(sqlalchemy|marshmallow|Flask)[=<>].*" _ dep)
13463 (string-append dep "\n"))
13464 (("^marshmallow_jsonapi[=<>].*")
13465 "marshmallow_jsonapi_minfork\n"))
13466 ;; Drop support for marshmallow < 3.
13467 (substitute* (list "flask_combo_jsonapi/data_layers/alchemy.py"
13468 "flask_combo_jsonapi/schema.py")
13469 (("from marshmallow\\.base import SchemaABC")
13470 "from marshmallow import Schema")
13471 (("if isinstance\\(related_schema_cls, SchemaABC\\):")
13472 "if isinstance(related_schema_cls, Schema):"))
13473 (substitute* "tests/test_sqlalchemy_data_layer.py"
13474 (("default=None")
13475 "dump_default=None")
13476 (("missing=")
13477 "load_default=")))))))
13478 (propagated-inputs
13479 (list python-flask
13480 python-marshmallow
13481 python-marshmallow-jsonapi
13482 python-simplejson
13483 python-sqlalchemy
13484 python-apispec
13485 python-simplejson
13486 python-six))
13487 (native-inputs
13488 (list python-pytest python-setuptools))
13489 (home-page "https://github.com/AdCombo/flask-combo-jsonapi")
13490 (synopsis "Flask extension to quickly create JSON:API 1.0 REST Web APIs")
13491 (description
13492 "Flask-COMBO-JSONAPI is a Python Flask extension for building REST Web
13493APIs compliant with the @uref{https://jsonapi.org, JSON:API 1.0}
13494specification.
13495
13496It tries to combine the power of Flask-Restless with the flexibility of
13497Flask-RESTful to quickly build APIs that fit the complexity of existing
13498real-life projects with legacy data and diverse storage providers.")
13499 (license license:expat))))
13500
13501(define-public python-mwparserfromhell
13502 (package
13503 (name "python-mwparserfromhell")
13504 (version "0.7.2")
13505 (source
13506 (origin
13507 (method git-fetch)
13508 (uri (git-reference
13509 (url "https://github.com/earwig/mwparserfromhell")
13510 (commit (string-append "v" version))))
13511 (file-name (git-file-name name version))
13512 (sha256
13513 (base32 "083ir0nccm14431mmn243862gq731ww98fwpd95zm1yccvpzdy68"))))
13514 (build-system pyproject-build-system)
13515 (native-inputs (list python-pytest python-setuptools))
13516 (home-page "https://github.com/earwig/mwparserfromhell")
13517 (synopsis "Python parser for MediaWiki wikicode")
13518 (description
13519 "The MediaWiki Parser From Hell is a python library package that provides
13520a parser for MediaWiki.
13521
13522It exposes parses as normal string objects with additional methods giving
13523access to the special Wikicode features it contains (hyperlinks, tags,
13524templates…). The parser doesn't interpolate strings at all, it remains at a
13525purely formal level.
13526
13527Full documentation may be found at
13528@uref{https://mwparserfromhell.readthedocs.io, ReadTheDocs}")
13529 (license license:expat)))
13530
13531(define-public python-tweepy
13532 (package
13533 (name "python-tweepy")
13534 (version "4.16.0")
13535 (source
13536 (origin
13537 (method git-fetch)
13538 (uri
13539 (git-reference
13540 (url "https://github.com/tweepy/tweepy")
13541 (commit (string-append "v" version))))
13542 (file-name (git-file-name name version))
13543 (sha256
13544 (base32 "1k99qf0h1ykz0c56wdnlsyvd6zrcsrc4rl7rnlaxrpjppxjnpcpn"))))
13545 (build-system pyproject-build-system)
13546 (arguments
13547 ;; tests: 149 passed, 3 skipped, 1 warning
13548 (list #:test-backend #~'unittest
13549 #:test-flags #~(list "discover" "tests")))
13550 (native-inputs
13551 (list nss-certs-for-test
13552 python-flit-core
13553 python-urllib3-1.26
13554 python-vcrpy))
13555 (propagated-inputs
13556 (list python-aiohttp
13557 python-async-lru
13558 python-oauthlib
13559 python-requests
13560 python-requests-oauthlib))
13561 (home-page "https://www.tweepy.org/")
13562 (synopsis "Twitter library for Python")
13563 (description
13564 "This package provides @code{Tweepy}, an easy-to-use Python library for
13565accessing the Twitter API.")
13566 (license license:expat)))
13567
13568(define-public python-quart
13569 (package
13570 (name "python-quart")
13571 (version "0.20.0")
13572 (source
13573 (origin
13574 (method git-fetch)
13575 (uri (git-reference
13576 (url "https://github.com/pallets/quart")
13577 (commit version)))
13578 (file-name (git-file-name name version))
13579 (sha256
13580 (base32 "1gk6vg2cwpn70aald3m50xibjqjamgpz7an11h82w1fig6zmw2il"))))
13581 (build-system pyproject-build-system)
13582 (arguments
13583 (list
13584 #:test-flags
13585 ;; Not sure why test fails; related to a change in dependencies.
13586 #~(list "-k" "not test_cli_blueprints[cli_group2-args2]")))
13587 (native-inputs
13588 (list python-flit-core
13589 python-pytest
13590 python-pytest-asyncio))
13591 (propagated-inputs
13592 (list hypercorn
13593 python-aiofiles
13594 python-blinker
13595 python-click
13596 python-dotenv
13597 python-flask
13598 python-itsdangerous
13599 python-jinja2
13600 python-markupsafe
13601 python-toml
13602 python-werkzeug))
13603 (home-page "https://gitlab.com/pgjones/quart/")
13604 (synopsis "Python ASGI web microframework with the same API as Flask")
13605 (description
13606 "This package provides a Python ASGI web microframework with the same API
13607as Flask.")
13608 (license license:expat)))
13609
13610(define-public python-quart-trio
13611 (package
13612 (name "python-quart-trio")
13613 (version "0.12.0")
13614 (source
13615 (origin
13616 (method url-fetch)
13617 (uri (pypi-uri "quart_trio" version))
13618 (sha256
13619 (base32 "130r8hdk7xxjp380z1r3m28lw86q2a6g9rf0mgp9gs6hk04q9v02"))))
13620 (build-system pyproject-build-system)
13621 (arguments
13622 (list
13623 #:phases
13624 #~(modify-phases %standard-phases
13625 (add-after 'unpack 'remove-coverage-pytest-options
13626 (lambda _
13627 (substitute* "pyproject.toml"
13628 (("--no-cov-on-fail") "")))))))
13629 (native-inputs
13630 (list python-pdm-backend
13631 python-pytest
13632 python-pytest-sugar
13633 python-pytest-trio))
13634 (propagated-inputs
13635 (list hypercorn
13636 python-quart
13637 python-trio))
13638 (home-page "https://github.com/pgjones/quart-trio")
13639 (synopsis "Extension for Quart to support the Trio event loop")
13640 (description
13641 "This package provides a Quart extension to provide Trio support. This
13642is an alternative to using the asyncio event loop present in the Python
13643standard library and supported by default in Quart.")
13644 (license license:expat)))
13645
13646(define-public python-protego
13647 (package
13648 (name "python-protego")
13649 (version "0.4.0")
13650 (source
13651 (origin
13652 (method url-fetch)
13653 (uri (pypi-uri "protego" version))
13654 (sha256
13655 (base32 "1xn2aska8v94jqnbyv4ywczb55gaqvr298q8ybhs168knrifd9ck"))))
13656 (build-system pyproject-build-system)
13657 (native-inputs (list python-pytest python-setuptools python-wheel))
13658 (home-page "https://github.com/scrapy/protego")
13659 (synopsis "Python robots.txt parser with support for modern conventions")
13660 (description "Protego is a pure-Python @file{robots.txt} parser with support
13661for modern conventions.")
13662 (license license:bsd-3)))
13663
13664(define-public python-parsel
13665 (package
13666 (name "python-parsel")
13667 (version "1.10.0")
13668 (source
13669 (origin
13670 (method url-fetch)
13671 (uri (pypi-uri "parsel" version))
13672 (sha256
13673 (base32 "1050v20gzijfcaxpm1d4bvxqw2l7xhyf9pxrawrv8lczanwpvw8l"))))
13674 (build-system pyproject-build-system)
13675 (propagated-inputs
13676 (list python-cssselect
13677 python-jmespath
13678 python-lxml
13679 python-typing-extensions
13680 python-w3lib))
13681 (native-inputs
13682 (list python-psutil python-pytest python-setuptools python-wheel))
13683 (home-page "https://github.com/scrapy/parsel")
13684 (synopsis "Extract data from HTML and XML using XPath and CSS selectors")
13685 (description "Parsel is a library to extract and remove data from
13686HTML and XML using XPath and CSS selectors, optionally combined with
13687regular expressions.")
13688 (license license:bsd-3)))
13689
13690(define-public python-scrapy
13691 (package
13692 (name "python-scrapy")
13693 (version "2.13.3")
13694 (source
13695 (origin
13696 (method url-fetch)
13697 (uri (pypi-uri "scrapy" version))
13698 (sha256
13699 (base32 "0k90pni6vkj7axx3cji0b2x7yg4yfh5kh1csqiq9ssp42265h5xz"))))
13700 (build-system pyproject-build-system)
13701 (arguments
13702 (list #:test-flags
13703 #~(list "--numprocesses" (number->string (parallel-job-count))
13704 "-k" (string-join
13705 ;; ConnectionRefusedError: [Errno 111] Connection
13706 ;; refused
13707 (list "not test_append"
13708 "test_append_active_mode"
13709 "test_overwrite"
13710 "test_overwrite_active_mode"
13711 "test_persist"
13712 ;; AssertionError
13713 "test_start_deprecated_super")
13714 " and not ")
13715 ;; Skip documentation testing.
13716 "--ignore=docs")
13717 #:phases
13718 #~(modify-phases %standard-phases
13719 (add-before 'check 'prepare-test-environment
13720 (lambda _
13721 (setenv "HOME" "/tmp"))))))
13722 (propagated-inputs
13723 (list python-cryptography
13724 python-cssselect
13725 python-defusedxml
13726 python-itemadapter
13727 python-itemloaders
13728 python-lxml
13729 python-packaging
13730 python-parsel
13731 python-protego
13732 python-pydispatcher
13733 python-pyopenssl
13734 python-pypydispatcher
13735 python-queuelib
13736 python-service-identity
13737 python-tldextract
13738 python-twisted
13739 python-w3lib
13740 python-zope-interface))
13741 (native-inputs
13742 (list nss-certs-for-test
13743 python-hatchling
13744 python-pexpect
13745 python-pytest
13746 python-pytest-xdist
13747 python-setuptools
13748 python-sybil
13749 python-testfixtures))
13750 (home-page "https://scrapy.org")
13751 (synopsis "High-level Web crawling and Web scraping framework")
13752 (description "Scrapy is a fast high-level web crawling and web
13753scraping framework, used to crawl websites and extract structured data
13754from their pages. It can be used for a wide range of purposes, from data
13755mining to monitoring and automated testing.")
13756 (license license:bsd-3)))
13757
13758(define sdmx-test-data
13759 (let* ((commit "cd7899341b46e179e9f19b638478d70197e12c74")
13760 (revision "1")
13761 (name "sdmx-test-data")
13762 (version (git-version "0" revision commit)))
13763 (origin
13764 (method git-fetch)
13765 (uri (git-reference
13766 (url "https://github.com/khaeru/sdmx-test-data")
13767 (commit commit)))
13768 (file-name (git-file-name name version))
13769 (sha256
13770 (base32 "1n9y83raxxpgljbi0wjj27lhmyn19fnc2325a6cchwsa3b65ywv7")))))
13771
13772(define-public python-sdmx1
13773 (package
13774 (name "python-sdmx1")
13775 (version "2.26.0")
13776 (source
13777 (origin
13778 (method git-fetch)
13779 (uri (git-reference
13780 (url "https://github.com/khaeru/sdmx")
13781 (commit (string-append "v" version))))
13782 (file-name (git-file-name name version))
13783 (sha256
13784 (base32 "096c60pxzcw71bc9fj3hpjprrdiia365rqalapxx56g6g1vkgka9"))))
13785 (build-system pyproject-build-system)
13786 (arguments
13787 (list
13788 #:test-flags
13789 #~(list
13790 ;; 804 passed, 122 skipped, 28 deselected, 23 xfailed, 1 xpassed, 3 warnings
13791 ;; XXX: 'Version' object has no attribute 'pre'
13792 "--ignore=sdmx/tests/model/test_version.py"
13793 ;; Most of these tests require network connection.
13794 "--ignore=sdmx/tests/test_client.py"
13795 "--ignore=sdmx/tests/test_sources.py"
13796 "--ignore=sdmx/tests/test_docs.py"
13797 "--ignore=sdmx/tests/test_session.py"
13798 "--ignore=sdmx/tests/writer/test_xml.py"
13799 "--ignore=sdmx/tests/reader/test_xml_v21.py"
13800 "--deselect=sdmx/tests/convert/test_pandas.py::test_dataset_constraint"
13801 ;; Wrong python-flaky version
13802 "--deselect=sdmx/tests/format/test_xml.py::test_install_schemas_in_user_cache"
13803 "--deselect=sdmx/tests/format/test_xml.py::test_install_schemas"
13804 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_from_v2_1_samples"
13805 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_from_v3_0_samples"
13806 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_invalid_doc"
13807 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_invalid_message_type"
13808 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_max_errors"
13809 ;; sqlite3.OperationalError
13810 "--deselect=sdmx/tests/util/test_requests.py::TestOfflineAdapter::test_raises")
13811 #:phases
13812 #~(modify-phases %standard-phases
13813 (add-after 'unpack 'fix-version
13814 (lambda _
13815 ;; versioningit needs git tags; patch pyproject.toml to use
13816 ;; static version and create _version.py directly.
13817 (substitute* "pyproject.toml"
13818 (("version.source = \"versioningit\"")
13819 "
13820[tool.hatch.version]
13821path = \"sdmx/_version.py\"")
13822 ((", \"versioningit\"")
13823 ""))
13824 (call-with-output-file "sdmx/_version.py"
13825 (lambda (port)
13826 (format port "__version__ = \"~a\"~%" #$version)))))
13827 (add-before 'check 'pre-check
13828 (lambda _
13829 (setenv "SDMX_TEST_DATA" #$sdmx-test-data)
13830 (setenv "HOME" (dirname (getcwd))))))))
13831 (propagated-inputs
13832 (list python-dateutil
13833 python-lxml
13834 python-pandas
13835 python-platformdirs
13836 python-requests))
13837 (native-inputs
13838 (list python-filelock
13839 python-flaky
13840 python-hatchling
13841 python-jinja2
13842 python-pyarrow
13843 python-pytest
13844 python-pytest-cov
13845 python-pytest-xdist
13846 python-requests-mock
13847 python-requests-cache
13848 python-responses))
13849 (home-page "https://sdmx1.readthedocs.io")
13850 (synopsis "Statistical Data and Metadata eXchange (SDMX) for Python")
13851 (description "This package provides a Python implementation of the
13852SDMX 2.1 and 3.0 standards for Statistical Data and Metadata eXchange.
13853These standards are developed and used by statistical agencies and
13854international organisations. This package can be used to:
13855@itemize
13856@item Explore and retrieve data available from SDMX-REST web services
13857operated by providers including the World Bank, International Monetary
13858Fund, Eurostat, OECD, and United Nations;
13859@item Read and write data and metadata in file formats including
13860SDMX-ML (XML), SDMX-JSON, and SDMX-CSV;
13861@item Convert data and metadata into @code{python-pandas} objects, for
13862use with the analysis, plotting, and other tools in the Python data
13863science ecosystem;
13864@item Apply the SDMX information model (IM) to structure and publish
13865your own data.
13866@end itemize")
13867 (license license:asl2.0)))
13868
13869(define-public python-jstyleson
13870 (let ((commit "8c47cc9e665b3b1744cccfaa7a650de5f3c575dd")
13871 (revision "0"))
13872 (package
13873 (name "python-jstyleson")
13874 (version (git-version "0.0.2" revision commit))
13875 (source
13876 (origin
13877 (method git-fetch)
13878 (uri (git-reference
13879 (url "https://github.com/linjackson78/jstyleson")
13880 (commit commit)))
13881 (file-name (git-file-name name version))
13882 (sha256
13883 (base32 "0r72mq7h294w5icpdbjd202w25kwr1dz7nh79f6m74xisc9cixia"))))
13884 (build-system pyproject-build-system)
13885 (native-inputs (list python-pytest python-setuptools))
13886 (home-page "https://github.com/linjackson78/jstyleson")
13887 (synopsis "JSON parser supporting js-style comments")
13888 (description
13889 "@code{jstyleson} is a Python library to parse JSON. Contrary to the
13890standard Python @code{json} library, it understands js-style comments.
13891Trailing comma is also supported.")
13892 (license license:expat))))
13893
13894(define-public python-html-text
13895 (package
13896 (name "python-html-text")
13897 (version "0.7.0")
13898 (source
13899 (origin
13900 (method url-fetch)
13901 (uri (pypi-uri "html_text" version))
13902 (sha256
13903 (base32 "10lixghras86av966ha9piqfl1iscf7nffg69dmz13sxjh371jrx"))))
13904 (build-system pyproject-build-system)
13905 (native-inputs
13906 (list python-pytest
13907 python-setuptools
13908 python-wheel))
13909 (propagated-inputs
13910 (list python-lxml
13911 python-lxml-html-clean))
13912 (home-page "https://github.com/TeamHG-Memex/html-text")
13913 (synopsis "Extract text from HTML")
13914 (description "HTML to Text is a Python library for extract text from HTML.
13915Contrary to other solution such as LXML or Beautiful Soup, the text extracted
13916with @code{html_text} does not contain elements such as JavaScript or inline
13917styles not normally visible to users. It also normalizes white space
13918characters in a smarter, more visually pleasing style.")
13919 (license license:expat)))
13920
13921(define-public python-mf2py
13922 (package
13923 (name "python-mf2py")
13924 (version "2.0.1")
13925 (source
13926 (origin
13927 (method git-fetch)
13928 (uri (git-reference
13929 (url "https://github.com/microformats/mf2py")
13930 (commit (string-append "v" version))))
13931 (file-name (git-file-name name version))
13932 (sha256
13933 (base32 "0ajnf0zrh1l48fvix9fbs1qvgbqhiljqnrm51rx44p7dbarpw4ls"))))
13934 (build-system pyproject-build-system)
13935 (native-inputs (list python-mock python-poetry-core python-pytest))
13936 (propagated-inputs
13937 (list python-beautifulsoup4 python-html5lib python-requests))
13938 (home-page "https://github.com/microformats/mf2py")
13939 (synopsis "Python Microformats2 parser")
13940 (description
13941 "This Python library provides a Microformats2 parser implementing the
13942full Microformats2 (mf2) specification, including backward compatibility with
13943Microformats1 (mf1).")
13944 (license license:expat)))
13945
13946(define-public python-extruct
13947 (package
13948 (name "python-extruct")
13949 (version "0.18.0")
13950 (source (origin
13951 (method git-fetch) ;for tests
13952 (uri (git-reference
13953 (url "https://github.com/scrapinghub/extruct")
13954 (commit (string-append "v" version))))
13955 (file-name (git-file-name name version))
13956 (sha256
13957 (base32
13958 "03qdldqrvmbsk6klq4nkxvvp3b2a0qqgqg115i3crbmialiaai45"))))
13959 (build-system pyproject-build-system)
13960 (arguments
13961 (list
13962 #:test-flags
13963 ;; 67 passed, 3 deselected
13964 ;; XXX: 3 tests fail with errors in assertion.
13965 #~(list "-k" (string-append
13966 "not test_microformat"
13967 " and not test_microformat"
13968 " and not test_umicroformat"))))
13969 (native-inputs
13970 (list python-pytest
13971 python-setuptools
13972 python-wheel))
13973 (propagated-inputs
13974 (list python-html-text
13975 python-jstyleson
13976 python-lxml
13977 python-mf2py
13978 python-pyrdfa3
13979 python-rdflib
13980 python-w3lib))
13981 (home-page "https://github.com/scrapinghub/extruct")
13982 (synopsis "Extract embedded metadata from HTML markup")
13983 (description "@code{extruct} is a Python library for extracting embedded
13984metadata from HTML markup. Currently, extruct supports:
13985@itemize
13986@item W3C's HTML Microdata
13987@item embedded JSON-LD
13988@item Microformat via mf2py
13989@item Facebook's Open Graph
13990@item (experimental) RDFa via rdflib
13991@item Dublin Core Metadata (DC-HTML-2003)
13992@end itemize")
13993 (license license:bsd-3)))
13994
13995(define-public python-wadllib
13996 (package
13997 (name "python-wadllib")
13998 (version "2.0.0")
13999 (source
14000 (origin
14001 (method url-fetch)
14002 (uri (pypi-uri "wadllib" version))
14003 (sha256
14004 (base32 "09vlfg4mzdmkqk6br7j8ms3116qk5am0nf4v1jkzwd7swhisznqy"))))
14005 (build-system pyproject-build-system)
14006 (arguments
14007 (list
14008 ;; XXX: Doctests are currently failing.
14009 #:tests? #f
14010 #:phases
14011 #~(modify-phases %standard-phases
14012 (replace 'check
14013 (lambda* (#:key tests? #:allow-other-keys)
14014 (if tests?
14015 (invoke "zope-testrunner" "--test-path=src")
14016 (format #t "test suite not run~%")))))))
14017 (native-inputs
14018 (list python-multipart python-setuptools python-zope-testrunner))
14019 (propagated-inputs (list python-lazr-uri))
14020 (home-page "https://launchpad.net/wadllib")
14021 (synopsis "Web Application Description Language (WADL) navigation library")
14022 (description "The @code{wadllib} Python library allows navigating HTTP
14023resources using Web Application Description Language (WADL) files as guides.")
14024 (license license:lgpl3)))
14025
14026(define-public python-zeep
14027 (package
14028 (name "python-zeep")
14029 (version "4.3.1")
14030 (source
14031 (origin
14032 (method url-fetch)
14033 (uri (pypi-uri "zeep" version))
14034 (sha256
14035 (base32 "0vm0asfak0pxfa9i753imcy72hk8gkxbj6pmw185b7dhw7lqalzl"))))
14036 (build-system pyproject-build-system)
14037 (arguments
14038 (list
14039 #:phases
14040 '(modify-phases %standard-phases
14041 (add-after 'unpack 'compatibility
14042 (lambda _
14043 ;; Relax requests-file requirement.
14044 (substitute* "pyproject.toml"
14045 (("\"requests-file.*\",")
14046 "\"requests-file\","))
14047 ;; httpx removed the "proxies" keyword. It's now either "mounts"
14048 ;; or "proxy". See https://github.com/encode/httpx/pull/2879.
14049 (substitute* "src/zeep/transports.py"
14050 (("proxies=") "proxy="))))
14051 ;; One test requires write access
14052 (add-before 'check 'set-HOME
14053 (lambda _ (setenv "HOME" (getcwd)))))))
14054 (propagated-inputs
14055 (list python-attrs
14056 python-isodate
14057 python-lxml
14058 python-platformdirs
14059 python-pytz
14060 python-requests
14061 python-requests-file
14062 python-requests-toolbelt))
14063 (native-inputs
14064 (list nss-certs-for-test
14065 python-freezegun
14066 python-pretend
14067 python-pytest
14068 python-pytest-asyncio
14069 python-pytest-httpx
14070 python-requests-mock
14071 python-setuptools
14072 python-wheel))
14073 (home-page "https://docs.python-zeep.org/en/stable/")
14074 (synopsis "Python SOAP client based on lxml / requests")
14075 (description "Zeep is a Python SOAP client. Highlights:
14076
14077@itemize
14078@item Build on top of @code{lxml} and @code{requests}.
14079@item Support for Soap 1.1, Soap 1.2 and HTTP bindings.
14080@item Support for WS-Addressing headers.
14081@item Support for WSSE (UserNameToken / x.509 signing).
14082@item Support for @code{asyncio} via @code{httpx}.
14083@item Experimental support for XOP messages.
14084@end itemize")
14085 (license license:expat)))
14086
14087(define-public python-http-client
14088 (package
14089 (name "python-http-client")
14090 (version "3.3.7")
14091 (source
14092 (origin
14093 (method git-fetch)
14094 (uri (git-reference
14095 (url "https://github.com/sendgrid/python-http-client")
14096 (commit version)))
14097 (file-name (git-file-name name version))
14098 (sha256
14099 (base32 "0z0ziw3f4zw5fj4spiwhhs2x8qs3i5999ry2p6a5sc8b1lkkj2zi"))))
14100 (build-system pyproject-build-system)
14101 (arguments
14102 (list
14103 #:test-backend #~'unittest
14104 #:phases
14105 #~(modify-phases %standard-phases
14106 (add-after 'unpack 'fix-tests
14107 (lambda _
14108 ;; The test expects the copyright to be updated each year.
14109 (substitute* "tests/test_daterange.py"
14110 (("time\\.strftime\\(\"%Y\"\\)") "2022")))))))
14111 (native-inputs
14112 (list python-setuptools))
14113 (home-page "https://github.com/sendgrid/python-http-client")
14114 (synopsis "HTTP REST client for Python")
14115 (description
14116 "This package provides access to any RESTful or RESTful-like API.")
14117 (license license:expat)))
14118
14119(define-public python-sendgrid
14120 (package
14121 (name "python-sendgrid")
14122 (version "6.9.7")
14123 (source
14124 (origin
14125 (method git-fetch)
14126 (uri (git-reference
14127 (url "https://github.com/sendgrid/sendgrid-python")
14128 (commit version)))
14129 (file-name (git-file-name name version))
14130 (sha256
14131 (base32 "0kvp4gm3bpcsj2mkv05pgvlcv1jlsfhcljcv61wz5kq9d273h7rg"))))
14132 (build-system pyproject-build-system)
14133 (arguments
14134 (list
14135 #:test-flags
14136 #~(list "--ignore=test/integ"
14137 ;; Network access is required.
14138 "--ignore=live_test.py")))
14139 (native-inputs
14140 (list python-pytest
14141 python-setuptools))
14142 (propagated-inputs
14143 (list python-cryptography
14144 python-http-client
14145 python-flask
14146 python-pyyaml
14147 python-six ;hard dependency
14148 python-starkbank-ecdsa
14149 python-werkzeug))
14150 (home-page "https://github.com/sendgrid/sendgrid-python/")
14151 (synopsis "SendGrid API library for Python")
14152 (description
14153 "The @code{sendgrid} Python library allows access to the
14154SendGrid Web API v3. Version 3+ of the library provides full support for all
14155SendGrid Web API v3 endpoints, including the new v3 /mail/send.")
14156 (license license:expat)))
14157
14158(define-public python-sse-starlette
14159 (package
14160 (name "python-sse-starlette")
14161 (version "3.4.4")
14162 (source
14163 (origin
14164 (method git-fetch)
14165 (uri (git-reference
14166 (url "https://github.com/sysid/sse-starlette")
14167 (commit (string-append "v" version))))
14168 (file-name (git-file-name name version))
14169 (sha256
14170 (base32 "0jzy3mjszl7fr524cggyf8k97x6jpykvmxldmm2ckmrqjpyj8jmz"))))
14171 (build-system pyproject-build-system)
14172 (arguments
14173 (list
14174 #:test-flags
14175 #~(list
14176 ;; XXX: Server fails to start.
14177 "--ignore=tests/experimentation/test_multiple_consumers_asyncio.py"
14178 "--ignore=tests/experimentation/test_multiple_consumers_threads.py"
14179 ;; XXX: Missing test dependency - testcontainers, Docker is required.
14180 "--ignore=tests/integration/test_multiple_consumers.py")))
14181 (native-inputs
14182 (list python-asgi-lifespan
14183 python-httpx
14184 python-portend
14185 python-pytest
14186 python-pytest-asyncio
14187 python-psutil
14188 python-setuptools
14189 python-tenacity
14190 python-uvicorn))
14191 (propagated-inputs
14192 (list python-anyio
14193 python-starlette))
14194 (home-page "https://github.com/sysid/sse-starlette")
14195 (synopsis "SSE plugin for Starlette")
14196 (description
14197 "This package provides SSE plugin for Starlette.")
14198 (license license:bsd-3)))
14199
14200(define-public python-sseclient-py
14201 (package
14202 (name "python-sseclient-py")
14203 (version "1.9.0")
14204 (source
14205 (origin
14206 (method git-fetch)
14207 (uri (git-reference
14208 (url "https://github.com/mpetazzoni/sseclient")
14209 (commit (string-append "sseclient-py-" version))))
14210 (file-name (git-file-name name version))
14211 (sha256
14212 (base32 "1yi2v8z89mygsr1vzyc4r3j7flr3jrh6a6kzqfdh86i5a5j5v280"))))
14213 (build-system pyproject-build-system)
14214 (native-inputs (list python-hatchling python-pytest))
14215 (arguments
14216 (list
14217 #:test-backend #~'unittest
14218 #:test-flags #~'("discover" "--verbose" "tests")))
14219 (home-page "https://github.com/mpetazzoni/sseclient")
14220 (synopsis "Pure-Python Server Side Events (SSE) client")
14221 (description
14222 "This package provides a Python client for SSE event sources that
14223seamlessly integrates with @code{urllib3} and @code{requests}.")
14224 (license license:asl2.0)))
14225
14226(define-public python-starlette
14227 (package
14228 (name "python-starlette")
14229 (version "0.49.1")
14230 (source (origin
14231 (method git-fetch)
14232 (uri (git-reference
14233 (url "https://github.com/encode/starlette")
14234 (commit version)))
14235 (file-name (git-file-name name version))
14236 (sha256
14237 (base32
14238 "0w9cyaxpc2p99hqrfw164iypacx3i1gsmn2z0xywgd21alva82ji"))))
14239 (build-system pyproject-build-system)
14240 (propagated-inputs (list python-anyio
14241 python-typing-extensions
14242 ;; [all] extra dependencies:
14243 python-itsdangerous
14244 python-jinja2
14245 python-multipart
14246 python-pyyaml
14247 python-requests))
14248 (native-inputs (list python-hatchling
14249 python-httpx
14250 python-pytest
14251 python-typing-extensions))
14252 (home-page "https://github.com/encode/starlette")
14253 (synopsis "Little ASGI library")
14254 (description
14255 "Starlette is a lightweight ASGI (Asynchronous Server Gateway
14256Interface) framework/toolkit for building async web services in Python.")
14257 (license license:bsd-3)))
14258
14259(define-public python-starsessions
14260 (package
14261 (name "python-starsessions")
14262 (version "1.3.0")
14263 (source (origin
14264 (method git-fetch)
14265 (uri (git-reference
14266 (url "https://github.com/alex-oleshkevich/starsessions")
14267 (commit (string-append "v" version))))
14268 (file-name (git-file-name name version))
14269 (sha256
14270 (base32
14271 "00dkdhp22vfmcn0w4y7f2ii8m1xj5i7409x58g3l8lvk6v5ng2nf"))))
14272 (build-system pyproject-build-system)
14273 (arguments
14274 (list
14275 #:test-flags
14276 ;; These tests require a running redis server
14277 '(list "--ignore=tests/backends/test_redis.py"
14278 ;; XXX: this failure indicates a real compatibility problem, but
14279 ;; it seems restricted to the tests only.
14280 ;; AttributeError: 'Cookies' object has no attribute
14281 ;; 'clear_session_cookies'
14282 "-k"
14283 (string-append "not test_session_clears_on_tab_close"
14284 ;; This fails because an error is not raised.
14285 " and not test_session_wants_secret_key"))
14286 #:phases
14287 '(modify-phases %standard-phases
14288 (add-after 'unpack 'compatibilitiy
14289 (lambda _
14290 ;; aioredis has been renamed
14291 (substitute* "starsessions/backends/redis.py"
14292 (("aioredis") "redis")))))))
14293 (propagated-inputs
14294 (list python-redis
14295 python-itsdangerous
14296 python-starlette))
14297 (native-inputs
14298 (list python-httpx
14299 python-poetry-core
14300 python-pytest
14301 python-pytest-asyncio
14302 python-requests))
14303 (home-page "https://github.com/alex-oleshkevich/starsessions")
14304 (synopsis "Pluggable session support for Starlette and FastAPI")
14305 (description
14306 "This package adds pluggable session backends and ships default
14307@code{InMemoryBackend} and @code{CookieBackend} implementations for Starlette
14308and FastAPI.")
14309 (license license:expat)))
14310
14311(define-public python-whereismyip
14312 (package
14313 (name "python-whereismyip")
14314 (version "0.1.0")
14315 (source
14316 (origin
14317 (method url-fetch)
14318 (uri (pypi-uri "whereismyip" version))
14319 (sha256
14320 (base32 "0psrlvax8249ccs2rvgdygpckzz22vxjcyzr2pql06d48k61gk54"))))
14321 (build-system pyproject-build-system)
14322 (arguments (list #:tests? #false)) ; There are no tests.
14323 (native-inputs (list python-setuptools))
14324 (home-page "https://pypi.org/project/whereismyip/")
14325 (synopsis "Queries multiple geolocation services until one succeeds")
14326 (description
14327 "This package provides a simple Python library that queries multiple geolocation
14328services until one succeeds.")
14329 (license license:gpl3)))
14330
14331(define-public python-whitenoise
14332 (package
14333 (name "python-whitenoise")
14334 (version "6.9.0")
14335 (source (origin
14336 (method git-fetch) ; PyPI missing test fails
14337 (uri (git-reference
14338 (url "https://github.com/evansd/whitenoise")
14339 (commit version)))
14340 (file-name (git-file-name name version))
14341 (sha256
14342 (base32
14343 "0y00a59ww9f631m51d5db5xcnbckzcwfm64wabp5vamn7l1kqqsj"))))
14344 (build-system pyproject-build-system)
14345 (arguments
14346 (list
14347 #:test-flags #~(list "-k" "not test_modified"))) ; HTTP 304 error
14348 (native-inputs (list python-brotli
14349 python-django
14350 python-requests
14351 python-pytest
14352 python-setuptools
14353 python-wheel))
14354 (home-page "https://github.com/evansd/whitenoise")
14355 (synopsis "Static file serving for WSGI applications")
14356 (description
14357 "WhiteNoise allows your web app to serve its own static files, making it
14358a self-contained unit that can be deployed anywhere without relying on nginx,
14359Amazon S3 or any other external service.")
14360 (license license:expat)))
14361
14362(define-public python-suds
14363 (package
14364 (name "python-suds")
14365 (version "1.2.0")
14366 (source
14367 (origin
14368 (method url-fetch)
14369 (uri (pypi-uri "suds" version))
14370 (sha256
14371 (base32 "1byyg7b2ixpr8hc849a6dd0qn5daxqawz6lb3php8lrmsb1n5cc3"))))
14372 (build-system pyproject-build-system)
14373 (arguments
14374 (list #:phases
14375 #~(modify-phases %standard-phases
14376 ;; XXX: chirp expects suds instead of suds_community
14377 (add-after 'install 'add-custom-dist-info
14378 (lambda _
14379 (for-each
14380 (lambda (dir)
14381 (with-directory-excursion (dirname dir)
14382 (symlink
14383 (basename dir)
14384 (string-append "suds-" #$version ".dist-info"))))
14385 (find-files #$output
14386 (lambda (file stat)
14387 (string-suffix? ".dist-info" file))
14388 #:directories? #t)))))))
14389 (native-inputs
14390 (list python-pytest
14391 python-setuptools
14392 python-wheel))
14393 (home-page "https://github.com/suds-community/suds")
14394 (synopsis "Lightweight SOAP python client for consuming Web Services")
14395 (description
14396 "Suds is a lightweight SOAP-based web service client for Python.")
14397 (license license:lgpl3+)))
14398
14399(define-public python-fastapi
14400 (package
14401 (name "python-fastapi")
14402 (version "0.137.1")
14403 (source
14404 (origin
14405 (method url-fetch)
14406 (uri (pypi-uri "fastapi" version))
14407 (sha256
14408 (base32 "072lzn48rwf9rjix4nqb5ym6hnaj2fb3jxclilym7n9h89q608w2"))))
14409 (build-system pyproject-build-system)
14410 (arguments
14411 (list
14412 ;; tests: 1126 passed, 12 skipped, 2 deselected
14413 #:test-backend #~'custom
14414 #:test-flags
14415 #~(list
14416 ;; Cannot import 'scripts' with just 'pytest'.
14417 "-m" "pytest"
14418 ;; Needs strawberry and sqlmodel.
14419 "--ignore=tests/test_tutorial/"
14420 ;; Fails due to failure to capture stdout.
14421 "--ignore=tests/test_fastapi_cli.py")))
14422 (native-inputs
14423 (list python-anyio
14424 python-dirty-equals
14425 python-flask
14426 python-inline-snapshot
14427 python-pdm-backend
14428 ;; python-pwdlib
14429 python-pyjwt
14430 python-pytest
14431 python-pytest-timeout
14432 python-pytest-xdist
14433 python-sqlalchemy-2
14434 ;; python-sqlmodel
14435 python-types-orjson
14436 python-types-ujson))
14437 (propagated-inputs
14438 (list python-starlette
14439 python-pydantic
14440 python-typing-extensions
14441 python-annotated-doc
14442 ;; [optional]
14443 python-email-validator
14444 python-fastapi-cli
14445 ;; python-fastar
14446 python-httpx
14447 python-itsdangerous
14448 python-jinja2
14449 python-multipart
14450 python-orjson
14451 python-pydantic
14452 python-pydantic-extra-types
14453 python-pydantic-settings
14454 python-pyyaml
14455 python-ujson
14456 python-uvicorn))
14457 (home-page "https://github.com/fastapi/fastapi")
14458 (synopsis "Web framework based on type hints")
14459 (description "FastAPI provides a web API framework based on pydantic and
14460starlette.")
14461 (license license:expat)))
14462
14463(define-public python-fastapi-csrf-protect
14464 (package
14465 (name "python-fastapi-csrf-protect")
14466 (version "0.3.3")
14467 (source (origin
14468 (method git-fetch)
14469 (uri (git-reference
14470 (url "https://github.com/aekasitt/fastapi-csrf-protect")
14471 (commit (string-append "v" version))))
14472 (file-name (git-file-name name version))
14473 (sha256
14474 (base32
14475 "181yawlbpd4709mamsradr9zj0jrbp4qvwfvmggs80pd36iiwyy8"))))
14476 (build-system pyproject-build-system)
14477 (propagated-inputs
14478 (list python-fastapi python-itsdangerous
14479 python-pydantic))
14480 (native-inputs
14481 (list python-poetry-core
14482 python-pytest))
14483 (home-page "https://github.com/aekasitt/fastapi-csrf-protect")
14484 (synopsis "Cross-Site Request Forgery (XSRF) protection")
14485 (description
14486 "This package provides a stateless implementation of @dfn{Cross-Site
14487Request Forgery} (XSRF) Protection by using the Double Submit Cookie mitigation
14488pattern.")
14489 (license license:expat)))
14490
14491(define-public python-fastapi-pagination-minimal
14492 (package
14493 (name "python-fastapi-pagination-minimal")
14494 (version "0.15.15")
14495 (source (origin
14496 (method git-fetch)
14497 (uri (git-reference
14498 (url "https://github.com/uriyyo/fastapi-pagination")
14499 (commit version)))
14500 (file-name (git-file-name name version))
14501 (sha256
14502 (base32
14503 "0jfmk5m2yrki9rw9izci2fxamam45mk36gl77rwbd5hnngkqbahv"))))
14504 (build-system pyproject-build-system)
14505 ;; We run the tests in python-fastapi-pagination only.
14506 (arguments (list #:tests? #false))
14507 ;; These are the only required dependencies,
14508 ;; please add all optional dependencies to the
14509 ;; full python-fastapi-pagination below.
14510 (propagated-inputs (list python-fastapi python-pydantic))
14511 (native-inputs (list python-hatchling))
14512 (home-page "https://github.com/uriyyo/fastapi-pagination")
14513 (synopsis "FastAPI pagination library")
14514 (description "@code{fastapi-pagination} is a Python library designed to
14515simplify pagination in FastAPI applications. It provides a set of utility
14516functions and data models to help you paginate your database queries and
14517return paginated responses to your clients.")
14518 (license license:expat)))
14519
14520(define-public python-fastapi-pagination
14521 (package
14522 (inherit python-fastapi-pagination-minimal)
14523 (name "python-fastapi-pagination")
14524 (arguments
14525 (list
14526 #:test-flags
14527 #~(list "--asyncio-mode=auto"
14528 "--ignore=tests/ext"
14529 ;; Netwok access is required.
14530 "-k" (string-join
14531 (list "not test_optional_params[postgres-default]"
14532 "test_optional_params[postgres-limit-offset]"
14533 "test_optional_params[sqlite-default]"
14534 "test_optional_params[sqlite-limit-offset]")
14535 " and not "))
14536 #:phases
14537 '(modify-phases %standard-phases
14538 (add-after 'unpack 'patch-tests
14539 (lambda _
14540 ;; We don't have a package for python-cassandra or motor, but we
14541 ;; also don't need them as we only run the unit tests anyway.
14542 (substitute* "tests/conftest.py"
14543 (("from cassandra.*") "")
14544 (("from motor.*") "")))))))
14545 (propagated-inputs
14546 (modify-inputs (package-propagated-inputs
14547 python-fastapi-pagination-minimal)
14548 (prepend python-asyncpg
14549 python-databases
14550 python-django
14551 python-fastapi
14552 python-pydantic
14553 python-sqlalchemy
14554 (package
14555 (inherit python-tortoise-orm)
14556 (arguments
14557 (substitute-keyword-arguments (package-arguments
14558 python-tortoise-orm)
14559 ((#:phases phases '%standard-phases)
14560 `(modify-phases ,phases
14561 (delete 'sanity-check)))))
14562 (propagated-inputs
14563 (modify-inputs propagated-inputs
14564 (replace "python-aiosqlite" python-aiosqlite)))))))
14565 (native-inputs
14566 (list python-aiosqlite
14567 python-asgi-lifespan
14568 python-asyncpg
14569 python-dirty-equals
14570 python-faker
14571 python-hatchling
14572 python-httpx
14573 python-pytest
14574 python-pytest-asyncio
14575 python-sqlalchemy
14576 python-typing-extensions))
14577 (description
14578 (string-append (package-description python-fastapi-pagination-minimal)
14579 "
14580
14581This package, as opposed to @code{python-fastapi-pagination-minimal}, depends on
14582all available optional dependencies supported by mainline
14583@code{fastapi-pagination}."))))
14584
14585(define-public python-fastapi-cli
14586 (package
14587 (name "python-fastapi-cli")
14588 (version "0.0.7")
14589 (source
14590 (origin
14591 (method url-fetch)
14592 (uri (pypi-uri "fastapi_cli" version))
14593 (sha256
14594 (base32 "0pk0ldmymc25ys4v6mslzd5vsjh9r69hfylh2ljl29pmarcvdcq2"))))
14595 (build-system pyproject-build-system)
14596 ;; Tests require fastapi, which depends on this package.
14597 (arguments (list #:tests? #false))
14598 (propagated-inputs (list python-rich-toolkit python-typer python-uvicorn))
14599 (native-inputs
14600 (list python-inline-snapshot python-pdm-backend python-pytest))
14601 (home-page "https://pypi.org/project/fastapi-cli/")
14602 (synopsis
14603 "Run and manage FastAPI apps from the command line with FastAPI CLI")
14604 (description
14605 "FastAPI CLI is a command line program fastapi that you can use to serve
14606your FastAPI app, manage your FastAPI project, and more.")
14607 (license license:expat)))
14608
14609(define-public python-pyactiveresource
14610 (package
14611 (name "python-pyactiveresource")
14612 (version "2.2.2")
14613 (source
14614 (origin
14615 (method git-fetch)
14616 (uri (git-reference
14617 (url "https://github.com/Shopify/pyactiveresource")
14618 (commit (string-append "v" version))))
14619 (file-name (git-file-name name version))
14620 (sha256
14621 (base32 "03pw6fwqjn09fbd6xmng0arlz75pp6ykw25c8d1snp4bxlzkrwqf"))))
14622 (build-system pyproject-build-system)
14623 ;; XXX: The package is fine, but the tests started failing on [email protected].
14624 ;; The package is not actively maintained, consider removing it once leaf.
14625 (arguments (list #:tests? #f))
14626 (native-inputs
14627 (list python-dateutil python-pytest python-pyyaml python-setuptools))
14628 (propagated-inputs (list python-six))
14629 (home-page "https://github.com/Shopify/pyactiveresource/")
14630 (synopsis "ActiveResource for Python")
14631 (description
14632 "This package provides a Python port of the ActiveResource project.
14633
14634Active Resource attempts to provide a coherent wrapper object-relational
14635mapping for REST web services. It follows the same philosophy as Active
14636Record, in that one of its prime aims is to reduce the amount of code needed
14637to map to these resources. This is made possible by relying on a number of
14638code- and protocol-based conventions that make it easy for Active Resource to
14639infer complex relations and structures.")
14640 (license license:expat)))
14641
14642(define-public python-shopifyapi
14643 (package
14644 (name "python-shopifyapi")
14645 (version "12.7.0")
14646 (source
14647 (origin
14648 (method git-fetch)
14649 (uri (git-reference
14650 (url "https://github.com/Shopify/shopify_python_api")
14651 (commit (string-append "v" version))))
14652 (file-name (git-file-name name version))
14653 (sha256
14654 (base32 "11zjm3aspb247wwlmfmq6wwk6lv3xyv3lqnd78sczjg9anba3779"))))
14655 (build-system pyproject-build-system)
14656 (arguments
14657 (list
14658 #:test-flags
14659 #~'("-k"
14660 ;; Disable a failing test.
14661 "not test_raises_if_aud_doesnt_match_api_key")))
14662 (native-inputs (list python-mock python-pytest python-setuptools))
14663 (propagated-inputs (list python-pyactiveresource python-pyjwt
14664 python-pyyaml python-six))
14665 (home-page "https://github.com/Shopify/shopify_python_api")
14666 (synopsis "Shopify API for Python")
14667 (description
14668 "This package provides the Shopify API for Python.
14669
14670The ShopifyAPI library allows Python developers to programmatically access the
14671admin section of stores using an ActiveResource-like interface similar the
14672ruby Shopify API gem. The library makes HTTP requests to Shopify in order to
14673list, create, update, or delete resources (e.g. Order, Product, Collection).")
14674 (license license:expat)))
14675
14676(define-public python-pybadges
14677 (package
14678 (name "python-pybadges")
14679 (version "3.0.1")
14680 (source (origin
14681 (method git-fetch)
14682 (uri (git-reference
14683 (url "https://github.com/google/pybadges")
14684 (commit version)))
14685 (file-name (git-file-name name version))
14686 (sha256
14687 "1zgb9idz7m3mzf8wvik0gwmyrxp753axqjv2pab326cr5myj1s4b")))
14688 (build-system pyproject-build-system)
14689 (arguments
14690 (list
14691 #:test-flags
14692 #~'("-k"
14693 ;; Disable network dependent tests.
14694 "not test_changes and not test_not_image_url and not test_http_url")))
14695 (propagated-inputs (list python-jinja2 python-requests python-setuptools))
14696 (native-inputs (list python-flask
14697 python-fonttools
14698 python-pillow
14699 python-pytest
14700 python-wheel
14701 python-xmldiff))
14702 (home-page "https://github.com/google/pybadges")
14703 (synopsis "Generate Github-style badges on the command-line")
14704 (description
14705 "This package provides @code{python-pybadges}: a library and command-line
14706tool for generating Github-style badges as SVG images.")
14707 (license license:asl2.0)))
14708
14709(define-public python-grid5000
14710 (package
14711 (name "python-grid5000")
14712 (version "1.2.4")
14713 (source (origin
14714 (method git-fetch)
14715 (uri (git-reference
14716 (url "https://gitlab.inria.fr/msimonin/python-grid5000")
14717 (commit (string-append "v" version))))
14718 (file-name (git-file-name name version))
14719 (sha256
14720 "0px5dr6kn7i5dyy4g42vqap1zpkc4hdvg7prrxdkkl57lfhz5w61")))
14721 (build-system pyproject-build-system)
14722 (arguments
14723 (list #:tests? #f)) ; No tests.
14724 (native-inputs (list python-setuptools))
14725 (propagated-inputs (list python-requests python-ipython python-pyyaml))
14726 (home-page "https://pypi.org/project/python-grid5000/")
14727 (synopsis "Grid5000 python client")
14728 (description
14729 "python-grid5000 is a python package wrapping the Grid5000 REST API.
14730You can use it as a library in your python project or you can explore the
14731Grid5000 resources interactively using the embedded shell.")
14732 (license license:gpl3+)))
14733
14734(define-public python-enoslib
14735 (package
14736 (name "python-enoslib")
14737 (version "8.0.1")
14738 (source
14739 (origin
14740 (method git-fetch)
14741 (uri (git-reference
14742 (url "https://gitlab.inria.fr/discovery/enoslib")
14743 (commit (string-append "v" version))))
14744 (file-name (git-file-name name version))
14745 (sha256 "0vs6b0bnlv95mzv0rjbxqwrhzkgjkn91gqipgwdf7y4ffpz8nybg")))
14746 (arguments
14747 (list
14748 #:test-flags
14749 #~(list "enoslib/tests/unit"
14750 "--ignore" "enoslib/tests/unit/infra/test_utils.py"
14751 "--ignore-glob" "enoslib/tests/unit/infra/enos_iotlab/*")
14752 #:phases
14753 #~(modify-phases %standard-phases
14754 (add-before 'check 'pre-check
14755 (lambda* (#:key tests? #:allow-other-keys)
14756 (when tests?
14757 ;; Otherwise Ansible fails to create its config directory.
14758 (setenv "HOME" "/tmp"))))
14759 ;; Disable the sanity check, which fails with the following error:
14760 ;;
14761 ;; ContextualVersionConflict(rich 12.4.1
14762 ;; (/gnu/store/...-python-rich-12.4.1/lib/python3.9/site-packages),
14763 ;; Requirement.parse('rich[jupyter]~=12.0.0'), {'enoslib'})
14764 ;;
14765 ;; The optional jupyter dependency of rich isn't critical for
14766 ;; EnOSlib to work
14767 (delete 'sanity-check))))
14768 (build-system pyproject-build-system)
14769 (native-inputs
14770 (list python-ddt
14771 python-freezegun
14772 python-pytest
14773 python-setuptools
14774 python-wheel))
14775 (propagated-inputs
14776 (list ansible
14777 python-cryptography
14778 python-grid5000
14779 python-jsonschema
14780 python-netaddr
14781 python-packaging
14782 python-requests
14783 python-rich
14784 python-sshtunnel
14785 python-pytz))
14786 (home-page "https://discovery.gitlabpages.inria.fr/enoslib/index.html")
14787 (synopsis "Deploy distributed testbeds on a variety of platforms")
14788 (description
14789 "EnOSlib is a library to build experimental frameworks on various
14790scientific testbeds. It lets you deploy networks of machines on actual
14791hardware on Grid'5000 or via OpenStack, to Vagrant, Chameleon, and more.")
14792 (license license:gpl3+)))
14793
14794(define-public python-pynetbox
14795 (package
14796 (name "python-pynetbox")
14797 (version "7.4.1")
14798 (source (origin
14799 (method url-fetch)
14800 (uri (pypi-uri "pynetbox" version))
14801 (sha256
14802 (base32
14803 "1hq0mqykwdsmcrj61fxxzdkpc7wnld4grhkcxy560ym79jbbb0iz"))))
14804 (build-system pyproject-build-system)
14805 (arguments
14806 (list
14807 #:test-flags
14808 ;; Integration tests depend on docker.
14809 '(list "--ignore=tests/integration")))
14810 (propagated-inputs (list python-packaging python-requests))
14811 (native-inputs
14812 (list python-pytest
14813 python-setuptools
14814 python-setuptools-scm
14815 python-wheel))
14816 (home-page "https://github.com/netbox-community/pynetbox")
14817 (synopsis "NetBox API client library")
14818 (description "Python module to query and edit data stored in a
14819@url{https://netbox.dev,NetBox} instance.")
14820 (license license:asl2.0)))
14821
14822(define-public python-waybackpack
14823 (package
14824 (name "python-waybackpack")
14825 (version "0.6.4")
14826 (source
14827 (origin
14828 (method url-fetch)
14829 (uri (pypi-uri "waybackpack" version))
14830 (sha256
14831 (base32 "16lcr2hv7gmp199fh3psrnv68j20pfxria8v6gchrpl1jqx9f923"))))
14832 (build-system pyproject-build-system)
14833 (arguments
14834 (list #:tests? #f)) ; would require network (and SSL certificates)
14835 (propagated-inputs (list python-requests))
14836 (native-inputs (list python-pytest python-setuptools python-wheel))
14837 (home-page "https://github.com/jsvine/waybackpack")
14838 (synopsis
14839 "Download the entire Wayback Machine archive for a given URL")
14840 (description
14841 "This package provides a library and a command-line tool that lets
14842you download the entire Wayback Machine archive for a given URL.")
14843 (license license:expat)))
14844
14845(define-public python-xyzservices
14846 (package
14847 (name "python-xyzservices")
14848 (version "2025.4.0")
14849 (source
14850 (origin
14851 (method url-fetch)
14852 (uri (pypi-uri "xyzservices" version))
14853 (sha256
14854 (base32 "1n096zg9bd4n6w6axcm16m9sxdkc6qy1mipva0scbyj86rqn9rvg"))))
14855 (build-system pyproject-build-system)
14856 (arguments
14857 (list
14858 #:test-flags #~(list "-m" "not request")))
14859 (native-inputs
14860 (list python-pytest
14861 python-mercantile
14862 python-requests
14863 python-setuptools
14864 python-setuptools-scm))
14865 (home-page "https://github.com/geopandas/xyzservices")
14866 (synopsis "Source of XYZ tiles providers")
14867 (description "@code{xyzservices} is a lightweight library providing a
14868repository of available XYZ services offering raster basemap tiles. The
14869repository is provided via Python API and as a compressed JSON file.")
14870 (license license:bsd-3)))
14871
14872(define-public s3cmd
14873 (package
14874 (name "s3cmd")
14875 (version "2.4.0")
14876 (source
14877 (origin
14878 (method git-fetch)
14879 (uri (git-reference
14880 (url "https://github.com/s3tools/s3cmd")
14881 (commit (string-append "v" version))))
14882 (file-name (git-file-name name version))
14883 (sha256
14884 (base32 "168c49d1v8r7azv66zz0w07jalf434c2jpg2xzads5jnxzmiy73k"))))
14885 (build-system pyproject-build-system)
14886 (arguments
14887 (list
14888 #:tests? #f ; XXX: Tests require network access.
14889 #:phases
14890 #~(modify-phases %standard-phases
14891 (add-after 'unpack 'hide-wrapping
14892 (lambda _
14893 (substitute* "S3/MultiPart.py"
14894 (("sys\\.argv\\[0\\]")
14895 "\"s3cmd\""))
14896 (substitute* "s3cmd"
14897 (("optparser\\.get_prog_name\\(\\)")
14898 "\"s3cmd\"")))))))
14899 (native-inputs (list python-setuptools))
14900 (inputs (list python-dateutil python-magic))
14901 (home-page "https://s3tools.org/s3cmd")
14902 (synopsis "Command line tool for S3-compatible storage services")
14903 (description
14904 "S3cmd is a command line tool for uploading, retrieving and managing data
14905in storage services that are compatible with the Amazon Simple Storage
14906Service (S3) protocol, including S3 itself. It supports rsync-like backup,
14907GnuPG encryption, and more. It also supports management of Amazon's
14908CloudFront content delivery network.")
14909 (license license:gpl2+)))