projects/guix·blob haskell-team · refs

14907 lines · 539.3 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2015 Eric Dvorsak <[email protected]>
3;;; Copyright © 2015-2025 Efraim Flashner <[email protected]>
4;;; Copyright © 2017 Christopher Baines <[email protected]>
5;;; Copyright © 2017 Muriithi Frederick Muriuki <[email protected]>
6;;; Copyright © 2016, 2017 Danny Milosavljevic <[email protected]>
7;;; Copyright © 2013, 2014, 2015, 2016, 2020, 2023 Andreas Enge <[email protected]>
8;;; Copyright © 2016-2023 Marius Bakke <[email protected]>
9;;; Copyright © 2015-2025 Ricardo Wurmus <[email protected]>
10;;; Copyright © 2017, 2021 Roel Janssen <[email protected]>
11;;; Copyright © 2016, 2017, 2020 Julien Lepiller <[email protected]>
12;;; Copyright © 2016, 2017 Nikita <[email protected]>
13;;; Copyright © 2014, 2017, 2021 Eric Bavier <[email protected]>
14;;; Copyright © 2014, 2015 Mark H Weaver <[email protected]>
15;;; Copyright © 2015 Cyril Roelandt <[email protected]>
16;;; Copyright © 2015, 2016, 2017, 2019 Leo Famulari <[email protected]>
17;;; Copyright © 2016, 2019, 2022, 2025 Hartmut Goebel <[email protected]>
18;;; Copyright © 2016–2021 Tobias Geerinckx-Rice <[email protected]>
19;;; Copyright © 2015, 2017 Ben Woodcroft <[email protected]>
20;;; Copyright © 2015, 2016 Christine Lemmer-Webber <[email protected]>
21;;; Copyright © 2017 Adriano Peluso <[email protected]>
22;;; Copyright © 2016 Dylan Jeffers <sapientech@[email protected]>
23;;; Copyright © 2016 David Craven <[email protected]>
24;;; Copyright © 2017 Oleg Pykhalov <[email protected]>
25;;; Copyright © 2015, 2016 David Thompson <[email protected]>
26;;; Copyright © 2017 Mark Meyer <[email protected]>
27;;; Copyright © 2018 Clément Lassieur <[email protected]>
28;;; Copyright © 2018 Tomáš Čech <[email protected]>
29;;; Copyright © 2018, 2019, 2021, 2024 Nicolas Goaziou <[email protected]>
30;;; Copyright © 2018 Mathieu Othacehe <[email protected]>
31;;; Copyright © 2018, 2020, 2021, 2022, 2023 Maxim Cournoyer <[email protected]>
32;;; Copyright © 2018 swedebugia <[email protected]>
33;;; Copyright © 2019 Vagrant Cascadian <[email protected]>
34;;; Copyright © 2019, 2023 Brendan Tildesley <[email protected]>
35;;; Copyright © 2019 Pierre Langlois <[email protected]>
36;;; Copyright © 2019, 2020 Tanguy Le Carrour <[email protected]>
37;;; Copyright © 2020 Jakub Kądziołka <[email protected]>
38;;; Copyright © 2020 Josh Marshall <[email protected]>
39;;; Copyright © 2020 Evan Straw <[email protected]>
40;;; Copyright © 2020 Alexandros Theodotou <[email protected]>
41;;; Copyright © 2020 Holger Peters <[email protected]>
42;;; Copyright © 2020 Noisytoot <[email protected]>
43;;; Copyright © 2020 Edouard Klein <[email protected]>
44;;; Copyright © 2020, 2021, 2022, 2023, 2025 Vinicius Monego <[email protected]>
45;;; Copyright © 2020 Konrad Hinsen <[email protected]>
46;;; Copyright © 2020, 2022, 2024 Giacomo Leidi <[email protected]>
47;;; Copyright © 2020 Raghav Gururajan <[email protected]>
48;;; Copyright © 2021 Ekaitz Zarraga <[email protected]>
49;;; Copyright © 2021 Greg Hogan <[email protected]>
50;;; Copyright © 2021 Maxime Devos <[email protected]>
51;;; Copyright © 2021 Pradana Aumars <[email protected]>
52;;; Copyright © 2021, 2022, 2024, 2026 Arun Isaac <[email protected]>
53;;; Copyright © 2021-2022, 2024-2025 jgart <[email protected]>
54;;; Copyright © 2021 Alice Brenon <[email protected]>
55;;; Copyright © 2021 Mekeor Melire <[email protected]>
56;;; Copyright © 2022 John Kehayias <[email protected]>
57;;; Copyright © 2022 Denis 'GNUtoo' Carikli <[email protected]>
58;;; Copyright © 2022, 2023, 2025 Felix Gruber <[email protected]>
59;;; Copyright © 2022 Peter Polidoro <[email protected]>
60;;; Copyright © 2022 Antero Mejr <[email protected]>
61;;; Copyright © 2022 Luis Henrique Gomes Higino <[email protected]>
62;;; Copyright © 2022, 2025 Nicolas Graves <[email protected]>
63;;; Copyright © 2022 Tomasz Jeneralczyk <[email protected]>
64;;; Copyright © 2022 msimonin <[email protected]>
65;;; Copyright © 2022 Michael Rohleder <[email protected]>
66;;; Copyright © 2022 Baptiste Strazzulla <[email protected]>
67;;; Copyright © 2023 dan <[email protected]>
68;;; Copyright © 2023 John Kehayias <[email protected]>
69;;; Copyright © 2023 Juliana Sims <[email protected]>
70;;; Copyright © 2023 Ivan Vilata-i-Balaguer <[email protected]>
71;;; Copyright © 2024 Fabio Natali <[email protected]>
72;;; Copyright © 2024 Steve George <[email protected]>
73;;; Copyright © 2024 Troy Figiel <[email protected]>
74;;; Copyright © 2024, 2025 Sharlatan Hellseher <[email protected]>
75;;; Copyright © 2024 normally_js <[email protected]>
76;;; Copyright © 2024 Markku Korkeala <[email protected]>
77;;; Copyright © 2024 Nguyễn Gia Phong <[email protected]>
78;;; Copyright © 2024 Zheng Junjie <[email protected]>
79;;; Copyright © 2024 Spencer King <[email protected]>
80;;; Copyright © 2024 Attila Lendvai <[email protected]>
81;;; Copyright © 2025 Daniel Ziltener <[email protected]>
82;;; Copyright © 2025 gemmaro <[email protected]>
83;;; Copyright © 2025 Sergio Pastor Pérez <[email protected]>
84;;; Copyright © 2025 Jake Forster <[email protected]>
85;;; Copyright © 2025 Janneke Nieuwenhuizen <[email protected]>
86;;; Copyright © 2025 Hugo Buddelmeijer <[email protected]>
87;;; Copyright © 2025-2026 Artur Wroblewski <[email protected]>
88;;; Copyright © 2025, 2026 Allan Adair <[email protected]>
89;;; Copyright © 2025 Aaron Covrig <[email protected]>
90;;; Copyright © 2026 Daniel Khodabakhsh <[email protected]>
91;;; Copyright © 2026 mst <[email protected]>
92;;; Copyright © 2026 Goran Vukoman <[email protected]>
93;;;
94;;; This file is part of GNU Guix.
95;;;
96;;; GNU Guix is free software; you can redistribute it and/or modify it
97;;; under the terms of the GNU General Public License as published by
98;;; the Free Software Foundation; either version 3 of the License, or (at
99;;; your option) any later version.
100;;;
101;;; GNU Guix is distributed in the hope that it will be useful, but
102;;; WITHOUT ANY WARRANTY; without even the implied warranty of
103;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
104;;; GNU General Public License for more details.
105;;;
106;;; You should have received a copy of the GNU General Public License
107;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
108
109(define-module (gnu packages python-web)
110 #:use-module (gnu packages admin)
111 #:use-module (gnu packages base)
112 #:use-module (gnu packages bash)
113 #:use-module (gnu packages build-tools)
114 #:use-module (gnu packages check)
115 #:use-module (gnu packages cmake)
116 #:use-module (gnu packages compression)
117 #:use-module (gnu packages curl)
118 #:use-module (gnu packages databases)
119 #:use-module (gnu packages django)
120 #:use-module (gnu packages dns)
121 #:use-module (gnu packages freedesktop)
122 #:use-module (gnu packages glib)
123 #:use-module (gnu packages gnupg)
124 #:use-module (gnu packages graphviz)
125 #:use-module (gnu packages groff)
126 #:use-module (gnu packages iso-codes)
127 #:use-module (gnu packages libevent)
128 #:use-module (gnu packages libffi)
129 #:use-module (gnu packages libidn)
130 #:use-module (gnu packages linux)
131 #:use-module (gnu packages lsof)
132 #:use-module (gnu packages node)
133 #:use-module (gnu packages nss)
134 #:use-module (gnu packages openstack)
135 #:use-module (gnu packages pcre)
136 #:use-module (gnu packages pkg-config)
137 #:use-module (gnu packages protobuf)
138 #:use-module (gnu packages python)
139 #:use-module (gnu packages python-build)
140 #:use-module (gnu packages python-check)
141 #:use-module (gnu packages python-compression)
142 #:use-module (gnu packages python-crypto)
143 #:use-module (gnu packages python-science)
144 #:use-module (gnu packages python-xyz)
145 #:use-module (gnu packages qt)
146 #:use-module (gnu packages rdf)
147 #:use-module (gnu packages rpc)
148 #:use-module (gnu packages rust)
149 #:use-module (gnu packages serialization)
150 #:use-module (gnu packages sphinx)
151 #:use-module (gnu packages texinfo)
152 #:use-module (gnu packages time)
153 #:use-module (gnu packages tls)
154 #:use-module (gnu packages version-control)
155 #:use-module (gnu packages web)
156 #:use-module (gnu packages xml)
157 #:use-module (gnu packages)
158 #:use-module (guix build-system cargo)
159 #:use-module (guix build-system copy)
160 #:use-module (guix build-system pyproject)
161 #:use-module (guix deprecation)
162 #:use-module (guix download)
163 #:use-module (guix gexp)
164 #:use-module (guix git-download)
165 #:use-module ((guix licenses) #:prefix license:)
166 #:use-module (guix packages)
167 #:use-module (guix utils)
168 #:use-module (srfi srfi-1))
169
170(define-public awscli
171 (package
172 ;; Note: updating awscli typically requires updating botocore as well.
173 (name "awscli")
174 (version "1.43.11")
175 (source
176 (origin
177 (method git-fetch)
178 (uri (git-reference
179 (url "https://github.com/aws/aws-cli")
180 (commit version)))
181 (file-name (git-file-name name version))
182 (sha256
183 (base32 "1idvcnc6jw7xr1jqpza472ksj3i2kyk0bv8wr7acz3xnba1v8xmi"))))
184 (build-system pyproject-build-system)
185 (arguments
186 (list
187 ;; tests: 2715 passed, 32 warnings
188 #:test-flags
189 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
190 ;; Complete test suite is huge and compute hungry, run just unit
191 ;; tests.
192 "--ignore=tests/dependencies"
193 "--ignore=tests/functional"
194 "--ignore=tests/integration"
195 ;; TypeError: 'Mock' object is not subscriptable.
196 "-k" "not test_no_groff_or_mandoc_exists")
197 #:phases
198 #~(modify-phases %standard-phases
199 (add-after 'unpack 'fix-reference-to-groff
200 (lambda _
201 ;; XXX: Consider to use wrap-program instead, it tries to parse
202 ;; the PATH.
203 (substitute* "awscli/help.py"
204 (("if self._exists_on_path\\('groff'\\):") "if 'groff':")
205 (("raise ExecutableNotFoundError\\('groff'\\)") "")
206 (("cmdline = \\['groff'")
207 (format #f "cmdline = ['~a/bin/groff'"
208 #$(this-package-input "groff-minimal"))))))
209 (add-before 'check 'set-environment
210 (lambda _
211 ;; PermissionError: [Errno 13] Permission denied:
212 ;; '/homeless-shelter'
213 (setenv "HOME" "/tmp"))))))
214 (native-inputs
215 (list python-pytest
216 python-pytest-xdist
217 python-setuptools
218 python-wheel))
219 (inputs
220 (list groff-minimal
221 python-botocore
222 python-colorama
223 python-docutils-0.19
224 python-pyyaml
225 python-rsa-for-awscli-1
226 python-s3transfer))
227 (home-page "https://aws.amazon.com/cli/")
228 (synopsis "Command line client for AWS")
229 (description
230 "AWS CLI provides a unified command line interface to the Amazon Web
231Services (AWS) API.")
232 (license license:asl2.0)))
233
234(define-public awscli-2
235 (package
236 (inherit awscli)
237 ;; Note: updating awscli-2 typically requires updating python-awscrt.
238 (name "awscli")
239 ;; Upstream practices a very rapid (1h-1d) release cycles try to select
240 ;; any fresh one compatible with current state of dependencies in Guix.
241 (version "2.36.20")
242 (source
243 (origin
244 (method git-fetch)
245 (uri (git-reference
246 (url "https://github.com/aws/aws-cli")
247 (commit version)))
248 (file-name (git-file-name name version))
249 (sha256
250 (base32
251 "1hv2zs5pm86b5bd66j2kfb9r8gz13cqnf8x5hmfv0ddszf9vnfgp"))))
252 (build-system pyproject-build-system)
253 (arguments
254 (list
255 ;; When updating and checking locally be very patient as build phase may
256 ;; hang for 6-8 minutes but eventually passes through.
257 ;;
258 ;; tests: 4189 passed, 1 skipped, 2 warnings
259 #:test-flags
260 '(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
261 ;; Full test suite contains more than 70k tests; ignore network
262 ;; dependent, slow and compute intense tests, keep just unit
263 ;; tests.
264 "--ignore=tests/backends"
265 "--ignore=tests/dependencies"
266 "--ignore=tests/functional"
267 "--ignore=tests/integration"
268 "--ignore=tests/unit/botocore"
269 ;; Flaky, something to do with PATH disappearing from os.environ?
270 ;; Passes when run on its own, so maybe something else is
271 ;; modifying this during the test run.
272 "--ignore=tests/unit/customizations/emr/test_emr_utils.py"
273 ;; TypeError: 'Mock' object is not subscriptable
274 "-k" "not test_no_groff_or_mandoc_exists")
275 #:phases
276 #~(modify-phases %standard-phases
277 (add-after 'unpack 'ignore-deprecations
278 (lambda _
279 (substitute* "pyproject.toml"
280 (("\"error::") "\"ignore::"))))
281 (add-after 'unpack 'fix-reference-to-groff
282 (lambda* (#:key inputs #:allow-other-keys)
283 (substitute* "awscli/help.py"
284 (("if self._exists_on_path\\('groff'\\):") "if True:")
285 (("cmdline = \\['groff'")
286 (string-append "cmdline = ['"
287 (search-input-file inputs "bin/groff")
288 "'")))))
289 (add-before 'check 'pre-check
290 (lambda _ (setenv "HOME" "/tmp"))))))
291 (inputs
292 (list groff
293 ;; less
294 nss-certs-for-test
295 python-awscrt
296 python-colorama
297 python-dateutil
298 python-distro
299 python-docutils
300 python-jmespath
301 python-prompt-toolkit
302 python-ruamel.yaml
303 python-ruamel.yaml.clib
304 python-urllib3
305 python-wcwidth))
306 (native-inputs
307 (list python-flit-core
308 python-pytest
309 python-pytest-xdist))))
310
311;; XXX: This project missed maintainer upstream, see
312;; <https://github.com/joeyespo/grip/issues/387>.
313;; Consider to remove if it keeps failing to build.
314(define-public grip
315 (package
316 (name "grip")
317 (version "4.6.1")
318 (source
319 (origin
320 (method git-fetch)
321 (uri (git-reference
322 (url "https://github.com/joeyespo/grip")
323 (commit (string-append "v" version))))
324 (file-name (git-file-name name version))
325 (sha256
326 (base32 "0vhimd99zw7s1fihwr6yfij6ywahv9gdrfcf5qljvzh75mvzcwh8"))))
327 (build-system pyproject-build-system)
328 (arguments
329 (list
330 #:test-flags
331 ;; All tests fail requiring network access, ignore the whole file.
332 #~(list "--ignore=tests/test_github.py")
333 #:phases
334 #~(modify-phases %standard-phases
335 ;; This fixes the removal of `charset` attribute of requests from
336 ;; Werkzeug 2.3.0.
337 ;; Fixed in grip's commit <2784eb2c1515f1cdb1554d049d48b3bff0f42085>.
338 (add-after 'unpack 'fix-response-encoding
339 (lambda _
340 (substitute* "grip/app.py"
341 (("response.charset")
342 "getattr(response, 'charset', 'utf-8')")))))))
343 (native-inputs
344 (list nss-certs-for-test
345 python-pytest
346 python-responses
347 python-setuptools
348 python-wheel))
349 (propagated-inputs
350 (list python-docopt
351 python-flask
352 python-markdown
353 python-path-and-address
354 python-pygments
355 python-requests))
356 (home-page "https://github.com/joeyespo/grip")
357 (synopsis "Preview Markdown files using the GitHub API")
358 (description
359 "Grip is a command-line server application written in Python that uses
360the GitHub Markdown API to render a local Markdown file. The styles and
361rendering come directly from GitHub, so you'll know exactly how it will
362appear. Changes you make to the file will be instantly reflected in the
363browser without requiring a page refresh.")
364 (license license:expat)))
365
366(define-public gunicorn
367 (package
368 (name "gunicorn")
369 (version "25.3.0")
370 (source
371 (origin
372 (method url-fetch)
373 (uri (pypi-uri "gunicorn" version))
374 (sha256
375 (base32
376 "12g85w735s4dszjfidi4vh786rfxsa5rd60il0fcvxknkwpinkpp"))))
377 (outputs '("out" "doc"))
378 (build-system pyproject-build-system)
379 (arguments
380 `(#:test-flags
381 ;; Disable the geventlet tests because eventlet uses dnspython, which
382 ;; does not work in the build container due to lack of /etc/resolv.conf
383 '("--ignore=tests/workers/test_geventlet.py")
384 #:phases (modify-phases %standard-phases
385 ;; XXX: The wrap phase includes native inputs on PYTHONPATH, (see
386 ;; <https://bugs.gnu.org/25235>), leading to an inflated closure
387 ;; size. Override it to only add the essential entries.
388 (replace 'wrap
389 (lambda* (#:key native-inputs inputs outputs
390 #:allow-other-keys)
391 (let* ((out (assoc-ref outputs "out"))
392 (python (assoc-ref (or native-inputs inputs)
393 "python"))
394 (sitedir (string-append "/lib/python"
395 (python-version python)
396 "/site-packages")))
397 (wrap-program (string-append out "/bin/gunicorn")
398 `("PYTHONPATH" ":" prefix
399 ,(map (lambda (output)
400 (string-append output sitedir))
401 (list python out))))))))))
402 (inputs (list bash-minimal))
403 (native-inputs
404 (list binutils ;for ctypes.util.find_library()
405 python-eventlet
406 python-gevent
407 python-h2
408 python-httpx
409 python-pytest
410 python-pytest-asyncio
411 python-setuptools
412 python-uvloop))
413 (propagated-inputs
414 (list python-packaging
415 python-setuptools
416 python-wheel))
417 (home-page "https://gunicorn.org/")
418 (synopsis "Python WSGI HTTP Server for UNIX")
419 (description
420 "Gunicorn ‘Green Unicorn’ is a Python WSGI HTTP
421Server for UNIX. It’s a pre-fork worker model ported from Ruby’s
422Unicorn project. The Gunicorn server is broadly compatible with
423various web frameworks, simply implemented, light on server resources,
424and fairly speedy.")
425 (license license:expat)))
426
427;; break cyclic dependency for python-aiohttp, which depends on gunicorn for
428;; its tests
429(define-public gunicorn-bootstrap
430 (package
431 (inherit gunicorn)
432 (name "gunicorn")
433 (arguments `(#:tests? #f))
434 (properties '((hidden? . #t)))
435 (native-inputs `())))
436
437(define-public oauth2ms
438 (let ((commit "a1ef0cabfdea57e9309095954b90134604e21c08")
439 (revision "0"))
440 (package
441 (name "oauth2ms")
442 (version (git-version "0.0.0" revision commit))
443 (source (origin
444 (method git-fetch)
445 (uri (git-reference
446 (url "https://github.com/harishkrupo/oauth2ms")
447 (commit commit)))
448 (file-name (git-file-name name version))
449 (sha256
450 (base32
451 "0dqi6n4npdrvb42r672n4sl1jl8z5lsk554fwiiihpj0faa9dx64"))))
452 (build-system copy-build-system)
453 (arguments
454 (list #:install-plan #~`(("oauth2ms" "bin/oauth2ms")
455 ("." #$(string-append "share/doc/" name "-"
456 version "/")
457 #:include-regexp ("\\.org$")))
458 #:phases #~(modify-phases %standard-phases
459 (add-after 'install 'wrap-pythonpath
460 (lambda* (#:key inputs outputs #:allow-other-keys)
461 (let ((path (getenv "GUIX_PYTHONPATH")))
462 (wrap-program (string-append #$output
463 "/bin/oauth2ms")
464 `("GUIX_PYTHONPATH" ":" prefix
465 (,path)))))))))
466 (inputs (list bash-minimal python python-gnupg python-msal python-pyxdg))
467 (home-page "https://github.com/harishkrupo/oauth2ms")
468 (synopsis "XOAUTH2 compatible Microsoft Office 365 token fetcher")
469 (description
470 "Oauth2ms can be used to fetch OAuth 2.0 tokens from the Microsoft Identity
471endpoint. Additionally, it can encode the token in the XOAUTH2 format to be
472used as authentication in IMAP mail servers.")
473 (license license:asl2.0))))
474
475(define-public python-a2wsgi
476 (package
477 (name "python-a2wsgi")
478 (version "1.10.7")
479 (source (origin
480 (method url-fetch)
481 (uri (pypi-uri "a2wsgi" version))
482 (sha256
483 (base32
484 "13ikyfmkx7hlrbg5rpcdm6kw4wcsy00giil3f72hpb6sw7vjyinf"))))
485 (build-system pyproject-build-system)
486 (arguments
487 (list
488 #:test-flags
489 #~(list "-k" (string-join
490 (list "not test_starlette_stream_response"
491 "test_starlette_base_http_middleware"
492 "test_baize_stream_response"
493 ;; Fails because of harmless whitespace differences.
494 "test_wsgi_post")
495 " and not "))
496 #:build-backend "pdm.backend"))
497 (native-inputs
498 (list python-pdm-backend
499 python-pytest
500 ;; python-baize ; not packed yet
501 python-httpx-bootstrap
502 ;; Cycle: python-a2wsgi->python-uvicorn->
503 ;; python-httpx->python-starlette->python-a2wsgi
504 ;; python-starlette
505 python-pytest-asyncio))
506 (home-page "https://github.com/abersheeran/a2wsgi")
507 (synopsis "Convert WSGI to ASGI or vice versa")
508 (description
509 "This program converts a WSGI program to an ASGI program or the other
510way around. It depends only on the Python standard library.")
511 (license license:asl2.0)))
512
513(define-public python-aioboto3
514 (package
515 (name "python-aioboto3")
516 (version "15.5.0")
517 (source
518 (origin
519 (method git-fetch)
520 (uri (git-reference
521 (url "https://github.com/terricain/aioboto3")
522 (commit (string-append "v" version))))
523 (file-name (git-file-name name version))
524 (sha256
525 (base32 "05644x17f9sl8mv9bp8l0rjcmw5x2ssyd5z1v3xmgcspk5qs6qn8"))))
526 (build-system pyproject-build-system)
527 (arguments
528 (list
529 #:tests? #f ;XXX: all tests faild
530 #:phases
531 #~(modify-phases %standard-phases
532 (add-after 'unpack 'relax-requirements
533 (lambda _
534 (substitute* "pyproject.toml"
535 (("aiobotocore\\[boto3\\]==2.25.1")
536 "aiobotocore >= 2.25.1")))))))
537 (native-inputs
538 (list python-setuptools
539 python-setuptools-scm))
540 (propagated-inputs
541 (list python-aiobotocore
542 python-aiofiles
543 ;; [optional]
544 python-boto3
545 python-cryptography))
546 (home-page "https://github.com/terricain/aioboto3")
547 (synopsis "Async boto3 wrapper")
548 (description
549 "This package is mostly just a wrapper combining the great work of boto3
550and aiobotocore.")
551 (license license:asl2.0)))
552
553(define-public python-aiobotocore
554 (package
555 (name "python-aiobotocore")
556 (version "3.0.0")
557 (source
558 (origin
559 (method url-fetch)
560 (uri (pypi-uri "aiobotocore" version))
561 (sha256
562 (base32 "0bcmnbm30hwaks8l895j8xy08cil0dpjcfpidg2qjawbs4a9s0ra"))))
563 (build-system pyproject-build-system)
564 (arguments
565 ;; TODO: Tests need some setupt, see Makefile.
566 (list #:tests? #f))
567 (native-inputs
568 (list python-setuptools))
569 (propagated-inputs
570 (list python-aiohttp
571 python-aioitertools
572 python-botocore
573 python-dateutil
574 python-jmespath
575 python-multidict
576 python-typing-extensions
577 python-wrapt))
578 (home-page "https://github.com/aio-libs/aiobotocore")
579 (synopsis "Async client for AWS services using botocore and aiohttp")
580 (description "This package provides an async client for Amazon services
581using botocore and aiohttp/asyncio. This library is a mostly full featured
582asynchronous version of botocore.")
583 (license license:asl2.0)))
584
585(define-public python-aiocoap
586 (package
587 (name "python-aiocoap")
588 (version "0.4.14")
589 (source
590 (origin
591 (method git-fetch) ; tests miss data and module files in PyPI release
592 (uri (git-reference
593 (url "https://github.com/chrysn/aiocoap")
594 (commit version)))
595 (file-name (git-file-name name version))
596 (sha256
597 (base32 "0yxvcg5llgmccv0a9hfm4nr7zxv9al4wh257m95a06g5c52v6hxz"))))
598 (build-system pyproject-build-system)
599 (arguments
600 (list
601 #:test-flags
602 ;; OSError: [Errno 98] error while attempting to bind on address ('::1',
603 ;; 8683, 0, 0): address already in use
604 #~(list "--ignore=tests/test_server.py"
605 "-k" (string-join
606 ;; TypeError: can only concatenate str (not "NoneType") to
607 ;; str
608 (list "not test_options"
609 "test_uri_parser"
610 "test_help" ; returned non-zero exit status 1.
611 "test_routing" ; address already in use
612 "test_tls")
613 " and not "))))
614 (native-inputs
615 (list openssl ;for tests/test_tls.py
616 python-pytest
617 python-setuptools
618 python-wheel))
619 (propagated-inputs
620 (list ;; python-cbor-diag
621 python-cbor2
622 python-cryptography
623 ;; python-dtlssocket
624 python-filelock
625 ;; python-ge25519
626 python-pygments
627 python-termcolor
628 python-websockets))
629 (home-page "https://github.com/chrysn/aiocoap")
630 (synopsis "Python CoAP library")
631 (description
632 "The aiocoap package is an implementation of @url{@acronym{CoAP, the
633Constrained Application Protocol}, http://coap.space/}. It facilitates
634writing applications that talk to network enabled embedded
635@acronym{IoT,Internet of Things} devices.")
636 (license license:expat)))
637
638(define-public python-aiodns
639 (package
640 (name "python-aiodns")
641 (version "3.5.0")
642 (source
643 (origin
644 (method git-fetch)
645 (uri (git-reference
646 (url "https://github.com/saghul/aiodns")
647 (commit (string-append "v" version))))
648 (file-name (git-file-name name version))
649 (sha256
650 (base32 "1as7l48962dpk3r4zdsifj761dks5nyr35hxs7m8crvkyb1dg9m9"))))
651 (build-system pyproject-build-system)
652 (arguments
653 (list
654 #:tests? #f)) ;tests require internet access
655 (native-inputs
656 (list python-pytest python-pytest-asyncio python-setuptools))
657 (propagated-inputs (list python-pycares))
658 (home-page "https://github.com/saghul/aiodns")
659 (synopsis "Simple DNS resolver for asyncio")
660 (description
661 "@code{aiodns} provides a simple way for doing asynchronous DNS
662resolutions with a synchronous looking interface by using
663@url{https://github.com/saghul/pycares,pycares}.")
664 (license license:expat)))
665
666(define-public python-aioftp
667 (package
668 (name "python-aioftp")
669 (version "0.27.2")
670 (source
671 (origin
672 (method git-fetch)
673 (uri (git-reference
674 (url "https://github.com/aio-libs/aioftp")
675 (commit version)))
676 (file-name (git-file-name name version))
677 (sha256
678 (base32 "1lshyac5zk1w4x7ygkim3726f8gbkvpvlyiqkn9cs6qjxhxn5bxc"))))
679 (build-system pyproject-build-system)
680 (arguments
681 (list
682 #:phases
683 #~(modify-phases %standard-phases
684 (add-after 'unpack 'use-default-asyncio
685 ;; async_timeout is deprecated, upstream recommends to use
686 ;; asyncio, available since Python 3.11.
687 (lambda _
688 (substitute* "tests/conftest.py"
689 (("async_timeout") "asyncio")))))))
690 (native-inputs
691 (list python-pytest
692 python-pytest-mock
693 python-pytest-asyncio
694 python-setuptools
695 python-siosocks
696 python-trustme))
697 (home-page "https://aioftp.readthedocs.io/")
698 (synopsis "FTP client/server for asyncio in Python")
699 (description
700 "FTP client and server for asyncio (Python 3) Library implementing FTP
701protocol, both client and server for Python asyncio module.
702
703 Supported commands as client: USER, PASS, ACCT, PWD, CWD, CDUP, MKD, RMD,
704 MLSD, MLST, RNFR, RNTO, DELE, STOR, APPE, RETR, TYPE, PASV, ABOR, QUIT,
705 REST, LIST (as fallback).
706
707 Supported commands as server: USER, PASS, QUIT, PWD, CWD, CDUP, MKD, RMD,
708 MLSD, LIST (non-standard), MLST, RNFR, RNTO, DELE, STOR, RETR,
709 TYPE (\"I\" and \"A\"), PASV, ABOR, APPE, REST.")
710 (license license:asl2.0)))
711
712(define-public python-aiohappyeyeballs
713 (package
714 (name "python-aiohappyeyeballs")
715 (properties '((commit . "cc53cf8a1d31f7b460a0114214aac66956f0e2ed")
716 (revision . "0")))
717 (version (git-version "2.6.1"
718 (assoc-ref properties 'revision)
719 (assoc-ref properties 'commit)))
720 (source
721 (origin
722 (method git-fetch)
723 (uri (git-reference
724 (url "https://github.com/aio-libs/aiohappyeyeballs")
725 (commit (assoc-ref properties 'commit))))
726 (file-name (git-file-name name version))
727 (sha256
728 (base32 "0nc723f4sxryg5h9z8paysmy9dnqw2jy4srxp9axrxkv9qrawa7n"))))
729 (build-system pyproject-build-system)
730 (native-inputs
731 (list python-poetry-core
732 python-pytest
733 python-pytest-asyncio))
734 (home-page "https://github.com/aio-libs/aiohappyeyeballs")
735 (synopsis "Happy Eyeballs for asyncio")
736 (description "This library exists to allow connecting with Happy
737Eyeballs (RFC 8305) when you already have a list of @code{addrinfo} and not a
738DNS name.")
739 (license license:psfl)))
740
741(define-public python-aiohttp
742 (package
743 (name "python-aiohttp")
744 (version "3.13.5")
745 (source
746 (origin
747 (method git-fetch)
748 (uri (git-reference
749 (url "https://github.com/aio-libs/aiohttp/")
750 (commit (string-append "v" version))))
751 (file-name (git-file-name name version))
752 (sha256
753 (base32 "0l9jcmhqd2v97gy1bxvimwi3aajxhxqn6jkzzgg7cf42mpyza0vc"))
754 (snippet
755 #~(begin
756 (use-modules ((guix build utils)))
757 (delete-file-recursively "vendor")))))
758 (build-system pyproject-build-system)
759 (arguments
760 (list
761 ;; tests: 4003 passed, 80 skipped, 31 xfailed, 2 subtests passed
762 #:test-flags
763 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
764 ;; This tests requires the 'proxy.py' module, not yet packaged.
765 "--ignore=tests/test_proxy_functional.py"
766 ;; No benchamrks.
767 "--ignore-glob=tests/test_benchmarks_*"
768 "-k"
769 (string-join
770 ;; Combinatin of tests failing with similar errors:
771 ;; - Cannot connect to host example.com:443 ssl:default [Could
772 ;; not contact DNS servers].
773 ;; - aiohttp.http_exceptions.ContentEncodingError: 400.
774 ;; - Can not decode content-encoding: br
775 (list "not test_add_static_path_resolution"
776 "test_empty_header_name"
777 "test_http_payload_brotli"
778 "test_http_payload_zstandard"
779 "test_invalid_header_spacing"
780 "test_payload_decompress_size_limit_brotli"
781 "test_reject_obsolete_line_folding"
782 "test_response_with_precompressed_body_brotli"
783 "test_static_file_custom_content_type_compress"
784 "test_static_file_with_encoding_and_enable_compression"
785 "test_tcp_connector_ssl_shutdown_timeout_nonzero_passed"
786 "test_tcp_connector_ssl_shutdown_timeout_passed_to_"
787 "test_tcp_connector_ssl_shutdown_timeout_zero_not_")
788 " and not "))
789 #:phases
790 #~(modify-phases %standard-phases
791 (add-after 'unpack 'set-libllhtp-pkgconfig
792 (lambda _
793 ;; pkg-config can't find the libllhttp library.
794 (if (getenv "PKG_CONFIG_PATH")
795 (setenv "PKG_CONFIG_PATH"
796 (string-append
797 #$(this-package-input "llhttp") "/lib/pkgconfig"
798 (getenv "PKG_CONFIG_PATH")))
799 (setenv "PKG_CONFIG_PATH"
800 (string-append
801 #$(this-package-input "llhttp") "/lib/pkgconfig")))))
802 (add-after 'unpack 'fix-pytest-config
803 (lambda _
804 (substitute* "setup.cfg"
805 (("--numprocesses=auto") "")
806 (("-p pytest_cov") "")
807 (("--cov=aiohttp") "")
808 (("--cov=tests/") ""))))
809 (add-after 'unpack 'fix-tests
810 (lambda _
811 ;; Make sure the timestamp of this file is > 1990, because a few
812 ;; tests like test_static_file_if_modified_since_past_date
813 ;; depend on it.
814 (let ((late-90s (* 60 60 24 365 30)))
815 (utime "tests/data.unknown_mime_type" late-90s late-90s))))
816 (add-before 'build 'pre-build
817 (lambda _
818 (setenv "USE_SYSTEM_DEPS" "true")
819 ;; Help setup.py to determine project's root.
820 (with-output-to-file ".git"
821 (lambda () (display "")))
822 (substitute* "Makefile"
823 (("cythonize: .install-cython") "cythonize:"))
824 (invoke "make" "cythonize")))
825 (add-before 'check 'remove-local-source
826 (lambda _
827 (delete-file-recursively "aiohttp"))))))
828 (native-inputs
829 (list gunicorn-bootstrap
830 python-freezegun
831 python-cython
832 python-pkgconfig
833 ;; python-proxy-py ;not packaged yet in Guix
834 python-pytest
835 python-pytest-mock
836 python-pytest-xdist
837 python-re-assert
838 python-setuptools
839 python-zlib-ng))
840 (inputs
841 (list llhttp))
842 (propagated-inputs
843 (list python-aiohappyeyeballs
844 python-aiosignal
845 python-attrs
846 python-frozenlist
847 python-multidict
848 python-propcache
849 python-yarl
850 ;; [optional]
851 python-aiodns
852 python-backports-zstd ;Python version < 3.14
853 python-brotli))
854 (home-page "https://github.com/aio-libs/aiohttp/")
855 (synopsis "Async HTTP client/server framework (asyncio)")
856 (description "@code{aiohttp} is an asynchronous HTTP client/server
857framework.
858
859Its main features are:
860@itemize
861@item Supports both client and server side of HTTP protocol.
862@item Supports both client and server Web-Sockets out-of-the-box without the
863Callback Hell.
864@item Web-server has middlewares and pluggable routing.
865@end itemize")
866 (license license:asl2.0)))
867
868(define-public python-aiohttp-client-cache
869 (package
870 (name "python-aiohttp-client-cache")
871 (version "0.14.3")
872 (source
873 (origin
874 (method git-fetch)
875 (uri (git-reference
876 (url "https://github.com/requests-cache/aiohttp-client-cache")
877 (commit (string-append "v" version))))
878 (file-name (git-file-name name version))
879 (sha256
880 (base32
881 "13xbmjjvcbzh3yh5z92mc0gwicwfjfq2av5jbqv09sbfzhggs92y"))))
882 (build-system pyproject-build-system)
883 (arguments
884 (list
885 #:test-flags #~(list "--ignore=test/integration/")))
886 (native-inputs
887 (list python-brotli
888 python-faker
889 python-hatchling
890 python-pytest
891 python-pytest-aiohttp
892 python-pytest-asyncio
893 python-types-aiofiles))
894 (propagated-inputs
895 (list python-aiohttp
896 python-attrs
897 python-itsdangerous
898 python-url-normalize
899 ;; [optional]
900 python-aioboto3
901 python-aiobotocore
902 python-aiofiles
903 python-aiosqlite
904 python-pymongo
905 python-redis))
906 (home-page "https://github.com/requests-cache/aiohttp-client-cache")
907 (synopsis "Persistent cache for aiohttp requests")
908 (description
909 "This package is an asynchronous persistent caching library specifically
910designed for @samp{aiohttp} requests in Python. With support for various
911storage backends, it offers flexibility in how and where the cache is stored.
912Please note that MongoDB and DynamoDB backends are not currently supported due
913to the absence of the @samp{motor} and @samp{aioboto3} package dependencies.")
914 (license license:expat)))
915
916(define-public python-aiohttp-cors
917 (package
918 (name "python-aiohttp-cors")
919 (version "0.8.1")
920 (source
921 (origin
922 (method url-fetch)
923 (uri (pypi-uri "aiohttp_cors" version))
924 (sha256
925 (base32 "00qlzc2y65bkl1a5f5v83mmjlrhzmx3a2ngq2pm3jjdnhk5zkb6c"))))
926 (build-system pyproject-build-system)
927 (arguments
928 (list
929 #:tests? #f)) ; network access is required to run tests
930 (native-inputs
931 (list python-setuptools
932 python-wheel))
933 (propagated-inputs
934 (list python-aiohttp))
935 (home-page "https://github.com/aio-libs/aiohttp-cors")
936 (synopsis "CORS support for aiohttp")
937 (description
938 "This library implements @acronym{CORS, Cross Origin Resource Sharing}
939support for aiohttp asyncio-powered asynchronous HTTP server.")
940 (license license:asl2.0)))
941
942(define-public python-aiohttp-oauthlib
943 (package
944 (name "python-aiohttp-oauthlib")
945 (version "0.1.0")
946 (source
947 (origin
948 (method url-fetch)
949 (uri (pypi-uri "aiohttp-oauthlib" version))
950 (sha256
951 (base32 "1dwk0gby27xm7384qyz2p7zw9dqhjx7m8fhfk172w36xknjx2g49"))))
952 (build-system pyproject-build-system)
953 (arguments (list #:tests? #f)) ; none included
954 (propagated-inputs (list python-aiohttp python-oauthlib))
955 (native-inputs (list python-setuptools python-setuptools-scm))
956 (home-page "https://git.sr.ht/~whynothugo/aiohttp-oauthlib")
957 (synopsis "OAuthlib authentication support for aiohttp")
958 (description "Aiohttp-oauthlib uses the Python aiohttp and OAuthlib libraries to
959provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
960 (license license:isc)))
961
962(define-public python-aiohttp-retry
963 (package
964 (name "python-aiohttp-retry")
965 (version "2.9.1")
966 (source
967 (origin
968 (method git-fetch)
969 (uri (git-reference
970 (url "https://github.com/inyutin/aiohttp_retry")
971 (commit (string-append "v" version))))
972 (file-name (git-file-name name version))
973 (sha256
974 (base32 "0r5lxnxc4s8js7l86pfmdxl455v9lg3m41nz6m1xg4kwwf6j0bpi"))))
975 (build-system pyproject-build-system)
976 (native-inputs
977 (list python-pytest
978 python-pytest-aiohttp
979 python-setuptools))
980 (propagated-inputs
981 (list python-aiohttp))
982 (home-page "https://github.com/inyutin/aiohttp_retry")
983 (synopsis "Simple retry client for aiohttp")
984 (description
985 "This package implements @code{RetryClient} for @code{aiohttp} to retry
986connection to provided endpoint with timeouts logic or use:
987
988@itemize
989@item @code{ExponentialRetry} with exponential backoff
990@item @code{RandomRetry} for random backoff
991@item @code{ListRetry} with backoff you predefine by list
992@item @code{FibonacciRetry} with backoff that looks like fibonacci sequence
993@item @code{JitterRetry} exponential retry with a bit of randomness
994@end itemize")
995 (license license:expat)))
996
997(define-public python-aiohttp-socks
998 (package
999 (name "python-aiohttp-socks")
1000 (version "0.10.1")
1001 (source
1002 (origin
1003 (method url-fetch)
1004 (uri (pypi-uri "aiohttp_socks" version))
1005 (sha256
1006 (base32
1007 "0s70jpcr9wc8ld2v1w309cz7r8mm2bipf6zbkdqqaa0z0pwf3wj9"))))
1008 (build-system pyproject-build-system)
1009 (arguments (list #:tests? #false)) ;none included
1010 (propagated-inputs
1011 (list python-aiohttp python-socks))
1012 (native-inputs (list python-setuptools python-wheel))
1013 (home-page "https://github.com/romis2012/aiohttp-socks")
1014 (synopsis "SOCKS proxy connector for aiohttp")
1015 (description "This package provides a SOCKS proxy connector for
1016aiohttp. It supports SOCKS4(a) and SOCKS5.")
1017 (license license:asl2.0)))
1018
1019(define-public python-aioitertools
1020 (package
1021 (name "python-aioitertools")
1022 (version "0.12.0")
1023 (source
1024 (origin
1025 (method url-fetch)
1026 (uri (pypi-uri "aioitertools" version))
1027 (sha256
1028 (base32 "0syxv2r90d6410hc68jxhk610pdgx19n1n5rc7shaxxv9xdhbaf2"))))
1029 (build-system pyproject-build-system)
1030 (arguments
1031 (list #:test-backend #~'custom
1032 #:test-flags #~(list "-m" "aioitertools.tests")))
1033 (native-inputs
1034 (list python-flit-core))
1035 (home-page "https://pypi.org/project/aioitertools/")
1036 (synopsis "Itertools and builtins for AsyncIO and mixed iterables")
1037 (description
1038 "This package provides an implementation of itertools, builtins, and more
1039for AsyncIO and mixed-type iterables.")
1040 (license license:expat)))
1041
1042(define-public python-aioquic
1043 (package
1044 (name "python-aioquic")
1045 (version "1.3.0")
1046 (source
1047 (origin
1048 (method git-fetch)
1049 (uri (git-reference
1050 (url "https://github.com/aiortc/aioquic")
1051 (commit version)))
1052 (file-name (git-file-name name version))
1053 (sha256
1054 (base32 "0dyzh8xipxbd7fcykfz8g5bgri38prwg050szqawq2p0pg538dgb"))))
1055 (build-system pyproject-build-system)
1056 (native-inputs
1057 (list nss-certs-for-test
1058 python-pytest
1059 python-setuptools))
1060 (inputs
1061 (list openssl))
1062 (propagated-inputs
1063 (list python-certifi
1064 python-cryptography
1065 python-pylsqpack
1066 python-pyopenssl
1067 python-service-identity))
1068 (home-page "https://github.com/aiortc/aioquic")
1069 (synopsis "QUIC and HTTP3 implementation in Python")
1070 (description
1071 "@code{aioquic} is a library for the QUIC network protocol in Python.
1072It features a minimal TLS 1.3 implementation, a QUIC stack and an HTTP/3 stack.")
1073 (license license:bsd-3)))
1074
1075(define-public python-aiorpcx
1076 (package
1077 (name "python-aiorpcx")
1078 (version "0.25.0")
1079 (source
1080 (origin
1081 (method git-fetch)
1082 ;; PyPI misses the util.py file used for tests.
1083 (uri (git-reference
1084 (url "https://github.com/kyuupichan/aiorpcX")
1085 (commit version)))
1086 (file-name (git-file-name name version))
1087 (sha256
1088 (base32
1089 "0sn4xxlpy0kb5b25bqrjzh2m6bskdyydc6cq8bigb7g5dacksn4q"))))
1090 (build-system pyproject-build-system)
1091 (arguments
1092 (list
1093 #:test-flags
1094 ;; This test opens a remote connection.
1095 #~(list "-k" "not test_create_connection_resolve_good")))
1096 (native-inputs (list python-pytest
1097 python-pytest-asyncio-0.26
1098 python-setuptools))
1099 (propagated-inputs
1100 (list python-attrs python-websockets))
1101 (home-page "https://github.com/kyuupichan/aiorpcX")
1102 (synopsis "Generic asyncio RPC implementation")
1103 (description
1104 "The aiorpcX library is a generic asyncio implementation of RPC suitable
1105for an application that is a client, server or both.
1106
1107The package includes a module with full coverage of JSON RPC versions 1.0 and
11082.0, JSON RPC protocol auto-detection, and arbitrary message framing. It also
1109comes with a SOCKS proxy client.")
1110 (license (list license:expat license:bsd-2))))
1111
1112(define-public python-aiosignal
1113 (package
1114 (name "python-aiosignal")
1115 (version "1.4.0")
1116 (source
1117 (origin
1118 (method url-fetch)
1119 (uri (pypi-uri "aiosignal" version))
1120 (sha256
1121 (base32 "1isin9bp256scp59lbr35h48nw5p5i84b6f9kh1c50w08vcyqzpl"))))
1122 (build-system pyproject-build-system)
1123 (arguments
1124 (list
1125 #:phases
1126 #~(modify-phases %standard-phases
1127 (add-after 'unpack 'avoid-pytest-cov-preload
1128 (lambda _
1129 (substitute* "pytest.ini"
1130 (("-p pytest_cov") "")))))))
1131 (native-inputs
1132 (list python-pytest
1133 python-pytest-asyncio
1134 python-setuptools))
1135 (propagated-inputs
1136 (list python-frozenlist))
1137 (home-page "https://github.com/aio-libs/aiosignal")
1138 (synopsis "Callback manager for Python @code{asyncio} projects")
1139 (description "This Python module provides @code{Signal}, an abstraction to
1140register asynchronous callbacks. The @code{Signal} abstraction can be used
1141for adding, removing and dropping callbacks.")
1142 (license license:asl2.0)))
1143
1144(define-public python-aiostream
1145 (package
1146 (name "python-aiostream")
1147 (version "0.7.0")
1148 (source
1149 (origin
1150 (method git-fetch) ;no tests in PyPI archive
1151 (uri (git-reference
1152 (url "https://github.com/vxgmichel/aiostream")
1153 (commit (string-append "v" version))))
1154 (file-name (git-file-name name version))
1155 (sha256
1156 (base32 "1wf89l9f0ivlv796pklpgykx6j6ksfqrmvzikd8w5j6ldln7bv50"))))
1157 (build-system pyproject-build-system)
1158 (native-inputs
1159 (list python-pytest python-pytest-asyncio python-setuptools))
1160 (propagated-inputs
1161 (list python-typing-extensions))
1162 (home-page "https://github.com/vxgmichel/aiostream")
1163 (synopsis "Generator-based operators for asynchronous iteration")
1164 (description "@code{aiostream} provides a collection of stream operators that can
1165be combined to create asynchronous pipelines of operations. It can be seen as an
1166asynchronous version of @code{itertools}, although some aspects are slightly
1167different. All the provided operators return a unified interface called a stream. A
1168stream is an enhanced asynchronous iterable.")
1169 (license license:gpl3)))
1170
1171(define-public python-ajsonrpc
1172 (package
1173 (name "python-ajsonrpc")
1174 (version "1.2.0")
1175 (source
1176 (origin
1177 (method git-fetch)
1178 (uri (git-reference
1179 (url "https://github.com/pavlov99/ajsonrpc")
1180 (commit version)))
1181 (file-name (git-file-name name version))
1182 (sha256
1183 (base32 "0c7jxfkv5q2m95j54dn650gcvdbpag2qcki7phvmrwsgb36w09kd"))))
1184 (build-system pyproject-build-system)
1185 (arguments
1186 (list
1187 #:phases
1188 #~(modify-phases %standard-phases
1189 (add-after 'unpack 'set-version
1190 (lambda _
1191 (substitute* "ajsonrpc/__init__.py"
1192 (("^__version__ = .*")
1193 (string-append "__version__ = \"" #$version "\"\n"))))))))
1194 (native-inputs
1195 (list python-pytest
1196 python-setuptools))
1197 (propagated-inputs
1198 (list python-quart
1199 python-sanic
1200 python-tornado))
1201 (home-page "https://github.com/pavlov99/ajsonrpc")
1202 (synopsis "Async JSON-RPC 2.0 protocol and server")
1203 (description
1204 "This package provides a Python JSON-RPC 2.0 protocol and server powered
1205by asyncio.")
1206 (license license:expat)))
1207
1208(define-public python-alpaca-py
1209 (package
1210 (name "python-alpaca-py")
1211 (version "0.43.5")
1212 (source
1213 (origin
1214 (method git-fetch)
1215 (uri (git-reference
1216 (url "https://github.com/alpacahq/alpaca-py")
1217 (commit (string-append "v" version))))
1218 (file-name (git-file-name name version))
1219 (sha256
1220 (base32 "1kiq8b1v58yj7fypmnfn4mij1n96ym1i9lxsd4gmbv0cgpn10nqv"))))
1221 (build-system pyproject-build-system)
1222 (native-inputs
1223 (list python-poetry-core
1224 python-poetry-dynamic-versioning
1225 python-pytest
1226 python-pytest-asyncio
1227 python-requests-mock))
1228 (propagated-inputs
1229 (list python-msgpack
1230 python-pandas
1231 python-pydantic
1232 python-pytz
1233 python-requests
1234 python-sseclient-py
1235 python-websockets))
1236 (home-page "https://alpaca.markets/sdks/python/")
1237 (synopsis "Alpaca API official Python SDK")
1238 (description
1239 "Alpaca-py provides an interface to REST, WebSocket and SSE endpoints
1240that allow interaction with the @url{https://alpaca.markets/, Alpaca} API.")
1241 (license license:asl2.0)))
1242
1243(define-public python-anaconda-client
1244 (package
1245 (name "python-anaconda-client")
1246 (version "1.13.1")
1247 (source
1248 (origin
1249 (method git-fetch)
1250 (uri (git-reference
1251 (url "https://github.com/Anaconda-Platform/anaconda-client")
1252 (commit version)))
1253 (file-name (git-file-name name version))
1254 (sha256
1255 (base32 "06nn3cwhrrajsbn9pils2539lzplfnyhn9java3xrpm3ksxq9g72"))))
1256 (build-system pyproject-build-system)
1257 (arguments
1258 (list
1259 #:test-flags
1260 #~(list "--deselect=tests/utils/test_conda.py::test_find_conda"
1261 "--deselect=tests/utils/test_conda.py::test_conda_vars")
1262 #:phases
1263 #~(modify-phases %standard-phases
1264 (add-after 'unpack 'fix-pytest-config
1265 (lambda _
1266 (substitute* "setup.cfg"
1267 (("addopts=.*") "addopts=\n")))))))
1268 (native-inputs
1269 (list python-freezegun
1270 python-pytest
1271 python-setuptools))
1272 (propagated-inputs
1273 (list python-anaconda-cli-base
1274 python-conda-package-handling
1275 python-conda-package-streaming
1276 python-dateutil
1277 python-defusedxml
1278 python-nbformat
1279 python-pillow
1280 python-platformdirs
1281 python-pytz
1282 python-pyyaml
1283 python-requests
1284 python-requests-toolbelt
1285 python-setuptools
1286 python-tqdm
1287 python-urllib3))
1288 (home-page "https://github.com/Anaconda-Platform/anaconda-client")
1289 (synopsis "Anaconda Cloud command line client library")
1290 (description
1291 "Anaconda Cloud command line client library provides an interface to
1292Anaconda Cloud. Anaconda Cloud is useful for sharing packages, notebooks and
1293environments.")
1294 (license license:bsd-3)))
1295
1296(define-public python-apiron
1297 (package
1298 (name "python-apiron")
1299 (version "5.1.0")
1300 (source
1301 (origin
1302 (method url-fetch)
1303 (uri (pypi-uri "apiron" version))
1304 (sha256
1305 (base32 "1qwbqn47sf0aqznj1snbv37v8ijx476qqkjf5l9pac7xjkxsr8qk"))))
1306 (build-system pyproject-build-system)
1307 (arguments
1308 (list #:test-flags '(list "-k" "not test_call")))
1309 (propagated-inputs
1310 (list python-requests))
1311 (native-inputs
1312 (list python-pytest
1313 python-setuptools
1314 python-wheel))
1315 (home-page "https://github.com/ithaka/apiron")
1316 (synopsis "Python wrapper for interacting with RESTful APIs")
1317 (description
1318 "@code{apiron} provides a declarative, structured configuration of
1319services and endpoints with a unified interface for interacting with RESTful
1320APIs.")
1321 (license license:expat)))
1322
1323(define-public python-apprise
1324 (package
1325 (name "python-apprise")
1326 (version "1.9.4")
1327 (source
1328 (origin
1329 (method url-fetch)
1330 (uri (pypi-uri "apprise" version))
1331 (sha256
1332 (base32 "126951n9lnlqrw5lbsvs9xs7jzg33bqqxm7cfnqag2csw6p24ca8"))))
1333 (build-system pyproject-build-system)
1334 (arguments
1335 (list
1336 ;; These tests used to be ran with --numprocesses, but that seems to have
1337 ;; made them non-deterministic.
1338 #:test-flags
1339 #~(list "--ignore=tests/test_plugin_macosx.py"
1340 "-k" "not test_plugin_glib_send_raises_generic")))
1341 (native-inputs
1342 (list python-babel
1343 python-pytest
1344 python-pytest-mock
1345 python-setuptools))
1346 (propagated-inputs
1347 (list python-certifi
1348 python-click
1349 python-markdown
1350 python-pygobject
1351 python-pyyaml
1352 python-requests
1353 python-requests-oauthlib))
1354 (home-page "https://github.com/caronc/apprise")
1355 (synopsis "Push notification library")
1356 (description
1357 "Apprise is a Python library that allows sending push notifications to a
1358broad range of notification services, such as Telegram, Discord, Slack, Amazon
1359SNS, Gotify, etc.")
1360 (license license:bsd-2)))
1361
1362(define-public python-arxiv
1363 (package
1364 (name "python-arxiv")
1365 (version "4.0.0")
1366 (source
1367 (origin
1368 (method git-fetch)
1369 (uri (git-reference
1370 (url "https://github.com/lukasschwab/arxiv.py")
1371 (commit version)))
1372 (file-name (git-file-name name version))
1373 (sha256
1374 (base32 "13363igvv3q5aj04jcrrc0cfliinlk8js84h2a9xhpwizsq96l4j"))))
1375 (build-system pyproject-build-system)
1376 (arguments
1377 (list #:test-flags
1378 #~(list "-k" ;to skip intenet connection tests
1379 (string-append "not (TestAPIBugs "
1380 "or TestClient "
1381 "or TestResult "
1382 "or TestDownload)"))
1383 #:phases
1384 #~(modify-phases %standard-phases
1385 (add-after 'unpack 'relax-dependencies
1386 (lambda _
1387 (substitute* "pyproject.toml"
1388 ;; pyproject.toml wants 6.10, guix has 6.02, seems fine
1389 (("\"lxml.*\"") "\"lxml\"")
1390 ;; artificial capped at <2.34 by dependabot
1391 (("\"requests.*\"") "\"requests\"")))))))
1392 (native-inputs
1393 (list python-pytest
1394 python-hatch-vcs
1395 python-hatchling))
1396 (propagated-inputs
1397 (list python-feedparser
1398 python-lxml
1399 python-requests))
1400 (home-page "https://github.com/lukasschwab/arxiv.py")
1401 (synopsis "Python wrapper for the arXiv API")
1402 (description "Python wrapper for the @code{arXiv} API.")
1403 (license license:expat)))
1404
1405(define-public python-asgi-csrf
1406 (package
1407 (name "python-asgi-csrf")
1408 (version "0.11")
1409 (source (origin
1410 (method git-fetch) ;for tests
1411 (uri (git-reference
1412 (url "https://github.com/simonw/asgi-csrf")
1413 (commit version)))
1414 (file-name (git-file-name name version))
1415 (sha256
1416 (base32
1417 "1dn9v47z2b599cnwahxvzsll2w28940ycgh5skxgq04vcqqssf29"))
1418 (patches
1419 (search-patches "python-asgi-csrf-fix-formparser.patch"))))
1420 (build-system pyproject-build-system)
1421 (propagated-inputs (list python-itsdangerous python-multipart))
1422 (native-inputs (list python-asgi-lifespan
1423 python-httpx
1424 python-pytest
1425 python-pytest-asyncio
1426 python-starlette
1427 python-setuptools
1428 python-wheel))
1429 (home-page "https://github.com/simonw/asgi-csrf")
1430 (synopsis "ASGI middleware for protecting against CSRF attacks")
1431 (description "This Asynchronous Server Gateway Interface (ASGI)
1432middleware protects against Cross-site request forgery (CSRF) attacks.
1433It implements the Double Submit Cookie pattern, where a cookie is set
1434that is then compared to a @code{csrftoken} hidden form field or a
1435@code{x-csrftoken} HTTP header.")
1436 (license license:asl2.0)))
1437
1438(define-public python-asgi-lifespan
1439 (package
1440 (name "python-asgi-lifespan")
1441 (version "2.1.0")
1442 (source (origin
1443 (method git-fetch) ;for tests
1444 (uri (git-reference
1445 (url "https://github.com/florimondmanca/asgi-lifespan")
1446 (commit version)))
1447 (file-name (git-file-name name version))
1448 (sha256
1449 (base32
1450 "0iqa3h61gsq1qd6j9v68k989596m9n9k1dx8zv6135rmhzzrs296"))))
1451 (build-system pyproject-build-system)
1452 (arguments
1453 (list
1454 #:test-flags
1455 '(list "-k"
1456 (string-append
1457 ;; XXX: Some tests fail because of "Exceptions from Trio nursery"
1458 "not (test_lifespan_manager[trio-None-None-StartupFailed]"
1459 " or test_lifespan_manager[trio-None-BodyFailed-None]"
1460 " or test_lifespan_manager[trio-None-BodyFailed-StartupFailed]"
1461 " or test_lifespan_manager[trio-ShutdownFailed-None-None]"
1462 " or test_lifespan_manager[trio-ShutdownFailed-None-StartupFailed]"
1463 " or test_lifespan_manager[trio-ShutdownFailed-BodyFailed-StartupFailed]"
1464 " or test_lifespan_timeout[trio-slow_shutdown]"
1465 " or test_lifespan_not_supported[trio-http_only]"
1466 " or test_lifespan_not_supported[trio-http_no_assert]"
1467 " or test_lifespan_not_supported[trio-http_no_assert_before_receive_request]"
1468 ")"))
1469 #:phases
1470 '(modify-phases %standard-phases
1471 (add-after 'unpack 'compatibility
1472 (lambda _
1473 ;; httpx version 0.28.0 removed the "app" shortcut.
1474 (substitute* "tests/test_manager.py"
1475 (("app=manager.app")
1476 "transport=httpx.ASGITransport(manager.app)")))))))
1477 (native-inputs (list python-httpx
1478 python-pytest
1479 python-pytest-asyncio
1480 python-pytest-trio
1481 python-starlette
1482 python-setuptools
1483 python-wheel))
1484 (propagated-inputs (list python-sniffio))
1485 (home-page "https://github.com/florimondmanca/asgi-lifespan")
1486 (synopsis "Programmatic startup/shutdown of ASGI apps")
1487 (description "Programmatically send startup/shutdown lifespan events
1488into Asynchronous Server Gateway Interface (ASGI) applications. When
1489used in combination with an ASGI-capable HTTP client such as HTTPX, this
1490allows mocking or testing ASGI applications without having to spin up an
1491ASGI server.")
1492 (license license:expat)))
1493
1494(define-public python-asgiref
1495 (package
1496 (name "python-asgiref")
1497 (version "3.11.1")
1498 (source
1499 (origin
1500 (method git-fetch)
1501 (uri (git-reference
1502 (url "https://github.com/django/asgiref/")
1503 (commit version)))
1504 (file-name (git-file-name name version))
1505 (sha256
1506 (base32 "19l03mx81dqhnnqa98073x1q243ndlknax0kva7azr9g12ixl69j"))))
1507 (build-system pyproject-build-system)
1508 (native-inputs
1509 (list python-pytest
1510 python-pytest-asyncio
1511 python-setuptools))
1512 (home-page "https://github.com/django/asgiref/")
1513 (synopsis "ASGI specs, helper code, and adapters")
1514 (description
1515 "ASGI is a standard for Python asynchronous web apps and servers to
1516communicate with each other, and positioned as an asynchronous successor to
1517WSGI. This package includes libraries for implementing ASGI servers.")
1518 (license license:bsd-3)))
1519
1520(define-public python-asyncer
1521 (package
1522 (name "python-asyncer")
1523 (version "0.0.17")
1524 (source
1525 (origin
1526 (method git-fetch)
1527 (uri (git-reference
1528 (url "https://github.com/fastapi/asyncer")
1529 (commit version)))
1530 (file-name (git-file-name name version))
1531 (sha256
1532 (base32 "1f4ids6sxwmz89yj98z0qc4qvfkklh0psbxv5px39k807g9aq7p2"))))
1533 (build-system pyproject-build-system)
1534 (native-inputs
1535 (list python-pdm-backend
1536 python-pytest))
1537 (propagated-inputs
1538 (list python-anyio
1539 python-sniffio
1540 python-typing-extensions))
1541 (home-page "https://asyncer.tiangolo.com/")
1542 (synopsis "Asyncer, async and await, focused on developer experience")
1543 (description
1544 "Asyncer is a small library built on top of
1545@url{https://anyio.readthedocs.io/en/stable/, AnyIO}.
1546
1547The main goal of Asyncer is to improve developer experience by providing
1548better support for autocompletion and inline errors in the editor, and more
1549certainty that the code is bug-free by providing better support for type
1550checking tools like mypy.")
1551 (license license:expat)))
1552
1553(define-public python-asyncudp
1554 (package
1555 (name "python-asyncudp")
1556 (version "0.11.0")
1557 (source
1558 (origin
1559 (method git-fetch)
1560 (uri (git-reference
1561 (url "https://github.com/eerimoq/asyncudp")
1562 (commit version)))
1563 (file-name (git-file-name name version))
1564 (sha256
1565 (base32 "1i2s8mmmggzq6vk5aldz3g85jnqfbgxfqi60wl58jpn2lbr8fqlr"))))
1566 (build-system pyproject-build-system)
1567 (native-inputs (list python-pytest python-setuptools))
1568 (home-page (git-reference-url (origin-uri source)))
1569 (synopsis "High level UDP sockets for asyncio")
1570 (description
1571 "This package provides a Python library offering high level UDP sockets
1572for asyncio. Import it alongside asyncio and use its API to send and receive
1573UDP packets.")
1574 (license license:expat)))
1575
1576(define-public python-authlib
1577 (package
1578 (name "python-authlib")
1579 (version "1.5.1")
1580 (source
1581 (origin
1582 (method url-fetch)
1583 (uri (pypi-uri "authlib" version))
1584 (sha256
1585 (base32 "0blpvz2v2r8yvsgm1yr3n61mhwxvh1b0kyf2rp0i4wv6n3n8bg2w"))))
1586 (build-system pyproject-build-system)
1587 ;; No tests target.
1588 (arguments (list #:tests? #false))
1589 (propagated-inputs
1590 (list python-cryptography
1591 python-django
1592 python-flask
1593 python-httpx
1594 python-requests
1595 python-sqlalchemy-2
1596 python-starlette
1597 python-werkzeug))
1598 (native-inputs (list python-pytest python-setuptools python-wheel))
1599 (home-page "https://pypi.org/project/Authlib/1")
1600 (synopsis "Build OAuth and OpenID Connect servers and clients")
1601 (description
1602 "This is a Python library for building OAuth and OpenID Connect servers
1603and clients.")
1604 (license license:bsd-3)))
1605
1606(define-public python-autobahn
1607 (package
1608 (name "python-autobahn")
1609 (version "25.11.1")
1610 (source
1611 (origin
1612 (method url-fetch)
1613 (uri (pypi-uri "autobahn" version))
1614 (sha256
1615 (base32
1616 "1w9wyyqzg1dil8jsjm08n2pnk6jws87scli932drhghcr2f2prjj"))))
1617 (build-system pyproject-build-system)
1618 (arguments
1619 (list
1620 ;; The tests fail to run:
1621 ;; https://github.com/crossbario/autobahn-python/issues/1117
1622 #:tests? #f
1623 #:phases #~(modify-phases %standard-phases
1624 (add-after 'unpack 'relax-zope-interface
1625 (lambda _
1626 ;; python-zope-interface is a world rebuild package
1627 ;; and our one-digit lower minor version seems to be
1628 ;; fine.
1629 (substitute* "setup.py"
1630 (("zope.interface>=5.2.0")
1631 "zope.interface>=5.1.0"))))
1632 (add-after 'unpack 'strip-xbr
1633 (lambda _
1634 ;; Strip new XBR feature which isn't available in Guix.
1635 (setenv "AUTOBAHN_STRIP_XBR" "1"))))))
1636 (native-inputs (list python-setuptools python-wheel))
1637 (propagated-inputs (list python-cbor2
1638 python-cryptography
1639 python-hyperlink
1640 python-msgpack
1641 python-py-ubjson
1642 python-twisted
1643 python-txaio
1644 python-ujson))
1645 (home-page "https://github.com/crossbario/autobahn-python/")
1646 (synopsis "Web Application Messaging Protocol implementation")
1647 (description "This package provides an implementation of the @dfn{Web Application
1648Messaging Protocol} (WAMP). WAMP connects components in distributed
1649applications using Publish and Subscribe (PubSub) and routed Remote Procedure
1650Calls (rRPC). It is ideal for distributed, multi-client and server applications
1651such as IoT applications or multi-user database-driven business applications.")
1652 (license license:expat)))
1653
1654(define-public python-aws-sam-translator
1655 (package
1656 (name "python-aws-sam-translator")
1657 (version "1.107.0")
1658 (source
1659 (origin
1660 (method git-fetch) ; no tests in PyPI release
1661 (uri (git-reference
1662 (url "https://github.com/aws/serverless-application-model")
1663 (commit (string-append "v" version))))
1664 (file-name (git-file-name name version))
1665 (sha256
1666 (base32 "0bx9ha9k6zx6gl1hsgm6cpq4xrfn604v2g1d5dh2d5zq0463gwfq"))))
1667 (build-system pyproject-build-system)
1668 (arguments
1669 (list
1670 #:test-flags
1671 #~(list "--numprocesses" (number->string (parallel-job-count))
1672 "--ignore=tests/bin/test_public_interface.py"
1673 "tests")
1674 #:phases
1675 #~(modify-phases %standard-phases
1676 (add-before 'check 'pre-check
1677 (lambda _
1678 (setenv "AWS_DEFAULT_REGION" "eu-west-3"))))))
1679 (native-inputs
1680 (list python-pytest
1681 python-pytest-rerunfailures
1682 python-pytest-xdist
1683 python-parameterized
1684 python-pyyaml
1685 python-setuptools))
1686 (propagated-inputs
1687 (list python-boto3
1688 python-jsonschema
1689 python-pydantic
1690 python-typing-extensions))
1691 (home-page "https://github.com/aws/serverless-application-model")
1692 (synopsis "Transform AWS SAM templates into AWS CloudFormation templates")
1693 (description
1694 "AWS SAM Translator is a library that transform @dfn{Serverless Application
1695Model} (SAM) templates into AWS CloudFormation templates.")
1696 (license license:asl2.0)))
1697
1698(define-public python-aws-xray-sdk
1699 (package
1700 (name "python-aws-xray-sdk")
1701 (version "2.14.0")
1702 (home-page "https://github.com/aws/aws-xray-sdk-python")
1703 (source (origin
1704 (method git-fetch)
1705 (uri (git-reference (url home-page) (commit version)))
1706 (file-name (git-file-name name version))
1707 (sha256
1708 (base32
1709 "0khm86218rfjmgfw0azk7gnq6y9gkj95i0i30wa5v2li1z4z8qxd"))))
1710 (build-system pyproject-build-system)
1711 (arguments
1712 (list
1713 #:test-flags
1714 '(list ;; Tries to connect to external network resources
1715 "--ignore=tests/ext/aiohttp/test_client.py"
1716 "--ignore=tests/ext/httplib/test_httplib.py"
1717 "--ignore=tests/ext/httpx"
1718 "--ignore=tests/ext/requests/test_requests.py"
1719 ;; TODO: How to configure Django for these tests?
1720 "--ignore=tests/ext/django"
1721 ;; These tests require packages not yet in Guix.
1722 "--ignore=tests/ext/aiobotocore/test_aiobotocore.py"
1723 "--ignore=tests/ext/aiohttp/test_middleware.py"
1724 "--ignore=tests/ext/pg8000/test_pg8000.py"
1725 "--ignore=tests/ext/psycopg2/test_psycopg2.py"
1726 "--ignore=tests/ext/pymysql/test_pymysql.py"
1727 "--ignore=tests/ext/pynamodb/test_pynamodb.py"
1728 "--ignore=tests/ext/sqlalchemy_core/test_postgres.py"
1729 "--ignore=tests/ext/sqlalchemy_core/test_dburl.py"
1730 "--ignore=tests/test_async_recorder.py"
1731 ;; FIXME: module 'sqlalchemy.orm' has no attribute 'DeclarativeBase'.
1732 "--ignore-glob=tests/ext/sqlalchemy*"
1733 "--ignore=tests/ext/flask_sqlalchemy/test_query.py"
1734 ;; FIXME: Why is this failing?
1735 "--ignore=tests/test_patcher.py"
1736 "--ignore=tests/test_lambda_context.py")
1737 #:phases
1738 '(modify-phases %standard-phases
1739 (add-before 'check 'pre-check
1740 (lambda _
1741 ;; Allow "import tests.utils" to work as expected.
1742 (setenv "PYTHONPATH" (getcwd)))))))
1743 (native-inputs
1744 (list ;; These are required for the test suite.
1745 python-aiohttp
1746 python-bottle
1747 python-flask
1748 python-flask-sqlalchemy
1749 python-httpx
1750 python-mock
1751 python-pymysql
1752 python-pytest
1753 python-pytest-asyncio-0.26
1754 python-pytest-benchmark
1755 python-setuptools
1756 python-sqlalchemy
1757 python-webtest))
1758 (propagated-inputs
1759 (list python-botocore
1760 python-jsonpickle
1761 python-requests
1762 python-wrapt))
1763 (synopsis "Profile applications on AWS X-Ray")
1764 (description
1765 "The AWS X-Ray SDK for Python enables Python developers to record and
1766emit information from within their applications to the AWS X-Ray service.")
1767 (license license:asl2.0)))
1768
1769(define-public python-awscrt
1770 (package
1771 (name "python-awscrt")
1772 (version "0.36.0")
1773 (source
1774 (origin
1775 (method url-fetch)
1776 (uri (pypi-uri "awscrt" version))
1777 (sha256
1778 (base32 "0jh6niq9kgv0canm11ad8zibywwirdfxg4bqyd8jhaiv3x39h8dd"))))
1779 (build-system pyproject-build-system)
1780 (arguments
1781 (list
1782 #:test-backend #~'unittest
1783 #:test-flags #~(list "discover" "--verbose")
1784 #:phases
1785 #~(modify-phases %standard-phases
1786 (add-after 'unpack 'disable-broken-tests
1787 (lambda _
1788 ;; Disable broken tests. These tests fail because they depend on
1789 ;; specific DNS configuration and/or AWS credentials, which isn't
1790 ;; available in this context.
1791 (substitute* "test/test_auth.py"
1792 (("def test_default_provider")
1793 "def _test_default_provider"))
1794 (substitute* "test/test_aiohttp_client.py"
1795 (("def test_h2_remote_end_stream_ordering")
1796 "def _test_h2_remote_end_stream_ordering")
1797 (("def test_cross_thread_http2_client")
1798 "def _test_cross_thread_http2_client")
1799 (("def test_h2_client")
1800 "def _test_h2_client")
1801 (("def test_h2_manual_write_exception")
1802 "def _test_h2_manual_write_exception"))
1803 (substitute* "test/test_http_client.py"
1804 (("def test_h2_client")
1805 "def _test_h2_client")
1806 (("def test_h2_remote_end_stream_ordering")
1807 "def _test_h2_remote_end_stream_ordering")
1808 (("def test_h2_manual_write_exception")
1809 "def _test_h2_manual_write_exception"))
1810 (substitute* "test/test_s3.py"
1811 (("def test_sanity")
1812 "def _test_sanity")
1813 (("def test_sanity_secure")
1814 "def _test_sanity_secure")
1815 (("def test_wait_shutdown")
1816 "def _test_wait_shutdown"))
1817 (substitute* "test/test_io.py"
1818 ;; This test seems specifically broken. It waits for a shutdown event
1819 ;; from a group of singletons that will never occur because several of
1820 ;; the singleton references are held beyond the lifetime of this test.
1821 (("def test_shutdown_complete_singleton")
1822 "def _test_shutdown_complete_singleton"))))
1823 (add-after 'unpack 'override-cert-bundle-location
1824 (lambda* (#:key inputs #:allow-other-keys)
1825 (let ((bundle (search-input-file inputs
1826 "/etc/ssl/certs/ca-certificates.crt")))
1827 (setenv "SSL_CERT_FILE" bundle)
1828 (substitute* "awscrt/io.py"
1829 (("( +)opt = TlsContextOptions\\(\\)" m indent)
1830 (string-append m "\n"
1831 indent "import os\n"
1832 indent "\
1833opt.override_default_trust_store_from_path(None, os.getenv('SSL_CERT_FILE')) if os.getenv('SSL_CERT_FILE') else None\n"))
1834 (("^( +)self\\.no_certificate_revocation = False" all indent)
1835 (string-append all "\n"
1836 indent "import os as _os\n"
1837 indent "_ca_file = _os.environ.get('SSL_CERT_FILE')\n"
1838 indent "if _ca_file:\n"
1839 indent " self.override_default_trust_store(_read_binary_file(_ca_file))\n")))
1840 (substitute* "test/appexit_http.py"
1841 (("( +)tls_ctx_opt = awscrt.io.TlsContextOptions.*" m indent)
1842 (string-append m indent
1843 "tls_ctx_opt.override_default_trust_store_from_path(None, '"
1844 bundle "')\n")))
1845 (substitute* "test/test_io.py"
1846 (("( +)opt = TlsContextOptions\\(\\).*" m indent)
1847 (string-append m indent
1848 "opt.override_default_trust_store_from_path(None, '"
1849 bundle "')\n"))))))
1850 (add-after 'unpack 'use-system-libraries
1851 (lambda _
1852 (setenv "AWS_CRT_BUILD_USE_SYSTEM_LIBCRYPTO" "1"))))))
1853 (inputs (list openssl))
1854 (native-inputs (list cmake-minimal
1855 nss-certs-for-test
1856 python-boto3
1857 python-setuptools
1858 python-websockets
1859 python-h2))
1860 (home-page "https://github.com/awslabs/aws-crt-python")
1861 (synopsis "Common runtime for AWS Python projects")
1862 (description
1863 "This package provides a common runtime for AWS Python projects.")
1864 (license license:asl2.0)))
1865
1866(define-public python-azure-common
1867 (package
1868 (name "python-azure-common")
1869 (version "1.1.28")
1870 (source
1871 (origin
1872 (method url-fetch)
1873 (uri (pypi-uri "azure-common" version ".zip"))
1874 (sha256
1875 (base32 "18q4cy1xl2zly3rk7a1sc14w932x59r8c9j4d8dnlsz32hrcvh2a"))))
1876 (build-system pyproject-build-system)
1877 (arguments
1878 (list #:tests? #f)) ;no tests in PyPI archive
1879 (propagated-inputs (list python-azure-nspkg))
1880 (native-inputs (list python-setuptools unzip))
1881 (home-page "https://github.com/Azure/azure-sdk-for-python")
1882 (synopsis "Microsoft Azure Client library for Python")
1883 (description "This package provides the Microsoft Azure Client library for
1884Python.")
1885 (license license:expat)))
1886
1887(define-public python-azure-core
1888 (package
1889 (name "python-azure-core")
1890 (version "1.32.0")
1891 (source
1892 (origin
1893 (method url-fetch)
1894 (uri (pypi-uri "azure_core" version))
1895 (sha256
1896 (base32 "1r9hqyqr5fxiiai0irr0n98gwgzj5f8y46vc1yci9bidddfw7cr2"))))
1897 (build-system pyproject-build-system)
1898 (arguments
1899 (list
1900 #:test-flags
1901 `(list ;; This fails because devtools_testutils doesn't exist.
1902 "--ignore=tests/test_connection_string_parsing.py"
1903 ;; These all need network access.
1904 "--ignore=samples"
1905 "--ignore=tests/async_tests/test_streaming_async.py"
1906 "--ignore=tests/test_streaming.py"
1907 "-m" "not asyncio and not live_test_only"
1908 "-k" ,(string-append
1909 "not test_decompress_plain_no_header"
1910 " and not test_compress_plain_no_header"
1911 " and not test_decompress_compressed_no_header"
1912 " and not test_requests_socket_timeout"))
1913 #:phases
1914 #~(modify-phases %standard-phases
1915 (add-before 'check 'add-test-pythonpath
1916 (lambda* (#:key tests? #:allow-other-keys)
1917 (when tests?
1918 (setenv "PYTHONPATH"
1919 (string-append
1920 (getcwd) "/tests/testserver_tests/coretestserver:"
1921 (getenv "GUIX_PYTHONPATH")))))))))
1922 (propagated-inputs
1923 (list python-aiohttp
1924 python-requests
1925 python-six
1926 python-typing-extensions))
1927 (native-inputs
1928 (list python-flask
1929 python-pytest-8
1930 python-pytest-aiohttp
1931 python-pytest-asyncio
1932 python-pytest-trio
1933 python-setuptools
1934 python-wheel))
1935 (home-page "https://github.com/Azure/azure-sdk-for-python")
1936 (synopsis "Microsoft Azure Core library for Python")
1937 (description "This package provides the Microsoft Azure Core library for
1938Python.")
1939 (license license:expat)))
1940
1941(define-public python-azure-nspkg
1942 (package
1943 (name "python-azure-nspkg")
1944 (version "3.0.2")
1945 (source
1946 (origin
1947 (method url-fetch)
1948 (uri (pypi-uri "azure-nspkg" version ".zip"))
1949 (sha256
1950 (base32
1951 "1l4xwdh0fcnvrv0mzig4g2kgqkfbsy64zjm1ggc6grk3mykcxlz7"))))
1952 (build-system pyproject-build-system)
1953 (arguments (list #:tests? #f)) ;no tests in package
1954 (native-inputs (list unzip python-setuptools))
1955 (home-page "https://github.com/Azure/azure-sdk-for-python")
1956 (synopsis "Azure namespace internals")
1957 (description
1958 "This package is an internal Azure namespace package.")
1959 (license license:expat)))
1960
1961(define-public python-azure-storage-blob
1962 (package
1963 (name "python-azure-storage-blob")
1964 (version "12.27.0")
1965 (source
1966 (origin
1967 (method url-fetch)
1968 (uri (pypi-uri "azure_storage_blob" version))
1969 (sha256
1970 (base32 "16nb17f6bi0k53qlxybwqxdld3nj742hmsk4qcq3jwka5b6y5s4r"))))
1971 (build-system pyproject-build-system)
1972 (arguments
1973 ;; XXX: devtools_testutils is not provided as a proper package on PyPI,
1974 ;; Git does not contains setup.py, setup.cfg or pyproject.toml which makes
1975 ;; it hard to package in Guix.
1976 ;; <https://raw.githubusercontent.com/Azure/azure-sdk-for-python/refs/
1977 ;; heads/main/tools/azure-sdk-tools/devtools_testutils/README.md>.
1978 (list #:tests? #f))
1979 (native-inputs
1980 (list python-setuptools))
1981 (propagated-inputs
1982 (list python-azure-core
1983 python-cryptography
1984 python-isodate
1985 python-typing-extensions))
1986 (home-page "https://github.com/Azure/azure-sdk-for-python/")
1987 (synopsis "Microsoft Azure Blob Storage client library for Python")
1988 (description "This package provides the Microsoft Azure Blob Storage
1989Client Library for Python.")
1990 (license license:expat)))
1991
1992(define-public python-azure-storage-file-datalake
1993 (package
1994 (name "python-azure-storage-file-datalake")
1995 (version "12.22.0")
1996 (source
1997 (origin
1998 (method url-fetch)
1999 (uri (pypi-uri "azure_storage_file_datalake" version))
2000 (sha256
2001 (base32 "0xxg94684b630p8jrz38sg7mdcwp1wa0p5di27mswyrjycshvvcs"))))
2002 (build-system pyproject-build-system)
2003 (arguments
2004 ;; XXX: devtools_testutils is not provided as a proper package on PyPI,
2005 ;; Git does not contains setup.py, setup.cfg or pyproject.toml which makes
2006 ;; it hard to package in Guix.
2007 ;; <https://raw.githubusercontent.com/Azure/azure-sdk-for-python/refs/
2008 ;; heads/main/tools/azure-sdk-tools/devtools_testutils/README.md>.
2009 (list #:tests? #f))
2010 (native-inputs
2011 (list python-setuptools))
2012 (propagated-inputs
2013 (list python-azure-core
2014 python-azure-storage-blob
2015 python-isodate
2016 python-typing-extensions))
2017 (home-page "https://github.com/Azure/azure-sdk-for-python")
2018 (synopsis "Microsoft Azure File DataLake Storage Client Library for Python")
2019 (description
2020 "This package provides the Microsoft Azure File @code{DataLake} Storage
2021Client Library for Python.")
2022 (license license:expat)))
2023
2024(define-public python-azure-storage-nspkg
2025 (package
2026 (name "python-azure-storage-nspkg")
2027 (version "3.1.0")
2028 (source
2029 (origin
2030 (method url-fetch)
2031 (uri (pypi-uri "azure-storage-nspkg" version))
2032 (sha256
2033 (base32 "049qcmgshz7dj9yaqma0fwcgbxwddgwyfcw4gmv45xfmaa3bwfvg"))))
2034 (build-system pyproject-build-system)
2035 (arguments
2036 (list #:tests? #f)) ;no tests in PyPI archive
2037 (native-inputs (list python-setuptools))
2038 (propagated-inputs (list python-azure-nspkg))
2039 (home-page "https://github.com/Azure/azure-storage-python")
2040 (synopsis "Microsoft Azure Storage Namespace package")
2041 (description
2042 "This project provides a client library in Python that makes it easy to
2043communicate with Microsoft Azure Storage services.")
2044 (license license:expat)))
2045
2046(define-public python-behave-web-api
2047 (package
2048 (name "python-behave-web-api")
2049 (version "2.3.0")
2050 (source
2051 (origin
2052 (method git-fetch)
2053 (uri (git-reference
2054 (url "https://github.com/jefersondaniel/behave-web-api")
2055 (commit (string-append "v" version))))
2056 (file-name (git-file-name name version))
2057 (sha256
2058 (base32 "1r8yx8gb5m599cpdqfvk6z9ax3qj26fpvczdr84z8jya0dxfch4p"))))
2059 (build-system pyproject-build-system)
2060 (native-inputs
2061 (list python-pytest
2062 python-setuptools))
2063 (propagated-inputs
2064 (list behave
2065 python-requests))
2066 (home-page "https://github.com/jefersondaniel/behave-web-api")
2067 (synopsis "Provides testing for JSON APIs with Behave for Python")
2068 (description "This package provides testing utility modules for testing
2069JSON APIs with Behave.")
2070 (license license:expat)))
2071
2072(define-public python-beren
2073 (package
2074 (name "python-beren")
2075 (version "0.7.0")
2076 (source
2077 (origin
2078 (method git-fetch)
2079 (uri (git-reference
2080 (url "https://github.com/teffalump/beren")
2081 (commit (string-append "v" version))))
2082 (file-name (git-file-name name version))
2083 (sha256
2084 (base32 "19nnvbjx2wypslqklqi0j9fiwypk1a5qwfw1jcabjw03awm1yyrx"))))
2085 (build-system pyproject-build-system)
2086 (arguments
2087 ;; The test tries to open a connection to a remote server.
2088 `(#:tests? #f))
2089 (native-inputs (list python-setuptools))
2090 (propagated-inputs (list python-apiron))
2091 (home-page "https://github.com/teffalump/beren")
2092 (synopsis "REST client for Orthanc DICOM servers")
2093 (description
2094 "@code{beren} provides a REST client for Orthanc, a DICOM server.")
2095 (license license:gpl3+)))
2096
2097(define-public python-betamax
2098 (package
2099 (name "python-betamax")
2100 (version "0.9.0")
2101 (source
2102 (origin
2103 (method url-fetch)
2104 (uri (pypi-uri "betamax" version))
2105 (sha256
2106 (base32
2107 "152zil1j4gl1whnldi08zwjr4z2bnlbd061kr3ipjs5wg4b6wcc2"))))
2108 (build-system pyproject-build-system)
2109 (arguments
2110 (list
2111 #:test-flags
2112 #~(list "-k" (string-join
2113 ;; Tests require network access to http://httpbin.org/get.
2114 (list "not test_creates_new_cassettes"
2115 "test_placeholders_work"
2116 "test_post_start_hook"
2117 "test_pre_stop_hook"
2118 "test_preplayback_hook"
2119 "test_prerecord_hook"
2120 "test_prerecord_ignoring_hook"
2121 "test_records_new_events_with_existing_cassette"
2122 "test_records_new_interaction"
2123 "test_records_new_interactions"
2124 "test_replaces_old_interactions"
2125 "test_replays_response_from_cassette"
2126 "test_requests_with_json_body"
2127 "test_saves_content_as_gzip"
2128 "test_unicode_is_saved_properly")
2129 " and not "))))
2130 (native-inputs
2131 (list nss-certs-for-test
2132 python-pytest
2133 python-setuptools))
2134 (propagated-inputs
2135 (list python-requests))
2136 (home-page "https://github.com/sigmavirus24/betamax")
2137 (synopsis "Record HTTP interactions with python-requests")
2138 (description
2139 "Betamax will record your test suite's HTTP interactions and replay them
2140during future tests. It is designed to work with python-requests.")
2141 (license license:expat)))
2142
2143(define-public python-betamax-matchers
2144 (package
2145 (name "python-betamax-matchers")
2146 (version "0.4.0")
2147 (source
2148 (origin
2149 (method git-fetch)
2150 (uri (git-reference
2151 (url "https://github.com/sigmavirus24/betamax_matchers")
2152 (commit version)))
2153 (file-name (git-file-name name version))
2154 (sha256
2155 (base32 "0lyg3r91hwfvavyi5k6sddcla37igigycfv1mx40c32byqwl6pq5"))))
2156 (build-system pyproject-build-system)
2157 (native-inputs (list python-pytest python-setuptools))
2158 (propagated-inputs (list python-betamax python-requests-toolbelt))
2159 (home-page "https://github.com/sigmavirus24/betamax_matchers")
2160 (synopsis "VCR imitation for python-requests")
2161 (description "@code{betamax-matchers} provides a set of Matchers for
2162Betamax.")
2163 (license license:asl2.0)))
2164
2165(define-public python-betamax-serializers
2166 (package
2167 (name "python-betamax-serializers")
2168 (version "0.2.1")
2169 (source
2170 (origin
2171 (method git-fetch)
2172 (uri (git-reference
2173 (url "https://gitlab.com/betamax/serializers")
2174 (commit version)))
2175 (file-name (git-file-name name version))
2176 (sha256
2177 (base32 "1p2l5w3vwvjacs2ndahgcjq55qb53i37p8mz1zh85pjxyszdyw2l"))))
2178 (build-system pyproject-build-system)
2179 (arguments (list #:tests? #f)) ; No tests.
2180 (native-inputs (list python-setuptools))
2181 (propagated-inputs (list python-betamax python-pyyaml))
2182 (synopsis "Set of third-party serializers for Betamax")
2183 (description
2184 "Betamax-Serializers are an experimental set of Serializers for Betamax
2185that may possibly end up in the main package.")
2186 (home-page "https://gitlab.com/betamax/serializers")
2187 (license license:asl2.0)))
2188
2189(define-public python-blacksheep
2190 (package
2191 (name "python-blacksheep")
2192 (version "2.6.3")
2193 (source
2194 (origin
2195 (method git-fetch)
2196 (uri (git-reference
2197 (url "https://github.com/Neoteroi/BlackSheep")
2198 (commit (string-append "v" version))))
2199 (file-name (git-file-name name version))
2200 (sha256
2201 (base32 "1k6yqsqnh6nnhi8z5v2yqpxs7qsk35zwd7gcr7cdh825f2vrl7js"))))
2202 (build-system pyproject-build-system)
2203 (arguments
2204 (list
2205 ;; tests: 1821 passed
2206 ;;
2207 ;; Run all unit tests, but do not run integration tests from `itests`
2208 ;; directory.
2209 #:test-flags
2210 #~(list "tests")
2211 #:phases
2212 #~(modify-phases %standard-phases
2213 (add-before 'build 'cythonize
2214 (lambda _
2215 (with-directory-excursion "blacksheep"
2216 (for-each (lambda (file)
2217 (invoke "cython" "-3" file "-I" "."))
2218 (find-files "." ".*\\.pyx$"))))))))
2219 (native-inputs
2220 (list nss-certs-for-test
2221 python-cython
2222 python-defusedxml
2223 python-flask
2224 python-jinja2
2225 python-pydantic
2226 python-pyjwt
2227 python-pytest
2228 python-pytest-asyncio
2229 python-setuptools
2230 python-starlette))
2231 (propagated-inputs
2232 (list python-certifi
2233 python-essentials
2234 python-essentials-openapi
2235 python-guardpost
2236 python-httptools
2237 python-rodi
2238 python-itsdangerous))
2239 (home-page "https://github.com/Neoteroi/BlackSheep")
2240 (synopsis "Asynchronous framework to build event based web applications")
2241 (description
2242 "BlackSheep is a lightweight, asynchronous, event driven Web framework.
2243
2244The framework offers
2245@itemize
2246@item A rich code API, based on dependency injection and inspired by Flask and
2247ASP.NET Core.
2248@item A typing-friendly codebase, which enables a comfortable development
2249experience thanks to hints when coding with IDEs.
2250@item Built-in generation of OpenAPI Documentation, supporting version 3, YAML,
2251and JSON.
2252@item A cross-platform framework, using the most modern versions of Python.
2253@item Good performance.
2254@end itemize")
2255 (license license:expat)))
2256
2257(define-public python-bleach
2258 (package
2259 (name "python-bleach")
2260 (version "6.3.0")
2261 (source
2262 (origin
2263 (method git-fetch)
2264 (uri (git-reference
2265 (url "https://github.com/mozilla/bleach")
2266 (commit (string-append "v" version))))
2267 (file-name (git-file-name name version))
2268 (sha256
2269 (base32 "02abk9ixn010sqpbdsd7nxms0gv4prwv6d3nplb8giq85lpn1kkb"))
2270 (snippet
2271 #~(begin
2272 (use-modules (guix build utils))
2273 (substitute* (find-files "." "\\.py$")
2274 (("bleach\\._vendor\\.html5lib") "html5lib"))
2275 (delete-file-recursively "bleach/_vendor/html5lib")))))
2276 (build-system pyproject-build-system)
2277 (arguments
2278 (list
2279 ;; tests: 448 passed, 1 deselected, 3 xfailed
2280 #:test-flags
2281 #~(list (string-append "--deselect=tests/test_clean.py::"
2282 "test_self_closing_tags_self_close[wbr]"))
2283 #:phases
2284 #~(modify-phases %standard-phases
2285 (add-after 'unpack 'relax-requirements
2286 (lambda _
2287 ;; "tinycss2>=1.1.0,<1.5"
2288 ;; The 'sanity-check of python-nbclassic fails without this.
2289 (substitute* "setup.py"
2290 (("\"tinycss2.*") "")))))))
2291 (native-inputs
2292 (list python-pytest
2293 python-setuptools))
2294 (propagated-inputs
2295 (list python-html5lib
2296 python-tinycss2
2297 python-webencodings))
2298 (home-page "https://github.com/mozilla/bleach")
2299 (synopsis "Whitelist-based HTML-sanitizing tool")
2300 (description "Bleach is an easy whitelist-based HTML-sanitizing tool.")
2301 (license license:asl2.0)))
2302
2303(define-public python-bottle
2304 (package
2305 (name "python-bottle")
2306 (version "0.13.4")
2307 (source
2308 (origin
2309 (method url-fetch)
2310 (uri (pypi-uri "bottle" version))
2311 (sha256
2312 (base32 "0irz5i3h73pqz0ssgp3yk12zx33q7lrlh8p0in9jgchjgqr7hzkq"))))
2313 (build-system pyproject-build-system)
2314 (native-inputs (list python-pytest python-setuptools))
2315 (home-page "https://bottlepy.org/")
2316 (synopsis "WSGI framework for small web-applications")
2317 (description "@code{python-bottle} is a WSGI framework for small web-applications.")
2318 (license license:expat)))
2319
2320(define-public python-branca
2321 (package
2322 (name "python-branca")
2323 (version "0.7.2")
2324 (source
2325 (origin
2326 (method git-fetch) ; no tests in PyPI
2327 (uri (git-reference
2328 (url "https://github.com/python-visualization/branca")
2329 (commit (string-append "v" version))))
2330 (file-name (git-file-name name version))
2331 (sha256
2332 (base32 "1vs94nqa7r6iwm8mj3m29hg090gmgz4ywnayxh8qiz9ij8jv96wa"))))
2333 (build-system pyproject-build-system)
2334 (arguments
2335 ;; This file requires Selenium.
2336 (list #:test-flags #~(list "--ignore" "tests/test_iframe.py"
2337 ;; This test passes but is very slow.
2338 "-k" "not test_color_brewer_extendability")))
2339 (propagated-inputs (list python-jinja2))
2340 (native-inputs
2341 (list python-numpy
2342 python-pytest
2343 python-setuptools
2344 python-setuptools-scm
2345 python-wheel))
2346 (home-page "https://github.com/python-visualization/branca")
2347 (synopsis "Generate complex HTML+JS pages with Python")
2348 (description "This library is a spinoff from @code{folium} that would host
2349the non-map-specific features. It can be used to generate HTML + JS.")
2350 (license license:expat)))
2351
2352(define-public python-btrees
2353 (package
2354 (name "python-btrees")
2355 (version "6.1")
2356 (source
2357 (origin
2358 (method git-fetch)
2359 (uri (git-reference
2360 (url "https://github.com/zopefoundation/BTrees")
2361 (commit version)))
2362 (file-name (git-file-name name version))
2363 (sha256
2364 (base32 "0vcibmd725ddgsl5yzmi8d403day3796h82xlq84w91xbdrbd5d5"))))
2365 (build-system pyproject-build-system)
2366 (arguments
2367 (list
2368 #:phases
2369 #~(modify-phases %standard-phases
2370 (replace 'check
2371 (lambda* (#:key tests? #:allow-other-keys)
2372 (if tests?
2373 (invoke "zope-testrunner" "--test-path=src")
2374 (format #t "test suite not run~%")))))))
2375 (propagated-inputs (list python-persistent python-zope-interface))
2376 (native-inputs (list python-persistent python-transaction
2377 python-zope-testrunner python-setuptools))
2378 (home-page "https://github.com/zopefoundation/BTrees")
2379 (synopsis "Scalable persistent object containers")
2380 (description
2381 "This package contains a set of persistent object containers built around a
2382modified BTree data structure. The trees are optimized for use inside ZODB's
2383\"optimistic concurrency\" paradigm, and include explicit resolution of
2384conflicts detected by that mechanism.")
2385 (license license:zpl2.1)))
2386
2387(define-public python-cachecontrol
2388 (package
2389 (name "python-cachecontrol")
2390 (version "0.14.1")
2391 (source
2392 (origin
2393 (method git-fetch)
2394 (uri (git-reference
2395 (url "https://github.com/ionrock/cachecontrol")
2396 (commit (string-append "v" version))))
2397 (file-name (git-file-name name version))
2398 (sha256
2399 (base32
2400 "07ifs4dhahhsgj4vxgfl5ymnmb4my5l2wb8jiinn6fncszcfmr59"))))
2401 (build-system pyproject-build-system)
2402 (propagated-inputs
2403 (list python-filelock python-msgpack python-requests))
2404 (native-inputs
2405 (list python-cherrypy python-flit-core python-pytest))
2406 (home-page "https://github.com/ionrock/cachecontrol")
2407 (synopsis "The httplib2 caching algorithms for use with requests")
2408 (description "CacheControl is a port of the caching algorithms in
2409@code{httplib2} for use with @code{requests} session objects.")
2410 (license license:asl2.0)))
2411
2412(define-public python-canvasapi
2413 (package
2414 (name "python-canvasapi")
2415 (version "3.4.0")
2416 (source (origin
2417 (method git-fetch)
2418 (uri (git-reference
2419 (url "https://github.com/ucfopen/canvasapi")
2420 (commit (string-append "v" version))))
2421 (file-name (git-file-name name version))
2422 (sha256
2423 (base32
2424 "017gashyd4avxzlz3imwn18vmfd0cjyhbm063isra3d2wk3ivrkx"))))
2425 (build-system pyproject-build-system)
2426 (propagated-inputs (list python-arrow python-pytz python-requests))
2427 (native-inputs (list python-pytest
2428 python-requests-mock
2429 python-setuptools
2430 python-urllib3))
2431 (home-page "https://github.com/ucfopen/canvasapi")
2432 (synopsis "API wrapper for the Canvas LMS")
2433 (description
2434 "CanvasAPI is a Python library for accessing Instructure’s Canvas LMS API.
2435The library enables developers to programmatically manage Canvas courses,
2436users, gradebooks, and more.")
2437 (license license:expat)))
2438
2439(define-public python-cbor2
2440 (package
2441 (name "python-cbor2")
2442 (version "5.4.2.post1")
2443 (source
2444 (origin
2445 (method url-fetch)
2446 (uri (pypi-uri "cbor2" version))
2447 (sha256
2448 (base32 "15y78xcc3zkmvj1mdzz8gyhf3apbl91073kwhzbjk5abc1civwlw"))))
2449 (build-system pyproject-build-system)
2450 (native-inputs
2451 (list python-pytest python-setuptools python-setuptools-scm))
2452 (home-page "https://github.com/agronholm/cbor2")
2453 (synopsis "Concise Binary Object Representation (CBOR) (de)serializer")
2454 (description "This Python library provides encoding and decoding for the
2455Concise Binary Object
2456Representation (CBOR) (@url{https://www.rfc-editor.org/rfc/rfc8949.html, RFC
24578949}) serialization format. The specification is fully compatible with the
2458original RFC 7049. Among its features are:
2459@itemize
2460@item Simple API like the @code{json} or @code{pickle} modules.
2461@item Support many CBOR tags with stdlib objects.
2462@item Generic tag decoding.
2463@item Shared value references including cyclic references.
2464@item String references compact encoding with repeated strings replaced with
2465indices.
2466@item Optional C module backend tested on big- and little-endian architectures.
2467@item Extensible tagged value handling using tag_hook and object_hook on
2468decode and default on encode.
2469@end itemize")
2470 (license license:expat)))
2471
2472(define-public python-cfn-lint
2473 (package
2474 (name "python-cfn-lint")
2475 (version "1.38.1")
2476 (source
2477 (origin
2478 (method git-fetch)
2479 (uri (git-reference
2480 (url "https://github.com/aws-cloudformation/cfn-lint")
2481 (commit (string-append "v" version))))
2482 (file-name (git-file-name name version))
2483 (sha256
2484 (base32 "1crwx0cp50h83xz8lc4ny504mx4dadpk80ln539syd4jd78qplgy"))))
2485 (build-system pyproject-build-system)
2486 (arguments
2487 (list
2488 ;; tests: 2136 passed, 11 deselected, 1 warning
2489 #:test-flags
2490 #~(list "--ignore=test/integration/"
2491 "-k" (string-join
2492 ;; Tests failing on doctest or comparing diff.
2493 (list "not test_build_graph"
2494 "test_good_template"
2495 "test_success_run"
2496 "test_update_docs"
2497 ;; ImportError: Missing optional dependencies sarif
2498 "test_sarif_formatter")
2499 " and not "))
2500 #:phases
2501 #~(modify-phases %standard-phases
2502 (add-after 'unpack 'remove-deprecated
2503 (lambda _
2504 (substitute* "src/cfnlint/data/AdditionalSpecs/LmbdRuntimeLifecycle.json"
2505 (("deprecated\": \"2025")
2506 "deprecated\": \"2125")))))))
2507 (native-inputs
2508 (list python-defusedxml
2509 python-pydot
2510 python-pytest
2511 python-setuptools))
2512 (propagated-inputs
2513 (list python-aws-sam-translator
2514 python-jsonpatch
2515 python-networkx
2516 python-pyyaml
2517 python-regex
2518 python-sympy
2519 python-typing-extensions
2520 ;; [optional]
2521 python-junit-xml))
2522 (home-page "https://github.com/aws-cloudformation/cfn-lint")
2523 (synopsis "Validate CloudFormation templates")
2524 (description
2525 "This package lets you validate CloudFormation YAML/JSON templates against
2526the CloudFormation spec and additional checks. Includes checking valid values
2527for resource properties and best practices.")
2528 (license license:expat)))
2529
2530(define-public python-cheroot
2531 (package
2532 (name "python-cheroot")
2533 (version "11.1.2")
2534 (source
2535 (origin
2536 (method git-fetch)
2537 (uri (git-reference
2538 (url "https://github.com/cherrypy/cheroot")
2539 (commit (string-append "v" version))))
2540 (file-name (git-file-name name version))
2541 (sha256
2542 (base32 "02rhci01m5fcn8mqpvq3c35rs4n28gxlfvfw2if2f85rgwrji8y8"))
2543 ;; TODO: Remove this patch on next release.
2544 (patches (search-patches "python-cheroot-openssl-test.patch"))))
2545 (build-system pyproject-build-system)
2546 (arguments
2547 (list
2548 ;; tests: 150 passed, 3 xfailed, 7 warnings
2549 #:test-flags
2550 ;; To prevent dependency on python-pypytools which depends on python-py
2551 ;; both marked as deprecated by maintainers, see:
2552 ;; <https://codeberg.org/guix/guix/issues/7475>.
2553 #~(list "--ignore=cheroot/test/test_server.py")
2554 #:phases
2555 #~(modify-phases %standard-phases
2556 (add-after 'unpack 'fix-pytest-config
2557 (lambda _
2558 ;; See: <https://codeberg.org/guix/guix/issues/7476>.
2559 (delete-file "pytest.ini"))))))
2560 (native-inputs
2561 (list python-portend
2562 python-pyopenssl
2563 python-pytest
2564 python-pytest-mock
2565 python-requests
2566 python-requests-toolbelt
2567 python-setuptools
2568 python-setuptools-scm
2569 python-trustme))
2570 (propagated-inputs
2571 (list python-jaraco-functools
2572 python-more-itertools))
2573 (home-page "https://cheroot.cherrypy.dev")
2574 (synopsis "Highly-optimized, pure-python HTTP server")
2575 (description
2576 "Cheroot is a high-performance, pure-Python HTTP server.")
2577 (license license:bsd-3)))
2578
2579(define-public python-cherrypy
2580 (package
2581 (name "python-cherrypy")
2582 (properties '((commit . "1f75bc9eed8e0e385f64f368bd69f58d96fb8c2b")
2583 (revision . "0")))
2584 (version (git-version "18.10.0"
2585 (assoc-ref properties 'revision)
2586 (assoc-ref properties 'commit)))
2587 (source
2588 (origin
2589 (method git-fetch)
2590 (uri (git-reference
2591 (url "https://github.com/cherrypy/cherrypy")
2592 (commit (assoc-ref properties 'commit))))
2593 (file-name (git-file-name name version))
2594 (sha256
2595 (base32 "1l01a4sbfm42s5xp6ngphgqf0yb65ksqbsb27kznvybblyaxfa9p"))))
2596 (build-system pyproject-build-system)
2597 (arguments
2598 (list
2599 ;; tests: 288 passed, 9 skipped, 1 xfailed, 2 xpassed, 15 warnings
2600 #:phases
2601 #~(modify-phases %standard-phases
2602 (add-after 'unpack 'fix-pytest-config
2603 (lambda _
2604 ;; See: <https://codeberg.org/guix/guix/issues/7476>.
2605 (delete-file "pytest.ini")))
2606 (add-after 'unpack 'patch-pyproject
2607 (lambda _
2608 (substitute* "pyproject.toml"
2609 (("\"cherrypy.scaffold\",")
2610 (string-join
2611 (list "\"cherrypy.scaffold\""
2612 "\"cherrypy._private_api\""
2613 "\"cherrypy._private_api.compat\",")
2614 ",\n "))))))))
2615 (propagated-inputs
2616 (list python-cheroot
2617 python-filelock
2618 python-jaraco-collections
2619 python-more-itertools
2620 python-portend))
2621 (native-inputs
2622 (list python-path
2623 python-pytest
2624 python-pytest-services
2625 python-requests
2626 python-requests-toolbelt
2627 python-setuptools
2628 python-setuptools-scm))
2629 (home-page "https://www.cherrypy.dev")
2630 (synopsis "Object-Oriented HTTP framework")
2631 (description
2632 "CherryPy is a pythonic, object-oriented web framework. It helps in
2633building web applications in the same way any other object-oriented Python
2634program would be built.")
2635 (license license:bsd-3)))
2636
2637(define-public python-cloud-init
2638 (package
2639 (name "python-cloud-init")
2640 (version "24.2")
2641 (source
2642 (origin
2643 (method git-fetch)
2644 (uri (git-reference
2645 (url "https://github.com/canonical/cloud-init")
2646 (commit version)))
2647 (file-name (git-file-name name version))
2648 (sha256
2649 (base32 "18872z2y9wkh558y1bx5r0rksb4i584jbc8z4g8marwawhwxq506"))))
2650 (build-system pyproject-build-system)
2651 (arguments
2652 (list
2653 #:test-flags
2654 '(list
2655 ;; This requires usermod
2656 "--ignore=tests/unittests/distros/test_create_users.py"
2657 ;; This writes to /var
2658 "--ignore=tests/unittests/net/test_dhcp.py"
2659 "-k"
2660 (string-append
2661 ;; This test messes with PATH, so it cannot find mkdir
2662 "not test_path_env_gets_set_from_main"
2663 " and not test_apt_configure_sources_list_"
2664 ;; These all fail because /bin/sh doesn't exist. We cannot patch
2665 ;; this because the generated scripts must use /bin/sh as they are
2666 ;; supposed to be run on minimal systems.
2667 " and not test_handler_creates_and_runs_bootcmd_script_with_instance_id"
2668 " and not test_handler_runs_bootcmd_script_with_error"
2669 " and not test_subp_combined_stderr_stdout"
2670 " and not test_handle_part"))
2671 #:phases
2672 #~(modify-phases %standard-phases
2673 (add-after 'unpack 'patch-references
2674 (lambda _
2675 (substitute* "tests/unittests/cmd/test_clean.py"
2676 (("#!/bin/sh") (string-append "#!" (which "sh"))))))
2677 (add-after 'install 'move-files
2678 (lambda* (#:key inputs outputs #:allow-other-keys)
2679 (for-each (lambda (dir)
2680 (let ((source (string-append (site-packages inputs outputs) "/" dir))
2681 (target (string-append #$output "/" (basename dir))))
2682 (copy-recursively source target)
2683 (delete-file-recursively source)))
2684 (list "etc" "lib" "usr/lib" "usr/share")))))))
2685 (propagated-inputs
2686 (list python-configobj
2687 python-jinja2
2688 python-jsonpatch
2689 python-jsonschema
2690 python-netifaces
2691 python-oauthlib
2692 python-pyserial
2693 python-pyyaml
2694 python-responses))
2695 (native-inputs
2696 (list procps ;for ps when running tests
2697 python-pytest
2698 python-pytest-mock
2699 python-passlib
2700 python-setuptools
2701 python-wheel))
2702 (home-page "https://github.com/canonical/cloud-init")
2703 (synopsis "Cloud instance initialization tools")
2704 (description
2705 "Cloud-init is the multi-distribution method for cross-platform cloud
2706instance initialization. It is supported across all major public cloud
2707providers, provisioning systems for private cloud infrastructure, and
2708bare-metal installations.")
2709 ;; Either license can be chosen
2710 (license (list license:asl2.0 license:gpl3))))
2711
2712(define-public python-cloudpathlib
2713 (package
2714 (name "python-cloudpathlib")
2715 (version "0.23.0")
2716 (source
2717 (origin
2718 (method git-fetch)
2719 (uri (git-reference
2720 (url "https://github.com/drivendataorg/cloudpathlib")
2721 (commit (string-append "v" version))))
2722 (file-name (git-file-name name version))
2723 (sha256
2724 (base32 "1dqwml269lpz51drgg3s27sqmvwa1vldw2rj34ssnqppcmc5h5lm"))))
2725 (build-system pyproject-build-system)
2726 (arguments
2727 (list
2728 ;; tests: 977 passed, 15 skipped, 8642 warnings
2729 #:test-flags
2730 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
2731 ;; TODO: Package azure-identity (required for this file)
2732 "--ignore=tests/test_azure_specific.py"
2733 ;; TypeError: Retry.__init__() got an unexpected keyword
2734 ;; argument 'timeout'
2735 "--deselect=tests/test_gs_specific.py::test_timeout_and_retry")))
2736 (native-inputs
2737 (list ;; python-azure-identity
2738 python-dotenv
2739 python-flit-core
2740 python-psutil
2741 python-pydantic
2742 python-pytest
2743 python-pytest-cases
2744 python-pytest-reportlog
2745 python-pytest-xdist
2746 python-shortuuid
2747 python-tenacity))
2748 (propagated-inputs
2749 (list python-azure-storage-blob
2750 python-azure-storage-file-datalake
2751 python-boto3
2752 python-google-cloud-storage
2753 python-typing-extensions))
2754 (home-page "https://github.com/drivendataorg/cloudpathlib")
2755 (synopsis "Pathlib-style classes for cloud storage services")
2756 (description
2757 "This package provides a Python library with classes that mimic
2758@code{pathlib.Path}'s interface for URIs from different cloud storage
2759services.")
2760 (license license:expat)))
2761
2762(define-public python-cloudscraper
2763 (package
2764 (name "python-cloudscraper")
2765 (version "3.0.0")
2766 (source
2767 (origin
2768 (method git-fetch)
2769 (uri (git-reference
2770 (url "https://github.com/VeNoMouS/cloudscraper")
2771 (commit version)))
2772 (file-name (git-file-name name version))
2773 (sha256
2774 (base32 "13w0ywz2y8x0zwpwzrnn46wyq307hfpdcz49zy33yyf46rq9n10n"))
2775 (modules '((guix build utils)))
2776 (snippet
2777 '(with-directory-excursion "cloudscraper"
2778 (for-each delete-file
2779 '("captcha/9kw.py" "captcha/anticaptcha.py"))
2780 (substitute* "__init__.py"
2781 ;; Perhaps it's a joke, but don't promote proprietary software.
2782 (("([Th]is feature is not available) in the .*'" _ prefix)
2783 (string-append prefix ".'")))))))
2784 (build-system pyproject-build-system)
2785 (arguments
2786 (list
2787 #:test-flags
2788 #~(list "-k" "not test_403_handling")
2789 #:phases
2790 #~(modify-phases %standard-phases
2791 (add-after 'unpack 'relax-requirements
2792 (lambda _
2793 ;; XXX: Relax brotli dependency.
2794 (substitute* "pyproject.toml"
2795 (("\"brotli>=.*\"")
2796 "\"brotli\""))
2797 ;; XXX: Dependencies, that have not yet been packaged
2798 ;; and cause an import error when included.
2799 (delete-file "cloudscraper/interpreters/v8.py")))
2800 (add-after 'unpack 'fix-references
2801 (lambda _
2802 (substitute* "cloudscraper/interpreters/nodejs.py"
2803 (("'node'")
2804 (string-append "'" (which "node") "'"))))))))
2805 (inputs (list node-lts))
2806 (propagated-inputs
2807 (list python-pycryptodome
2808 python-brotli
2809 python-js2py
2810 python-polling2
2811 python-requests
2812 python-requests-toolbelt
2813 python-responses
2814 python-pyparsing
2815 python-websocket-client))
2816 (native-inputs (list python-pytest python-setuptools))
2817 (home-page "https://github.com/venomous/cloudscraper")
2818 (synopsis "Cloudflare anti-bot bypass")
2819 (description
2820 "This module acts as a webbrowser solving Cloudflare's Javascript
2821challenges.")
2822 (license license:expat)))
2823
2824(define-public python-conda-package-handling
2825 (package
2826 (name "python-conda-package-handling")
2827 (version "2.4.0")
2828 (source
2829 (origin
2830 (method git-fetch)
2831 (uri (git-reference
2832 (url "https://github.com/conda/conda-package-handling/")
2833 (commit version)))
2834 (file-name (git-file-name name version))
2835 (sha256
2836 (base32 "1l2zbbwlxp9azpshixvxnb9354xajxkn88934grpwl70blgb3yq2"))))
2837 (build-system pyproject-build-system)
2838 (native-inputs
2839 (list python-bottle
2840 python-mock
2841 python-pytest-8
2842 python-pytest-mock
2843 python-setuptools))
2844 (propagated-inputs
2845 (list python-conda-package-streaming))
2846 (home-page "https://conda.io")
2847 (synopsis "Create and extract conda packages of various formats")
2848 (description
2849 "This library is an abstraction of Conda package handling and a tool for
2850extracting, creating, and converting between formats.")
2851 (license license:bsd-3)))
2852
2853(define-public python-conda-package-streaming
2854 (package
2855 (name "python-conda-package-streaming")
2856 (version "0.12.0")
2857 (source
2858 (origin
2859 (method url-fetch)
2860 (uri (pypi-uri "conda_package_streaming" version))
2861 (sha256
2862 (base32 "1fcyx83swx1wfndrl0vdk8c2pixshn54gkjy7xchkra13kw2yas2"))))
2863 (build-system pyproject-build-system)
2864 (arguments
2865 ;; TODO: Cycles with python-conda-package-handling, implement bootstrap.
2866 (list #:tests? #f))
2867 (native-inputs
2868 (list python-flit-core))
2869 (propagated-inputs
2870 (list python-requests
2871 python-zstandard))
2872 (home-page "https://conda.github.io/conda-package-streaming/")
2873 (synopsis "Conda formats (@code{.conda}, @code{.tar.bz2}) reader library")
2874 (description
2875 "This package provides an efficient library to read from new and old format
2876@code{.conda} and @code{.tar.bz2} conda packages.")
2877 (license license:bsd-3)))
2878
2879(define-public python-css-html-js-minify
2880 (let ((commit "8f72452960e41bc5476e50d96481f633eff72750")
2881 (revision "0"))
2882 (package
2883 (name "python-css-html-js-minify")
2884 (version (git-version "2.5.5" revision commit))
2885 (source
2886 (origin
2887 (method git-fetch)
2888 (uri (git-reference
2889 (url "https://github.com/juancarlospaco/css-html-js-minify")
2890 (commit commit)))
2891 (file-name (git-file-name name version))
2892 (sha256
2893 (base32 "1lkx03720zk6q16w3d9r3l5kryikd1cmzwrcjzsjxwrq4zfh6vdf"))))
2894 (build-system pyproject-build-system)
2895 (arguments
2896 (list
2897 #:phases
2898 #~(modify-phases %standard-phases
2899 (add-after 'unpack 'relax-requirements
2900 (lambda _
2901 (substitute* "setup.cfg"
2902 (("^tests_require.*") "")))))))
2903 (native-inputs (list python-pytest python-setuptools))
2904 (home-page "https://github.com/juancarlospaco/css-html-js-minify")
2905 (synopsis "CSS/HTML/JS minifier")
2906 (description
2907 "This package provides a single-file minifier for CSS, HTML, and JavaScript.")
2908 ;; XXX: The README just says "GNU GPL and GNU LGPL and MIT". From
2909 ;; <https://github.com/juancarlospaco/css-html-js-minify/issues/9> it
2910 ;; looks like the user can choose a license.
2911 (license (list license:gpl3+ license:lgpl3+ license:expat)))))
2912
2913(define-public python-css-parser
2914 (package
2915 (name "python-css-parser")
2916 (version "1.1.1")
2917 (source
2918 (origin
2919 (method git-fetch)
2920 (uri (git-reference
2921 (url "https://github.com/ebook-utils/css-parser")
2922 (commit (string-append "v" version))))
2923 (file-name (git-file-name name version))
2924 (sha256
2925 (base32 "0514g5a0r972lm883b3aja3b8jsxywmhxn4xpx7ksjpqmx38wga4"))))
2926 (build-system pyproject-build-system)
2927 (native-inputs
2928 (list python-pytest
2929 python-setuptools))
2930 (home-page "https://github.com/ebook-utils/css-parser")
2931 (synopsis "CSS related utilities for Python")
2932 (description
2933 "Css-parser is a Python package for parsing and building CSS
2934Cascading Style Sheets. Currently it provides a DOM only and no rendering
2935options.
2936
2937It's a fork of cssutils 1.0.2, updated and modified for parsing ebooks, due to
2938cssutils not receiving updates as of 1.0.2.")
2939 (license license:lgpl3+)))
2940
2941(define-public python-cssmin
2942 (package
2943 (name "python-cssmin")
2944 (version "0.2.0")
2945 (source
2946 (origin
2947 (method git-fetch)
2948 (uri (git-reference
2949 (url "https://github.com/zacharyvoase/cssmin")
2950 (commit (string-append "v" version))))
2951 (file-name (git-file-name name version))
2952 (sha256
2953 (base32 "04bzpal6j26pjjjf3p7iq6g2wcr61j4g0ygqz6h847h4hsyah9qg"))))
2954 (build-system pyproject-build-system)
2955 (arguments (list #:tests? #f)) ; No tests.
2956 (native-inputs (list python-setuptools))
2957 (home-page "https://github.com/zacharyvoase/cssmin")
2958 (synopsis "Python port of the YUI CSS Compressor")
2959 (description "Python port of the YUI CSS Compressor.")
2960 (license (list license:expat license:bsd-3))))
2961
2962(define-public python-cssselect
2963 (package
2964 (name "python-cssselect")
2965 (version "1.4.0")
2966 (source
2967 (origin
2968 (method git-fetch)
2969 (uri (git-reference
2970 (url "https://github.com/scrapy/cssselect")
2971 (commit (string-append "v" version))))
2972 (file-name (git-file-name name version))
2973 (sha256
2974 (base32 "110l98x1mz1mxcal89xscsg28vg624sc0y6b5x1n2clwa19q5g4y"))))
2975 (build-system pyproject-build-system)
2976 (native-inputs
2977 (list python-hatchling python-lxml python-pytest))
2978 (home-page "https://github.com/scrapy/cssselect")
2979 (synopsis "CSS3 selector parser and translator to XPath 1.0")
2980 (description
2981 "Cssselect ia a Python module that parses CSS3 Selectors and translates
2982them to XPath 1.0 expressions. Such expressions can be used in lxml or
2983another XPath engine to find the matching elements in an XML or HTML document.")
2984 (license license:bsd-3)))
2985
2986(define-public python-cssselect2
2987 (package
2988 (name "python-cssselect2")
2989 (version "0.9.0")
2990 (source
2991 (origin
2992 (method git-fetch)
2993 (uri (git-reference
2994 (url "https://github.com/Kozea/cssselect2")
2995 (commit version)))
2996 (file-name (git-file-name name version))
2997 (sha256
2998 (base32 "1drvb83siq9s6dygyhab6kzk2v2ib6cv51ls42p4jrxs9q8cdiw0"))))
2999 (build-system pyproject-build-system)
3000 (propagated-inputs
3001 (list python-tinycss2))
3002 (native-inputs
3003 (list python-flit-core
3004 python-pytest))
3005 (home-page "https://doc.courtbouillon.org/cssselect2/stable/")
3006 (synopsis "CSS selectors for Python ElementTree")
3007 (description "@code{cssselect2} is a straightforward implementation of
3008CSS3 Selectors for markup documents (HTML, XML, etc.) that can be read by
3009ElementTree-like parsers (including cElementTree, lxml, html5lib, etc.).
3010
3011Unlike the Python package @code{cssselect}, it does not translate selectors to
3012XPath and therefore does not have all the correctness corner cases that are
3013hard or impossible to fix in cssselect.")
3014 (license license:bsd-3)))
3015
3016(define-public python-cssutils
3017 (package
3018 (name "python-cssutils")
3019 (version "2.15.0")
3020 (source
3021 (origin
3022 (method url-fetch)
3023 (uri (pypi-uri "cssutils" version))
3024 (sha256
3025 (base32 "08fhyw7x88xzhphm6jc6v72kw3i8iysw91x7rgd3fl4iycvr4wz9"))))
3026 (build-system pyproject-build-system)
3027 (arguments
3028 (list
3029 ;; tests: 399 passed, 2 skipped, 43 xfailed
3030 #:test-flags
3031 ;; Examples try to access http://cthedot.de/not-present.css.
3032 #~(list "--ignore=examples/")))
3033 (native-inputs
3034 (list python-cssselect
3035 python-jaraco-test
3036 python-pytest
3037 python-setuptools))
3038 (propagated-inputs
3039 (list python-encutils python-more-itertools))
3040 (home-page "https://github.com/jaraco/cssutils")
3041 (synopsis "CSS Cascading Style Sheets library for Python")
3042 (description
3043 "Cssutils is a Python package for parsing and building CSS Cascading
3044Style Sheets. Currently it provides a DOM only and no rendering options.")
3045 (license license:lgpl3+)))
3046
3047(define-public python-dependency-groups
3048 (package
3049 (name "python-dependency-groups")
3050 (version "1.3.1")
3051 (source
3052 (origin
3053 (method url-fetch)
3054 (uri (pypi-uri "dependency_groups" version))
3055 (sha256
3056 (base32 "1zgymnk6k984h2wfdpp0vws2ihwqrr9lmxhrij9zs5q5140q61vq"))))
3057 (build-system pyproject-build-system)
3058 (propagated-inputs (list python-packaging python-tomli))
3059 (native-inputs (list python-flit-core python-pytest))
3060 (home-page "https://dependency-groups.readthedocs.io/")
3061 (synopsis "Tools and library for resolving PEP 735 Dependency Group data")
3062 (description
3063 "This package provides a library which is able to parse dependency groups (PEP
3064735), following includes, and provide that data as output.")
3065 (license license:expat)))
3066
3067(define-public python-devpi-common
3068 (package
3069 (name "python-devpi-common")
3070 (version "4.0.4")
3071 (source
3072 (origin
3073 (method url-fetch)
3074 (uri (pypi-uri "devpi_common" version))
3075 (sha256
3076 (base32 "1k217b0fvsc7k2afw6wwlvqr1ksnv1vjzfm61g358vn98nd0lni3"))))
3077 (build-system pyproject-build-system)
3078 (propagated-inputs (list python-lazy python-packaging-legacy
3079 python-requests))
3080 (native-inputs
3081 (list python-pytest
3082 python-setuptools
3083 python-wheel))
3084 (home-page "https://github.com/devpi/devpi")
3085 (synopsis
3086 "Utilities jointly used by devpi-server, devpi-client and others")
3087 (description
3088 "This package provides utilities jointly used by devpi-server,
3089devpi-client and others.")
3090 (license license:expat)))
3091
3092(define-public python-devpi-client
3093 (package
3094 (name "python-devpi-client")
3095 (version "7.2.0")
3096 (source
3097 (origin
3098 (method url-fetch)
3099 (uri (pypi-uri "devpi-client" version))
3100 (sha256
3101 (base32 "0ywx4ql8lsypb17n2miq39bmkrp232sdk8g6pskqp1y3b223chy1"))))
3102 (build-system pyproject-build-system)
3103 (arguments
3104 (list
3105 #:test-flags
3106 ;; This wants to use pip install
3107 '(list "--ignore=testing/test_upload.py"
3108 ;; These complain about finding distutils. It's not my fault,
3109 ;; mate, setuptools is right there, but you won't pick it!
3110 "--ignore=testing/test_list_remove.py"
3111 "--ignore=testing/test_main.py"
3112 "--ignore=testing/test_install.py"
3113 "--ignore=testing/test_functional.py"
3114 "--ignore=testing/test_test.py")
3115 #:phases
3116 '(modify-phases %standard-phases
3117 (add-after 'unpack 'patch-tests
3118 (lambda _
3119 ;; Do not replace the directory name of the store item.
3120 (substitute* "testing/conftest.py"
3121 (("\"devpi-server\", \"devpi-init\"")
3122 "\"/bin/devpi-server\", \"/bin/devpi-init\""))))
3123 (add-before 'check 'set-HOME
3124 ;; Some tests need this
3125 (lambda _ (setenv "HOME" "/tmp"))))))
3126 (propagated-inputs (list python-pypa-build
3127 python-check-manifest
3128 python-colorama
3129 python-devpi-common
3130 python-iniconfig
3131 python-pkginfo
3132 python-platformdirs
3133 python-pluggy
3134 python-pypitoken
3135 python-tomli))
3136 (native-inputs
3137 (list python-devpi-server
3138 python-pytest
3139 python-setuptools
3140 python-virtualenv))
3141 (home-page "https://github.com/devpi/devpi")
3142 (synopsis "Devpi upload/install/... commands for Python developers")
3143 (description
3144 "The devpi command line tool is typically used in conjunction with
3145devpi-server. It allows uploading, testing and installing packages from devpi
3146indexes.")
3147 (license license:expat)))
3148
3149(define-public python-devpi-process
3150 (package
3151 (name "python-devpi-process")
3152 (version "1.0.2")
3153 (source
3154 (origin
3155 (method url-fetch)
3156 (uri (pypi-uri "devpi_process" version))
3157 (sha256
3158 (base32 "0v26i8bs0n8f2ikizwyvq77fw3l0nsyl4wj8yff0r3y351ydqbs1"))))
3159 (build-system pyproject-build-system)
3160 (arguments
3161 (list
3162 #:phases
3163 '(modify-phases %standard-phases
3164 (add-after 'unpack 'relax-requirements
3165 (lambda _
3166 ;; Our package is too old, sorry.
3167 (substitute* "pyproject.toml"
3168 (("typing-extensions>=4.12.2")
3169 "typing-extensions>=4.10.0"))))
3170 (add-after 'unpack 'patch-tool-locations
3171 (lambda* (#:key inputs #:allow-other-keys)
3172 (substitute* "src/devpi_process/__init__.py"
3173 (("_exe\\(\"devpi-init\"\\)")
3174 (string-append "\"" (search-input-file inputs "/bin/devpi-init") "\""))
3175 (("_exe\\(\"devpi-server\"\\)")
3176 (string-append "\"" (search-input-file inputs "/bin/devpi-server") "\""))
3177 (("_exe\\(\"devpi\"\\)")
3178 (string-append "\"" (search-input-file inputs "/bin/devpi") "\""))))))))
3179 (propagated-inputs (list python-devpi-client python-devpi-server
3180 python-typing-extensions))
3181 (native-inputs
3182 (list nss-certs-for-test
3183 python-hatchling
3184 python-hatch-vcs
3185 python-httpx
3186 python-pytest))
3187 (home-page "https://github.com/devpi/devpi")
3188 (synopsis "API to create and use a devpi server process")
3189 (description
3190 "This package provides a programmatic API to create and use a devpi
3191server process.")
3192 (license license:expat)))
3193
3194(define-public python-devpi-server
3195 (package
3196 (name "python-devpi-server")
3197 (version "6.20.3")
3198 (source
3199 (origin
3200 (method git-fetch)
3201 (uri (git-reference
3202 (url "https://github.com/devpi/devpi")
3203 (commit (string-append "server-" version))))
3204 (file-name (git-file-name name version))
3205 (sha256
3206 (base32 "11q1bnd8rl55gcv99xkmg10i8z9l91kvmgrvcz1803mwkcs0isp8"))))
3207 (build-system pyproject-build-system)
3208 (arguments
3209 (list
3210 ;; tests: 1134 passed, 53 skipped, 29 warnings
3211 #:phases
3212 #~(modify-phases %standard-phases
3213 (add-after 'unpack 'chdir
3214 (lambda _
3215 (chdir "server")))
3216 (add-after 'chdir 'relax-requirements
3217 (lambda _
3218 (substitute* "pyproject.toml"
3219 ;; It straggles to check argon2 in passlib on any versions
3220 ;; starting from 6.14.0: UnknownExtra("passlib 1.7.4 has no
3221 ;; such extra feature 'argon2'",).
3222 (("passlib\\[argon2\\]") "passlib")
3223 (("\"py>=1.4.23\",") ""))))
3224 (add-before 'check 'pre-check
3225 (lambda _
3226 (setenv "HOME" "/tmp"))))))
3227 (propagated-inputs (list python-argon2-cffi
3228 python-attrs
3229 python-defusedxml
3230 python-devpi-common
3231 python-httpx
3232 python-itsdangerous
3233 python-lazy
3234 python-passlib
3235 python-platformdirs
3236 python-pluggy
3237 python-pyramid
3238 python-repoze-lru
3239 python-requests
3240 python-ruamel.yaml-0.16 ;FIXME: rename
3241 python-strictyaml
3242 python-waitress))
3243 (native-inputs
3244 (list nss-certs-for-test
3245 python-execnet
3246 python-pytest
3247 python-pytest-asyncio
3248 python-pytest-timeout
3249 python-setuptools
3250 python-webtest))
3251 (home-page "https://devpi.net")
3252 (synopsis "Pypi.org caching server")
3253 (description "This package implements a reliable private and pypi.org
3254caching server.")
3255 (license license:expat)))
3256
3257(define-public python-dicomweb-client
3258 (package
3259 (name "python-dicomweb-client")
3260 (version "0.60.0")
3261 (source
3262 (origin
3263 (method git-fetch)
3264 (uri (git-reference
3265 (url "https://github.com/ImagingDataCommons/dicomweb-client")
3266 (commit (string-append "v" version))))
3267 (file-name (git-file-name name version))
3268 (sha256
3269 (base32 "1zad0905cc4jy4hnh9yhcw63bg25f7xa33x9rj9fhh5r4fznha8d"))))
3270 (build-system pyproject-build-system)
3271 (arguments
3272 (list
3273 #:phases
3274 #~(modify-phases %standard-phases
3275 (add-after 'unpack 'remove-dynamic-versioning
3276 (lambda _
3277 (substitute* "pyproject.toml"
3278 ;; Dynamic versioning via 'uv-dynamic-versioning' is
3279 ;; not suitable for Guix.
3280 (("dynamic = \\[\"version\"\\]")
3281 (string-append "version = \""
3282 #$version "\""))))))))
3283 (native-inputs
3284 (list python-hatchling
3285 python-pytest
3286 python-pytest-localserver))
3287 (propagated-inputs
3288 (list python-numpy
3289 python-pillow
3290 python-pydicom
3291 python-requests
3292 python-retrying))
3293 (home-page "https://github.com/ImagingDataCommons/dicomweb-client")
3294 (synopsis "Python client for DICOMweb RESTful services")
3295 (description
3296 "@code{dicomweb_client} provides client interfaces for DICOMweb RESTful
3297services QIDO-RS, WADO-RS and STOW-RS to search, retrieve and store
3298DICOM objects over the web, respectively.")
3299 (license license:expat)))
3300
3301(define-public python-dnslib
3302 (package
3303 (name "python-dnslib")
3304 (version "0.9.26")
3305 (source
3306 (origin
3307 (method git-fetch)
3308 (uri (git-reference
3309 (url "https://github.com/paulc/dnslib")
3310 (commit version)))
3311 (file-name (git-file-name name version))
3312 (sha256
3313 (base32 "1x1l727qx6x0kw7yhzhxhbm40wgrh367dr3y0vaix0wrhi30qsyk"))))
3314 (build-system pyproject-build-system)
3315 (arguments
3316 (list
3317 #:phases
3318 #~(modify-phases %standard-phases
3319 (replace 'check
3320 (lambda* (#:key tests? #:allow-other-keys)
3321 (when tests?
3322 (invoke "./run_tests.sh")))))))
3323 (native-inputs
3324 (list python-setuptools))
3325 (home-page "https://github.com/paulc/dnslib")
3326 (synopsis "Library to encode/decode DNS wire-format packets")
3327 (description
3328 "This package provides a simple Python library to encode/decode DNS
3329wire-format packets.")
3330 (license license:bsd-3)))
3331
3332(define-public python-docusign-esign
3333 (package
3334 (name "python-docusign-esign")
3335 (version "5.0.0")
3336 (source
3337 (origin
3338 (method url-fetch)
3339 (uri (pypi-uri "docusign-esign" version))
3340 (sha256
3341 (base32 "18n9szjxbmsccz4vlvsl4xa73jn0y16l0c344m83gil25v2amn69"))))
3342 (build-system pyproject-build-system)
3343 ;; Testing requires undocumented setup changes with network access to
3344 ;; <demo.docusign.net>, and so testing is disabled here.
3345 (arguments `(#:tests? #f))
3346 (native-inputs
3347 (list python-setuptools
3348 python-wheel))
3349 (propagated-inputs
3350 (list python-certifi
3351 python-dateutil
3352 python-urllib3
3353 python-pyjwt
3354 python-cryptography))
3355 (home-page "https://developers.docusign.com/")
3356 (synopsis "DocuSign Python Client")
3357 (description
3358 "The Official DocuSign Python Client Library used to interact with the
3359eSign REST API. Send, sign, and approve documents using this client.")
3360 (license license:expat)))
3361
3362(define-public python-domain-connect
3363 (package
3364 (name "python-domain-connect")
3365 (version "0.0.11")
3366 (source
3367 (origin
3368 (method git-fetch) ;no tests in PyPI archive
3369 (uri (git-reference
3370 (url "https://github.com/Domain-Connect/domainconnect_python")
3371 (commit (string-append "v" version))))
3372 (file-name (git-file-name name version))
3373 (sha256
3374 (base32 "1dhqbx15h074g51mj73j9hlyvb11isjnj4s9ih5kbw1g4vf1q1jk"))))
3375 (build-system pyproject-build-system)
3376 (arguments
3377 (list
3378 ;; Check and sanity-check phases require /etc/resolv.conf, which is not
3379 ;; present in container.
3380 #:tests? #f
3381 #:phases #~(modify-phases %standard-phases (delete 'sanity-check))))
3382 (native-inputs
3383 (list python-setuptools))
3384 (propagated-inputs
3385 (list python-cryptography
3386 python-dnspython
3387 python-future
3388 python-publicsuffixlist))
3389 (home-page "https://github.com/Domain-Connect/domainconnect_python")
3390 (synopsis "Client library for Domain Connect protocol")
3391 (description
3392 "This package provides a Service Provider functionality in both Sync and
3393Async mode for @url{https://domainconnect.org/, Domain Connect protocol}.")
3394 (license license:expat)))
3395
3396(define-public python-domain-connect-dyndns
3397 (package
3398 (name "python-domain-connect-dyndns")
3399 (version "0.0.9")
3400 (source
3401 (origin
3402 (method url-fetch)
3403 (uri (pypi-uri "domain-connect-dyndns" version))
3404 (sha256
3405 (base32 "0srrblcb64bp7k5cqqivx4kykqdkmmzmspxwv66vix9k7wxdwqzx"))))
3406 (build-system pyproject-build-system)
3407 (arguments
3408 (list
3409 ;; Check and sanity-check phases require /etc/resolv.conf, which is not
3410 ;; present in container.
3411 #:tests? #f
3412 #:phases #~(modify-phases %standard-phases (delete 'sanity-check))))
3413 (native-inputs
3414 (list python-setuptools
3415 python-wheel))
3416 (propagated-inputs
3417 (list python-dnspython
3418 python-domain-connect
3419 python-requests
3420 python-validators))
3421 (home-page "https://github.com/Domain-Connect/DomainConnectDDNS-Python")
3422 (synopsis "Domain Connect Dynamic DNS in Python")
3423 ;; Project lacks meaningful description in README, see
3424 ;; <https://github.com/Domain-Connect/DomainConnectDDNS-Python/issues/43>.
3425 (description
3426 "Python client library for Dynamic DNS using
3427@url{https://www.domainconnect.org/, Domain Connect} protocol.")
3428 (license license:expat)))
3429
3430(define-public python-dominate
3431 (package
3432 (name "python-dominate")
3433 (version "2.9.1")
3434 (source
3435 (origin
3436 (method git-fetch)
3437 (uri (git-reference
3438 (url "https://github.com/Knio/dominate")
3439 (commit version)))
3440 (file-name (git-file-name name version))
3441 (sha256
3442 (base32 "0kv5ly8w2026pwvgamfjxav1g58wmgim30nr9w9qfwcipfjxwn5c"))))
3443 (build-system pyproject-build-system)
3444 (native-inputs
3445 (list python-pytest
3446 python-setuptools))
3447 (home-page "https://github.com/Knio/dominate")
3448 (synopsis "Python library for creating and manipulating HTML documents")
3449 (description
3450 "Dominate is a Python library for creating and manipulating HTML
3451documents using an elegant DOM API.")
3452 (license license:lgpl3+)))
3453
3454(define-public python-dropbox
3455 (package
3456 (name "python-dropbox")
3457 (version "12.0.2")
3458 (source
3459 (origin
3460 (method git-fetch) ; no tests in PyPI release
3461 (uri (git-reference
3462 (url "https://github.com/dropbox/dropbox-sdk-python")
3463 (commit (string-append "v" version))))
3464 (file-name (git-file-name name version))
3465 (sha256
3466 (base32 "0pyvi2mbibah42kq8804d98ghypm46wr8swqr34apnvnlp9j2nzl"))))
3467 (build-system pyproject-build-system)
3468 (arguments
3469 (list
3470 #:test-flags
3471 #~(list "-k" (string-join
3472 ;; Network access is required.
3473 (list "not test_bad_auth"
3474 "test_app_auth"
3475 "test_bad_pins"
3476 "test_bad_pins_session"
3477 "test_downscope"
3478 "test_multi_auth"
3479 "test_path_root"
3480 "test_path_root_err"
3481 "test_refresh"
3482 "test_rpc"
3483 "test_team"
3484 "test_upload_download"
3485 "test_versioned_route")
3486 " and not "))
3487 #:phases
3488 #~(modify-phases %standard-phases
3489 (add-after 'unpack 'relax-requirements
3490 (lambda _
3491 (substitute* "setup.py"
3492 ;; 'stone>=2,<3.3.3',
3493 ((">=2,<3.3.3") ">=2,<3.4.0"))))
3494 (add-before 'check 'pre-check
3495 (lambda _
3496 ;; Otherwise tests setup erroring.
3497 (setenv "LEGACY_USER_DROPBOX_TOKEN" "guix")
3498 (setenv "LEGACY_USER_CLIENT_ID" "guix")
3499 (setenv "LEGACY_USER_CLIENT_SECRET" "guix")
3500 (setenv "LEGACY_USER_REFRESH_TOKEN" "guix")
3501 (setenv "SCOPED_USER_DROPBOX_TOKEN" "guix")
3502 (setenv "SCOPED_USER_CLIENT_ID" "guix")
3503 (setenv "SCOPED_USER_CLIENT_SECRET" "guix")
3504 (setenv "SCOPED_USER_REFRESH_TOKEN" "guix")
3505 (setenv "SCOPED_TEAM_DROPBOX_TOKEN" "guix")
3506 (setenv "SCOPED_TEAM_CLIENT_ID" "guix")
3507 (setenv "SCOPED_TEAM_CLIENT_SECRET" "guix")
3508 (setenv "SCOPED_TEAM_REFRESH_TOKEN" "guix")
3509 (setenv "DROPBOX_SHARED_LINK" "guix"))))))
3510 (native-inputs
3511 (list nss-certs-for-test
3512 python-mock
3513 python-pytest
3514 python-pytest-mock
3515 python-setuptools
3516 python-wheel))
3517 (propagated-inputs
3518 (list python-requests python-six python-stone))
3519 (home-page "https://www.dropbox.com/developers")
3520 (synopsis "Official Dropbox API Client")
3521 (description "This package provides a Python SDK for integrating with the
3522Dropbox API v2.")
3523 (license license:expat)))
3524
3525(define-public python-dukpy
3526 (package
3527 (name "python-dukpy")
3528 (version "0.5.1")
3529 (source
3530 (origin
3531 (method git-fetch)
3532 (uri (git-reference
3533 (url "https://github.com/amol-/dukpy")
3534 (commit version)))
3535 (file-name (git-file-name name version))
3536 (sha256
3537 (base32 "1qsqfgy12frrdikjf353bsvhln11jixc3qs9rc1zra55k0569036"))))
3538 (build-system pyproject-build-system)
3539 (arguments
3540 (list
3541 #:test-flags
3542 #~(list #$@(map (lambda (test)
3543 (string-append "--deselect=tests/test_installer.py"
3544 "::TestPackageInstaller::"
3545 test))
3546 ;; Network access is required.
3547 (list "test_install_command"
3548 "test_install_command_latest_ver"
3549 "test_install_command_substrate_error"
3550 "test_install_command_without_dest"
3551 "test_install_react"
3552 "test_install_scoped_package"
3553 "test_install_unexisting_package"
3554 "test_install_unexisting_version")))))
3555 (native-inputs
3556 (list python-mock
3557 python-pytest
3558 python-setuptools
3559 python-webassets))
3560 (home-page "https://github.com/amol-/dukpy")
3561 (synopsis "Simple JavaScript interpreter for Python")
3562 (description
3563 "DukPy is a simple JavaScript interpreter for Python built on top of
3564duktape engine without any external dependency. It comes with a bunch of
3565common transpilers built-in for convenience:
3566@itemize
3567@item CoffeeScript
3568@item BabelJS
3569@item TypeScript
3570@item JSX
3571@item LESS
3572@end itemize")
3573 (license license:expat)))
3574
3575(define-public python-essentials-openapi
3576 (package
3577 (name "python-essentials-openapi")
3578 (version "1.2.1")
3579 (source
3580 (origin
3581 (method git-fetch)
3582 (uri (git-reference
3583 (url "https://github.com/Neoteroi/essentials-openapi")
3584 (commit (string-append "v" version))))
3585 (file-name (git-file-name name version))
3586 (sha256
3587 (base32 "0f3lhpkqhvv8sr1c34cvzdqkc61306m03w3jp0zdih1v6is05j8x"))))
3588 (build-system pyproject-build-system)
3589 (native-inputs
3590 (list python-flask
3591 python-hatchling
3592 python-pydantic
3593 python-pytest
3594 python-rich))
3595 (propagated-inputs
3596 (list python-essentials
3597 python-httpx
3598 python-jinja2
3599 python-markupsafe
3600 python-pyyaml))
3601 (home-page "https://github.com/Neoteroi/essentials-openapi/")
3602 (synopsis "Generator for OpenAPI Documentation")
3603 (description
3604 "Generator for OpenAPI Documentation version 2 and 3, in JSON and YAML
3605formats. Generator for other kinds of documents from OpenAPI Documentation
3606files.")
3607 (license license:expat)))
3608
3609(define-public python-eventlet
3610 (package
3611 (name "python-eventlet")
3612 (version "0.41.0")
3613 (source
3614 (origin
3615 (method git-fetch)
3616 (uri (git-reference
3617 (url "https://github.com/eventlet/eventlet")
3618 (commit version)))
3619 (file-name (git-file-name name version))
3620 (sha256
3621 (base32 "1rn8f5v08n48dh6aycdxfwz17w4xwkgny7bhy5llqn5dl0g2dw43"))))
3622 (build-system pyproject-build-system)
3623 (arguments
3624 (list
3625 ;; tests: 618 passed, 121 skipped, 20 deselected, 52 warnings
3626 #:test-flags
3627 #~(list
3628 #$@(map (lambda (test)
3629 (string-append "--deselect=tests/" test))
3630 (list
3631 ;; dns.resolver.NoResolverConfiguration: cannot open
3632 ;; /etc/resolv.conf
3633 "greendns_test.py::TestProxyResolver::test_clear"
3634 "greendns_test.py::TinyDNSTests::test_noraise_dns_tcp"
3635 "greendns_test.py::TinyDNSTests::test_raise_dns_tcp"
3636 ;; assert <built-in function gethostbyname> is <function
3637 ;; gethostbyname at 0x7ffff3491120>
3638 "socket_test.py::test_dns_methods_are_green"
3639 ;; socket.gaierror: [Errno -8] Servname not supported for
3640 ;; ai_socktype
3641 "greendns_test.py::TestGetaddrinfo::test_getaddrinfo"
3642 "greendns_test.py::TestGetaddrinfo::test_getaddrinfo_idn"
3643 "greendns_test.py::TestGetaddrinfo::test_getaddrinfo_inet"
3644 "greendns_test.py::TestGetaddrinfo::test_getaddrinfo_inet6"
3645 "greendns_test.py::test_hosts_no_network"
3646 ;; AssertionError: Expected single line "pass" in stdout
3647 "asyncio_test.py::test_asyncio_does_not_use_greendns"
3648 "greendns_test.py::test_import_rdtypes_then_eventlet"
3649 "patcher_test.py::test_patcher_existing_logging_module_lock")))
3650 #:phases
3651 #~(modify-phases %standard-phases
3652 (add-after 'unpack 'avoid-OSError
3653 (lambda _
3654 ;; If eventlet tries to load greendns, an OSError is thrown when
3655 ;; getprotobyname is called. Thankfully there is an environment
3656 ;; variable to disable the greendns import, so use it. Note that
3657 ;; this error is propagated to child packages too, so enforce the
3658 ;; changed default.
3659 (substitute* "eventlet/green/socket.py"
3660 (("os\\.environ\\.get\\(\"EVENTLET_NO_GREENDNS\", ''\\)")
3661 "os.environ.get(\"EVENTLET_NO_GREENDNS\", \"yes\")"))))
3662 (add-before 'check 'pre-check
3663 (lambda _
3664 (setenv "EVENTLET_HUB" "asyncio"))))))
3665 (native-inputs
3666 (list python-hatchling
3667 python-hatch-vcs
3668 python-pytest
3669 python-pytest-aiohttp))
3670 (propagated-inputs
3671 (list python-dnspython
3672 python-greenlet))
3673 (home-page "https://eventlet.net")
3674 (synopsis "Concurrent networking library for Python")
3675 (description
3676 "Eventlet is a concurrent networking library for Python that
3677allows you to change how you run your code, not how you write it.
3678It uses @code{epoll} or @code{libevent} for highly scalable non-blocking I/O.
3679Coroutines ensure that the developer uses a blocking style of programming
3680that is similar to threading, but provide the benefits of non-blocking I/O.
3681The event dispatch is implicit, which means you can easily use @code{Eventlet}
3682from the Python interpreter, or as a small part of a larger application.
3683
3684Note: In Guix, this package assumes the environment variable
3685@code{EVENTLET_NO_GREENDNS} defaults to @code{yes}. To try to use it, set it
3686to anything else.")
3687 (license license:expat)))
3688
3689(define-public python-feedgen
3690 (package
3691 (name "python-feedgen")
3692 (version "1.0.0")
3693 (source
3694 (origin
3695 (method git-fetch)
3696 (uri (git-reference
3697 (url "https://github.com/lkiesow/python-feedgen")
3698 (commit (string-append "v" version))))
3699 (file-name (git-file-name name version))
3700 (sha256
3701 (base32
3702 "1ppwxp9yck29pk2p2dlrrad6rz16l9h4fhcajp9yb7ns94fm5v3l"))))
3703 (build-system pyproject-build-system)
3704 (propagated-inputs
3705 (list python-dateutil
3706 python-lxml))
3707 (native-inputs
3708 (list python-pytest
3709 python-setuptools))
3710 (home-page "https://feedgen.kiesow.be")
3711 (synopsis "Atom and RSS feed generator")
3712 (description
3713 "This module can be used to generate web feeds in both Atom and RSS
3714format. It also extensible and comes with an extension to produce podcasts.")
3715 ;; The README says that this package is released under both licenses, and
3716 ;; permits the user to choose whichever is more convenient to them.
3717 (license (list license:bsd-2
3718 license:lgpl3+))))
3719
3720(define-public python-flask-caching
3721 (package
3722 (name "python-flask-caching")
3723 (version "2.3.1")
3724 (source
3725 (origin
3726 (method url-fetch)
3727 (uri (pypi-uri "flask_caching" version))
3728 (sha256
3729 (base32 "1jcqgfzvqhgpngf9nhpfjs129cslh8jyczfy8kw11y7b9qdzvmv5"))))
3730 (build-system pyproject-build-system)
3731 (arguments
3732 (list
3733 #:test-flags
3734 ;; Tests requiring running Redis or dated python-cache.
3735 #~(list "--deselect=tests/test_init.py::test_init_nullcache[MemcachedCache]"
3736 "--deselect=tests/test_init.py::test_init_nullcache[RedisCache]"
3737 "--deselect=tests/test_init.py::test_init_nullcache[RedisSentinelCache]"
3738 "--deselect=tests/test_init.py::test_init_nullcache[SASLMemcachedCache]"
3739 "--deselect=tests/test_init.py::test_init_nullcache[SpreadSASLMemcachedCache]"
3740 "-k" "not test_client_override_reflected_on_cachelib_methods")))
3741 (native-inputs
3742 (list python-pytest
3743 python-pytest-asyncio
3744 python-pytest-xprocess
3745 python-setuptools))
3746 (propagated-inputs
3747 (list python-cachelib
3748 python-flask))
3749 (home-page "https://github.com/pallets-eco/flask-caching")
3750 (synopsis "Caching extension for Flask")
3751 (description
3752 "This package provides a caching support to Flask applications, it's a
3753fort ok https://github.com/thadeusb/flask-cache.")
3754 (license license:bsd-3)))
3755
3756(define-public python-flask-paginate
3757 (package
3758 (name "python-flask-paginate")
3759 (version "2024.4.12")
3760 (source
3761 (origin
3762 (method git-fetch)
3763 (uri (git-reference
3764 (url "https://github.com/lixxu/flask-paginate")
3765 (commit (string-append "v" version))))
3766 (file-name (git-file-name name version))
3767 (sha256
3768 (base32 "1q4ajwk0pzc6934g07gdryjcwi6rd9iqcwv5g5s718dfx2bj1831"))))
3769 (arguments
3770 (list #:test-backend #~'custom
3771 #:test-flags #~(list "tests/tests.py")))
3772 (build-system pyproject-build-system)
3773 (native-inputs
3774 (list python-pytest
3775 python-setuptools))
3776 (propagated-inputs
3777 (list python-flask))
3778 (home-page "https://github.com/lixxu/flask-paginate")
3779 (synopsis "Simple paginate support for Flask")
3780 (description
3781 "Flask-paginate is a simple pagination extension for Flask which is
3782inspired by Ruby's will_paginate library. It supports several CSS frameworks.")
3783 (license license:bsd-3)))
3784
3785(define-public python-flask-limiter
3786 (package
3787 (name "python-flask-limiter")
3788 (version "4.1.1")
3789 (source
3790 (origin
3791 (method git-fetch)
3792 (uri (git-reference
3793 (url "https://github.com/alisaifee/flask-limiter")
3794 (commit version)))
3795 (file-name (git-file-name name version))
3796 (sha256
3797 (base32 "18n12iayzw6qqys26824j5lfbphfcammpmyrvys1k0rn4xcbifln"))))
3798 (build-system pyproject-build-system)
3799 (arguments
3800 (list
3801 ;; tests: 155 passed, 620 deselected
3802 #:test-flags
3803 #~(list "-k" (simple-format #f "not (~a)"
3804 (string-join
3805 (append
3806 ;; The test suite spawns storages in Docker.
3807 '("memcache" "reset_unsupported")
3808 '("mongo")
3809 '("redis" "clear_limits"
3810 "constructor_arguments_over_config"
3811 "custom_key_prefix" "fallback_to_memory"))
3812 " or ")))
3813 #:phases
3814 #~(modify-phases %standard-phases
3815 (add-before 'check 'adjust-tests
3816 (lambda _
3817 (substitute* "pytest.ini"
3818 ((".*--cov=.*") ""))
3819 (substitute* (find-files "tests" "\\.py$")
3820 (("import pymemcache.*") "")
3821 (("import pymongo.*") "")
3822 (("import redis.*") "")))))))
3823 (native-inputs (list python-flask-restful
3824 python-hatch-vcs
3825 python-hatchling
3826 python-hiro
3827 python-pytest
3828 python-pytest-check
3829 python-pytest-mock))
3830 (propagated-inputs (list python-flask
3831 python-limits
3832 python-ordered-set
3833 python-rich))
3834 (home-page "https://flask-limiter.readthedocs.org/")
3835 (synopsis "Rate limiting for Flask applications")
3836 (description
3837 "Flask-Limiter adds rate limiting to Flask applications.
3838Rate limits can be configured at different levels such as:
3839
3840@itemize
3841@item Application wide global limits per user
3842@item Default limits per route
3843@item By blueprints
3844@item By class-based views
3845@item By individual routes
3846@end itemize")
3847 (license license:expat)))
3848
3849(define-public python-gdown
3850 (package
3851 (name "python-gdown")
3852 (version "5.2.0")
3853 (source
3854 (origin
3855 (method url-fetch)
3856 (uri (pypi-uri "gdown" version))
3857 (sha256
3858 (base32 "11y7xx6zjipx15a5626lhiwmwb2jxp4mdcwqrnij0mfqc981ci91"))))
3859 (build-system pyproject-build-system)
3860 (arguments (list #:tests? #f)) ;network access is required
3861 (native-inputs
3862 (list python-hatch-fancy-pypi-readme
3863 python-hatch-vcs
3864 python-hatchling))
3865 (propagated-inputs
3866 (list python-beautifulsoup4
3867 python-filelock
3868 python-requests
3869 python-tqdm))
3870 (home-page "https://github.com/wkentaro/gdown")
3871 (synopsis "Google Drive Public File/Folder Downloader")
3872 (description
3873 "This package implements a functionality to download large files
3874recursively from Google Drive with option to filter them by file
3875formats (PDF/XML/CSV).")
3876 (license license:expat)))
3877
3878(define-public python-globus-sdk
3879 (package
3880 (name "python-globus-sdk")
3881 (version "4.4.0")
3882 (source
3883 (origin
3884 (method git-fetch)
3885 (uri (git-reference
3886 (url "https://github.com/globus/globus-sdk-python")
3887 (commit version)))
3888 (file-name (git-file-name name version))
3889 (sha256
3890 (base32 "1d0zw9dkpdhsf9zdg3nk6b55gqwzc3v2rj76nj7999hjmq8350vh"))))
3891 (build-system pyproject-build-system)
3892 (arguments
3893 (list
3894 #:phases
3895 #~(modify-phases %standard-phases
3896 (add-before 'check 'pre-check
3897 (lambda _ (setenv "HOME" "/tmp"))))))
3898 (native-inputs
3899 (list python-flaky
3900 python-pytest
3901 python-pytest-randomly
3902 python-responses
3903 python-setuptools))
3904 (propagated-inputs
3905 (list python-cryptography
3906 python-importlib-resources
3907 python-pyjwt
3908 python-requests))
3909 (home-page "https://github.com/globus/globus-sdk-python")
3910 (synopsis "Globus SDK for Python")
3911 (description
3912 "This package provides a SDK for convenient Pythonic interface to
3913@url{https://www.globus.org/, Globus} APIs.")
3914 (license license:asl2.0)))
3915
3916(define-public python-guardpost
3917 (package
3918 (name "python-guardpost")
3919 (version "1.0.4")
3920 (source
3921 (origin
3922 (method git-fetch)
3923 (uri (git-reference
3924 (url "https://github.com/Neoteroi/guardpost")
3925 (commit (string-append "v" version))))
3926 (file-name (git-file-name name version))
3927 (sha256
3928 (base32 "1xsakqn36g2h1s5rnbaf1lasx1jn4skqhmb8kdl1k4pgxp5sczyy"))))
3929 (build-system pyproject-build-system)
3930 (arguments
3931 (list
3932 ;; Possible timing issue, see:
3933 ;; <https://github.com/Neoteroi/GuardPost/issues/18>.
3934 #:test-flags '(list "--ignore=tests/test_jwts.py")))
3935 (native-inputs
3936 (list python-flask
3937 python-hatchling
3938 python-pytest
3939 python-pytest-asyncio))
3940 (propagated-inputs
3941 (list python-rodi
3942 ;; [optional]
3943 python-cryptography
3944 python-essentials
3945 python-pyjwt))
3946 (home-page "https://github.com/Neoteroi/GuardPost/")
3947 (synopsis
3948 "Authentication and authorization framework for Python applications")
3949 (description
3950 "GuardPost is a framework to handle authentication and
3951authorization in asynchronous Python applications.
3952
3953Its features include
3954
3955@itemize
3956@item Strategy to implement authentication.
3957@item Strategy to implement authorization.
3958@item Support for dependency injection
3959@item Built-in support for JSON Web Tokens (JWTs) authentication.
3960@end itemize")
3961 (license license:expat)))
3962
3963(define-public python-habanero
3964 (package
3965 (name "python-habanero")
3966 (version "2.3.0")
3967 (source
3968 (origin
3969 (method git-fetch)
3970 (uri (git-reference
3971 (url "https://github.com/sckott/habanero")
3972 (commit (string-append "v" version))))
3973 (file-name (git-file-name name version))
3974 (sha256
3975 (base32 "1a842izcc8l4wb8004v92zsq1h4yc7qc2wi9am6x0f7idlx993sw"))))
3976 (build-system pyproject-build-system)
3977 (arguments
3978 ;; Run only a small portion of unit tests without network access
3979 ;; requirement.
3980 (list #:test-flags #~(list "test/test-filters.py")))
3981 (native-inputs
3982 (list python-hatchling
3983 python-pytest))
3984 (propagated-inputs
3985 (list python-httpx
3986 python-packaging
3987 python-tqdm
3988 python-urllib3))
3989 (home-page "https://github.com/sckott/habanero")
3990 (synopsis "Low Level Client for Crossref Search API")
3991 (description
3992 "Low Level Client for
3993@url{https://api.crossref.org/swagger-ui/index.html, Crossref Search API}.")
3994 (license license:expat)))
3995
3996(define-public python-hookdns
3997 (package
3998 (name "python-hookdns")
3999 (version "2.0.0")
4000 (source
4001 (origin
4002 (method url-fetch)
4003 (uri (pypi-uri "hookdns" version))
4004 (sha256
4005 (base32 "087x12dy6slhyqwqblby2fpjdcy61yk3lqp3fplami0rmbn02fb7"))))
4006 (build-system pyproject-build-system)
4007 (arguments
4008 (list
4009 #:test-flags
4010 #~(list "-k" (string-join
4011 ;; Tests requiring networking.
4012 (list
4013 "not test_patch_contextmanager_with_another_hostname"
4014 "test_patch_contextmanager_with_another_hostname_ipv6"
4015 "test_patch_contextmanager_with_ipv4"
4016 "test_patch_contextmanager_with_name"
4017 "test_patch_contextmanager_with_public_fqdn_and_"
4018 "test_patch_contextmanager_with_unknown_hostname"
4019 "test_patch_decorator_with_another_hostname"
4020 "test_patch_decorator_with_another_hostname_ipv6"
4021 "test_patch_decorator_with_ipv4"
4022 "test_patch_decorator_with_name"
4023 "test_patch_decorator_with_public_fqdn_and_a_name_for_"
4024 "test_patch_decorator_with_unknown_hostname"
4025 "test_real_getaddrinfo_with_name_ipv6"
4026 "test_real_getaddrinfo_with_public_fqdn_ipv4"
4027 "test_real_getaddrinfo_with_public_fqdn_ipv6"
4028 "test_real_gethostbyname_ex_with_public_fqdn"
4029 "test_real_gethostbyname_with_public_fqdn"
4030 "test_real_requests_ip"
4031 "test_real_requests_name"
4032 "test_real_requests_with_public_fqdn"
4033 "test_reentrant")
4034 " and not "))))
4035 (native-inputs
4036 (list python-pytest
4037 python-requests
4038 python-setuptools
4039 python-wheel))
4040 (home-page "https://github.com/cle-b/hookdns")
4041 (synopsis "DNS resolution customization library")
4042 (description
4043 "HookDNS implements functionality that allows for modifying name
4044resolution in a Python script without any changes to the hosts file or the use
4045of a fake DNS resolver.")
4046 (license license:asl2.0)))
4047
4048(define-public python-httpcore2
4049 (package
4050 (name "python-httpcore2")
4051 (version "2.4.0")
4052 (source
4053 (origin
4054 (method git-fetch)
4055 (uri (git-reference
4056 (url "https://github.com/pydantic/httpx2")
4057 (commit (string-append "v" version))))
4058 (file-name (git-file-name name version))
4059 (sha256
4060 (base32 "05mql79icxigldzw01hs77jpgihvzjahvniwncb7ji2rqzhjr42g"))))
4061 (build-system pyproject-build-system)
4062 (arguments
4063 (list
4064 #:phases
4065 #~(modify-phases %standard-phases
4066 (add-after 'unpack 'preparation
4067 (lambda _
4068 (chdir "src/httpcore2")
4069 (copy-recursively "../../tests/httpcore2" "tests")
4070 (substitute* (find-files "tests" "\\.py$")
4071 (("tests\\.httpcore2") "tests")
4072 (("tests/httpcore2") "tests"))))
4073 (add-before 'build 'set-version
4074 (lambda _
4075 (substitute* "pyproject.toml"
4076 ((".*uv-dynamic-versioning>.*") "")
4077 (("source.*uv-dynamic-versioning.*") "source = 'vcs'"))
4078 (substitute* "httpcore2/__init__.py"
4079 ((".*= version\\(.*")
4080 (format #f "__version__ = ~s~%" #$version))))))))
4081 (native-inputs
4082 (list python-hatch-fancy-pypi-readme
4083 python-hatch-vcs
4084 python-hatchling
4085 python-pytest
4086 python-pytest-httpbin
4087 python-pytest-trio))
4088 (propagated-inputs
4089 (list python-h11
4090 python-truststore
4091 ;; [optional]
4092 python-anyio
4093 python-h2
4094 python-socksio
4095 python-trio))
4096 (home-page "https://github.com/pydantic/httpx2")
4097 (synopsis "Minimal low-level HTTP client")
4098 (description
4099 "The HTTP Core package provides a minimal low-level HTTP client, which
4100does one thing only. Sending HTTP requests.
4101
4102Some things HTTP Core does do:
4103@itemize
4104@item Sending HTTP requests.
4105@item Thread-safe / task-safe connection pooling.
4106@item HTTP(S) proxy & SOCKS proxy support.
4107@item Supports HTTP/1.1 and HTTP/2.
4108@item Provides both sync and async interfaces.
4109@item Async backend support for @code{asyncio} and @code{trio}.
4110@end itemize")
4111 (license license:bsd-3)))
4112
4113(define-public python-httpretty
4114 (package
4115 (name "python-httpretty")
4116 (version "1.1.4")
4117 (source
4118 (origin
4119 (method url-fetch)
4120 (uri (pypi-uri "httpretty" version))
4121 (sha256
4122 (base32 "0s1vjdaf3pk2xd0hvi5f7p3jm2rgwpbc734jdp9r50m1smfhxpi0"))))
4123 (build-system pyproject-build-system)
4124 (arguments
4125 (list
4126 #:test-flags
4127 ;; Only run Unit tests.
4128 #~(list "--ignore=tests/bugfixes"
4129 "--ignore=tests/functional"
4130 "--ignore=tests/pyopenssl"
4131 "-k" (string-join
4132 ;; Tests pattern failing with one of these errors:
4133 ;; AttributeError: '(str|bool|bytes|list|tuple)' object
4134 ;; has no attribute 'should'
4135 ;; AttributeError: 'function' object has no attribute
4136 ;; 'when'
4137 ;; AttributeError: 'AssertionBuilder' object has no
4138 ;; attribute 'should_not'
4139 (list "not fake_socket_passes_through"
4140 "fakesock_socket"
4141 "request_parse_body_when"
4142 "test_Entry_class_normalizes_headers"
4143 "test_has_request"
4144 "test_httpretty_should_raise_proper"
4145 "test_parse_request_line_connect"
4146 "test_request_parse_querystring"
4147 "test_request_string_representation"
4148 "test_request_stubs_internals")
4149 " and not "))))
4150 (native-inputs
4151 (list nss-certs-for-test
4152 python-freezegun
4153 python-mock
4154 python-pytest
4155 python-setuptools
4156 python-sure
4157 python-wheel))
4158 (home-page "https://httpretty.readthedocs.io")
4159 (synopsis "HTTP client mock for Python")
4160 (description
4161 "@code{httpretty} is a helper for faking web requests,inspired by Ruby's
4162@code{fakeweb}.")
4163 (license license:expat)))
4164
4165(define-public python-httpx2
4166 (package
4167 (name "python-httpx2")
4168 (version "2.4.0")
4169 (source
4170 (origin
4171 (method git-fetch)
4172 (uri (git-reference
4173 (url "https://github.com/pydantic/httpx2")
4174 (commit (string-append "v" version))))
4175 (file-name (git-file-name name version))
4176 (sha256
4177 (base32 "05mql79icxigldzw01hs77jpgihvzjahvniwncb7ji2rqzhjr42g"))))
4178 (arguments
4179 (list
4180 ;; tests: 1227 passed, 200 deselected
4181 #:test-flags
4182 ;; Networking tests.
4183 #~(list "-k" (string-join
4184 (list "not test_async_proxy_close[asyncio]"
4185 "test_async_proxy_close[trio]"
4186 "test_auth"
4187 "test_binary"
4188 "test_client_decode_text_using_autodetect"
4189 "test_client_decode_text_using_explicit_encoding"
4190 "test_follow_redirects"
4191 "test_get"
4192 "test_idna_url[http_with_custom_port]"
4193 "test_idna_url[http_with_port]"
4194 "test_idna_url[https_with_custom_port]"
4195 "test_idna_url[https_with_port]"
4196 "test_idna_url[https_without_port]"
4197 "test_idna_url[idna_label_after_ascii_label]"
4198 "test_idna_url[unicode_tr46_compat]"
4199 "test_json"
4200 "test_post"
4201 "test_redirects"
4202 "test_response_decode_text_using_autodetect"
4203 "test_sync_proxy_close"
4204 "test_url_malformed_idna_label_after_ascii_label"
4205 "test_url_mixed_valid_and_malformed_idna_labels"
4206 "test_verbose")
4207 " and not "))
4208 #:phases
4209 #~(modify-phases %standard-phases
4210 (add-after 'unpack 'preparation
4211 (lambda _
4212 (chdir "src/httpx2")
4213 (copy-recursively "../../tests/httpx2" "tests")
4214 (substitute* (find-files "tests" "\\.py$")
4215 (("tests\\.httpx2") "tests")
4216 (("tests/httpx2") "tests"))))
4217 (add-before 'build 'set-version
4218 (lambda _
4219 (substitute* "pyproject.toml"
4220 (("\"uv-dynamic-versioning>=0\\.8\\.0\"") "")
4221 (("source.*uv-dynamic-versioning.*") "source = 'vcs'")
4222 (("\\.uv-dynamic-versioning") ".vcs")))))))
4223 (build-system pyproject-build-system)
4224 (native-inputs
4225 (list python-chardet
4226 python-hatch-fancy-pypi-readme
4227 python-hatch-vcs
4228 python-hatchling
4229 python-pytest
4230 python-trustme
4231 python-uvicorn))
4232 (propagated-inputs
4233 (list python-anyio
4234 python-httpcore2
4235 python-idna
4236 python-truststore
4237 python-typing-extensions ;Python version < 3.13
4238 ;; [optional]
4239 python-brotli
4240 python-click
4241 python-h2
4242 python-pygments
4243 python-rich
4244 python-socksio
4245 python-zstandard))
4246 (home-page "https://github.com/pydantic/httpx2")
4247 (synopsis "The next generation HTTP client")
4248 (description
4249 "HTTPX2 is a fully featured HTTP client library for Python. It includes
4250an integrated command line client, has support for both HTTP/1.1 and HTTP/2,
4251and provides both sync and async APIs.")
4252 (license license:bsd-3)))
4253
4254(define-public python-jiter
4255 (package
4256 (name "python-jiter")
4257 (version "0.15.0")
4258 (source
4259 (origin
4260 (method git-fetch)
4261 (uri (git-reference
4262 (url "https://github.com/pydantic/jiter/")
4263 (commit (string-append "v" version))))
4264 (file-name (git-file-name name version))
4265 (sha256
4266 (base32 "1z2ljacsc64yykkxvjnq6rq4z56xwr8jhcw02ckv6b85kc66x63p"))))
4267 (build-system pyproject-build-system)
4268 (arguments
4269 (list
4270 #:imported-modules (append %cargo-build-system-modules
4271 %pyproject-build-system-modules)
4272 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
4273 (guix build pyproject-build-system)
4274 (guix build utils))
4275 #:phases
4276 #~(modify-phases %standard-phases
4277 (add-after 'unpack 'prepare-cargo-build-system
4278 (lambda args
4279 (for-each (lambda (phase)
4280 (format #t "Running cargo phase: ~a~%" phase)
4281 (apply (assoc-ref cargo:%standard-phases phase)
4282 #:cargo-target #$(cargo-triplet)
4283 args))
4284 '(prepare-rust-crates
4285 unpack-rust-crates
4286 configure
4287 check-for-pregenerated-files
4288 patch-cargo-checksums))))
4289 (add-after 'prepare-cargo-build-system 'chdir
4290 (lambda _
4291 (chdir "crates/jiter-python"))))))
4292 (native-inputs
4293 (append (list maturin
4294 python-dirty-equals
4295 python-pytest
4296 rust
4297 `(,rust "cargo"))
4298 (or (and=> (%current-target-system)
4299 (compose list make-rust-sysroot))
4300 '())))
4301 (inputs (cargo-inputs 'jiter))
4302 (home-page "https://github.com/pydantic/jiter/")
4303 (synopsis "Iterable JSON parser")
4304 (description
4305 "This package provides a fast Python iterable JSON parser, backed by Rust
4306libraries.")
4307 (license license:bsd-3)))
4308
4309(define-public python-justhtml
4310 (package
4311 (name "python-justhtml")
4312 (version "1.13.0")
4313 (source
4314 (origin
4315 (method git-fetch)
4316 (uri (git-reference
4317 (url "https://github.com/emilstenstrom/justhtml")
4318 (commit (string-append "v" version))))
4319 (file-name (git-file-name name version))
4320 (sha256
4321 (base32 "1hy5w3lr08sj3pivs46nnlfsvrd9ynmicxcrjk4sxbpg7411lyj5"))))
4322 (build-system pyproject-build-system)
4323 (native-inputs
4324 (list python-hatchling))
4325 (home-page "https://github.com/emilstenstrom/justhtml")
4326 (synopsis "Pure Python HTML5 parser")
4327 (description
4328 "JustHTML is a pure Python HTML5 parser. It has a simple API and does
4329not require C extensions or system dependencies.")
4330 (license license:expat)))
4331
4332(define-public python-hf-xet
4333 (package
4334 (name "python-hf-xet")
4335 (version "1.5.1")
4336 (source
4337 (origin
4338 (method git-fetch)
4339 (uri (git-reference
4340 (url "https://github.com/huggingface/xet-core")
4341 (commit (string-append "v" version))))
4342 (file-name (git-file-name name version))
4343 (sha256
4344 (base32 "0bczy0a8g7fnscpz2plq2pq0b8vapx9q5sny13rs2fa04ypq992f"))
4345 (modules '((guix build utils)))
4346 (snippet #~(for-each delete-file
4347 (find-files "." "Cargo\\.lock$")))))
4348 (build-system pyproject-build-system)
4349 (arguments
4350 (list
4351 #:imported-modules (append %cargo-build-system-modules
4352 %pyproject-build-system-modules)
4353 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
4354 (guix build pyproject-build-system)
4355 (guix build utils))
4356 #:phases
4357 #~(modify-phases %standard-phases
4358 (add-after 'unpack 'prepare-cargo-build-system
4359 (lambda args
4360 (for-each (lambda (phase)
4361 (format #t "Running cargo phase: ~a~%" phase)
4362 (apply (assoc-ref cargo:%standard-phases phase)
4363 #:cargo-target #$(cargo-triplet)
4364 args))
4365 '(prepare-rust-crates
4366 unpack-rust-crates
4367 configure
4368 check-for-pregenerated-files
4369 patch-cargo-checksums))))
4370 (add-after 'prepare-cargo-build-system 'chdir
4371 (lambda _
4372 (chdir "hf_xet"))))))
4373 (native-inputs
4374 (append (list maturin
4375 python-pytest
4376 rust
4377 `(,rust "cargo"))
4378 (or (and=> (%current-target-system)
4379 (compose list make-rust-sysroot))
4380 '())))
4381 (inputs (cargo-inputs 'hf_xet))
4382 (home-page "https://github.com/huggingface/xet-core")
4383 (synopsis "Transfer large files with the Hugging Face Hub")
4384 (description
4385 "This package enables @code{python-huggingface-hub} to utilize xet
4386storage for uploading and downloading to HF Hub. Xet storage provides
4387chunk-based deduplication, efficient storage/retrieval with local disk
4388caching, and backwards compatibility with Git LFS. This library is not meant
4389to be used directly, and is instead intended to be used from
4390@code{python-huggingface-hub}.")
4391 (license license:asl2.0)))
4392
4393(define-public python-huggingface-hub
4394 (package
4395 (name "python-huggingface-hub")
4396 (version "0.36.2")
4397 (source
4398 (origin
4399 (method git-fetch)
4400 (uri (git-reference
4401 (url "https://github.com/huggingface/huggingface_hub")
4402 (commit (string-append "v" version))))
4403 (file-name (git-file-name name version))
4404 (sha256
4405 (base32 "0hgdkfp7472sp0fjm5mwsx2rdlbr2ms8mzfzs0zr501gdwr7jjki"))))
4406 (build-system pyproject-build-system)
4407 (arguments
4408 (list
4409 #:test-flags
4410 ;; We don't have sentence_transformers...
4411 '(list "--ignore=contrib/sentence_transformers/test_sentence_transformers.py"
4412 ;; ...nor do we have InquirerPy...
4413 "--ignore=tests/test_command_delete_cache.py"
4414 ;; ...or timm...
4415 "--ignore=contrib/timm/test_timm.py"
4416 ;; ...or spacy_huggingface_hub
4417 "--ignore=contrib/spacy/test_spacy.py"
4418 ;; These all require internet access
4419 "--ignore=tests/test_cache_no_symlinks.py"
4420 "--ignore=tests/test_cache_layout.py"
4421 "--ignore=tests/test_commit_scheduler.py"
4422 "--ignore=tests/test_file_download.py"
4423 "--ignore=tests/test_hf_api.py"
4424 "--ignore=tests/test_hf_file_system.py"
4425 "--ignore=tests/test_inference_api.py"
4426 "--ignore=tests/test_inference_async_client.py"
4427 "--ignore=tests/test_inference_client.py"
4428 "--ignore=tests/test_inference_text_generation.py"
4429 "--ignore=tests/test_login_utils.py"
4430 "--ignore=tests/test_offline_utils.py"
4431 "--ignore=tests/test_repocard.py"
4432 "--ignore=tests/test_repository.py"
4433 "--ignore=tests/test_snapshot_download.py"
4434 "--ignore=tests/test_utils_cache.py"
4435 "--ignore=tests/test_utils_git_credentials.py"
4436 "--ignore=tests/test_utils_http.py"
4437 "--ignore=tests/test_utils_pagination.py"
4438 "--ignore=tests/test_webhooks_server.py"
4439 "-k" (string-append
4440 "not test_push_to_hub"
4441 " and not test_from_pretrained_model_id_only"
4442 " and not test_from_pretrained_model_id_and_revision"
4443 ;; These all require internet access
4444 " and not test_auth"
4445 " and not test_oauth"
4446 " and not test_utils_sha"
4447 " and not test_inference_providers"
4448 " and not test_xet"))
4449 #:phases
4450 '(modify-phases %standard-phases
4451 (add-before 'check 'pre-check
4452 ;; Some tests need to write to HOME.
4453 (lambda _ (setenv "HOME" "/tmp"))))))
4454 (propagated-inputs
4455 (list python-filelock
4456 python-fsspec
4457 python-hf-xet
4458 python-packaging
4459 python-pyyaml
4460 python-requests
4461 python-tqdm
4462 python-typing-extensions))
4463 (native-inputs
4464 (list python-aiohttp
4465 python-fastapi
4466 python-jedi
4467 python-jinja2
4468 python-numpy
4469 python-pillow
4470 python-pydantic
4471 python-pytest
4472 python-pytest-asyncio
4473 python-pytest-env
4474 python-pytest-mock
4475 python-pytest-rerunfailures
4476 python-pytest-vcr
4477 python-pytest-xdist
4478 python-setuptools
4479 python-types-requests
4480 python-types-toml
4481 python-types-urllib3
4482 python-typing-extensions
4483 python-urllib3))
4484 (home-page "https://huggingface.co/docs/huggingface_hub/")
4485 (synopsis "Client library for accessing the huggingface.co hub")
4486 (description
4487 "This package provides a client library to download and publish models,
4488datasets and other repos on the @url{huggingface.co} hub.")
4489 (license license:asl2.0)))
4490
4491(define-public python-kubernetes
4492 (package
4493 (name "python-kubernetes")
4494 (version "35.0.0")
4495 (source
4496 (origin
4497 (method url-fetch)
4498 (uri (pypi-uri "kubernetes" version))
4499 (sha256
4500 (base32 "1vh9bzq175fzv9av3v37lcfh37yzss2d9vxrb0a84fa2ji2d601x"))))
4501 (build-system pyproject-build-system)
4502 (arguments
4503 (list
4504 #:test-flags
4505 #~(list
4506 ;; The following tests expect a local running Kubernetes cluster.
4507 "--ignore=kubernetes/e2e_test"
4508 "--ignore=kubernetes/dynamic")))
4509 (native-inputs
4510 (list python-pytest
4511 python-setuptools))
4512 (propagated-inputs
4513 (list python-certifi
4514 python-dateutil
4515 python-durationpy
4516 python-google-auth
4517 python-pyyaml
4518 python-requests
4519 python-requests-oauthlib
4520 python-six ;XXX: hard dependency
4521 python-urllib3
4522 python-websocket-client))
4523 (home-page "https://github.com/kubernetes-client/python")
4524 (synopsis "Python client for Kubernetes")
4525 (description
4526 "This package provides an official Python client library for
4527@url{http://kubernetes.io, Kubernetes}.")
4528 (license license:asl2.0)))
4529
4530(define-public python-lazr-restfulclient
4531 (package
4532 (name "python-lazr-restfulclient")
4533 (version "0.14.6")
4534 (source
4535 (origin
4536 (method url-fetch)
4537 (uri (pypi-uri "lazr.restfulclient" version))
4538 (sha256
4539 (base32 "1nzzmp9aaaxh25jy3wm71cpf9dfw56s4g303c8a3nij874fjmwa3"))))
4540 (build-system pyproject-build-system)
4541 (arguments
4542 (list
4543 #:phases
4544 #~(modify-phases %standard-phases
4545 ;; Disable part of the test suite to avoid the lazr.authentication
4546 ;; requirement, which requires 'oauth', a Python 2 only library.
4547 (add-after 'unpack 'remove-some-checks
4548 (lambda _
4549 (with-directory-excursion "src/lazr/restfulclient/tests"
4550 (for-each delete-file '("test_oauth.py" "test_docs.py")))
4551 (substitute* "setup.py"
4552 (("\"(oauth|lazr\\.(authentication|restful>=0\\.11\\.0))\",")
4553 ""))))
4554 (replace 'check
4555 (lambda* (#:key tests? #:allow-other-keys)
4556 (if tests?
4557 (invoke "zope-testrunner" "--test-path=src")
4558 (format #t "test suite not run~%")))))))
4559 (native-inputs
4560 (list python-setuptools
4561 python-testtools
4562 python-wheel
4563 python-wsgi-intercept
4564 python-zope-testrunner))
4565 (propagated-inputs
4566 (list python-distro
4567 python-httplib2
4568 python-oauthlib
4569 python-pyparsing
4570 python-setuptools
4571 python-six
4572 python-wadllib))
4573 (home-page "https://launchpad.net/lazr.restfulclient")
4574 (synopsis "Web client Python library extending wadlib")
4575 (description "This package provides a programmable client library that
4576adds functionality on top of @code{wadlib}.")
4577 (license license:lgpl3+)))
4578
4579(define-public python-launchpadlib
4580 (package
4581 (name "python-launchpadlib")
4582 (version "2.1.0")
4583 (source
4584 (origin
4585 (method url-fetch)
4586 (uri (pypi-uri "launchpadlib" version))
4587 (sha256
4588 (base32 "0br4j76l83lvyrhm8psml9cqmdsn65rx48w1q1a0s1bmpf85ihml"))))
4589 (build-system pyproject-build-system)
4590 (arguments
4591 (list #:phases #~(modify-phases %standard-phases
4592 (add-before 'check 'set-home
4593 (lambda _
4594 ;; Tests require a writable home.
4595 (setenv "HOME" "/tmp"))))))
4596 (propagated-inputs
4597 (list python-httplib2 python-lazr-restfulclient python-lazr-uri))
4598 (native-inputs (list python-pytest python-testresources python-wadllib
4599 python-setuptools python-wheel))
4600 (home-page "https://documentation.ubuntu.com/launchpad")
4601 (synopsis "Python client library for Launchpad's web service")
4602 (description "@code{launchpadlib} is a Python library that allows
4603scripting Launchpad via its the web service API.")
4604 (license license:lgpl3+)))
4605
4606(define-public python-lazr-uri
4607 (package
4608 (name "python-lazr-uri")
4609 (version "1.0.7")
4610 (source
4611 (origin
4612 (method url-fetch)
4613 (uri (pypi-uri "lazr_uri" version))
4614 (sha256
4615 (base32 "1vm34pw8fksc6m8fnqwh215sqdlw546cxcdga93i2l746grzc37d"))))
4616 (build-system pyproject-build-system)
4617 (arguments
4618 (list
4619 #:phases
4620 #~(modify-phases %standard-phases
4621 (replace 'check
4622 (lambda* (#:key tests? #:allow-other-keys)
4623 (if tests?
4624 (invoke "zope-testrunner" "--test-path=src")
4625 (format #t "test suite not run~%")))))))
4626 (native-inputs (list python-setuptools python-zope-testrunner))
4627 (home-page "https://launchpad.net/lazr.uri")
4628 (synopsis "Python URI manipulation library")
4629 (description "This Python package provides a self-contained, easily
4630reusable library for parsing, manipulating, and generating URIs.")
4631 (license license:lgpl3)))
4632
4633(define-public python-ldaptor
4634 (package
4635 (name "python-ldaptor")
4636 (version "21.2.0")
4637 (source
4638 (origin
4639 (method url-fetch)
4640 (uri (pypi-uri "ldaptor" version))
4641 (sha256
4642 (base32 "0n53czn5pyh8923y282spdb7xc8c9rhn0n43bczanjjx6wcynjcc"))))
4643 (build-system pyproject-build-system)
4644 (arguments
4645 (list
4646 #:test-flags
4647 #~(list "-m" "twisted.trial"
4648 (string-append "-j" (number->string (parallel-job-count)))
4649 "ldaptor")
4650 #:phases
4651 #~(modify-phases %standard-phases
4652 (add-after 'unpack 'python-3.12-patch
4653 (lambda _
4654 (substitute* "ldaptor/config.py"
4655 (("SafeConfigParser")
4656 "ConfigParser"))))
4657 (add-before 'check 'disable-failing-tests
4658 (lambda _
4659 ;; Testing with Twisted 22.4 results in infinite loop creating
4660 ;; temporary config files, see
4661 ;; <https://github.com/twisted/ldaptor/issues/238>.
4662 (delete-file "ldaptor/test/test_config.py")))
4663 (replace 'check
4664 (lambda* (#:key tests? test-flags #:allow-other-keys)
4665 (when tests?
4666 (apply invoke "python" test-flags)))))))
4667 (native-inputs
4668 (list python-setuptools
4669 python-wheel))
4670 (propagated-inputs
4671 (list python-passlib
4672 python-pyopenssl
4673 python-service-identity ; to pass sanity check, for Twisted[tls]
4674 python-pyparsing
4675 python-twisted
4676 python-zope-interface))
4677 (home-page "https://github.com/twisted/ldaptor")
4678 (synopsis "Pure-Python Twisted library for LDAP")
4679 (description
4680 "This package provides a Python Twisted library for LDAP, which key
4681feaatures are:
4682@itemize
4683@item LDAP client logic
4684@item separately-accessible LDAP and BER protocol message generation/parsing
4685@item ASCII-format LDAP filter generation and parsing
4686@item LDIF format data generation
4687@item Samba password changing logic
4688@end itemize")
4689 (license license:expat)))
4690
4691(define-public python-legacy-cgi
4692 (package
4693 (name "python-legacy-cgi")
4694 (version "2.6.1")
4695 (source
4696 (origin
4697 (method url-fetch)
4698 (uri (pypi-uri "legacy_cgi" version))
4699 (sha256
4700 (base32 "0hksizyq7awmwh3337zy0rmj47x6b5igzam6ffj74gbwfjfakbgj"))))
4701 (build-system pyproject-build-system)
4702 (native-inputs (list python-poetry-core python-pytest))
4703 (home-page "https://github.com/jackrosenthal/legacy-cgi")
4704 (synopsis "Fork of the legacy standard library cgi and cgitb modules")
4705 (description
4706 "This is a fork of the standard library modules @code{cgi} and
4707@code{cgitb}. They are slated to be removed from the Python standard library
4708in Python 3.13 by PEP-594.")
4709 (license license:psfl)))
4710
4711(define-public python-librouteros
4712 (package
4713 (name "python-librouteros")
4714 (version "4.0.0")
4715 (source
4716 (origin
4717 (method git-fetch)
4718 (uri (git-reference
4719 (url "https://github.com/luqasz/librouteros")
4720 (commit version)))
4721 (file-name (git-file-name name version))
4722 (sha256
4723 (base32 "0in952b2idb5j8v6sxfm21gqbr5i5776w5ir0hdsxjrl2f29305v"))))
4724 (build-system pyproject-build-system)
4725 (arguments
4726 (list
4727 #:build-backend "hatchling.build"
4728 #:test-flags
4729 #~(list "tests/unit")))
4730 (native-inputs
4731 (list python-hatchling
4732 python-pytest
4733 python-pytest-asyncio
4734 python-stamina))
4735 (home-page "https://github.com/luqasz/librouteros")
4736 (synopsis "Python implementation of MikroTik RouterOS API")
4737 (description
4738 "This package implements MikroTik's @code{RouterOS} API.")
4739 (license license:gpl2+)))
4740
4741(define-public python-opentelemetry-api
4742 (package
4743 (name "python-opentelemetry-api")
4744 (version "1.37.0")
4745 (source
4746 (origin
4747 (method url-fetch)
4748 (uri (pypi-uri "opentelemetry_api" version))
4749 (sha256
4750 (base32 "19yr3hfwdc9sv8df4vydxcsxnpld3xi57siq4w8xanrm42qka1sl"))))
4751 (build-system pyproject-build-system)
4752 (propagated-inputs (list python-importlib-metadata
4753 python-typing-extensions))
4754 (native-inputs (list python-hatchling
4755 python-opentelemetry-test-utils-bootstrap))
4756 (home-page "https://opentelemetry.io/docs/languages/python/")
4757 (synopsis "OpenTelemetry Python API")
4758 (description "@code{OpenTelemetry} Python API.")
4759 (license license:asl2.0)))
4760
4761(define-public python-opentelemetry-api-bootstrap
4762 (hidden-package
4763 (package/inherit python-opentelemetry-api
4764 (name "python-opentelemetry-api-bootstrap")
4765 (arguments
4766 (list
4767 #:tests? #f))
4768 (native-inputs (list python-hatchling)))))
4769
4770(define-public python-opentelemetry-sdk
4771 (package
4772 (name "python-opentelemetry-sdk")
4773 (version "1.37.0")
4774 (source
4775 (origin
4776 (method url-fetch)
4777 (uri (pypi-uri "opentelemetry_sdk" version))
4778 (sha256
4779 (base32 "19fx8vf35kcss43i17zqngqhmglb36dnddasbdvfsgcm22f0i3nc"))))
4780 (build-system pyproject-build-system)
4781 (propagated-inputs (list python-opentelemetry-api
4782 python-opentelemetry-semantic-conventions
4783 python-typing-extensions))
4784 (native-inputs (list python-hatchling
4785 python-opentelemetry-test-utils-bootstrap
4786 python-pytest))
4787 (home-page "https://opentelemetry.io/docs/languages/python/")
4788 (synopsis "OpenTelemetry Python SDK")
4789 (description "@code{OpenTelemetry} Python SDK.")
4790 (license license:asl2.0)))
4791
4792(define-public python-opentelemetry-sdk-bootstrap
4793 (hidden-package
4794 (package/inherit python-opentelemetry-sdk
4795 (name "python-opentelemetry-sdk-bootstrap")
4796 (arguments (list #:tests? #f))
4797 (propagated-inputs (list python-opentelemetry-api-bootstrap
4798 python-opentelemetry-semantic-conventions-bootstrap))
4799 (native-inputs (list python-hatchling)))))
4800
4801(define-public python-opentelemetry-semantic-conventions
4802 (package
4803 (name "python-opentelemetry-semantic-conventions")
4804 (version "0.58b0")
4805 (source
4806 (origin
4807 (method url-fetch)
4808 (uri (pypi-uri "opentelemetry_semantic_conventions" version))
4809 (sha256
4810 (base32 "098czakcawikaspl46vy6vickw80mm2bnrspflrw8ya24r8nzm3b"))))
4811 (build-system pyproject-build-system)
4812 (propagated-inputs (list python-opentelemetry-api python-typing-extensions))
4813 (native-inputs (list python-hatchling))
4814 (home-page "https://opentelemetry.io/docs/languages/python/")
4815 (synopsis "OpenTelemetry Semantic Conventions")
4816 (description "@code{OpenTelemetry} Semantic Conventions.")
4817 (license license:asl2.0)))
4818
4819(define-public python-opentelemetry-semantic-conventions-bootstrap
4820 (hidden-package
4821 (package/inherit python-opentelemetry-semantic-conventions
4822 (name "python-opentelemetry-semantic-conventions-bootstrap")
4823 (arguments
4824 (list
4825 #:tests? #f))
4826 (propagated-inputs (list python-opentelemetry-api-bootstrap
4827 python-typing-extensions)))))
4828
4829(define-public python-opentelemetry-test-utils
4830 (package
4831 (name "python-opentelemetry-test-utils")
4832 (version "0.58b0")
4833 (source
4834 (origin
4835 (method url-fetch)
4836 (uri (pypi-uri "opentelemetry_test_utils" version))
4837 (sha256
4838 (base32 "0xjp04zjn7m79xsda9wp79rqyzy2c10347s967vp7xvmndwwa0ds"))))
4839 (build-system pyproject-build-system)
4840 (arguments (list #:tests? #f)) ; No tests in the wheel.
4841 (propagated-inputs
4842 (list python-asgiref
4843 python-opentelemetry-api
4844 python-opentelemetry-sdk))
4845 (native-inputs (list python-hatchling))
4846 (home-page "https://opentelemetry.io/docs/languages/python/")
4847 (synopsis "Test utilities for OpenTelemetry unit tests")
4848 (description "Test utilities for @code{OpenTelemetry} unit tests.")
4849 (license license:asl2.0)))
4850
4851(define-public python-opentelemetry-test-utils-bootstrap
4852 (hidden-package
4853 (package/inherit python-opentelemetry-test-utils
4854 (name "python-opentelemetry-test-utils-bootstrap")
4855 (propagated-inputs
4856 (list python-asgiref
4857 python-opentelemetry-api-bootstrap
4858 python-opentelemetry-sdk-bootstrap)))))
4859
4860(define-public python-pathy
4861 (package
4862 (name "python-pathy")
4863 (version "0.11.0")
4864 (source
4865 (origin
4866 (method url-fetch)
4867 (uri (pypi-uri "pathy" version))
4868 (sha256
4869 (base32 "0vbhcfg8g74g90bzmdgxr1jyvwhadvlr2w9wyvs6xxwb1dmhwgdv"))))
4870 (build-system pyproject-build-system)
4871 (native-inputs
4872 (list python-mock
4873 python-pytest
4874 python-setuptools))
4875 (propagated-inputs
4876 (list python-pathlib-abc-for-python-pathy
4877 python-smart-open-6
4878 python-typer))
4879 (home-page "https://github.com/justindujardin/pathy")
4880 (synopsis "Path interface for local and cloud bucket storage")
4881 (description "Pathy is a python package (with type annotations) for
4882working with Cloud Bucket storage providers using a @code{pathlib} interface.
4883It provides @code{pathlib.Path} subclasses for local and cloud bucket
4884storage.")
4885 (license license:asl2.0)))
4886
4887(define-public python-portend
4888 (package
4889 (name "python-portend")
4890 (version "3.2.1")
4891 (source
4892 (origin
4893 (method url-fetch)
4894 (uri (pypi-uri "portend" version))
4895 (sha256
4896 (base32 "12b4ikxyv32n33mvm4brp74igl1mvw825x01sjvvs54y3yml17da"))))
4897 (build-system pyproject-build-system)
4898 ;; Do not test pyproject.toml with python-pytest-checkdocs as it tries to
4899 ;; download dependencies.
4900 (arguments
4901 '(#:test-flags '("-k" "not project")))
4902 (native-inputs
4903 (list python-pytest
4904 python-setuptools
4905 python-setuptools-scm))
4906 (propagated-inputs
4907 (list python-tempora))
4908 (home-page "https://github.com/jaraco/portend")
4909 (synopsis "Monitor TCP ports for bound or unbound states")
4910 (description
4911 "@code{python-portend} can be used to monitor TCP ports for bound or
4912unbound states. For example, waiting for a port to be occupied or freed
4913within a set timeout. @code{python-portend} can also be used directly from
4914the command line.")
4915 (license license:expat)))
4916
4917(define-public python-prawcore
4918 (package
4919 (name "python-prawcore")
4920 (version "4.0.0")
4921 (source
4922 (origin
4923 (method git-fetch)
4924 (uri (git-reference
4925 (url "https://github.com/praw-dev/prawcore")
4926 (commit (string-append "v" version))))
4927 (file-name (git-file-name name version))
4928 (sha256
4929 (base32 "1kqqv1n9bibxfgagbyd8vl0yzrd4lr58xl59swz5v70w0kfap5fm"))))
4930 (build-system pyproject-build-system)
4931 (arguments
4932 (list
4933 ;; This test fails with a str rather than a bytes-like object.
4934 #:test-flags #~(list "-k" "not test_request__service_unavailable")))
4935 (native-inputs
4936 (list nss-certs-for-test
4937 python-betamax
4938 python-betamax-matchers
4939 python-betamax-serializers
4940 python-hatchling
4941 python-mock
4942 python-pytest
4943 python-testfixtures
4944 python-vcrpy))
4945 (propagated-inputs
4946 (list python-requests))
4947 (synopsis "Core component of PRAW")
4948 (description "PRAWcore is a low-level communication layer used by PRAW.")
4949 (home-page "https://praw.readthedocs.io/en/latest/")
4950 (license license:bsd-2)))
4951
4952(define-public python-praw
4953 (package
4954 (name "python-praw")
4955 (version "8.0.2")
4956 (source
4957 (origin
4958 (method git-fetch)
4959 (uri (git-reference
4960 (url "https://github.com/praw-dev/praw")
4961 (commit (string-append "v" version))))
4962 (file-name (git-file-name name version))
4963 (sha256
4964 (base32 "15kwvkc6ag83p3mrfnq6ffyvbw4d3njx0dl0vv00y7724b2rpqxw"))))
4965 (build-system pyproject-build-system)
4966 (arguments
4967 (list #:test-flags
4968 #~(list "--ignore=tests/units/models"
4969 "--ignore=tests/integration/models"
4970 "--ignore=tests/unit/test_config.py"
4971 "--ignore=tests/integration/test_reddit.py")))
4972 (native-inputs
4973 (list nss-certs-for-test
4974 python-betamax
4975 python-betamax-matchers
4976 python-hatchling
4977 python-pytest
4978 python-vcrpy))
4979 (propagated-inputs
4980 (list python-defusedxml
4981 python-prawcore
4982 python-update-checker
4983 python-websocket-client))
4984 (synopsis "Python Reddit API Wrapper")
4985 (description "PRAW is a Python package that allows for simple access to
4986Reddit’s API. It aims to be easy to use and internally follows all of Reddit’s
4987API rules.")
4988 (home-page "https://praw.readthedocs.io/en/latest/")
4989 (license license:bsd-2)))
4990
4991(define-public python-frozenlist
4992 (package
4993 (name "python-frozenlist")
4994 (version "1.8.0")
4995 (source
4996 (origin
4997 (method git-fetch)
4998 (uri (git-reference
4999 (url "https://github.com/aio-libs/frozenlist")
5000 (commit (string-append "v" version))))
5001 (file-name (git-file-name name version))
5002 (sha256
5003 (base32 "0r1kxf5b562zrn04nl912i6a8y1fyc891l1284v0zj9llb97limy"))))
5004 ;; XXX: Without "wheel", the 'install phase can't find the wheel.
5005 (outputs (list "out" "wheel"))
5006 (build-system pyproject-build-system)
5007 ;; The configuration contains explicit early calls to pytest_cov.
5008 (arguments (list #:test-flags #~(list "-o" "addopts=''")))
5009 (native-inputs
5010 (list python-cython
5011 python-expandvars
5012 python-pytest
5013 python-setuptools
5014 python-tomli))
5015 (home-page "https://github.com/aio-libs/frozenlist")
5016 (synopsis "List-like data structure for Python")
5017 (description "@code{frozenlist.FrozenList} is a list-like structure which
5018implements @code{collections.abc.MutableSequence}. It can be made immutable
5019by calling @code{FrozenList.freeze}.")
5020 (license license:asl2.0)))
5021
5022(define-public python-httpauth
5023 (package
5024 (name "python-httpauth")
5025 (version "0.4.1")
5026 (source (origin
5027 (method url-fetch)
5028 (uri (pypi-uri "httpauth" version))
5029 (sha256
5030 (base32
5031 "1m6rwvivg61l3h34hf6p6gkqmr69sb1c4k5ha379nxq0p8bfgahb"))))
5032 (build-system pyproject-build-system)
5033 (native-inputs (list python-pytest python-setuptools python-wheel))
5034 (home-page "https://github.com/jonashaag/httpauth")
5035 (synopsis "WSGI HTTP Digest Authentication middleware")
5036 (description "@code{python-httpauth} is WSGI middleware that secures some/all
5037routes using HTTP Digest Authentication.")
5038 (license license:bsd-2)))
5039
5040(define-public python-publicsuffixlist
5041 (package
5042 (name "python-publicsuffixlist")
5043 (version "1.0.2.20250202")
5044 (source
5045 (origin
5046 (method url-fetch)
5047 (uri (pypi-uri "publicsuffixlist" version))
5048 (sha256
5049 (base32 "0llam7g7sv08lcfgy18iph8br8ldjmy2qbjaykc9pd3z4iisb0yd"))))
5050 (build-system pyproject-build-system)
5051 (arguments (list #:test-backend #~'unittest))
5052 (native-inputs (list python-setuptools))
5053 (home-page "https://github.com/ko-zu/psl")
5054 (synopsis "Public suffix list for Python")
5055 (description
5056 "This package provides an implementation of
5057@url{https://publicsuffix.org/, Public Suffix List } as Python library.
5058
5059Features:
5060@itemize
5061@item supports IDN (unicode and punycoded)
5062@item shipped with built-in PSL and an updater script
5063@item written in Pure Python with no library dependencies
5064@end itemize")
5065 (license license:mpl2.0)))
5066
5067(define-public python-pycognito
5068 (package
5069 (name "python-pycognito")
5070 (version "2024.5.1")
5071 (source
5072 (origin
5073 (method url-fetch)
5074 (uri (pypi-uri "pycognito" version))
5075 (sha256
5076 (base32 "1r1sq87spqcfgg17khgpqc2ga8m9nk10flg9h23drhy2k1kcc4g2"))))
5077 (build-system pyproject-build-system)
5078 (arguments
5079 ;; XXX: cycles with python-moto, bootstrap/minimal variant is required.
5080 (list #:tests? #f))
5081 (native-inputs
5082 (list python-setuptools))
5083 (propagated-inputs
5084 (list python-boto3
5085 python-envs
5086 python-pyjwt
5087 python-requests))
5088 (home-page "https://github.com/pvizeli/pycognito")
5089 (synopsis "Python library for using AWS Cognito")
5090 (description
5091 "This package provides a Python class to integrate Boto3's Cognito
5092client so it is easy to login users, with @acronym{Secure Remote Password,
5093SRP} support.")
5094 (license license:asl2.0)))
5095
5096(define-public python-pydap
5097 (package
5098 (name "python-pydap")
5099 (version "3.5.10")
5100 (source
5101 (origin
5102 (method git-fetch)
5103 (uri (git-reference
5104 (url "https://github.com/pydap/pydap")
5105 (commit version)))
5106 (file-name (git-file-name name version))
5107 (sha256
5108 (base32 "000b7jqjpx71miwxhbi07amyjyijq925x9x3paa7kzrr268klc2z"))))
5109 (build-system pyproject-build-system)
5110 (arguments
5111 (list
5112 ;; tests: 435 passed, 6 skipped
5113 #:test-flags
5114 ;; Tests need extra packaging.
5115 #~(list "--ignore=src/pydap/tests/test_wsgi_functions.py"
5116 "--ignore=src/pydap/tests/test_wsgi_ssf.py"
5117 ;; Network access is required.
5118 "--ignore=src/pydap/tests/test_client.py"
5119 "--ignore=src/pydap/tests/test_handlers_dap.py"
5120 "--ignore=src/pydap/tests/test_open_dap4_url.py"
5121 "--ignore=src/pydap/tests/test_virtualizarr.py")))
5122 (native-inputs
5123 (list nss-certs-for-test
5124 python-requests-mock
5125 python-pytest
5126 python-setuptools
5127 python-setuptools-scm
5128 python-webtest))
5129 (propagated-inputs
5130 (list python-beautifulsoup4
5131 python-jinja2
5132 python-lxml
5133 python-numpy
5134 python-requests
5135 python-requests-cache
5136 python-scipy
5137 python-webob
5138 ;; [optional]
5139 gunicorn
5140 python-docopt-ng
5141 ;; python-coards ;not packaged yet in Guix
5142 python-fastparquet
5143 ;; python-gsw ;not packaged yet in Guix
5144 python-netcdf4
5145 python-openpyxl
5146 python-pastedeploy
5147 python-werkzeug))
5148 (home-page "https://pydap.github.io/pydap/en/intro.html")
5149 (synopsis "Data Access Protocol implementation in Python")
5150 (description
5151 "This package provides a pure Python implementation of the Data Access
5152Protocol (DAP, aka OPeNDAP).")
5153 (license license:expat)))
5154
5155(define-public python-python3-saml
5156 (package
5157 (name "python-python3-saml")
5158 (version "1.16.0")
5159 (source
5160 (origin
5161 (method git-fetch)
5162 (uri (git-reference
5163 (url "https://github.com/SAML-Toolkits/python3-saml")
5164 (commit (string-append "v" version))))
5165 (file-name (git-file-name name version))
5166 (sha256
5167 (base32 "1isisymhk8zblj5942jfl0zq392q5fpjikx52nywvzb0m2dcc81b"))))
5168 (build-system pyproject-build-system)
5169 (arguments
5170 (list
5171 ;; 214 tests pass, 50 fail; many fail because of required Internet
5172 ;; access or because of assumptions about the location of test files.
5173 #:tests? #false))
5174 (native-inputs
5175 (list python-freezegun
5176 python-poetry-core))
5177 (inputs
5178 (list xmlsec-openssl))
5179 (propagated-inputs
5180 (list python-isodate
5181 python-lxml
5182 python-xmlsec))
5183 (home-page "https://github.com/SAML-Toolkits/python3-saml")
5184 (synopsis "Saml Python toolkit")
5185 (description
5186 "The SAML Python Toolkit lets you add SAML support to your Python
5187software.")
5188 (license license:expat)))
5189
5190(define-public python-ovh
5191 (package
5192 (name "python-ovh")
5193 (version "1.1.0")
5194 (source (origin
5195 (method url-fetch)
5196 (uri (pypi-uri "ovh" version))
5197 (sha256
5198 (base32
5199 "0ygniv12lixh9rvnjcd01gzbzk2b5xwcg2a59b7964a77dd9p3qh"))))
5200 (build-system pyproject-build-system)
5201 (arguments (list #:tests? #f)) ; XXX: tests require networking
5202 (propagated-inputs (list python-requests))
5203 (native-inputs (list python-setuptools))
5204 (home-page "https://api.ovh.com")
5205 (synopsis "Interact with OVHcloud APIs")
5206 (description "This package provides the official module to perform HTTP requests
5207to the OVHcloud APIs.")
5208 (license license:bsd-3)))
5209
5210(define-public python-pyzabbix
5211 (package
5212 (name "python-pyzabbix")
5213 (version "1.3.1")
5214 (source
5215 (origin
5216 (method git-fetch)
5217 (uri (git-reference
5218 (url "https://github.com/lukecyca/pyzabbix")
5219 (commit version)))
5220 (file-name (git-file-name name version))
5221 (sha256
5222 (base32 "1dbs3bz1mjlvlg46ikhg5j7agwni61ljlpiziknklv95yp29n86v"))))
5223 (build-system pyproject-build-system)
5224 (arguments
5225 (list #:test-flags #~(list "tests")))
5226 (native-inputs
5227 (list python-pytest
5228 python-requests-mock
5229 python-setuptools))
5230 (propagated-inputs
5231 (list python-packaging
5232 python-requests))
5233 (home-page "https://github.com/lukecyca/pyzabbix")
5234 (synopsis "Python interface to the Zabbix API")
5235 (description
5236 "@code{pyzabbix} is a Python module for working with the Zabbix API.")
5237 (license license:lgpl2.1+)))
5238
5239(define-public python-requests-cache
5240 (package
5241 (name "python-requests-cache")
5242 (version "1.3.2")
5243 (source
5244 (origin
5245 (method git-fetch)
5246 (uri (git-reference
5247 (url "https://github.com/requests-cache/requests-cache")
5248 (commit (string-append "v" version))))
5249 (file-name (git-file-name name version))
5250 (sha256
5251 (base32 "1yhvidmmd02c95i1hamyy34rb3wfzgzxil2k8ay1p4r4kv7pjada"))))
5252 (build-system pyproject-build-system)
5253 (arguments
5254 (list
5255 ;; tests: 429 passed, 1051 warnings
5256 #:test-flags
5257 #~(list "--numprocesses" (number->string (parallel-job-count))
5258 ;; These tests require access to external services, e.g. MongoDB
5259 ;; and Redis.
5260 "--ignore=tests/integration")
5261 #:phases
5262 #~(modify-phases %standard-phases
5263 (add-before 'check 'pre-check
5264 (lambda _
5265 ;; PermissionError: [Errno 13] Permission denied:
5266 ;; '/homeless-shelter'
5267 (setenv "HOME" "/tmp"))))))
5268 (native-inputs
5269 (list python-hatchling
5270 python-pytest
5271 python-pytest-rerunfailures
5272 python-pytest-xdist
5273 python-requests-mock
5274 python-responses
5275 python-rich
5276 python-tenacity
5277 python-time-machine
5278 python-timeout-decorator))
5279 (propagated-inputs
5280 (list python-attrs
5281 python-cattrs
5282 python-platformdirs
5283 python-requests
5284 python-url-normalize
5285 python-urllib3
5286 ;; [optional]
5287 python-boto3
5288 python-botocore
5289 python-itsdangerous
5290 python-orjson ;Python version < 3.14
5291 python-pymongo
5292 python-pyyaml
5293 python-redis
5294 python-ujson))
5295 (home-page "https://github.com/requests-cache/requests-cache")
5296 (synopsis "Persistent HTTP cache for Python requests")
5297 (description
5298 "This package provides a drop-in replacement for @code{requests.Session}
5299with caching offload to SQLite, Redis, MongoDB and AWS DynamoDB or save
5300responses as planin JSON/YAML file or save responses as plain JSON/YAML
5301files.")
5302 (license license:bsd-2)))
5303
5304(define-public python-requests-futures
5305 (package
5306 (name "python-requests-futures")
5307 (version "1.0.2")
5308 (source
5309 (origin
5310 (method url-fetch)
5311 (uri (pypi-uri "requests_futures" version))
5312 (sha256
5313 (base32 "1njqfjmd72l5f32jvcppg2afrvb0cd8angdwmq7q0vik81wvazkb"))))
5314 (build-system pyproject-build-system)
5315 (native-inputs
5316 (list python-greenlet
5317 python-pytest
5318 python-pytest-httpbin
5319 python-setuptools
5320 python-werkzeug))
5321 (propagated-inputs (list python-requests))
5322 (home-page "https://github.com/ross/requests-futures")
5323 (synopsis "Asynchronous Python HTTP for Humans")
5324 (description
5325 "This package provides and add-on the Python Requests HTTP library to run
5326code asynchronously.")
5327 (license license:asl2.0)))
5328
5329(define-public python-requests-unixsocket
5330 (package
5331 (name "python-requests-unixsocket")
5332 (version "0.4.1")
5333 (source
5334 (origin
5335 (method git-fetch)
5336 (uri (git-reference
5337 (url "https://github.com/msabramo/requests-unixsocket")
5338 (commit (string-append "v" version))))
5339 (file-name (git-file-name name version))
5340 (sha256
5341 (base32 "1f0pi31xqzm3cdag4s4gpdj36x169jwc8ibqvcwqz6h9c0pklf3n"))))
5342 (build-system pyproject-build-system)
5343 (native-inputs
5344 (list python-pytest
5345 python-setuptools
5346 python-setuptools-scm
5347 python-waitress))
5348 (propagated-inputs
5349 (list python-requests))
5350 (home-page "https://github.com/msabramo/requests-unixsocket")
5351 (synopsis "Use requests to talk HTTP via a UNIX domain socket")
5352 (description
5353 "This package provides an extension to @code{requests} which let it talk
5354HTTP via a UNIX domain socket.")
5355 (license license:asl2.0)))
5356
5357(define-public python-s3path
5358 (package
5359 (name "python-s3path")
5360 (version "0.6.4")
5361 (source
5362 (origin
5363 (method url-fetch)
5364 (uri (pypi-uri "s3path" version))
5365 (sha256
5366 (base32 "1lp5243jjf9ngqmajgnfr1px1kmpkfmgh248xlqz0nkww4wcy1hh"))))
5367 (build-system pyproject-build-system)
5368 (arguments
5369 (list
5370 ;; XXX: All tests fail with error: fixture 's3_mock' not found.
5371 #:tests? #f))
5372 (native-inputs
5373 (list python-setuptools
5374 python-wheel))
5375 (propagated-inputs
5376 (list python-boto3
5377 python-smart-open))
5378 (home-page "https://github.com/liormizr/s3path")
5379 (synopsis "Pathlib extension for AWS S3 Service")
5380 (description
5381 "S3Path provide a Python convenient File-System/Path like interface for
5382AWS S3 Service using boto3 S3 resource as a driver.")
5383 (license license:asl2.0)))
5384
5385(define-public python-falcon
5386 (package
5387 (name "python-falcon")
5388 (version "4.0.2")
5389 (source
5390 (origin
5391 ;; Use git, as there are some test files missing from the PyPI release,
5392 ;; such as 'examples' directory.
5393 (method git-fetch)
5394 (uri (git-reference
5395 (url "https://github.com/falconry/falcon")
5396 (commit version)))
5397 (file-name (git-file-name name version))
5398 (sha256
5399 (base32
5400 "1zhyvfbz4c1bxd4vbsgk19dzih6kkzgin10lmsr32x3b4qgnwqxs"))))
5401 (build-system pyproject-build-system)
5402 (arguments
5403 (list
5404 #:test-flags
5405 '(list "-k" "not slow"
5406 "--ignore-glob=examples/*" "--ignore-glob=bench/*" "tests")
5407 #:phases
5408 '(modify-phases %standard-phases
5409 (add-before 'check 'pre-check
5410 (lambda _
5411 (setenv "FALCON_ASGI_WRAP_NON_COROUTINES" "Y")
5412 (setenv "FALCON_TESTING_SESSION" "Y")
5413 (setenv "PYTHONASYNCIODEBUG" "1")
5414 (setenv "HOME" "/tmp"))))))
5415 (propagated-inputs
5416 (list python-mimeparse))
5417 (native-inputs
5418 (list python-aiofiles
5419 python-cbor2
5420 python-cython ;for faster binaries
5421 python-fakeredis
5422 python-httpx
5423 python-mujson
5424 python-msgpack
5425 python-orjson
5426 python-pecan
5427 python-pillow
5428 python-pytest
5429 python-pytest-asyncio
5430 python-pyyaml
5431 python-rapidjson
5432 python-requests
5433 python-setuptools
5434 python-testtools
5435 python-ujson
5436 python-websockets
5437 python-wheel))
5438 (home-page "https://falconframework.org")
5439 (synopsis "Web framework for building APIs and application backends")
5440 (description "Falcon is a web API framework for building microservices,
5441application backends and higher-level frameworks. Among its features are:
5442@itemize
5443@item Optimized and extensible code base
5444@item Routing via URI templates and REST-inspired resource
5445classes
5446@item Access to headers and bodies through request and response
5447classes
5448@item Request processing via middleware components and hooks
5449@item Idiomatic HTTP error responses
5450@item Straightforward exception handling
5451@item Unit testing support through WSGI helpers and mocks
5452@item Compatible with both CPython and PyPy
5453@item Cython support for better performance when used with CPython
5454@end itemize")
5455 (license license:asl2.0)))
5456
5457(define-public python-falcon-cors
5458 (package
5459 (name "python-falcon-cors")
5460 (properties '((commit . "41e9f075e193c1f76b26c0a8c67ad6e87462dfa6")
5461 (revision . "0")))
5462 (version (git-version "1.1.7"
5463 (assoc-ref properties 'revision)
5464 (assoc-ref properties 'commit)))
5465 (source
5466 (origin
5467 (method git-fetch)
5468 (uri (git-reference
5469 (url "https://github.com/lwcolton/falcon-cors")
5470 (commit (assoc-ref properties 'commit))))
5471 (file-name (git-file-name name version))
5472 (sha256
5473 (base32 "0iqz1i1p5xr32n34j77p2a86jmrkg1w90d2wcmmy1mhi5mgdm5gx"))))
5474 (build-system pyproject-build-system)
5475 (arguments
5476 (list
5477 ;; XXX: The last commit's tests are incompatible with the more recent
5478 ;; version of python-falcon.
5479 #:tests? #f))
5480 (native-inputs
5481 (list python-falcon python-mock python-pynose python-setuptools))
5482 (home-page "https://github.com/lwcolton/falcon-cors")
5483 (synopsis "Falcon @dfn{cross-origin resource sharing} (CORS) library")
5484 (description
5485 "This middleware provides @dfn{cross-origin resource sharing} (CORS)
5486support for Falcon. It allows applying a specially crafted CORS object to the
5487incoming requests, enabling the ability to serve resources over a different
5488origin than that of the web application.")
5489 (license license:asl2.0)))
5490
5491(define-public python-furl
5492 (package
5493 (name "python-furl")
5494 (version "2.1.4")
5495 (source
5496 (origin
5497 (method url-fetch)
5498 (uri (pypi-uri "furl" version))
5499 (sha256
5500 (base32 "05b058xisv8kghvcpaxvssml2jjkh1cmzyrrjwk2kjb62985fxl7"))))
5501 (build-system pyproject-build-system)
5502 (arguments
5503 (list #:test-flags
5504 #~(list "-k" (string-append "not test_hosts"
5505 " and not test_netloc"
5506 " and not test_odd_urls"))))
5507 (propagated-inputs
5508 (list python-orderedmultidict python-six))
5509 (native-inputs
5510 (list python-pytest python-setuptools python-wheel))
5511 (home-page "https://github.com/gruns/furl")
5512 (synopsis "URL manipulation in Python")
5513 (description "Furl provides an easy-to-use alternative to the
5514@code{urllib} and @code{urlparse} modules for manipulating URLs.")
5515 (license license:unlicense)))
5516
5517(define-public python-httplib2
5518 (package
5519 (name "python-httplib2")
5520 (version "0.31.2")
5521 (source
5522 (origin
5523 (method git-fetch)
5524 (uri (git-reference
5525 (url "https://github.com/httplib2/httplib2")
5526 (commit (string-append "v" version))))
5527 (file-name (git-file-name name version))
5528 (sha256
5529 (base32
5530 "0wdnf4rhw9ar8b15lzvif11ibnnpqkfif3alkhkfywy3ikk8nrxb"))))
5531 (build-system pyproject-build-system)
5532 (arguments
5533 (list
5534 #:phases
5535 #~(modify-phases %standard-phases
5536 (add-after 'unpack 'adjust-test-requirements
5537 (lambda _
5538 (substitute* "requirements-test.txt"
5539 (("==") ">=")))))))
5540 (propagated-inputs
5541 (list python-pyparsing
5542 python-pysocks))
5543 (native-inputs
5544 (list python-cryptography
5545 python-mock
5546 python-pytest
5547 python-pytest-randomly
5548 python-pytest-timeout
5549 python-setuptools))
5550 (home-page "https://github.com/httplib2/httplib2")
5551 (synopsis "Comprehensive HTTP client library")
5552 (description
5553 "A comprehensive HTTP client library supporting many features left out of
5554other HTTP libraries.")
5555 (license license:expat)))
5556
5557(define-public python-parfive
5558 (package
5559 (name "python-parfive")
5560 (version "2.3.1")
5561 (source
5562 (origin
5563 (method git-fetch)
5564 (uri (git-reference
5565 (url "https://github.com/Cadair/parfive")
5566 (commit (string-append "v" version))))
5567 (file-name (git-file-name name version))
5568 (sha256
5569 (base32 "09kkh7kp9qy8m26zk6p7zc84yrc81pjgsi594kaa1v1n83mprl4b"))))
5570 (build-system pyproject-build-system)
5571 (arguments
5572 (list
5573 #:test-flags
5574 ;; Disable tests requiring network access.
5575 #~(list "-k" (string-join
5576 (list "not test_ftp"
5577 "test_ftp_http"
5578 "test_ftp_pasv_command"
5579 "test_problematic_http_urls")
5580 " and not "))))
5581 (native-inputs
5582 (list python-aiofiles
5583 python-pytest
5584 python-pytest-asyncio
5585 python-pytest-localserver
5586 python-pytest-socket
5587 python-setuptools
5588 python-setuptools-scm))
5589 (propagated-inputs
5590 (list python-aiohttp
5591 python-tqdm
5592 ;; [optional]
5593 python-aioftp))
5594 (home-page "https://parfive.readthedocs.io/")
5595 (synopsis "HTTP and FTP parallel file downloader")
5596 (description
5597 "This package provides CLI tool and Python library @code{parallel} file
5598downloader using asyncio. parfive can handle downloading multiple files in
5599parallel as well as downloading each file in a number of chunks.
5600
5601asciicast demo of parfive parfive works by creating a downloader object,
5602appending files to it and then running the download. parfive has a synchronous
5603API, but uses asyncio to parallelise downloading the files.")
5604 (license license:expat)))
5605
5606(define-public python-html2text
5607 (package
5608 (name "python-html2text")
5609 (version "2020.1.16")
5610 (source
5611 (origin
5612 (method url-fetch)
5613 (uri (pypi-uri "html2text" version))
5614 (sha256
5615 (base32 "1fvv4z6dblii2wk1x82981ag8yhxbim1v2ksgywxsndh2s7335p2"))))
5616 (build-system pyproject-build-system)
5617 (native-inputs (list python-pytest python-setuptools python-wheel))
5618 (home-page "https://github.com/Alir3z4/html2text")
5619 (synopsis "Convert HTML into plain text")
5620 (description
5621 "html2text takes HTML and converts it into plain ASCII text
5622which is also valid markdown. html2text was originally written by Aaron
5623Swartz.")
5624 (license license:gpl3+)))
5625
5626(define-public python-jose
5627 (package
5628 (name "python-jose")
5629 (version "3.5.0")
5630 (home-page "https://github.com/mpdavis/python-jose")
5631 (source (origin
5632 (method git-fetch)
5633 (uri (git-reference (url home-page) (commit version)))
5634 (file-name (git-file-name name version))
5635 (sha256
5636 (base32
5637 "0frv7r6q43mjl7s82hh8qvqpdgyfvmyq2b6aq4402riq2i238d7h"))))
5638 (build-system pyproject-build-system)
5639 (native-inputs
5640 (list python-pyasn1 python-pytest python-setuptools))
5641 (propagated-inputs
5642 (list python-cryptography python-ecdsa python-rsa))
5643 (synopsis "JOSE implementation in Python")
5644 (description
5645 "The @dfn{JavaScript Object Signing and Encryption} (JOSE) technologies
5646- JSON Web Signature (JWS), JSON Web Encryption (JWE), JSON Web Key (JWK), and
5647JSON Web Algorithms (JWA) - collectively can be used to encrypt and/or sign
5648content using a variety of algorithms.")
5649 (license license:expat)))
5650
5651(define-public python-joserfc
5652 (package
5653 (name "python-joserfc")
5654 (version "1.0.1")
5655 (source
5656 (origin
5657 (method url-fetch)
5658 (uri (pypi-uri "joserfc" version))
5659 (sha256
5660 (base32 "11m600bmj70bp96wxhwvyj4d57w0zahzq3vic7s4a4k85pl7nl64"))))
5661 (build-system pyproject-build-system)
5662 (arguments
5663 (list
5664 #:test-flags
5665 ;; No module named 'Crypto'
5666 '(list "--ignore=tests/jwe/test_chacha20.py"
5667 ;; Deprecation warnings are not raised.
5668 "-k" (string-append "not test_guess_bytes_key"
5669 " and not test_guess_callable_key"
5670 " and not test_guess_str_key"))))
5671 (propagated-inputs (list python-cryptography))
5672 (native-inputs (list python-pytest python-setuptools python-wheel))
5673 (home-page "https://github.com/authlib/joserfc")
5674 (synopsis "Python library for JOSE RFCs")
5675 (description
5676 "This package provides a Python library for JOSE RFCs, including JWS,
5677JWE, JWK, JWA, and JWT.")
5678 (license license:bsd-3)))
5679
5680(define-public python-jwcrypto
5681 (package
5682 (name "python-jwcrypto")
5683 (version "1.5.6")
5684 (source
5685 (origin
5686 (method url-fetch)
5687 (uri (pypi-uri "jwcrypto" version))
5688 (sha256
5689 (base32 "0fdhn5jrsdxqr1yr6rmh585q4j08z1aajn392vk1l20c59v8f6kp"))))
5690 (build-system pyproject-build-system)
5691 (native-inputs
5692 (list python-pytest
5693 python-setuptools))
5694 (propagated-inputs
5695 (list python-cryptography
5696 python-typing-extensions))
5697 (home-page "https://github.com/latchset/jwcrypto")
5698 (synopsis "Implementation of JOSE Web standards")
5699 (description
5700 "WCrypto is an implementation of the @dfn{Javascript Object Signing and
5701Encryption} (JOSE) Web Standards.")
5702 (license license:lgpl3+)))
5703
5704(define-public python-pypitoken
5705 (package
5706 (name "python-pypitoken")
5707 (version "7.0.1")
5708 (source
5709 (origin
5710 (method url-fetch)
5711 (uri (pypi-uri "pypitoken" version))
5712 (sha256
5713 (base32 "18hhwmdfs9y5ypl1n8z2h2ys2f52mv5xr043gzgb34mpmg0wi46x"))))
5714 (build-system pyproject-build-system)
5715 ;; There are no tests.
5716 (arguments (list #:tests? #false))
5717 (propagated-inputs (list python-jsonschema python-pymacaroons
5718 python-typing-extensions))
5719 (native-inputs (list python-poetry-core))
5720 (home-page "https://pypitoken.readthedocs.io/en/latest/")
5721 (synopsis "Manipulate PyPI API tokens")
5722 (description "This package lets you manipulate PyPI API tokens.")
5723 (license license:expat)))
5724
5725(define-public python-jsonpickle
5726 (package
5727 (name "python-jsonpickle")
5728 (version "4.0.0")
5729 (source (origin
5730 (method url-fetch)
5731 (uri (pypi-uri "jsonpickle" version))
5732 (sha256
5733 (base32
5734 "0dipys8p4hkqnp9nwkpysfv7mhws2hrr73wgn00pdmq4n990hrzw"))))
5735 (build-system pyproject-build-system)
5736 (arguments
5737 (list
5738 #:test-flags '(list "tests")
5739 #:phases
5740 '(modify-phases %standard-phases
5741 (add-before 'check 'pre-check
5742 (lambda* (#:key inputs #:allow-other-keys)
5743 (setenv "TZ" "UTC")
5744 (setenv "TZDIR"
5745 (search-input-directory inputs "share/zoneinfo")))))))
5746 (native-inputs
5747 (list python-bson
5748 python-ecdsa
5749 python-feedparser
5750 python-pymongo
5751 python-pytest
5752 python-pytest-benchmark
5753 python-pytest-enabler
5754 python-setuptools
5755 python-setuptools-scm
5756 python-simplejson
5757 python-sqlalchemy
5758 python-ujson
5759 python-wheel
5760 tzdata-for-tests))
5761 (home-page "https://jsonpickle.github.io/")
5762 (synopsis "Serialize object graphs into JSON")
5763 (description
5764 "This package provides a Python library for serializing any arbitrary
5765object graph to and from JSON.")
5766 (license license:bsd-3)))
5767
5768(define-public python-mcp
5769 (package
5770 (name "python-mcp")
5771 (version "1.25.0")
5772 (source
5773 (origin
5774 (method url-fetch)
5775 (uri (pypi-uri "mcp" version))
5776 (sha256
5777 (base32 "00k87bl4jvnh7hrmicwb2m715fwccvvlanwf8cnlwdphxdhh6can"))))
5778 (build-system pyproject-build-system)
5779 (arguments
5780 (list
5781 ;; XXX: 186 failed, 648 passed, 94 skipped, 54 errors
5782 ;; A lot of tests fail for unclear reasons.
5783 #:tests? #f))
5784 (propagated-inputs
5785 (list python-httpx
5786 python-httpx-sse
5787 python-pydantic
5788 python-sse-starlette))
5789 (native-inputs
5790 (list python-hatchling
5791 python-jsonschema
5792 python-pydantic-settings
5793 python-pytest
5794 python-pytest-examples
5795 python-pytest-xdist
5796 python-starlette
5797 python-typer
5798 python-typing-inspection
5799 python-uvicorn))
5800 (home-page "https://modelcontextprotocol.io")
5801 (synopsis "Model Context Protocol SDK")
5802 (description
5803 "This package provides a Python Software Development Kit for the Model
5804Context Protocol (MCP).")
5805 (license license:expat)))
5806
5807(define-public python-mechanicalsoup
5808 (package
5809 (name "python-mechanicalsoup")
5810 (version "1.4.0")
5811 (source
5812 (origin
5813 (method url-fetch)
5814 (uri (pypi-uri "mechanicalsoup" version))
5815 (sha256
5816 (base32 "0k1ac77ld6jyjm5fsr44399l5gmiwnz5w6s74i3qqx2scfbsgs6w"))))
5817 (build-system pyproject-build-system)
5818 (arguments
5819 (list
5820 #:test-flags
5821 ;; Unclear why test fails.
5822 #~(list "-k" "not test_select_form_associated_elements")
5823 ;; The following dependencies are not directly required, the developer
5824 ;; only pinned versions because of vulnerabilities. They also break
5825 ;; sanity-check because it checks for a python-certifi version which is
5826 ;; more recent than the one available in Guix.
5827 #:phases #~(modify-phases %standard-phases
5828 (add-after 'unpack 'relax-dependencies
5829 (lambda _
5830 (substitute* "requirements.txt"
5831 (("certifi.*") "")
5832 (("urllib3.*") "")))))))
5833 (propagated-inputs
5834 (list python-beautifulsoup4 python-lxml python-requests))
5835 (native-inputs
5836 (list python-pytest
5837 python-pytest-flake8
5838 python-pytest-httpbin
5839 python-pytest-mock
5840 python-requests-mock
5841 python-setuptools
5842 python-wheel))
5843 (home-page "https://mechanicalsoup.readthedocs.io/")
5844 (synopsis "Python library for automating website interaction")
5845 (description
5846 "MechanicalSoup is a Python library for automating interaction with
5847websites. It automatically stores and sends cookies, follows redirects, and can
5848follow links and submit forms. It doesn’t do JavaScript.")
5849 (license license:expat)))
5850
5851(define-public python-hypercorn
5852 (package
5853 (name "python-hypercorn")
5854 (version "0.18.0")
5855 (source
5856 (origin
5857 (method git-fetch)
5858 (uri (git-reference
5859 (url "https://github.com/pgjones/hypercorn")
5860 (commit version)))
5861 (file-name (git-file-name name version))
5862 (sha256
5863 (base32 "0jdi05n5isxn0rysq242p198lz03gbwsnizzb9yp6rxr7ajapns4"))))
5864 (build-system pyproject-build-system)
5865 (propagated-inputs
5866 (list python-aioquic
5867 python-h11
5868 python-h2
5869 python-priority
5870 python-pydata-sphinx-theme
5871 python-sphinxcontrib-mermaid
5872 python-tomli
5873 python-trio
5874 python-typing-extensions
5875 python-uvloop
5876 python-wsproto))
5877 (native-inputs
5878 (list nss-certs-for-test
5879 python-httpx
5880 python-pdm-backend
5881 python-pytest
5882 python-pytest-asyncio
5883 python-pytest-cov
5884 python-pytest-trio))
5885 (home-page "https://github.com/pgjones/hypercorn")
5886 (synopsis "ASGI Server based on Hyper libraries")
5887 (description
5888 "This package provides an ASGI (Asynchronous Server Gateway Interface)
5889Server based on Hyper libraries and inspired by @code{python-gunicorn}.")
5890 (license license:expat)))
5891
5892(define-public python-hyperframe
5893 (package
5894 (name "python-hyperframe")
5895 (version "6.1.0")
5896 (source
5897 (origin
5898 (method url-fetch)
5899 (uri (pypi-uri "hyperframe" version))
5900 (sha256
5901 (base32 "021v58w1b7mbwqkvbz11p3a4qk1sj91jnf6nmgg7ljl502590c7n"))))
5902 (build-system pyproject-build-system)
5903 (native-inputs
5904 (list python-pytest python-setuptools))
5905 (home-page "https://github.com/python-hyper/hyperframe")
5906 (synopsis "HTTP/2 framing layer for Python")
5907 (description
5908 "This library contains the HTTP/2 framing code used in the hyper project.
5909It provides a pure-Python codebase that is capable of decoding a binary stream
5910into HTTP/2 frames.")
5911 (license license:expat)))
5912
5913(define-public python-hpack
5914 (package
5915 (name "python-hpack")
5916 (version "4.1.0")
5917 (source
5918 (origin
5919 ;; PyPI tarball is missing some files necessary for the tests.
5920 (method git-fetch)
5921 (uri (git-reference
5922 (url "https://github.com/python-hyper/hpack")
5923 (commit (string-append "v" version))))
5924 (file-name (git-file-name name version))
5925 (sha256
5926 (base32 "1kgbx38p3a48iz914dqbx7av750a3s3x5kj3rvpcbh23ah75zg5x"))))
5927 (build-system pyproject-build-system)
5928 (native-inputs
5929 (list python-pytest python-setuptools))
5930 (home-page "https://hyper.rtfd.org")
5931 (synopsis "Pure-Python HPACK header compression")
5932 (description
5933 "This module contains a pure-Python HTTP/2 header encoding (HPACK) logic
5934for use in Python programs that implement HTTP/2.")
5935 (license license:expat)))
5936
5937(define-public python-h11
5938 (package
5939 (name "python-h11")
5940 (version "0.16.0")
5941 (source
5942 (origin
5943 (method url-fetch)
5944 (uri (pypi-uri "h11" version))
5945 (sha256
5946 (base32 "1wazxq4b4jg5001h5ypvz9pvrg80pagyd1aqm962wya5rxbbjdaf"))))
5947 (build-system pyproject-build-system)
5948 (native-inputs
5949 (list python-pytest python-setuptools))
5950 (home-page "https://github.com/python-hyper/h11")
5951 (synopsis "Pure-Python, bring-your-own-I/O implementation of HTTP/1.1")
5952 (description
5953 "This is a little HTTP/1.1 library written from scratch in Python, heavily
5954inspired by hyper-h2. It's a bring-your-own-I/O library; h11 contains no IO
5955code whatsoever. This means you can hook h11 up to your favorite network API,
5956and that could be anything you want.")
5957 (license license:expat)))
5958
5959(define-public python-h2
5960 (package
5961 (name "python-h2")
5962 (version "4.3.0")
5963 (source
5964 (origin
5965 (method git-fetch)
5966 (uri (git-reference
5967 (url "https://github.com/python-hyper/h2")
5968 (commit (string-append "v" version))))
5969 (file-name (git-file-name name version))
5970 (sha256
5971 (base32 "00rf0ii4xgdczx5xmv1k6b65q1axvxizbnl20d5vpr512zdix36k"))))
5972 (build-system pyproject-build-system)
5973 (arguments
5974 (list
5975 ;; tests: 1594 passed, 5 deselected
5976 ;; AssertionError: assert '<RemoteSettingsChanged
5977 ;; changed_settings:{ChangedSetting(setting=4, original_value=65536,
5978 ;; new_value=32768)}>' == '<RemoteSettingsChanged
5979 ;; changed_settings:{ChangedSetting(setting=SettingCodes.INITIAL_WINDOW_SIZE,
5980 ;; original_value=65536, new_value=32768)}>'
5981 #:test-flags
5982 #~(list "-k"
5983 (string-join
5984 (list "not test_remotesettingschanged_repr"
5985 ;; This test exceededs the Hypothesis deadline.
5986 #$@(if (target-riscv64?)
5987 #~("test_changing_max_frame_size")
5988 #~())
5989 "test_streamreset_repr"
5990 "test_settingsacknowledged_repr"
5991 "test_connectionterminated_repr[None-None]"
5992 "test_connectionterminated_repr[some"
5993 "test_remotesettingschanged_repr"
5994 "test_streamreset_repr"
5995 "test_settingsacknowledged_repr"
5996 "test_connectionterminated_repr[None-None]"
5997 "test_connectionterminated_repr[some")
5998 " and not "))))
5999 (native-inputs
6000 (list python-pytest
6001 python-setuptools))
6002 (propagated-inputs
6003 (list python-hpack
6004 python-hyperframe))
6005 (home-page "https://github.com/python-hyper/h2")
6006 (synopsis "HTTP/2 State-Machine based protocol implementation")
6007 (description
6008 "This module contains a pure-Python implementation of a HTTP/2 protocol
6009stack. It does not provide a parsing layer, a network layer, or any rules
6010about concurrency. Instead, it's a purely in-memory solution, defined in
6011terms of data actions and HTTP/2 frames. This is one building block of a full
6012Python HTTP implementation.")
6013 (license license:expat)))
6014
6015(define-public python-slixmpp
6016 (package
6017 (name "python-slixmpp")
6018 (version "1.17.0")
6019 (source
6020 (origin
6021 (method git-fetch)
6022 (uri (git-reference
6023 (url "https://codeberg.org/poezio/slixmpp")
6024 (commit (string-append "slix-" version))))
6025 (file-name (git-file-name name version))
6026 (sha256
6027 (base32 "0ml590qs3siajz00f40pdxcz27d41i25ld30819qrf0n9ilqlc6n"))))
6028 (build-system pyproject-build-system)
6029 (arguments
6030 (list
6031 ;; Use the upstream runner: it collects only tests/, skips itests/
6032 ;; which need a live XMPP server, and additionally runs the doctests.
6033 #:test-backend #~'custom
6034 #:test-flags #~'("run_tests.py")
6035 #:phases
6036 #~(modify-phases %standard-phases
6037 (add-after 'unpack 'disable-rust-extension
6038 ;; Upstream marks the Rust JID implementation as optional; skip
6039 ;; it and use the pure Python one in slixmpp/jid.py to avoid
6040 ;; pulling in the Cargo dependency tree.
6041 (lambda _
6042 (substitute* "pyproject.toml"
6043 (("\"setuptools-rust\", ") "")
6044 (("\\[\\[tool\\.setuptools-rust\\.ext-modules\\]\\]")
6045 "[tool.slixmpp-rust-disabled]"))))
6046 (add-before 'build 'set-version
6047 ;; setuptools-scm cannot determine the version without .git.
6048 (lambda _
6049 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
6050 (native-inputs
6051 (list gnupg ; 'gnupg' is required by the XEP-0027 tests.
6052 python-setuptools
6053 python-setuptools-scm))
6054 (propagated-inputs
6055 (list python-aiodns
6056 python-aiohttp
6057 python-cryptography
6058 python-defusedxml
6059 python-emoji
6060 python-pyasn1
6061 python-pyasn1-modules))
6062 (home-page "https://codeberg.org/poezio/slixmpp")
6063 (synopsis "XMPP library without threads")
6064 (description
6065 "Slixmpp is a XMPP library for Python 3.11+. It is a fork of SleekXMPP.
6066Its goal is to only rewrite the core of the library (the low level socket
6067handling, the timers, the events dispatching) in order to remove all
6068threads.")
6069 (license license:expat)))
6070
6071(define-public python-sockjs-tornado
6072 (package
6073 (name "python-sockjs-tornado")
6074 (version "1.0.6")
6075 (source
6076 (origin
6077 (method git-fetch)
6078 (uri (git-reference
6079 (url "https://github.com/mrjoes/sockjs-tornado/")
6080 (commit (string-append "v" version))))
6081 (file-name (git-file-name name version))
6082 (sha256
6083 (base32 "1y4wjca1776nvd0b79pz4d52i312xsyb2vahb883qmrw6s56mynk"))))
6084 (build-system pyproject-build-system)
6085 (arguments
6086 (list
6087 #:tests? #f)) ;The only test in examples/test/test.py runs a server.
6088 (native-inputs (list python-setuptools))
6089 (propagated-inputs (list python-tornado))
6090 (home-page "https://github.com/mrjoes/sockjs-tornado/")
6091 (synopsis
6092 "SockJS Python server implementation on top of the Tornado framework")
6093 (description
6094 "SockJS-tornado provides the server-side counterpart to a SockJS client
6095library, through the Tornado framework.
6096
6097SockJS provides a low-latency, full-duplex, cross-domain communication channel
6098between a web browser and web server.")
6099 (license license:expat)))
6100
6101(define-public python-flask-assets
6102 ;; The latest release still depends on the abandoned flask-script, whereas
6103 ;; at this later commit (already 2 years old at the time of this writing)
6104 ;; the dependency has been lifted.
6105 (let ((commit "62efd23fe95ee6a86fc1cfaa98fc1e2152093557")
6106 (revision "1"))
6107 (package
6108 (name "python-flask-assets")
6109 (version (git-version "2.1.0" revision commit))
6110 (source
6111 (origin
6112 (method git-fetch)
6113 (uri (git-reference
6114 (url "https://github.com/miracle2k/flask-assets/")
6115 (commit commit)))
6116 (file-name (git-file-name name version))
6117 (sha256
6118 (base32 "11q8vm2ipj4xrvawy9vl1l4k8kb4r72ghy1n8xrzci52v6lx8960"))))
6119 (build-system pyproject-build-system)
6120 (propagated-inputs
6121 (list python-flask python-webassets))
6122 (native-inputs
6123 (list nss-certs-for-test python-pytest python-setuptools python-wheel))
6124 (home-page "https://github.com/miracle2k/flask-assets")
6125 (synopsis "Asset management for Flask")
6126 (description "This package integrates @code{webassets} with Flask, adding
6127support for merging, minifying and compiling CSS and Javascript files.")
6128 (license license:bsd-2))))
6129
6130(define-public python-flask-babel
6131 (package
6132 (name "python-flask-babel")
6133 (version "4.0.0")
6134 (source
6135 (origin
6136 (method git-fetch) ;no tests in pypi release
6137 (uri (git-reference
6138 (url "https://github.com/python-babel/flask-babel")
6139 (commit (string-append "v" version))))
6140 (sha256
6141 (base32
6142 "19yq3f5rixbwhv7wxdarvi9hdj98a9dq8y76in9c1q3jxaigw104"))))
6143 (build-system pyproject-build-system)
6144 (native-inputs
6145 (list python-poetry-core
6146 python-pytest
6147 python-pytest-mock))
6148 (propagated-inputs
6149 (list python-babel
6150 python-flask
6151 python-jinja2
6152 python-pytz))
6153 (home-page "https://github.com/python-babel/flask-babel")
6154 (synopsis "Add i18n/l10n support to Flask applications")
6155 (description "This package implements internationalization and localization
6156support for Flask. This is based on the Python babel module as well as pytz -
6157both of which are installed automatically if you install this library.")
6158 (license license:bsd-3)))
6159
6160(define-public python-flask-cors
6161 (package
6162 (name "python-flask-cors")
6163 (version "6.0.2")
6164 (source
6165 (origin
6166 (method git-fetch) ;no tests in PyPI archive
6167 (uri (git-reference
6168 (url "https://github.com/CoryDolphin/flask-cors")
6169 (commit version)))
6170 (file-name (git-file-name name version))
6171 (sha256
6172 (base32 "02y740h951dscgkm7ghsss1bc0m8ymsfdpsimm1j0nkl0zjl6sgm"))))
6173 (build-system pyproject-build-system)
6174 (arguments
6175 (list
6176 #:phases
6177 #~(modify-phases %standard-phases
6178 (add-after 'unpack 'fix-version
6179 (lambda _
6180 ;; Otherwise sanity-check of dependents will fail.
6181 (substitute* "pyproject.toml"
6182 (("version = \"0\\.0\\.1\"" all)
6183 (string-append "version = \"" #$version "\""))))))))
6184 (native-inputs
6185 (list python-pytest
6186 python-setuptools))
6187 (propagated-inputs
6188 (list python-flask
6189 python-werkzeug))
6190 (home-page "https://flask-cors.readthedocs.io/en/latest/")
6191 (synopsis "Handle Cross-Origin Resource Sharing with Flask")
6192 (description
6193 "This package provides a Flask extension for handling @acronym{CORS,Cross
6194Origin Resource Sharing}, making cross-origin AJAX possible.")
6195 (license license:expat)))
6196
6197(define-public python-flask-markdown
6198 (package
6199 (name "python-flask-markdown")
6200 (version "0.3")
6201 (source
6202 (origin
6203 (method git-fetch)
6204 (uri (git-reference
6205 (url "https://github.com/dcolish/flask-markdown")
6206 (commit version)))
6207 (file-name (git-file-name name version))
6208 (sha256
6209 (base32 "1rqqmvjc4rjal6l4y3caxw9b3157pl923h4i1ihbm0gziqv3g2hl"))))
6210 (build-system pyproject-build-system)
6211 (arguments
6212 (list
6213 #:tests? #f ;Tests seem to be incompatible with latest python
6214 #:phases
6215 #~(modify-phases %standard-phases
6216 (add-after 'unpack 'set-version
6217 (lambda _
6218 (substitute* "setup.py"
6219 (("dev")
6220 #$version)))))))
6221 (propagated-inputs (list python-markdown python-flask))
6222 (native-inputs (list python-pynose python-setuptools))
6223 (home-page "https://github.com/dcolish/flask-markdown")
6224 (synopsis "Small extension to help with using Markdown in Flask")
6225 (description
6226 "Flask-Markdown supports several extensions for Markdown and integrates
6227into Jinja2 by default.")
6228 (license license:bsd-3)))
6229
6230(define-public python-flask-session
6231 (package
6232 (name "python-flask-session")
6233 (version "0.8.0")
6234 (source
6235 (origin
6236 (method url-fetch)
6237 (uri (pypi-uri "flask_session" version))
6238 (sha256
6239 (base32
6240 "1zs20zpq6gxz9gsccbd2jrrbbcfvh0x9z9741gkr8dhh07mlbq10"))))
6241 (build-system pyproject-build-system)
6242 (arguments
6243 '(#:tests? #f)) ; Tests require the various storage backends to be present
6244 (native-inputs (list python-flit-core))
6245 (propagated-inputs
6246 (list python-cachelib python-flask python-msgspec))
6247 (home-page "https://github.com/pallets-eco/flask-session")
6248 (synopsis "Adds server-side session support to your Flask application")
6249 (description
6250 "Flask-Session is an extension for Flask that adds support for
6251Server-side sessions, with a variety of different backends for session
6252storage.")
6253 (license license:bsd-3)))
6254
6255(define-public python-html5lib
6256 (package
6257 (name "python-html5lib")
6258 (version "1.1")
6259 (source
6260 (origin
6261 (method url-fetch)
6262 (uri (pypi-uri "html5lib" version))
6263 (sha256
6264 (base32 "0vqlhk0hgbsfkh7ybmby93xhlx8dq6pr5blf356ka3z2c41b9rdj"))))
6265 (build-system pyproject-build-system)
6266 (arguments
6267 '(#:tests? #f)) ;tests depend on dated pytest-expect
6268 (native-inputs
6269 (list python-setuptools))
6270 (propagated-inputs
6271 (list python-six
6272 python-webencodings
6273 ;; Required by Calibre 5.
6274 python-chardet))
6275 (home-page "https://github.com/html5lib/html5lib-python")
6276 (synopsis "Python HTML parser based on the WHATWG HTML specification")
6277 (description
6278 "Html5lib is an HTML parser based on the WHATWG HTML specification
6279and written in Python.")
6280 (license license:expat)))
6281
6282(define-public python-html5-parser
6283 (package
6284 (name "python-html5-parser")
6285 (version "0.4.12")
6286 (source
6287 (origin
6288 (method git-fetch)
6289 (uri (git-reference
6290 (url "https://github.com/kovidgoyal/html5-parser")
6291 (commit (string-append "v" version))))
6292 (file-name (git-file-name name version))
6293 (sha256
6294 (base32 "0axrz2x67nhsh3kijy68wwy5hx8h8418d8g2qz6f3pyxix7gw2fi"))))
6295 (build-system pyproject-build-system)
6296 (arguments
6297 (list
6298 #:phases
6299 #~(modify-phases %standard-phases
6300 (add-before 'build 'set-configure-flags
6301 (lambda _
6302 (setenv "CFLAGS" "-Wno-error=implicit-function-declaration"))))))
6303 (native-inputs (list pkg-config python-setuptools))
6304 (inputs (list libxml2))
6305 (propagated-inputs (list python-lxml python-beautifulsoup4 python-chardet))
6306 (home-page "https://html5-parser.readthedocs.io")
6307 (synopsis "Fast C-based HTML5 parsing for Python")
6308 (description
6309 "This package provides a fast implementation of the HTML5 parsing spec
6310for Python. Parsing is done in C using a variant of the gumbo parser. The
6311gumbo parse tree is then transformed into an lxml tree, also in C, yielding
6312parse times that can be a thirtieth of the html5lib parse times.")
6313 ;; src/as-python-tree.[c|h] are licensed GPL3. The other files
6314 ;; indicate ASL2.0, including the LICENSE file for the whole project.
6315 (license (list license:asl2.0 license:gpl3))))
6316
6317(define-public python-html5tagger
6318 (package
6319 (name "python-html5tagger")
6320 (version "2.0.0")
6321 (source (origin
6322 (method url-fetch)
6323 (uri (pypi-uri "html5tagger" version))
6324 (sha256
6325 (base32
6326 "090nmjhr0yj3x5iy9zmbmv07dpxn234dqpi2lglk0fa4aj83rvhd"))))
6327 (build-system pyproject-build-system)
6328 (arguments
6329 (list #:tests? #f)) ;no tests in PyPI or Git
6330 (native-inputs
6331 (list python-hatch-vcs python-hatchling))
6332 (home-page "https://github.com/sanic-org/html5tagger")
6333 (synopsis "Create HTML documents from Python")
6334 (description
6335 "@code{html5tagger} provides a simplified HTML5 syntax that can
6336be written directly in Python without templates.")
6337 (license license:unlicense)))
6338
6339(define-public python-minio
6340 (package
6341 (name "python-minio")
6342 (version "7.1.9")
6343 (source
6344 (origin
6345 (method git-fetch)
6346 (uri (git-reference
6347 (url "https://github.com/minio/minio-py")
6348 (commit version)))
6349 (file-name (git-file-name name version))
6350 (sha256
6351 (base32 "01734ki3p7844dya366hy1kvmmgy3xr0l0zbkchnnv4p611510vc"))))
6352 (build-system pyproject-build-system)
6353 (arguments
6354 (list
6355 #:test-flags
6356 ;; XXX: requires network access.
6357 #~(list "--ignore=tests/unit/credentials_test.py")))
6358 (native-inputs (list python-pytest python-setuptools))
6359 (propagated-inputs
6360 (list python-certifi python-dateutil python-pytz python-urllib3))
6361 (home-page "https://github.com/minio/minio-py")
6362 (synopsis "Programmatically access Amazon S3 from Python")
6363 (description
6364 "This package provides a Python library for interacting with any
6365Amazon S3 compatible object storage server.")
6366 (license license:asl2.0)))
6367
6368(define-public python-pycrdt
6369 (package
6370 (name "python-pycrdt")
6371 (version "0.13.0")
6372 (source
6373 (origin
6374 (method git-fetch)
6375 (uri (git-reference
6376 (url "https://github.com/y-crdt/pycrdt")
6377 (commit version)))
6378 (file-name (git-file-name name version))
6379 (sha256
6380 (base32 "18mnjbxdlra1w3jl42bf1jb25z9j3inh6s61qighqrvnylgxvxc1"))))
6381 (build-system pyproject-build-system)
6382 (arguments
6383 (list
6384 #:imported-modules `(,@%cargo-build-system-modules
6385 ,@%pyproject-build-system-modules)
6386 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
6387 (guix build pyproject-build-system)
6388 (guix build utils))
6389 #:test-flags #~(list "--ignore=tests/test_types.py")
6390 #:phases
6391 #~(modify-phases %standard-phases
6392 (add-after 'unpack 'relax-requirements
6393 (lambda _
6394 (substitute* "pyproject.toml"
6395 (("requires = \\[\"maturin>=.*\"\\]")
6396 "requires = [\"maturin\"]"))))
6397 (add-after 'unpack 'prepare-cargo-build-system
6398 (lambda args
6399 (for-each
6400 (lambda (phase)
6401 (format #t "Running cargo phase: ~a~%" phase)
6402 (apply (assoc-ref cargo:%standard-phases phase)
6403 #:cargo-target #$(cargo-triplet)
6404 args))
6405 '(unpack-rust-crates
6406 configure
6407 check-for-pregenerated-files
6408 patch-cargo-checksums)))))))
6409 (propagated-inputs
6410 (list python-anyio
6411 python-typing-extensions))
6412 (inputs (cargo-inputs 'pycrdt))
6413 (native-inputs
6414 (append
6415 (list maturin
6416 python-pydantic
6417 python-pytest
6418 rust
6419 `(,rust "cargo"))
6420 (or (and=> (%current-target-system)
6421 (compose list make-rust-sysroot))
6422 '())))
6423 (home-page "https://github.com/y-crdt/pycrdt")
6424 (synopsis "Python CRDTs library ported from Yjs framework")
6425 (description
6426 "Conflict-free Replicated Data Types (CRDTs) allow creating shared
6427documents that can automatically merge changes made concurrently on different
6428copies of the data. When the data lives on different machines, they make it
6429possible to build distributed systems that work with local data, leaving the
6430synchronization and conflict resolution with remote data to the CRDT
6431algorithm, which ensures that all data replicas eventually converge to the
6432same state.
6433
6434This is a Python CRDT library that provides bindings for Yrs, the Rust port of
6435the Yjs framework.")
6436 (license license:expat)))
6437
6438(define-public python-pycrdt-store
6439 (package
6440 (name "python-pycrdt-store")
6441 (version "0.1.3")
6442 (source
6443 (origin
6444 (method git-fetch)
6445 (uri (git-reference
6446 (url "https://github.com/y-crdt/pycrdt-store")
6447 (commit version)))
6448 (file-name (git-file-name name version))
6449 (sha256
6450 (base32 "18yvv5lgxb4v0qlbi8bbkcm1666nxbkmhbx445sxpzab7027fl1a"))))
6451 (build-system pyproject-build-system)
6452 (propagated-inputs
6453 (list python-anyio
6454 python-pycrdt
6455 python-sqlite-anyio))
6456 (native-inputs
6457 (list python-hatchling
6458 python-pytest
6459 python-pytest-rerunfailures
6460 python-trio))
6461 (home-page "https://github.com/y-crdt/pycrdt-store")
6462 (synopsis "Persistent storage for pycrdt")
6463 (description
6464 "This package provides a persistent storage feature for
6465@code{python-pycrdt}.")
6466 (license license:expat)))
6467
6468(define-public python-pycrdt-websocket
6469 (package
6470 (name "python-pycrdt-websocket")
6471 (version "0.16.0")
6472 (source
6473 (origin
6474 (method git-fetch)
6475 (uri (git-reference
6476 (url "https://github.com/y-crdt/pycrdt-websocket")
6477 (commit version)))
6478 (file-name (git-file-name name version))
6479 (sha256
6480 (base32 "1bcxivdra0v5fwlz3hcz98vxi61884bfvcwifsdp3mji28iprv22"))))
6481 (build-system pyproject-build-system)
6482 (arguments
6483 (list
6484 ;; These tests require the unpackaged Yjs.
6485 #:test-flags #~(list "--deselect=tests/test_pycrdt_yjs.py")))
6486 (propagated-inputs
6487 (list python-anyio
6488 python-pycrdt
6489 python-pycrdt-store))
6490 (native-inputs
6491 (list nss-certs-for-test
6492 python-hatchling
6493 python-hypercorn
6494 python-httpx-ws
6495 python-pytest))
6496 (home-page "https://github.com/y-crdt/pycrdt-websocket")
6497 (synopsis "WebSocket connector for pycrdt")
6498 (description "This package provides an asynchronous @code{WebSocket}
6499connector for @code{python-pycrdt}.")
6500 (license license:expat)))
6501
6502(define-public python-pycurl
6503 (package
6504 (name "python-pycurl")
6505 (version "7.45.7")
6506 (source
6507 (origin
6508 (method git-fetch)
6509 (uri (git-reference
6510 (url "https://github.com/pycurl/pycurl")
6511 (commit (string-append
6512 "REL_" (string-replace-substring version "." "_")))))
6513 (file-name (git-file-name name version))
6514 (sha256
6515 (base32 "1gkbv3cvrwd7z3vgqlvcf0wpvm3g6dia8xbx3g4bplnb2cascfiq"))))
6516 (build-system pyproject-build-system)
6517 (arguments
6518 '(#:test-flags
6519 ;; The test suite is not thread safe:
6520 ;; - some tests want to use the same port: address already in use
6521 ;; - some tests use signal.Signal, i.e. main-thread only
6522 (list "-k" (string-append
6523 ;; OSError: tests/fake-curl/libcurl/with_gnutls.so: cannot
6524 ;; open shared object file: No such file or directory
6525 "not test_libcurl_ssl_gnutls"
6526 ;; OSError: tests/fake-curl/libcurl/with_nss.so: cannot
6527 ;; open shared object file: No such file or directory
6528 " and not test_libcurl_ssl_nss"
6529 ;; OSError: tests/fake-curl/libcurl/with_openssl.so: cannot
6530 ;; open shared object file: No such file or directory
6531 " and not test_libcurl_ssl_openssl"
6532 ;; "A requested feature, protocol or option was not
6533 ;; found built-in in this libcurl due to a build-time
6534 ;; decision."
6535 " and not test_issuercert_blob"
6536 " and not test_krb4level"
6537 " and not test_krblevel"))
6538 #:phases (modify-phases %standard-phases
6539 (add-before 'build 'configure-tls-backend
6540 (lambda _
6541 ;; XXX: PycURL fails to automatically determine which
6542 ;; TLS backend to use when cURL is built with
6543 ;; --disable-static. See setup.py and
6544 ;; <https://github.com/pycurl/pycurl/pull/147>.
6545 (setenv "PYCURL_SSL_LIBRARY" "gnutls"))))))
6546 (native-inputs
6547 (list python-bottle
6548 python-flaky
6549 python-flask
6550 python-pytest
6551 python-setuptools
6552 python-wheel))
6553 (inputs
6554 (list curl gnutls))
6555 (home-page "http://pycurl.io/")
6556 (synopsis "Lightweight Python wrapper around libcurl")
6557 (description "Pycurl is a lightweight wrapper around libcurl. It provides
6558high-speed transfers via libcurl and frequently outperforms alternatives.")
6559
6560 ;; Per 'README.rst', this is dual-licensed: users can redistribute pycurl
6561 ;; under the terms of LGPLv2.1+ or Expat.
6562 (license (list license:lgpl2.1+ license:expat))))
6563
6564(define-public python-stamina
6565 (package
6566 (name "python-stamina")
6567 (version "25.2.0")
6568 (source
6569 (origin
6570 (method git-fetch)
6571 (uri (git-reference
6572 (url "https://github.com/hynek/stamina")
6573 (commit version)))
6574 (file-name (git-file-name name version))
6575 (sha256
6576 (base32 "100iadhzmxbavk0ras3srnagh9af5pxbqrm4mrrkyy69knih9jiy"))))
6577 (build-system pyproject-build-system)
6578 (native-inputs
6579 (list python-pytest
6580 python-anyio
6581 python-dirty-equals
6582 python-hatch-fancy-pypi-readme
6583 python-hatch-vcs
6584 python-hatchling
6585 python-structlog))
6586 (propagated-inputs
6587 (list python-tenacity
6588 python-typing-extensions))
6589 (home-page "https://github.com/hynek/stamina")
6590 (synopsis "Retries library for Python")
6591 (description
6592 "@code{stamina} is an opinionated wrapper around the
6593@url{https://tenacity.readthedocs.io/en/latest/, Tenacity} package.")
6594 (license license:expat)))
6595
6596(define-public python-stripe
6597 (package
6598 (name "python-stripe")
6599 (version "13.2.0")
6600 (source
6601 (origin
6602 (method git-fetch)
6603 (uri (git-reference
6604 (url "https://github.com/stripe/stripe-python")
6605 (commit (string-append "v" version))))
6606 (file-name (git-file-name name version))
6607 (sha256
6608 (base32 "0f0d1hqias3qylrhk56w055lqrlzjs9s7wxva30v54ykmn9nj6dx"))))
6609 (build-system pyproject-build-system)
6610 (arguments
6611 '(#:tests? #f)) ;; tests require network
6612 (native-inputs
6613 (list python-flit-core))
6614 (propagated-inputs
6615 (list python-httpx
6616 python-requests))
6617 (home-page "https://github.com/stripe/stripe-python")
6618 (synopsis "Python bindings for the Stripe financial services' API")
6619 (description "This package provides access to the Stripe financial
6620services' API. It includes a pre-defined set of classes for API resources
6621that initialize themselves dynamically from API responses which makes it
6622compatible with a wide range of versions of the Stripe API.")
6623 (license license:expat)))
6624
6625(define-public python-stripe-12
6626 (hidden-package
6627 (package/inherit python-stripe
6628 (name "python-stripe")
6629 (version "12.5.1")
6630 (source
6631 (origin
6632 (inherit (package-source python-stripe))
6633 (uri (git-reference
6634 (url "https://github.com/stripe/stripe-python")
6635 (commit (string-append "v" version))))
6636 (file-name (git-file-name name version))
6637 (sha256 (base32
6638 "0jgixfb8ydlx387vm7rdaqrzsiqbvi99nszrpb1ghjqyn755xigd"))))
6639 (native-inputs
6640 (list python-setuptools)))))
6641
6642(define-public python-tldextract
6643 (package
6644 (name "python-tldextract")
6645 (version "5.3.0")
6646 (source
6647 (origin
6648 (method url-fetch)
6649 (uri (pypi-uri "tldextract" version))
6650 (sha256
6651 (base32 "02c6cyh8f3dagcw786m9nl5y0n3xa98p5mb7d7xfr84l2l5bglmk"))))
6652 (build-system pyproject-build-system)
6653 (arguments
6654 (list
6655 #:phases
6656 #~(modify-phases %standard-phases
6657 (add-after 'unpack 'relax-requirements
6658 (lambda _
6659 (substitute* "pyproject.toml"
6660 (("\"requests-file.*\",")
6661 "\"requests-file\",")))))))
6662 (native-inputs
6663 (list nss-certs-for-test
6664 python-pytest
6665 python-pytest-mock
6666 python-responses
6667 python-setuptools
6668 python-setuptools-scm
6669 python-syrupy))
6670 (propagated-inputs
6671 (list python-filelock
6672 python-idna
6673 python-requests
6674 python-requests-file))
6675 (home-page "https://github.com/john-kurkowski/tldextract")
6676 (synopsis
6677 "Separate the TLD from the registered domain and subdomains of a URL")
6678 (description
6679 "TLDExtract accurately separates the TLD from the registered domain and
6680subdomains of a URL, using the Public Suffix List. By default, this includes
6681the public ICANN TLDs and their exceptions. It can optionally support the
6682Public Suffix List's private domains as well.")
6683 (license license:bsd-3)))
6684
6685(define-public python-tracerite
6686 (package
6687 (name "python-tracerite")
6688 (version "2.5.2")
6689 (source
6690 (origin
6691 (method url-fetch)
6692 (uri (pypi-uri "tracerite" version))
6693 (sha256
6694 (base32 "087i51ybbj62nx5jzx8znhqb6cd7279mi7v9j6lrxf8lhb81nr3r"))))
6695 (build-system pyproject-build-system)
6696 (arguments
6697 (list #:tests? #f)) ;no tests in PyPI or Git
6698 (native-inputs
6699 (list python-hatch-vcs python-hatchling))
6700 (propagated-inputs
6701 (list python-html5tagger))
6702 (home-page "https://github.com/sanic-org/tracerite")
6703 (synopsis "Human-readable HTML tracebacks")
6704 (description
6705 "@code{tracerite} converts Python tracebacks into useful error messages
6706in human-readable HTML format.")
6707 (license license:unlicense)))
6708
6709(define-public python-trio-websocket
6710 (package
6711 (name "python-trio-websocket")
6712 (version "0.12.2")
6713 (source
6714 (origin
6715 (method git-fetch)
6716 (uri (git-reference
6717 (url "https://github.com/HyperionGray/trio-websocket")
6718 (commit version)))
6719 (file-name (git-file-name name version))
6720 (sha256
6721 (base32 "1lm712gakpskcn3adna22kj8m1hspz9l68pmlziklr0ycphmyqac"))))
6722 (build-system pyproject-build-system)
6723 (native-inputs
6724 (list python-pytest
6725 python-pytest-trio
6726 python-setuptools
6727 python-trustme))
6728 (propagated-inputs
6729 (list python-outcome
6730 python-trio
6731 python-wsproto))
6732 (home-page "https://github.com/HyperionGray/trio-websocket")
6733 (synopsis "WebSocket library for Trio")
6734 (description "This library implements both server and client aspects of
6735the @url{https://tools.ietf.org/html/rfc6455, the WebSocket protocol},
6736striving for safety, correctness, and ergonomics. It is based on the
6737@url{https://wsproto.readthedocs.io/en/latest/, wsproto project}, which is a
6738@url{https://sans-io.readthedocs.io/, Sans-IO} state machine that implements
6739the majority of the WebSocket protocol, including framing, codecs, and events.
6740This library handles I/O using @url{https://trio.readthedocs.io/en/latest/,
6741the Trio framework}.")
6742 (license license:expat)))
6743
6744(define-public python-txacme
6745 ;; 0.9.3 tag was placed in 2020 and there a lot of changes providing
6746 ;; compatibility with twisted, use the latest commit from trunk branch.
6747 ;;
6748 ;;See: <https://github.com/twisted/txacme/issues/165>.
6749 (let ((commit "ac18f92f6dde971a6b38f2ecfae44665815db583")
6750 (revision "0"))
6751 (package
6752 (name "python-txacme")
6753 (version (git-version "0.9.3" revision commit))
6754 (source
6755 (origin
6756 (method git-fetch) ;no fresh release in PyPI
6757 (uri (git-reference
6758 (url "https://github.com/twisted/txacme")
6759 (commit commit)))
6760 (file-name (git-file-name name version))
6761 (sha256
6762 (base32 "0mgdfxldv8qflbn75ywslbarnd4i3l7c4krs4aibl2dpryclsjzs"))))
6763 (build-system pyproject-build-system)
6764 (arguments
6765 (list #:test-backend #~'custom
6766 #:test-flags #~(list "-m" "twisted.trial" "txacme")))
6767 (native-inputs
6768 (list python-setuptools))
6769 (propagated-inputs
6770 (list python-acme
6771 python-attrs
6772 python-eliot
6773 python-josepy
6774 python-pem
6775 python-treq
6776 python-twisted
6777 python-txsni))
6778 (home-page "https://github.com/twisted/txacme")
6779 (synopsis "Twisted implexmentation of the ACME protocol")
6780 (description
6781 "ACME is Automatic Certificate Management Environment, a protocol that
6782allows clients and certificate authorities to automate verification and
6783certificate issuance. The ACME protocol is used by the free Let's Encrypt
6784Certificate Authority.
6785
6786txacme is an implementation of the protocol for Twisted, the event-driven
6787networking engine for Python.")
6788 (license license:expat))))
6789
6790(define-public python-txaio
6791 (package
6792 (name "python-txaio")
6793 (version "25.9.2")
6794 (source
6795 (origin
6796 (method url-fetch)
6797 (uri (pypi-uri "txaio" version))
6798 (sha256
6799 (base32 "16ch62yk2gdikkak113h6qw13ns9ksca817hky0vabn0fyh08874"))))
6800 (build-system pyproject-build-system)
6801 (native-inputs
6802 (list python-pytest
6803 python-setuptools))
6804 (home-page "https://github.com/crossbario/txaio")
6805 (synopsis "Compatibility layer between Python asyncio and Twisted")
6806 (description
6807 "Txaio provides a compatibility layer between the Python @code{asyncio}
6808 bsmodule and @code{Twisted}.")
6809 (license license:expat)))
6810
6811;; XXX: Potentially abandonware since 2017, consider to remove when nothing
6812;; depends on it or fails to build.
6813(define-public python-txamqp
6814 (package
6815 (name "python-txamqp")
6816 (version "0.8.2")
6817 (source
6818 (origin
6819 (method url-fetch)
6820 (uri (pypi-uri "txAMQP" version))
6821 (sha256
6822 (base32 "0jd9864k3csc06kipiwzjlk9mq4054s8kzk5q1cfnxj8572s4iv4"))))
6823 (build-system pyproject-build-system)
6824 (arguments
6825 (list #:tests? #f)) ;all tests failed
6826 (native-inputs
6827 (list python-setuptools))
6828 (propagated-inputs
6829 (list python-six python-twisted))
6830 (home-page "https://github.com/txamqp/txamqp")
6831 (synopsis "Communicate with AMQP peers and brokers using Twisted")
6832 (description
6833 "This package provides a Python library for communicating with AMQP peers
6834and brokers using the asynchronous networking framework Twisted. It contains
6835all the necessary code to connect, send and receive messages to/from an
6836AMQP-compliant peer or broker (Qpid, OpenAMQ, RabbitMQ) using Twisted. It
6837also includes support for using Thrift RPC over AMQP in Twisted
6838applications.")
6839 (license license:asl2.0)))
6840
6841(define-public python-txsni
6842 (package
6843 (name "python-txsni")
6844 (version "0.2.0")
6845 (source
6846 (origin
6847 (method git-fetch)
6848 (uri (git-reference
6849 (url "https://github.com/glyph/txsni")
6850 (commit (string-append "v" version))))
6851 (file-name (git-file-name name version))
6852 (sha256
6853 (base32 "1fl8xi7vl24hwbva5v41l6nsrbkj2l2mlsgcvdjxgph61aznwywq"))))
6854 (build-system pyproject-build-system)
6855 (arguments
6856 (list #:test-backend #~'custom
6857 #:test-flags #~(list "-m" "twisted.trial"
6858 "--temp-directory=/tmp/_trial_temp"
6859 "txsni")))
6860 (native-inputs
6861 (list python-setuptools))
6862 (propagated-inputs
6863 (list python-pyopenssl
6864 python-service-identity
6865 python-twisted))
6866 (home-page "https://github.com/glyph/txsni")
6867 (synopsis "Run TLS servers with Twisted")
6868 (description
6869 "This package provides an easy-to-use SNI endpoint for use with the
6870Twisted web framework.")
6871 (license license:expat)))
6872
6873(define-public python-txtorcon
6874 (package
6875 (name "python-txtorcon")
6876 (version "24.8.0")
6877 (source
6878 (origin
6879 (method url-fetch)
6880 (uri (pypi-uri "txtorcon" version))
6881 (sha256
6882 (base32 "1l4ajw4h7nay4vmllh6cs7zh3hnh8vj4yvgfnq3m734wil9ikzmy"))))
6883 (build-system pyproject-build-system)
6884 (native-inputs
6885 (list python-pytest
6886 python-setuptools
6887 python-wheel))
6888 (inputs
6889 (list lsof))
6890 (propagated-inputs
6891 (list python-automat
6892 python-idna
6893 python-incremental
6894 python-pyopenssl
6895 python-service-identity
6896 python-twisted
6897 python-zope-interface))
6898 (home-page "https://github.com/meejah/txtorcon")
6899 (synopsis "Twisted-based Tor controller client")
6900 (description
6901 "This package provides a Twisted-based Tor controller client,with
6902state-tracking and configuration abstractions.")
6903 (license license:expat)))
6904
6905(define-public python-url-normalize
6906 (package
6907 (name "python-url-normalize")
6908 (version "2.2.1")
6909 (source
6910 (origin
6911 (method git-fetch) ; no tests in PyPI release
6912 (uri (git-reference
6913 (url "https://github.com/niksite/url-normalize")
6914 (commit (string-append "v" version))))
6915 (file-name (git-file-name name version))
6916 (sha256
6917 (base32 "1yhsf4sk6l6nznpnqigisbfz690a4g342dsk2n6dggh7q4l3amk4"))))
6918 (build-system pyproject-build-system)
6919 (arguments
6920 (list
6921 #:test-flags #~(list "--ignore=tests/test_cli.py")))
6922 (native-inputs
6923 (list python-pytest python-pytest-socket python-setuptools))
6924 (propagated-inputs
6925 (list python-idna))
6926 (home-page "https://github.com/niksite/url-normalize")
6927 (synopsis "URL normalization for Python")
6928 (description
6929 "This package provides a URI Normalization function with following
6930features:
6931@itemize
6932@item take care of IDN domains
6933@item always provide the URI scheme in lowercase characters
6934@item always provide the host, if any, in lowercase characters
6935@item only perform percent-encoding where it is essential
6936@item always use uppercase A-through-F characters when percent-encoding
6937@item prevent dot-segments appearing in non-relative URI paths
6938@item for schemes that define a default authority, use an empty authority if
6939the default is desired
6940@item for schemes that define an empty path to be equivalent to a path of
6941@code{/}, use @code{/}
6942@item for schemes that define a port, use an empty port if the default is
6943desired
6944@item all portions of the URI must be utf-8 encoded NFC from Unicode strings
6945@end itemize")
6946 (license license:expat)))
6947
6948(define-public python-waitress
6949 (package
6950 (name "python-waitress")
6951 (version "3.0.2")
6952 (source
6953 (origin
6954 (method url-fetch)
6955 (uri (pypi-uri "waitress" version))
6956 (sha256
6957 (base32
6958 "07y3xyx2006f2ni5d55byh3y7w4kcg9xww7vmfjasi0cmzralak8"))))
6959 (build-system pyproject-build-system)
6960 (arguments
6961 (list
6962 ;; https://github.com/Pylons/waitress/issues/443
6963 #:test-flags #~(list "-k" "not test_service_port")))
6964 (native-inputs (list python-pytest python-setuptools))
6965 (home-page "https://github.com/Pylons/waitress")
6966 (synopsis "Waitress WSGI server")
6967 (description
6968 "Waitress is meant to be a production-quality pure-Python WSGI server
6969with very acceptable performance.")
6970 (license license:zpl2.1)))
6971
6972(define-public python-weasel
6973 (package
6974 (name "python-weasel")
6975 (version "1.0.0")
6976 (source
6977 (origin
6978 (method git-fetch)
6979 (uri (git-reference
6980 (url "https://github.com/explosion/weasel/")
6981 (commit (string-append "release-v" version))))
6982 (file-name (git-file-name name version))
6983 (sha256
6984 (base32 "1sxcxri9hl9rs1kvdrv81g6mlg7lifhq9xacskracz63v4nyh8na"))))
6985 (build-system pyproject-build-system)
6986 (arguments
6987 (list
6988 #:test-flags
6989 ;; This test raises an error, but not the one expected by pytest.
6990 #~(list (string-append "--deselect=weasel/tests/test_validation.py::"
6991 "test_project_config_interpolation[10_0]")
6992 ;; Network access is required.
6993 #$@(map (lambda (test) (string-append "--deselect="
6994 "weasel/tests/cli/"
6995 test))
6996 (list "test_cli.py::test_project_git_dir_asset"
6997 "test_cli.py::test_project_git_file_asset"
6998 "test_cli_app.py::test_project_assets")))))
6999 (native-inputs
7000 (list python-pytest
7001 python-setuptools))
7002 (propagated-inputs
7003 (list python-cloudpathlib
7004 python-confection
7005 python-httpx
7006 python-packaging
7007 python-pydantic
7008 python-smart-open
7009 python-srsly
7010 python-typer
7011 python-wasabi))
7012 (home-page "https://github.com/explosion/weasel/")
7013 (synopsis "Small and easy workflow system")
7014 (description
7015 "This package provides a minimalistic workflow system to manage and
7016share end-to-end workflows for different use cases and domains.")
7017 (license license:expat)))
7018
7019(define-public python-webencodings
7020 (package
7021 (name "python-webencodings")
7022 (version "0.5.1")
7023 (source
7024 (origin
7025 (method url-fetch)
7026 (uri (pypi-uri "webencodings" version))
7027 (sha256
7028 (base32 "08qrgrc4hrximb2gqnl69g01s93rhf2842jfxdjljc1dbwj1qsmk"))))
7029 (build-system pyproject-build-system)
7030 (arguments
7031 (list #:test-flags #~(list "webencodings/tests.py")))
7032 (native-inputs
7033 (list python-pytest python-setuptools))
7034 (home-page "https://github.com/SimonSapin/python-webencodings")
7035 (synopsis "Character encoding aliases for legacy web content")
7036 (description
7037 "In order to be compatible with legacy web content when interpreting
7038something like @code{Content-Type: text/html; charset=latin1}, tools need to
7039use a particular set of aliases for encoding labels as well as some overriding
7040rules. For example, @code{US-ASCII} and @code{iso-8859-1} on the web are
7041actually aliases for @code{windows-1252}, and a @code{UTF-8} or @code{UTF-16}
7042BOM takes precedence over any other encoding declaration. The WHATWG
7043@url{https://encoding.spec.whatwg.org/,Encoding} standard defines all such
7044details so that implementations do not have to reverse-engineer each other.
7045
7046This module implements the Encoding standard and has encoding labels and BOM
7047detection, but the actual implementation for encoders and decoders is
7048Python’s.")
7049 (license license:bsd-3)))
7050
7051(define-public python-omnipath
7052 (package
7053 (name "python-omnipath")
7054 (version "1.0.10")
7055 (source
7056 (origin
7057 (method git-fetch)
7058 (uri (git-reference
7059 (url "https://github.com/saezlab/omnipath/")
7060 (commit (string-append "v" version))))
7061 (file-name (git-file-name name version))
7062 (sha256
7063 (base32 "0jnc7nsn6n5hqx5wlk928b7xmg0mpfqy8al9w2p707ihcwh4s1rf"))))
7064 (build-system pyproject-build-system)
7065 (arguments
7066 (list
7067 #:test-flags '(list "-k"
7068 (string-append
7069 ;; These require internet access
7070 "not test_download_homologene"
7071 " and not test_complex_genes"
7072 ;; These tests are not compatible with pandas 3
7073 " and not test_no_dtype_conversion"
7074 " and not test_strip_resource_label_no_func"
7075 " and not test_split_unique_join_no_func"
7076 " and not test_auto_dtype"))
7077 #:phases
7078 #~(modify-phases %standard-phases
7079 (add-after 'unpack 'set-home
7080 (lambda _
7081 (setenv "HOME" "/tmp"))))))
7082 (propagated-inputs (list python-attrs
7083 python-docrep
7084 python-inflect
7085 python-networkx
7086 python-packaging
7087 python-pandas
7088 python-requests
7089 python-tqdm
7090 python-typing-extensions
7091 python-urllib3
7092 python-wrapt))
7093 (native-inputs (list nss-certs-for-test
7094 python-bump2version
7095 python-hatchling
7096 python-pytest
7097 python-pytest-mock
7098 python-pytest-socket
7099 python-requests-mock))
7100 (home-page "https://omnipathdb.org/")
7101 (synopsis "Python client for the OmniPath web service")
7102 (description "This package provides a Python client for the OmniPath web
7103service.")
7104 (license license:expat)))
7105
7106(define-public python-openai
7107 (package
7108 (name "python-openai")
7109 (version "2.42.0")
7110 (source
7111 (origin
7112 (method git-fetch)
7113 (uri (git-reference
7114 (url "https://github.com/openai/openai-python")
7115 (commit (string-append "v" version))))
7116 (file-name (git-file-name name version))
7117 (sha256
7118 (base32 "1p0vzy34cx2gfkhsqg2kxzam51cjlpa99q0skzj4426sx2hsw3g6"))))
7119 (build-system pyproject-build-system)
7120 (arguments
7121 (list
7122 #:test-flags
7123 ;; These require internet access and an openai API key.
7124 #~(list "--ignore=openai/tests/asyncio/test_endpoints.py"
7125 "--ignore=openai/tests/test_endpoints.py"
7126 "--ignore-glob=tests/api_resources/*")))
7127 (propagated-inputs
7128 (list python-aiohttp
7129 python-distro
7130 python-httpx
7131 python-jiter
7132 python-pydantic
7133 python-requests
7134 python-tqdm
7135 python-typing-extensions))
7136 (native-inputs
7137 (list nss-certs-for-test
7138 python-dirty-equals
7139 python-hatchling
7140 python-hatch-fancy-pypi-readme
7141 python-inline-snapshot
7142 python-pytest
7143 python-pytest-asyncio
7144 python-pytest-mock
7145 python-pytest-xdist
7146 python-respx
7147 python-rich
7148 python-setuptools))
7149 (home-page "https://github.com/openai/openai-python")
7150 (synopsis "Python client library for the OpenAI API")
7151 (description "This package provides a Python client library for the
7152OpenAI API.")
7153 (license license:expat)))
7154
7155(define-public python-openapi-schema-validator
7156 (package
7157 (name "python-openapi-schema-validator")
7158 (version "0.6.2")
7159 (source
7160 (origin
7161 (method git-fetch) ;no tests in pypi release
7162 (uri (git-reference
7163 (url "https://github.com/p1c2u/openapi-schema-validator")
7164 (commit version)))
7165 (file-name (git-file-name name version))
7166 (sha256
7167 (base32
7168 "0pgsm1x7lhc5ryj4l45ik8m5x9gqyi50dkflaiqqr4fnl0bsbx09"))))
7169 (build-system pyproject-build-system)
7170 (arguments
7171 (list
7172 #:test-flags
7173 ;; This one returns 5 instead of 4 elements
7174 '(list "-k" "not test_array_prefixitems_invalid")
7175 #:phases
7176 #~(modify-phases %standard-phases
7177 ;; See https://github.com/python-openapi/openapi-schema-validator/issues/204
7178 (add-after 'unpack 'relax-requirements
7179 (lambda _
7180 (substitute* "pyproject.toml"
7181 (("jsonschema-specifications.*")
7182 "jsonschema-specifications = \">=2023.5.2\"\n")))))))
7183 (native-inputs (list python-poetry-core python-pytest))
7184 (propagated-inputs
7185 (list python-isodate
7186 python-jsonschema
7187 python-rfc3339-validator
7188 python-strict-rfc3339))
7189 (home-page "https://github.com/p1c2u/openapi-schema-validator")
7190 (synopsis "OpenAPI schema validation library for Python")
7191 (description "Openapi-schema-validator is a Python library that validates
7192a schema against:
7193@itemize
7194@item OpenAPI Schema Specification v3.0 which is an extended subset of the
7195JSON Schema Specification Wright Draft 00.
7196@item OpenAPI Schema Specification v3.1 which is an extended superset of the
7197JSON Schema Specification Draft 2020-12.
7198@end itemize")
7199 (license license:bsd-3)))
7200
7201(define-public python-openapi-spec-validator
7202 (package
7203 (name "python-openapi-spec-validator")
7204 (version "0.7.1")
7205 (source
7206 (origin
7207 (method git-fetch) ;no tests in pypi release
7208 (uri (git-reference
7209 (url "https://github.com/p1c2u/openapi-spec-validator")
7210 (commit version)))
7211 (file-name (git-file-name name version))
7212 (sha256
7213 (base32
7214 "0s5yd4dbr6knwd2g1g4v2931k14n1lm80l11n2ija18yfis8yisz"))))
7215 (build-system pyproject-build-system)
7216 (arguments
7217 (list
7218 ;; These tests attempt to fetch resources from the Internet
7219 #:test-flags '(list "--ignore-glob=tests/integration/validation/**"
7220 "-k" "not example")))
7221 (native-inputs
7222 (list python-poetry-core
7223 python-pytest))
7224 (propagated-inputs
7225 (list python-jsonschema
7226 python-jsonschema-path
7227 python-lazy-object-proxy
7228 python-openapi-schema-validator
7229 python-pyyaml
7230 python-requests
7231 python-setuptools))
7232 (home-page "https://github.com/p1c2u/openapi-spec-validator")
7233 (synopsis "OpenAPI spec validator")
7234 (description "OpenAPI Spec Validator is a Python library that validates an
7235OpenAPI specification against the OpenAPI 2.0 (also known as Swagger), OpenAPI
72363.0 and OpenAPI 3.1 specifications. The validator aims to check for full
7237compliance with the specification.")
7238 (license license:asl2.0)))
7239
7240(define-public python-openapi-core
7241 (package
7242 (name "python-openapi-core")
7243 (version "0.19.4")
7244 (source
7245 (origin
7246 (method git-fetch)
7247 (uri (git-reference
7248 (url "https://github.com/p1c2u/openapi-core")
7249 (commit version)))
7250 (file-name (git-file-name name version))
7251 (sha256
7252 (base32
7253 "092sj2933jmvq5r76khr0vphih490vls1ga3s43gz8i47aqaxx96"))))
7254 (build-system pyproject-build-system)
7255 (arguments
7256 (list
7257 #:test-flags
7258 '(list "tests/unit"
7259 "-k" "not test_chars_valid")))
7260 (native-inputs (list python-django
7261 python-falcon
7262 python-flask
7263 python-mock
7264 python-poetry-core
7265 python-pytest
7266 python-pytest-asyncio
7267 python-responses))
7268 (propagated-inputs
7269 (list python-attrs
7270 python-aiohttp
7271 python-isodate
7272 python-jsonschema
7273 python-lazy-object-proxy
7274 python-more-itertools
7275 python-openapi-schema-validator
7276 python-openapi-spec-validator
7277 python-parse
7278 python-six
7279 python-werkzeug))
7280 (home-page "https://github.com/p1c2u/openapi-core")
7281 (synopsis "OpenAPI core library")
7282 (description "Openapi-core is a Python library that adds client-side and
7283server-side support for the OpenAPI Specification v3. It has features such
7284as:
7285@itemize
7286@item Validation of requests and responses
7287@item Schema casting and unmarshalling
7288@item Media type and parameters deserialization
7289@item Security providers (API keys, Cookie, Basic and Bearer HTTP
7290authentications)
7291@item Custom deserializers and formats
7292@item Integration with libraries and frameworks.
7293@end itemize")
7294 (license license:bsd-3)))
7295
7296(define-public python-openid
7297 (package
7298 (name "python-openid")
7299 (version "3.2.0")
7300 (source
7301 (origin
7302 (method url-fetch)
7303 (uri (pypi-uri "python3-openid" version))
7304 (sha256
7305 (base32
7306 "1bxf9a3ny1js422j962zfzl4a9dhj192pvai05whn7j0iy9gdyrk"))))
7307 (build-system pyproject-build-system)
7308 (arguments
7309 `(#:phases
7310 (modify-phases %standard-phases
7311 (replace 'check
7312 (lambda* (#:key tests? #:allow-other-keys)
7313 (when tests?
7314 (invoke "python" "-m" "unittest" "openid.test.test_suite")))))))
7315 (propagated-inputs
7316 (list python-defusedxml))
7317 (native-inputs
7318 (list python-psycopg2 python-django python-setuptools python-wheel))
7319 (home-page "https://github.com/necaris/python3-openid")
7320 (synopsis "OpenID support for servers and consumers")
7321 (description "This library provides OpenID authentication for Python, both
7322for clients and servers.")
7323 (license license:asl2.0)))
7324
7325(define-public python-databricks-cli
7326 (package
7327 (name "python-databricks-cli")
7328 (version "0.18.0")
7329 (home-page "https://github.com/databricks/databricks-cli")
7330 (source (origin
7331 (method git-fetch)
7332 (uri (git-reference (url home-page) (commit version)))
7333 (file-name (git-file-name name version))
7334 (sha256
7335 (base32
7336 "1avag4kwqk2f24r5i0vcmhm6s1gsw6maykhlyj2ixz0qc05pjzvl"))))
7337 (build-system pyproject-build-system)
7338 (arguments
7339 (list #:phases #~(modify-phases %standard-phases
7340 (replace 'check
7341 (lambda _
7342 (invoke "pytest" "tests" "-vv"))))))
7343 (native-inputs
7344 ;; For tests.
7345 (list python-decorator
7346 python-mock
7347 python-pytest
7348 python-requests-mock
7349 python-setuptools
7350 python-wheel))
7351 (propagated-inputs
7352 (list python-click
7353 python-oauthlib
7354 python-pyjwt
7355 python-requests
7356 python-six
7357 python-tabulate))
7358 (synopsis "Command line interface for Databricks")
7359 (description
7360 "The Databricks Command Line Interface is a tool which provides an easy
7361to use interface to the Databricks platform. The CLI is built on top of the
7362Databricks REST APIs.")
7363 (license license:asl2.0)))
7364
7365(define-public python-openid-cla
7366 ;; XXX: Last updated in 2015.
7367 (package
7368 (name "python-openid-cla")
7369 (version "1.2")
7370 (source
7371 (origin
7372 (method url-fetch)
7373 (uri (pypi-uri "python-openid-cla" version))
7374 (sha256
7375 (base32
7376 "102hy2qisvjxp5s0v9lvwqi4f2dk0dhns40vjgn008yxc7k0h3cr"))))
7377 (build-system pyproject-build-system)
7378 (arguments '(#:tests? #f)) ; No tests.
7379 (native-inputs (list python-setuptools python-wheel))
7380 (propagated-inputs (list python-openid python-six))
7381 (home-page "https://github.com/puiterwijk/python-openid-cla/")
7382 (synopsis "Implementation of the OpenID CLA extension for python-openid")
7383 (description "@code{openid-cla} is an implementation of the OpenID
7384contributor license agreement extension for python-openid.")
7385 (license license:bsd-3)))
7386
7387(define-public python-openid-teams
7388 ;; XXX: Last updated in 2018.
7389 (package
7390 (name "python-openid-teams")
7391 (version "1.1")
7392 (source
7393 (origin
7394 (method url-fetch)
7395 (uri (pypi-uri "python-openid-teams" version))
7396 (sha256
7397 (base32
7398 "05zrh78alav24rxkbqlpbad6d3x2nljk6z6j7kflxf3vdqa7w969"))))
7399 (build-system pyproject-build-system)
7400 (arguments '(#:tests? #f)) ; No tests.
7401 (native-inputs (list python-setuptools python-wheel))
7402 (propagated-inputs (list python-openid python-six))
7403 (home-page "https://github.com/puiterwijk/python-openid-teams/")
7404 (synopsis "Implementation of the OpenID teams extension for python-openid")
7405 (description
7406 "@code{openid-teams} is an implementation of the OpenID
7407teams extension for python-openid.")
7408 (license license:bsd-3)))
7409
7410(define-public python-priority
7411 (package
7412 (name "python-priority")
7413 (version "2.0.0")
7414 (source
7415 (origin
7416 (method url-fetch)
7417 (uri (pypi-uri "priority" version))
7418 (sha256
7419 (base32 "1h0qpa949bxx7za95v1apwnngkrngi695cwx8wchn3cd3d7xarf9"))))
7420 (build-system pyproject-build-system)
7421 (native-inputs
7422 (list python-pytest python-setuptools python-wheel))
7423 (home-page "https://python-hyper.org/projects/priority/en/latest/")
7424 (synopsis "Pure-Python implementation of the HTTP/2 priority tree")
7425 (description
7426 "Priority is a pure-Python implementation of the priority logic for HTTP/2,
7427set out in RFC 7540 Section 5.3 (Stream Priority).")
7428 (license license:expat)))
7429
7430(define-public python-weblate-language-data
7431 (package
7432 (name "python-weblate-language-data")
7433 (version "2025.8")
7434 (source
7435 (origin
7436 (method url-fetch)
7437 (uri (pypi-uri "weblate_language_data" version))
7438 (sha256
7439 (base32 "0byj1xl6xldam790b6wg62dk1b4i6qdlsp4lqzlv65wnp2klvrkf"))))
7440 (build-system pyproject-build-system)
7441 (arguments (list #:tests? #f)) ;not tests, just data files
7442 (native-inputs
7443 (list python-setuptools))
7444 (propagated-inputs
7445 (list python-translate-toolkit))
7446 (home-page "https://github.com/WeblateOrg/language-data")
7447 (synopsis "Language definitions for Weblate")
7448 (description
7449 "This package provides language definitions used by
7450@url{https://weblate.org/, Weblate}i.")
7451 (license license:expat)))
7452
7453(define-public python-wikidata
7454 (package
7455 (name "python-wikidata")
7456 (version "0.8.1")
7457 (source
7458 (origin
7459 (method git-fetch)
7460 (uri (git-reference
7461 (url "https://github.com/dahlia/wikidata")
7462 (commit version)))
7463 (file-name (git-file-name name version))
7464 (sha256
7465 (base32 "06zg74h249phszn1znfcjdz6c3lz350fiabdzn7iqb2xg4xh69a5"))))
7466 (build-system pyproject-build-system)
7467 (native-inputs
7468 (list python-pytest python-setuptools))
7469 (home-page "https://github.com/dahlia/wikidata")
7470 (synopsis "Wikidata client library")
7471 (description
7472 "This package provides a Python interface to @url{https://www.wikidata.org/,
7473Wikidata}.")
7474 (license license:gpl3+)))
7475
7476(define-public python-wsproto
7477 (package
7478 (name "python-wsproto")
7479 (version "1.3.2")
7480 (source
7481 (origin
7482 (method git-fetch)
7483 (uri (git-reference
7484 (url "https://github.com/python-hyper/wsproto/")
7485 (commit version)))
7486 (file-name (git-file-name name version))
7487 (sha256
7488 (base32 "1n67xnnq3mvnxp61r4d8730hh8hzrq8i9bdrv8jivhj369fhndn9"))))
7489 (build-system pyproject-build-system)
7490 (native-inputs
7491 (list python-pytest
7492 python-setuptools))
7493 (propagated-inputs
7494 (list python-h11))
7495 (home-page "https://github.com/python-hyper/wsproto/")
7496 (synopsis "WebSockets state-machine based protocol implementation")
7497 (description
7498 "@code{wsproto} is a pure-Python implementation of a WebSocket protocol
7499stack. It's written from the ground up to be embeddable in whatever program
7500you choose to use, ensuring that you can communicate via WebSockets, as
7501defined in RFC6455, regardless of your programming paradigm.")
7502 (license license:expat)))
7503
7504(define-public hypercorn
7505 (package
7506 (name "hypercorn")
7507 (version "0.18.0")
7508 (source
7509 (origin
7510 (method git-fetch) ;PyPI does not have tests
7511 (uri (git-reference
7512 (url "https://github.com/pgjones/hypercorn")
7513 (commit version)))
7514 (file-name (git-file-name name version))
7515 (sha256
7516 (base32 "0jdi05n5isxn0rysq242p198lz03gbwsnizzb9yp6rxr7ajapns4"))))
7517 (build-system pyproject-build-system)
7518 ;; Propagate because Hypercorn also exposes functionality over a module.
7519 (propagated-inputs (list python-h11
7520 python-h2
7521 python-priority
7522 python-tomli
7523 python-wsproto))
7524 (native-inputs (list nss-certs-for-test
7525 python-httpx
7526 python-pdm-backend
7527 python-poetry-core
7528 python-pytest
7529 python-pytest-asyncio
7530 python-pytest-trio
7531 python-trio))
7532 (home-page "https://gitlab.com/pgjones/hypercorn/")
7533 (synopsis "ASGI Server based on Hyper libraries")
7534 (description
7535 "Hypercorn is an ASGI web server based on the sans-io hyper, h11, h2, and
7536wsproto libraries and inspired by Gunicorn. It supports HTTP/1, HTTP/2,
7537WebSockets (over HTTP/1 and HTTP/2), ASGI/2, and ASGI/3 specifications. It
7538can utilise asyncio, uvloop, or trio worker types.")
7539 (license license:expat)))
7540
7541(define-public python-querystring-parser
7542 (package
7543 (name "python-querystring-parser")
7544 (version "1.2.4")
7545 (source
7546 (origin
7547 (method git-fetch)
7548 (uri (git-reference
7549 (url "https://github.com/bernii/querystring-parser")
7550 (commit version)))
7551 (file-name (git-file-name name version))
7552 (sha256
7553 (base32 "15n89bf1x9dgp1vi697pa238nvn0vbqp3ghf0xrcyqqa9gn1l6fb"))))
7554 (build-system pyproject-build-system)
7555 (arguments
7556 (list
7557 #:test-backend #~'custom
7558 #:test-flags #~(list "querystring_parser/tests.py")
7559 #:phases
7560 #~(modify-phases %standard-phases
7561 (add-after 'unpack 'fix-python-incompatibilities
7562 (lambda _
7563 (substitute* "querystring_parser/tests.py"
7564 ;; XXX FIXME: This test is broken with Python 3.7:
7565 ;; https://github.com/bernii/querystring-parser/issues/35
7566 (("self\\.assertEqual\\(self\\.knownValuesNormalized, result\\)")
7567 "True")
7568 ;; Removed in Python 3.12.
7569 (("assertEquals")
7570 "assertEqual")))))))
7571 (native-inputs (list python-setuptools))
7572 (propagated-inputs (list python-six))
7573 (home-page "https://github.com/bernii/querystring-parser")
7574 (synopsis "QueryString parser that correctly handles nested dictionaries")
7575 (description
7576 "This package provides a query string parser for Python and Django
7577projects that correctly creates nested dictionaries from sent form/querystring
7578data.")
7579 (license license:expat)))
7580
7581(define-public python-tornado
7582 (package
7583 (name "python-tornado")
7584 (version "6.4.2")
7585 (source
7586 (origin
7587 (method url-fetch)
7588 (uri (pypi-uri "tornado" version))
7589 (sha256
7590 (base32 "02v2mlvr58xg0l0gh08nswl53z73wkf23sziggypk63ffjsdbflj"))))
7591 (build-system pyproject-build-system)
7592 (arguments
7593 (list
7594 #:test-flags
7595 ;; AttributeError: 'TestIOStreamWebMixin' object has no attribute 'io_loop'
7596 #~(list "--ignore=tornado/test/iostream_test.py")))
7597 (native-inputs
7598 (list python-certifi
7599 python-pytest
7600 python-setuptools))
7601 (home-page "https://www.tornadoweb.org/")
7602 (synopsis "Python web framework and asynchronous networking library")
7603 (description
7604 "Tornado is a Python web framework and asynchronous networking library,
7605originally developed at FriendFeed. By using non-blocking network I/O,
7606Tornado can scale to tens of thousands of open connections, making it ideal
7607for long polling, WebSockets, and other applications that require a long-lived
7608connection to each user.")
7609 (license license:asl2.0)))
7610
7611(define-public python-tornado-http-auth
7612 (package
7613 (name "python-tornado-http-auth")
7614 (version "1.1.1")
7615 (source
7616 (origin
7617 (method git-fetch)
7618 (uri (git-reference
7619 (url "https://github.com/gvalkov/tornado-http-auth")
7620 (commit (string-append "v" version))))
7621 (file-name (git-file-name name version))
7622 (sha256
7623 (base32 "1v9sin1zlck9wvkwx0ldqb1b271xlkq63562w8g1yb7v6qka9q4f"))))
7624 (build-system pyproject-build-system)
7625 ;; XXX: This version is incompatible with current tornado.testing.
7626 (arguments (list #:tests? #f))
7627 (native-inputs (list python-setuptools))
7628 (propagated-inputs (list python-tornado))
7629 (home-page "https://github.com/gvalkov/tornado-http-auth")
7630 (synopsis "Digest and basic authentication module for Tornado")
7631 (description
7632 "Provides support for adding authentication to services using the Tornado
7633web framework, either via the basic or digest authentication schemes.")
7634 (license license:asl2.0)))
7635
7636(define-public python-wsgi-intercept
7637 (package
7638 (name "python-wsgi-intercept")
7639 (version "1.13.1")
7640 (source (origin
7641 (method url-fetch)
7642 (uri (pypi-uri "wsgi_intercept" version))
7643 (sha256
7644 (base32
7645 "1h94dj7h7n7zdj3ll4imqjhq5vk21yidk2niwnmpw7xik9inrgbr"))))
7646 (build-system pyproject-build-system)
7647 (arguments
7648 (list
7649 ;; XXX: tests required internet access
7650 #:tests? #f))
7651 (propagated-inputs
7652 (list python-six))
7653 (native-inputs
7654 (list python-httplib2
7655 python-pytest
7656 python-requests
7657 python-setuptools
7658 python-urllib3
7659 python-wheel))
7660 (synopsis "Puts a WSGI application in place of a real URI for testing")
7661 (description "Wsgi_intercept installs a WSGI application in place of a real
7662URI for testing. Testing a WSGI application normally involves starting a
7663server at a local host and port, then pointing your test code to that address.
7664Instead, this library lets you intercept calls to any specific host/port
7665combination and redirect them into a WSGI application importable by your test
7666program. Thus, you can avoid spawning multiple processes or threads to test
7667your Web app.")
7668 (home-page "https://github.com/cdent/wsgi-intercept")
7669 (license license:expat)))
7670
7671(define-public python-webob
7672 (package
7673 (name "python-webob")
7674 (version "1.8.10")
7675 (source
7676 (origin
7677 (method url-fetch)
7678 (uri (pypi-uri "webob" version))
7679 (sha256
7680 (base32
7681 "0avwfsqqva46aix1p61jbwjsw7kh6zkxvfds9xi3zg07yc8km5hw"))))
7682 (build-system pyproject-build-system)
7683 ;; tests: 2394 passed, 9 skipped, 1 xfailed, 35 warnings
7684 (native-inputs
7685 (list python-pytest
7686 python-setuptools))
7687 (home-page "https://webob.org/")
7688 (synopsis "WSGI request and response object")
7689 (description
7690 "WebOb provides wrappers around the WSGI request environment, and an
7691object to help create WSGI responses.")
7692 (license license:expat)))
7693
7694(define-public python-yewtube-search
7695 (package
7696 (name "python-yewtube-search")
7697 ;; Original repository for python-youtube-search package is archived, see:
7698 ;; <https://github.com/alexmercerind/youtube-search-python/issues/189>.
7699 ;; The most promising fork was
7700 ;; <https://github.com/ahmedayyad-dev/youtube-search-python-fork> which is
7701 ;; archived since <2026-04-04>. This is another fork with a different PyPI
7702 ;; name for python-yewtube.
7703 (version "1.6.7")
7704 (source
7705 (origin
7706 (method url-fetch)
7707 (uri (pypi-uri "yewtube_search_python" version))
7708 (sha256
7709 (base32 "0vjh4wrlqx4lv9qi6572jx2d0rsp6gkvaqf0f2ar4npdz0ldgl47"))))
7710 (build-system pyproject-build-system)
7711 (arguments (list #:tests? #f)) ;no tests in repository
7712 (native-inputs
7713 (list python-setuptools))
7714 (propagated-inputs
7715 (list python-httpx))
7716 (home-page "https://github.com/iamtalhaasghar/youtube-search-python")
7717 (synopsis "Search for YouTube videos, channels & playlists")
7718 (description
7719 "This package provides tools to search for @code{YouTube} videos,
7720channels and playlists; as well as getting video metadata from links. This
7721package does not rely on the @code{YouTube} Data API v3.")
7722 (license license:expat)))
7723
7724(define-public python-zc-lockfile
7725 (package
7726 (name "python-zc-lockfile")
7727 (version "4.0")
7728 (source
7729 (origin
7730 (method git-fetch)
7731 (uri (git-reference
7732 (url "https://github.com/zopefoundation/zc.lockfile")
7733 (commit version)))
7734 (file-name (git-file-name name version))
7735 (sha256
7736 (base32 "0b1kkwx2d4wf392sd3bfjvzgkdrknwsxg9mby121mq8zl7c490gg"))))
7737 (build-system pyproject-build-system)
7738 (arguments
7739 (list
7740 #:phases
7741 #~(modify-phases %standard-phases
7742 (replace 'check
7743 (lambda* (#:key tests? #:allow-other-keys)
7744 (if tests?
7745 (invoke "zope-testrunner" "--test-path=src")
7746 (format #t "test suite not run~%")))))))
7747 (native-inputs (list python-zope-testing python-zope-testrunner
7748 python-setuptools))
7749 (home-page "https://github.com/zopefoundation/zc.lockfile")
7750 (synopsis "Interprocess locks using lock files")
7751 (description
7752 "This package provides an implementation of interprocess locks using lock
7753files. These locks can also be used to mediate access to other files.")
7754 (license license:zpl2.1)))
7755
7756(define-public python-zconfig
7757 (package
7758 (name "python-zconfig")
7759 (version "4.3")
7760 (source
7761 (origin
7762 (method git-fetch)
7763 (uri (git-reference
7764 (url "https://github.com/zopefoundation/ZConfig/")
7765 (commit version)))
7766 (file-name (git-file-name name version))
7767 (sha256
7768 (base32 "06c4vffk51fw03q87r31s81b0xbxg2qqvjfmcl2z4hg21fr088c2"))))
7769 (build-system pyproject-build-system)
7770 (arguments
7771 (list
7772 #:phases
7773 #~(modify-phases %standard-phases
7774 (replace 'check
7775 (lambda* (#:key tests? #:allow-other-keys)
7776 (if tests?
7777 (begin
7778 ;; This test assumes we still have setup.py in the
7779 ;; directory from which we import zconfig, which
7780 ;; does not work after installing the package.
7781 (delete-file-recursively
7782 "src/ZConfig/tests/test_readme.py")
7783 (invoke "zope-testrunner" "-vv" "--test-path=src" "--all"))
7784 (format #t "test suite not run~%")))))))
7785 (native-inputs (list python-docutils python-manuel python-zope-exceptions
7786 python-zope-testrunner python-setuptools))
7787 (home-page "https://github.com/zopefoundation/ZConfig/")
7788 (synopsis "Structured configuration library intended for general use")
7789 (description
7790 "@code{zconfig} is a configuration library intended for general use. It
7791supports a hierarchical schema-driven configuration model that allows a schema
7792to specify data conversion routines written in Python. Its model is very
7793different from the model supported by the @code{configparser} module found in
7794Python's standard library, and is more suitable to configuration-intensive
7795applications.")
7796 (license license:zpl2.1)))
7797
7798(define-public python-zodb
7799 (package
7800 (name "python-zodb")
7801 (version "6.0.1")
7802 (source
7803 (origin
7804 (method url-fetch)
7805 (uri (pypi-uri "zodb" version))
7806 (sha256
7807 (base32 "02cmvf8j2nin5z26wvy2vq2k9mj12hqrr4276lj3w4jj32p0zxw9"))))
7808 (build-system pyproject-build-system)
7809 (arguments
7810 (list
7811 #:phases
7812 #~(modify-phases %standard-phases
7813 (replace 'check
7814 (lambda* (#:key tests? #:allow-other-keys)
7815 (if tests?
7816 (begin
7817 ;; This test does not work after installing the
7818 ;; package, since it expects the ZODB source code
7819 ;; to reside in the src/ directory.
7820 (delete-file-recursively
7821 "src/ZODB/tests/testdocumentation.py")
7822 (invoke "zope-testrunner" "-vv" "--test-path=src"
7823 "--all"))
7824 (format #t "test suite not run~%")))))))
7825 (native-inputs
7826 (list python-manuel
7827 python-wheel
7828 python-zope-testing
7829 python-zope-testrunner))
7830 (propagated-inputs
7831 (list python-btrees
7832 python-persistent
7833 python-transaction
7834 python-zc-lockfile
7835 python-zconfig
7836 python-zodbpickle
7837 python-zope-interface))
7838 (home-page "http://zodb-docs.readthedocs.io")
7839 (synopsis "Object-oriented database for Python")
7840 (description
7841 "@code{ZODB} provides an object-oriented and @acronym{ACID,
7842Atomicity Consistency Isolation Durability} compliant database for Python with
7843a high degree of transparency. @code{ZODB} is an object-oriented database,
7844not an object-relational mapping. This comes with several advantaged:
7845
7846@itemize
7847@item no separate language for database operations
7848@item very little impact on your code to make objects persistent
7849@item no database mapper that partially hides the database.
7850@item almost no seam between code and database.
7851@end itemize")
7852 (license license:zpl2.1)))
7853
7854(define-public python-zodbpickle
7855 (package
7856 (name "python-zodbpickle")
7857 (version "3.2")
7858 (source
7859 (origin
7860 (method url-fetch)
7861 (uri (pypi-uri "zodbpickle" version))
7862 (sha256
7863 (base32 "035bjrksl4h92mvjkx6id4gjcpc1k4mbci8ryjl6l9mki7ihx77b"))))
7864 (build-system pyproject-build-system)
7865 (arguments
7866 '(#:phases (modify-phases %standard-phases
7867 (replace 'check
7868 (lambda* (#:key tests? #:allow-other-keys)
7869 (if tests?
7870 (invoke "zope-testrunner" "-vv" "--test-path=src"
7871 "--all")
7872 (format #t "test suite not run~%")))))))
7873 (native-inputs (list python-zope-testrunner python-setuptools python-wheel))
7874 (home-page "https://github.com/zopefoundation/zodbpickle")
7875 (synopsis "Uniform pickling interface for @code{zodb}")
7876 (description
7877 "This package is a fork of the @code{pickle} module (and the
7878supporting C extension) from both Python 3.2 and Python 3.3. The fork adds
7879support for the @code{noload} operations used by @code{zodb}.")
7880 (license (list license:psfl license:zpl2.1))))
7881
7882(define-public python-zope-dottedname
7883 (package
7884 (name "python-zope-dottedname")
7885 (version "7.0")
7886 (source
7887 (origin
7888 (method git-fetch)
7889 (uri (git-reference
7890 (url "https://github.com/zopefoundation/zope.dottedname")
7891 (commit version)))
7892 (file-name (git-file-name name version))
7893 (sha256
7894 (base32 "0h7a637zsl1a3f0rpb2nw41mzxv0pqyj8ahn6h60n2c1px912rbd"))))
7895 (build-system pyproject-build-system)
7896 (arguments
7897 (list #:test-backend #~'custom
7898 #:test-flags #~(list "src/zope/dottedname/tests.py")))
7899 (native-inputs (list python-setuptools))
7900 (home-page "https://zopedottedname.readthedocs.io")
7901 (synopsis "Resolver for Python dotted names")
7902 (description
7903 "This package provides a @code{resolve()} function that resolves strings
7904containing dotted names into the appropriate Python object.")
7905 (license license:zpl2.1)))
7906
7907(define-public python-zope-event
7908 (package
7909 (name "python-zope-event")
7910 (version "6.0")
7911 (source
7912 (origin
7913 (method git-fetch)
7914 (uri (git-reference
7915 (url "https://github.com/zopefoundation/zope.event")
7916 (commit version)))
7917 (file-name (git-file-name name version))
7918 (sha256
7919 (base32 "0la3q47c59aq50s036q468bhnmzgs71f1cygv89w6qkk1hkn35ym"))))
7920 (build-system pyproject-build-system)
7921 (arguments
7922 (list
7923 #:test-flags
7924 #~(list "src/zope/event/tests.py")))
7925 (native-inputs (list python-pytest python-setuptools))
7926 (home-page "https://zopeevent.readthedocs.io/en/latest/")
7927 (synopsis "Event publishing system for Python")
7928 (description
7929 "Zope.event provides an event publishing API, intended for use by
7930applications which are unaware of any subscribers to their events. It is a
7931simple event-dispatching system on which more sophisticated event dispatching
7932systems can be built.")
7933 (license license:zpl2.1)))
7934
7935(define-public python-zope-interface
7936 (package
7937 (name "python-zope-interface")
7938 (version "7.2")
7939 (source
7940 (origin
7941 (method git-fetch)
7942 (uri (git-reference
7943 (url "https://github.com/zopefoundation/zope.interface")
7944 (commit version)))
7945 (file-name (git-file-name name version))
7946 (sha256
7947 (base32 "01snm1lbqhx3ird4m76nciaqasxvf8dd6817zm35v684g5hbzd2s"))))
7948 (build-system pyproject-build-system)
7949 (arguments
7950 ;; XXX: test suite can't find python-zope-testing
7951 (list #:tests? #f))
7952 (native-inputs (list python-setuptools))
7953 (home-page "https://zopeinterface.readthedocs.io")
7954 (synopsis "\"Design by contract\" methodology in Python")
7955 (description
7956 "Zope.interface provides an implementation of \"object interfaces\" for
7957Python. Interfaces are a mechanism for labeling objects as conforming to a
7958given API or contract.")
7959 (license license:zpl2.1)))
7960
7961(define-public python-zope-exceptions
7962 (package
7963 (name "python-zope-exceptions")
7964 (version "6.0")
7965 (source
7966 (origin
7967 (method git-fetch)
7968 (uri (git-reference
7969 (url "https://github.com/zopefoundation/zope.exceptions")
7970 (commit version)))
7971 (file-name (git-file-name name version))
7972 (sha256
7973 (base32 "0fmsw2j8islaiv6zf2mxh2s43y7virqny6s8gk8v2zkcxpy95cic"))))
7974 (build-system pyproject-build-system)
7975 (arguments
7976 (list
7977 #:phases
7978 #~(modify-phases %standard-phases
7979 (replace 'check
7980 (lambda* (#:key tests? #:allow-other-keys)
7981 (if tests?
7982 (invoke "zope-testrunner" "--test-path=src")
7983 (format #t "test suite not run~%")))))))
7984 (native-inputs (list python-setuptools python-zope-testrunner-bootstrap))
7985 (propagated-inputs (list python-zope-interface))
7986 (home-page "https://github.com/zopefoundation/zope.exceptions")
7987 (synopsis "Zope exceptions")
7988 (description
7989 "Zope.exceptions provides general-purpose exception types that have uses
7990outside of the Zope framework.")
7991 (license license:zpl2.1)))
7992
7993(define (python-zope-bootstrap-package orig)
7994 (package
7995 (inherit orig)
7996 (name (string-append (package-name orig) "-bootstrap"))
7997 (arguments
7998 (if (null? (package-arguments orig))
7999 (list
8000 #:tests? #f
8001 #:phases #~(modify-phases %standard-phases
8002 (delete 'sanity-check)))
8003 (substitute-keyword-arguments arguments
8004 ((#:tests? _ #f) #f)
8005 ((#:phases phases '%standard-phases)
8006 #~(modify-phases #$phases
8007 (delete 'sanity-check))))))
8008 (propagated-inputs `())
8009 (native-inputs (list python-setuptools))
8010 (properties `((hidden? . #t)))))
8011
8012(define-public python-zope-exceptions-bootstrap
8013 (python-zope-bootstrap-package python-zope-exceptions))
8014
8015(define-public python-zope-testing
8016 (package
8017 (name "python-zope-testing")
8018 (version "6.0")
8019 (source
8020 (origin
8021 (method git-fetch)
8022 (uri (git-reference
8023 (url "https://github.com/zopefoundation/zope.testing")
8024 (commit version)))
8025 (file-name (git-file-name name version))
8026 (sha256
8027 (base32 "0zqipsgv7qj7f8hrd3x6xpqwszdiac8vpjdm8ak5kljl5napw7d7"))))
8028 (build-system pyproject-build-system)
8029 (arguments
8030 (list
8031 #:phases
8032 #~(modify-phases %standard-phases
8033 (replace 'check
8034 (lambda* (#:key tests? #:allow-other-keys)
8035 (if tests?
8036 (invoke "zope-testrunner" "--test-path=src")
8037 (format #t "test suite not run~%")))))))
8038 (native-inputs (list python-setuptools
8039 python-zope-interface
8040 python-zope-testrunner-bootstrap))
8041 (home-page "https://zopetesting.readthedocs.io/")
8042 (synopsis "Zope testing helpers")
8043 (description
8044 "Zope.testing provides a number of testing utilities for HTML forms, HTTP
8045servers, regular expressions, and more.")
8046 (license license:zpl2.1)))
8047
8048(define-public python-zope-testrunner
8049 (package
8050 (name "python-zope-testrunner")
8051 (version "7.4")
8052 (source
8053 (origin
8054 (method git-fetch)
8055 (uri (git-reference
8056 (url "https://github.com/zopefoundation/zope.testrunner")
8057 (commit version)))
8058 (file-name (git-file-name name version))
8059 (sha256
8060 (base32 "0gd5rnzw6vzbx766jxqr4zc6qx7gk75r2c0nqqvhkb12hzk5ca2g"))))
8061 (build-system pyproject-build-system)
8062 (arguments
8063 (list
8064 #:phases
8065 #~(modify-phases %standard-phases
8066 (add-after 'unpack 'remove-problematic-test
8067 (lambda _
8068 ;; This test contains invalid syntax, which breaks bytecode
8069 ;; compilation. For simplicity just remove it.
8070 (delete-file
8071 "src/zope/testrunner/tests/testrunner-ex/sample2/badsyntax.py")))
8072 (replace 'check
8073 (lambda* (#:key tests? #:allow-other-keys)
8074 (if tests?
8075 (invoke "zope-testrunner" "--test-path=src")
8076 (format #t "test suite not run~%")))))))
8077 (native-inputs (list python-setuptools python-zope-testing))
8078 (propagated-inputs (list python-zope-exceptions python-zope-interface))
8079 (home-page "https://zopetestrunner.readthedocs.io")
8080 (synopsis "Zope testrunner script")
8081 (description "This package provides a script for running Python tests.")
8082 (license license:zpl2.1)))
8083
8084(define-public python-zope-testrunner-bootstrap
8085 (package
8086 (inherit (python-zope-bootstrap-package python-zope-testrunner))
8087 (propagated-inputs
8088 (list python-six python-zope-exceptions-bootstrap))
8089 (properties `((hidden? . #t)))))
8090
8091(define-public python-zope-i18nmessageid
8092 (package
8093 (name "python-zope-i18nmessageid")
8094 (version "7.0")
8095 (source
8096 (origin
8097 (method git-fetch)
8098 (uri (git-reference
8099 (url "https://github.com/zopefoundation/zope.i18nmessageid")
8100 (commit version)))
8101 (file-name (git-file-name name version))
8102 (sha256
8103 (base32 "192ixj8r9n467avbxrmhakmqiaflc1vw37k08z096ajcjgbfrm5d"))))
8104 (build-system pyproject-build-system)
8105 (arguments
8106 (list
8107 #:phases
8108 #~(modify-phases %standard-phases
8109 (replace 'check
8110 (lambda* (#:key tests? #:allow-other-keys)
8111 (if tests?
8112 (invoke "zope-testrunner" "--test-path=src")
8113 (format #t "test suite not run~%")))))))
8114 (native-inputs (list python-setuptools python-zope-testrunner))
8115 (home-page "https://zopei18nmessageid.readthedocs.io")
8116 (synopsis "Message identifiers for internationalization")
8117 (description "Zope.i18nmessageid provides facilities for declaring
8118internationalized messages within program source text.")
8119 (license license:zpl2.1)))
8120
8121(define-public python-zope-schema
8122 (package
8123 (name "python-zope-schema")
8124 (version "7.0.1")
8125 (source
8126 (origin
8127 (method git-fetch)
8128 (uri (git-reference
8129 (url "https://github.com/zopefoundation/zope.schema")
8130 (commit version)))
8131 (file-name (git-file-name name version))
8132 (sha256
8133 (base32 "1hj6j0gqgvv9a5pyaz54wbn8n7wf9lyg4njb2cfs980z0d5faj39"))))
8134 (build-system pyproject-build-system)
8135 (arguments
8136 (list
8137 #:phases
8138 #~(modify-phases %standard-phases
8139 (replace 'check
8140 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
8141 (add-installed-pythonpath inputs outputs)
8142 (if tests?
8143 (invoke "zope-testrunner" "--test-path=src")
8144 (format #t "test suite not run.~%")))))))
8145 (propagated-inputs (list python-zope-event python-zope-interface))
8146 (native-inputs (list python-zope-i18nmessageid python-zope-testing
8147 python-zope-testrunner python-setuptools))
8148 (home-page "https://zopeschema.readthedocs.io")
8149 (synopsis "Zope data schemas")
8150 (description "Zope.scheme provides extensions to zope.interface for
8151defining data schemas.")
8152 (license license:zpl2.1)))
8153
8154(define-public python-zope-sqlalchemy
8155 (package
8156 (name "python-zope-sqlalchemy")
8157 (version "1.6")
8158 (source
8159 (origin
8160 (method git-fetch)
8161 (uri (git-reference
8162 (url "https://github.com/zopefoundation/zope.sqlalchemy")
8163 (commit version)))
8164 (file-name (git-file-name name version))
8165 (sha256
8166 (base32 "1z4gw4i95dyqxsvrahk4fav008045n8kyxpn3fa887snmpvcjhng"))))
8167 (build-system pyproject-build-system)
8168 (arguments
8169 (list
8170 #:phases
8171 #~(modify-phases %standard-phases
8172 (replace 'check
8173 (lambda* (#:key tests? #:allow-other-keys)
8174 (if tests?
8175 (invoke "zope-testrunner" "--test-path=src")
8176 (format #t "test suite not run~%")))))))
8177 (propagated-inputs (list python-sqlalchemy python-transaction
8178 python-zope-interface))
8179 (native-inputs (list python-zope-testing python-zope-testrunner
8180 python-setuptools))
8181 (home-page "https://github.com/zopefoundation/zope.sqlalchemy")
8182 (synopsis "Minimal SQLAlchemy transaction integration for Zope")
8183 (description
8184 "The aim of this package is to unify the plethora of existing packages
8185integrating SQLAlchemy with Zope's transaction management. As such,it only
8186provides a data manager and makes no attempt to define a @i{zopeish} way to
8187configure engines.")
8188 (license license:zpl2.1)))
8189
8190(define-public python-zope-configuration
8191 (package
8192 (name "python-zope-configuration")
8193 (version "7.0")
8194 (source
8195 (origin
8196 (method git-fetch)
8197 (uri (git-reference
8198 (url "https://github.com/zopefoundation/zope.configuration")
8199 (commit version)))
8200 (file-name (git-file-name name version))
8201 (sha256
8202 (base32 "11lr6z3jpz9835a1if89g3x7k31sviq2d0xvvic5xi4c980dbkhv"))))
8203 (build-system pyproject-build-system)
8204 (arguments
8205 (list
8206 #:phases
8207 #~(modify-phases %standard-phases
8208 (replace 'check
8209 (lambda* (#:key tests? #:allow-other-keys)
8210 (if tests?
8211 (invoke "zope-testrunner" "--test-path=src")
8212 (format #t "test suite not run~%")))))))
8213 (native-inputs (list python-manuel python-setuptools python-zope-testing
8214 python-zope-testrunner))
8215 (propagated-inputs (list python-zope-i18nmessageid python-zope-interface
8216 python-zope-schema))
8217 (home-page "https://zopeconfiguration.readthedocs.io")
8218 (synopsis "Zope Configuration Markup Language")
8219 (description "Zope.configuration implements ZCML, the Zope Configuration
8220Markup Language.")
8221 (license license:zpl2.1)))
8222
8223(define-public python-zope-configuration-bootstrap
8224 (python-zope-bootstrap-package python-zope-configuration))
8225
8226(define-public python-zope-copy
8227 (package
8228 (name "python-zope-copy")
8229 (version "6.0")
8230 (source
8231 (origin
8232 (method git-fetch)
8233 (uri (git-reference
8234 (url "https://github.com/zopefoundation/zope.copy")
8235 (commit version)))
8236 (file-name (git-file-name name version))
8237 (sha256
8238 (base32 "1ym82p9scpfi3rflxnlv55v0a7hra3rq4rrlw759maq05i8qp1w5"))))
8239 (build-system pyproject-build-system)
8240 (arguments
8241 (list
8242 #:phases
8243 #~(modify-phases %standard-phases
8244 (replace 'check
8245 (lambda* (#:key tests? #:allow-other-keys)
8246 (if tests?
8247 (invoke "zope-testrunner" "--test-path=src")
8248 (format #t "test suite not run~%")))))))
8249 (propagated-inputs (list python-zope-interface))
8250 (native-inputs
8251 (list python-zodbpickle
8252 python-zope-component-bootstrap
8253 python-zope-location-bootstrap
8254 python-zope-proxy
8255 python-zope-schema
8256 python-zope-testing
8257 python-zope-testrunner
8258 python-setuptools))
8259 (home-page "https://zopecopy.readthedocs.io")
8260 (synopsis "Pluggable object copying mechanism")
8261 (description
8262 "This package provides a pluggable mechanism for copying persistent objects.")
8263 (license license:zpl2.1)))
8264
8265(define-public python-zope-proxy
8266 (package
8267 (name "python-zope-proxy")
8268 (version "7.0")
8269 (source
8270 (origin
8271 (method git-fetch)
8272 (uri (git-reference
8273 (url "https://github.com/zopefoundation/zope.proxy")
8274 (commit version)))
8275 (file-name (git-file-name name version))
8276 (sha256
8277 (base32 "00r9f4n0cl3fyc5gyf5l43zh95cmzx1gz6wr04k17d7wm2gmivyn"))))
8278 (build-system pyproject-build-system)
8279 (arguments
8280 (list
8281 #:phases
8282 #~(modify-phases %standard-phases
8283 (replace 'check
8284 (lambda* (#:key tests? #:allow-other-keys)
8285 (if tests?
8286 (invoke "zope-testrunner" "--test-path=src")
8287 (format #t "test suite not run~%")))))))
8288 (native-inputs
8289 (list python-zope-location-bootstrap
8290 python-zope-security-bootstrap
8291 python-zope-testrunner
8292 python-setuptools))
8293 (propagated-inputs (list python-zope-interface))
8294 (home-page "https://zopeproxy.readthedocs.io")
8295 (synopsis "Generic, transparent proxies")
8296 (description
8297 "Zope.proxy provides generic, transparent proxies for Python. Proxies are
8298special objects which serve as mostly-transparent wrappers around another
8299object, intervening in the apparent behavior of the wrapped object only when
8300necessary to apply the policy (e.g., access checking, location brokering,
8301etc.) for which the proxy is responsible.")
8302 (license license:zpl2.1)))
8303
8304(define-public python-zope-proxy-bootstrap
8305 (python-zope-bootstrap-package python-zope-proxy))
8306
8307(define-public python-zope-hookable
8308 (package
8309 (name "python-zope-hookable")
8310 (version "7.0")
8311 (source
8312 (origin
8313 (method git-fetch)
8314 (uri (git-reference
8315 (url "https://github.com/zopefoundation/zope.hookable")
8316 (commit version)))
8317 (file-name (git-file-name name version))
8318 (sha256
8319 (base32 "1l94xzzpyslpgv2ghvl5qzpfcsq02kp04fmvl95d6jcmivmmr4m8"))))
8320 (build-system pyproject-build-system)
8321 (arguments
8322 (list
8323 #:phases
8324 #~(modify-phases %standard-phases
8325 (replace 'check
8326 (lambda* (#:key tests? #:allow-other-keys)
8327 (if tests?
8328 (invoke "zope-testrunner" "--test-path=src")
8329 (format #t "test suite not run~%")))))))
8330 (native-inputs (list python-zope-testing python-zope-testrunner
8331 python-setuptools))
8332 (home-page "https://zopehookable.readthedocs.io")
8333 (synopsis "Zope hookable")
8334 (description
8335 "This package supports the efficient creation of hookable objects, which
8336are callable objects that are meant to be optionally replaced. The idea is
8337that you create a function that does some default thing and make i hookable.
8338Later, someone can modify what it does by calling its sethook method and
8339changing its implementation. All users of the function, including those that
8340imported it, will see the change.")
8341 (license license:zpl2.1)))
8342
8343(define-public python-zope-location
8344 (package
8345 (name "python-zope-location")
8346 (version "6.0")
8347 (source
8348 (origin
8349 (method git-fetch)
8350 (uri (git-reference
8351 (url "https://github.com/zopefoundation/zope.location")
8352 (commit version)))
8353 (file-name (git-file-name name version))
8354 (sha256
8355 (base32 "1jfsmbxj6hz7kmk5b0351b63ssm7qfkgqmz9v7xb7wwlmxsxkcdk"))))
8356 (build-system pyproject-build-system)
8357 (arguments
8358 (list
8359 #:phases
8360 #~(modify-phases %standard-phases
8361 (replace 'check
8362 (lambda* (#:key tests? #:allow-other-keys)
8363 (if tests?
8364 (invoke "zope-testrunner" "--test-path=src")
8365 (format #t "test suite not run~%")))))))
8366 (native-inputs (list python-zope-testrunner python-setuptools))
8367 (propagated-inputs (list python-zope-interface python-zope-proxy
8368 python-zope-schema))
8369 (home-page "https://zopelocation.readthedocs.io")
8370 (synopsis "Zope location library")
8371 (description
8372 "Zope.location implements the concept of \"locations\" in Zope3, which
8373are are special objects that have a structural location.")
8374 (license license:zpl2.1)))
8375
8376(define-public python-zope-location-bootstrap
8377 (python-zope-bootstrap-package python-zope-location))
8378
8379(define-public python-zope-security
8380 (package
8381 (name "python-zope-security")
8382 (version "7.3")
8383 (source
8384 (origin
8385 (method git-fetch)
8386 (uri (git-reference
8387 (url "https://github.com/zopefoundation/zope.security")
8388 (commit version)))
8389 (file-name (git-file-name name version))
8390 (sha256
8391 (base32 "06x6qcls2mdl05xnsyy5h70mbgij8xb6ksxbawzrc23cq04nkvx7"))))
8392 (build-system pyproject-build-system)
8393 (arguments
8394 (list
8395 #:phases
8396 #~(modify-phases %standard-phases
8397 (replace 'check
8398 (lambda* (#:key tests? #:allow-other-keys)
8399 (if tests?
8400 (invoke "zope-testrunner" "--test-path=src")
8401 (format #t "test suite not run~%")))))))
8402 (propagated-inputs
8403 (list python-zope-component
8404 python-zope-i18nmessageid
8405 python-zope-interface
8406 python-zope-location
8407 python-zope-proxy
8408 python-zope-schema))
8409 (native-inputs
8410 (list python-btrees
8411 python-zope-component-bootstrap
8412 python-zope-configuration-bootstrap
8413 python-zope-location-bootstrap
8414 python-zope-testing
8415 python-zope-testrunner
8416 python-setuptools))
8417 (home-page "https://zopesecurity.readthedocs.io")
8418 (synopsis "Zope security framework")
8419 (description "Zope.security provides a generic mechanism to implement
8420security policies on Python objects.")
8421 (license license:zpl2.1)))
8422
8423(define-public python-zope-security-bootstrap
8424 (package
8425 (inherit (python-zope-bootstrap-package python-zope-security))
8426 (propagated-inputs
8427 (list python-zope-i18nmessageid
8428 python-zope-interface
8429 python-zope-proxy-bootstrap
8430 python-zope-schema))))
8431
8432(define-public python-zope-component
8433 (package
8434 (name "python-zope-component")
8435 (version "7.0")
8436 (source
8437 (origin
8438 (method git-fetch)
8439 (uri (git-reference
8440 (url "https://github.com/zopefoundation/zope.component")
8441 (commit version)))
8442 (file-name (git-file-name name version))
8443 (sha256
8444 (base32 "1jygzhcg9rppsrd8cwvm0944naq1ldjf0vcpgsz0glwcdnr7cyfw"))))
8445 (build-system pyproject-build-system)
8446 (arguments
8447 (list
8448 #:phases
8449 #~(modify-phases %standard-phases
8450 (replace 'check
8451 (lambda* (#:key tests? #:allow-other-keys)
8452 (if tests?
8453 (invoke "zope-testrunner" "--test-path=src")
8454 (format #t "test suite not run~%")))))))
8455 (native-inputs
8456 (list python-persistent
8457 python-zope-configuration-bootstrap
8458 python-zope-i18nmessageid
8459 python-zope-location-bootstrap
8460 python-zope-proxy-bootstrap
8461 python-zope-security-bootstrap
8462 python-zope-testing
8463 python-zope-testrunner
8464 python-setuptools))
8465 (propagated-inputs
8466 (list python-zope-deferredimport python-zope-deprecation
8467 python-zope-event python-zope-hookable python-zope-interface))
8468 (home-page "https://zopecomponent.readthedocs.io")
8469 (synopsis "Zope Component Architecture")
8470 (description
8471 "Zope.component represents the core of the Zope Component Architecture.
8472Together with the zope.interface package, it provides facilities for defining,
8473registering and looking up components.")
8474 (license license:zpl2.1)))
8475
8476(define-public python-zope-component-bootstrap
8477 (python-zope-bootstrap-package python-zope-component))
8478
8479(define-public python-zope-deferredimport
8480 (package
8481 (name "python-zope-deferredimport")
8482 (version "6.0")
8483 (source
8484 (origin
8485 (method git-fetch)
8486 (uri (git-reference
8487 (url "https://github.com/zopefoundation/zope.deferredimport")
8488 (commit version)))
8489 (file-name (git-file-name name version))
8490 (sha256
8491 (base32 "08j728nn1la570nny1xz1xvxcm9hf2mcc3im1bzcxxrrxh4kw3zd"))))
8492 (build-system pyproject-build-system)
8493 (arguments
8494 (list
8495 #:phases
8496 #~(modify-phases %standard-phases
8497 (replace 'check
8498 (lambda* (#:key tests? #:allow-other-keys)
8499 (if tests?
8500 (invoke "zope-testrunner" "--test-path=src")
8501 (format #t "test suite not run~%")))))))
8502 (propagated-inputs (list python-zope-proxy))
8503 (native-inputs (list python-zope-testrunner python-setuptools))
8504 (home-page "https://zopedeferredimport.readthedocs.io")
8505 (synopsis "Defer imports until used by code")
8506 (description
8507 "Often, especially for package modules, you want to import names for
8508convenience, but not actually perform the imports until necessary. The
8509@code{zope.deferredimport} package provided facilities for defining names in
8510modules that will be imported from somewhere else when used. You can also cause
8511deprecation warnings to be issued when a variable is used.")
8512 (license license:zpl2.1)))
8513
8514(define-public python-ndg-httpsclient
8515 (package
8516 (name "python-ndg-httpsclient")
8517 (version "0.5.1")
8518 (source
8519 (origin
8520 (method git-fetch)
8521 (uri (git-reference
8522 (url "https://github.com/cedadev/ndg_httpsclient/")
8523 (commit version)))
8524 (file-name (git-file-name name version))
8525 (sha256
8526 (base32 "0lhsgs4am4xyjssng5p0vkfwqncczj1dpa0vss4lrhzq86mnn5rz"))))
8527 (build-system pyproject-build-system)
8528 (arguments
8529 (list
8530 #:tests? #f)) ;Tests appear to require networking.
8531 (native-inputs (list python-setuptools))
8532 (propagated-inputs (list python-pyasn1 python-pyopenssl))
8533 (synopsis "HTTPS support for Python's httplib and urllib2")
8534 (description
8535 "This is a HTTPS client implementation for httplib and urllib2 based on
8536PyOpenSSL. PyOpenSSL provides a more fully-featured SSL implementation over
8537the default provided with Python and, importantly, enables full verification
8538of the SSL peer.")
8539 (home-page "https://github.com/cedadev/ndg_httpsclient/")
8540 (license license:bsd-3)))
8541
8542(define-public python-netaddr
8543 (package
8544 (name "python-netaddr")
8545 (version "1.3.0")
8546 (source
8547 (origin
8548 (method url-fetch)
8549 (uri (pypi-uri "netaddr" version))
8550 (sha256
8551 (base32 "12p4ysgawhgkka0sz1dkwgwc2za80dxdp9wvfxivfldmjnc3sg2w"))))
8552 (build-system pyproject-build-system)
8553 (native-inputs (list python-poetry-core
8554 python-pytest
8555 python-setuptools
8556 python-wheel))
8557 (home-page "https://netaddr.readthedocs.io")
8558 (synopsis "Pythonic manipulation of network addresses")
8559 (description
8560 "A Python library for representing and manipulating IPv4, IPv6, CIDR, EUI
8561and MAC network addresses.")
8562 (license license:bsd-3)))
8563
8564(define-public python-nh3
8565 (package
8566 (name "python-nh3")
8567 (version "0.2.20")
8568 (source
8569 (origin
8570 (method url-fetch)
8571 (uri (pypi-uri "nh3" version))
8572 (sha256
8573 (base32 "1mcf3y5294glji9lhzh57wymw4srbvzdg0kcakm0p2pqgwnw81cp"))))
8574 (build-system pyproject-build-system)
8575 (arguments
8576 (list
8577 #:imported-modules `(,@%cargo-build-system-modules
8578 ,@%pyproject-build-system-modules)
8579 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
8580 (guix build pyproject-build-system)
8581 (guix build utils))
8582 #:phases
8583 #~(modify-phases %standard-phases
8584 (add-after 'unpack 'prepare-cargo-build-system
8585 (lambda args
8586 (for-each
8587 (lambda (phase)
8588 (format #t "Running cargo phase: ~a~%" phase)
8589 (apply (assoc-ref cargo:%standard-phases phase)
8590 #:cargo-target #$(cargo-triplet)
8591 args))
8592 '(unpack-rust-crates
8593 configure
8594 check-for-pregenerated-files
8595 patch-cargo-checksums)))))))
8596 (native-inputs
8597 (append
8598 (list maturin python-pytest rust `(,rust "cargo"))
8599 (or (and=> (%current-target-system)
8600 (compose list make-rust-sysroot))
8601 '())))
8602 (inputs (cargo-inputs 'python-nh3))
8603 (home-page "https://nh3.readthedocs.io")
8604 (synopsis "Python bindings to Ammonia HTML sanitization library")
8605 (description "This package provides Python bindings to Ammonia HTML
8606sanitizer Rust crate.")
8607 (license license:expat)))
8608
8609(define-public python-noiseprotocol
8610 (package
8611 (name "python-noiseprotocol")
8612 (version "0.3.1")
8613 (source
8614 (origin
8615 (method git-fetch)
8616 (uri (git-reference
8617 (url "https://github.com/plizonczyk/noiseprotocol")
8618 (commit (string-append "v" version))))
8619 (file-name (git-file-name name version))
8620 (sha256
8621 (base32 "1mk0rqpjifdv3v1cjwkdnjbrfmzzjm9f3qqs1r8vii4j2wvhm6am"))))
8622 (build-system pyproject-build-system)
8623 (propagated-inputs (list python-cryptography))
8624 (native-inputs (list python-setuptools python-pytest))
8625 (home-page "https://github.com/plizonczyk/noiseprotocol")
8626 (synopsis "Implementation of Noise Protocol Framework")
8627 (description
8628 "This package provides an implementation of Noise Protocol Framework.")
8629 (license license:expat)))
8630
8631(define-public python-webrtcvad-wheels
8632 (package
8633 (name "python-webrtcvad-wheels")
8634 (version "2.0.14")
8635 (source
8636 (origin
8637 (method git-fetch)
8638 (uri (git-reference
8639 (url "https://github.com/daanzu/py-webrtcvad-wheels")
8640 (commit (string-append "v" version))))
8641 (file-name (git-file-name name version))
8642 (sha256
8643 (base32 "0sqgg8jmg2j14f4h96h0rs42kr460v65lhanps6lhdvj5zp81cbh"))))
8644 (build-system pyproject-build-system)
8645 (native-inputs (list python-psutil python-pytest python-setuptools))
8646 (home-page "https://github.com/daanzu/py-webrtcvad-wheels")
8647 (synopsis "Python interface to the WebRTC Voice Activity Detector (VAD)")
8648 (description
8649 "This package provides a Python interface to the Google
8650@url{https://webrtc.org/, WebRTC} @acronym{VAD, Voice Activity Detector}.")
8651 (license license:expat)))
8652
8653(define-public python-websocket-client
8654 (package
8655 (name "python-websocket-client")
8656 (version "1.8.0")
8657 (source
8658 (origin
8659 (method url-fetch)
8660 (uri (pypi-uri "websocket_client" version))
8661 (sha256
8662 (base32 "1nn3qi5g59j55wfy2z02j6lq2cm281fq0wi406b2yqys8jgxyf9j"))))
8663 (build-system pyproject-build-system)
8664 (arguments
8665 (list
8666 #:test-flags
8667 ;; This test requires networking.
8668 '(list "-k" "not testConnect")))
8669 (native-inputs
8670 (list python-pysocks
8671 python-pytest
8672 python-setuptools
8673 python-websockets
8674 python-wheel))
8675 (home-page "https://github.com/websocket-client/websocket-client")
8676 (synopsis "WebSocket client for Python")
8677 (description "The Websocket-client module provides the low level APIs for
8678WebSocket usage in Python programs.")
8679 (license license:lgpl2.1+)))
8680
8681(define-public python-websocket-client-0.59
8682 (package
8683 (inherit python-websocket-client)
8684 (version "0.59.0")
8685 (source
8686 (origin
8687 (method url-fetch)
8688 (uri (pypi-uri "websocket-client" version))
8689 (sha256
8690 (base32 "0p0cz2mdissq7iw1n7jrmsfir0jfmgs1dvnpnrx477ffx9hbsxnk"))))
8691 (native-inputs
8692 (modify-inputs native-inputs
8693 (append python-six)))))
8694
8695(define-public python-purl
8696 (package
8697 (name "python-purl")
8698 (version "1.6")
8699 (source
8700 (origin
8701 (method git-fetch)
8702 (uri (git-reference
8703 (url "https://github.com/codeinthehole/purl")
8704 (commit version)))
8705 (file-name (git-file-name name version))
8706 (sha256
8707 (base32 "01zngf0s0qfsrsk0skn57frbzyscwv8467pfjk6hxdfgdx2wkg95"))))
8708 (build-system pyproject-build-system)
8709 (arguments
8710 (list
8711 #:test-flags #~(list "--pyargs" "./tests")))
8712 (native-inputs (list python-pytest python-setuptools))
8713 (propagated-inputs (list python-six))
8714 (home-page "https://github.com/codeinthehole/purl")
8715 (synopsis "Python package for URL manipulation")
8716 (description "Purl is a Python package for handling URLs.")
8717 (license license:expat)))
8718
8719(define-public python-requests
8720 (package
8721 (name "python-requests")
8722 (version "2.34.2")
8723 (source (origin
8724 (method url-fetch)
8725 (uri (pypi-uri "requests" version))
8726 (sha256
8727 (base32
8728 "1vdrc3lq9x848760n7mdhn8whsfslk30pmnnk0v4caafmr69527j"))))
8729 (build-system pyproject-build-system)
8730 (arguments
8731 (list #:test-flags
8732 ;; These require internet access
8733 '(list "--ignore=tests/test_requests.py"
8734 "-k" (string-append "not test_use_proxy_from_environment"
8735 " and not requests.sessions.Session"
8736 " and not requests.models.PreparedRequest"
8737 " and not requests.api.request")
8738 "tests/")))
8739 (propagated-inputs
8740 (list python-certifi
8741 python-charset-normalizer
8742 python-idna
8743 python-urllib3))
8744 (native-inputs
8745 (list python-pytest
8746 python-pytest-mock
8747 python-setuptools))
8748 (home-page "https://requests.readthedocs.io/")
8749 (synopsis "Python HTTP library")
8750 (description
8751 "Requests is a Python HTTP client library. It aims to be easier to use
8752than Python’s urllib2 library.")
8753 (license license:asl2.0)))
8754
8755(define-public python-requests-kerberos
8756 (package
8757 (name "python-requests-kerberos")
8758 (version "0.14.0")
8759 ;; No tests in the PyPI tarball.
8760 (source
8761 (origin
8762 (method git-fetch)
8763 (uri (git-reference
8764 (url "https://github.com/requests/requests-kerberos")
8765 (commit (string-append "v" version))))
8766 (file-name (git-file-name name version))
8767 (sha256
8768 (base32 "0s30pcnlir3j2jmf7yh065f294cf3x0x5i3ldskn8mm0a3657mv3"))))
8769 (build-system pyproject-build-system)
8770 (propagated-inputs (list python-cryptography
8771 python-pyspnego
8772 python-requests))
8773 (native-inputs (list python-pytest python-pytest-mock python-setuptools
8774 python-wheel))
8775 (home-page "https://github.com/requests/requests-kerberos")
8776 (synopsis "Kerberos authentication handler for python-requests")
8777 (description "This package provides a Kerberos authentication handler for
8778python-requests.")
8779 (license license:isc)))
8780
8781(define-public python-requests-unixsocket2
8782 (package
8783 (name "python-requests-unixsocket2")
8784 (version "1.0.1")
8785 (source
8786 (origin
8787 (method git-fetch)
8788 (uri (git-reference
8789 (url "https://gitlab.com/thelabnyc/requests-unixsocket2")
8790 (commit (string-append "v" version))))
8791 (sha256
8792 (base32 "0wb8ckagal9d6lfyl3pf9m45xn1krq6vg8kzciwv12chq9wwh0ra"))))
8793 (build-system pyproject-build-system)
8794 (native-inputs
8795 (list nss-certs-for-test
8796 python-hatchling
8797 python-pytest
8798 python-waitress))
8799 (propagated-inputs
8800 (list python-requests
8801 python-urllib3))
8802 (home-page "https://gitlab.com/thelabnyc/requests-unixsocket2")
8803 (synopsis "Talk HTTP via a UNIX domain socket")
8804 (description
8805 "This Python package lets you use the @code{requests} library to talk
8806HTTP via a UNIX domain socket.")
8807 (license license:asl2.0)))
8808
8809(define-public python-requests-ntlm
8810 (package
8811 (name "python-requests-ntlm")
8812 (version "1.3.0")
8813 (source
8814 (origin
8815 (method git-fetch)
8816 (uri (git-reference
8817 (url "https://github.com/requests/requests-ntlm")
8818 (commit (string-append "v" version))))
8819 (file-name (git-file-name name version))
8820 (sha256
8821 (base32 "0snsk66zdihdlyfjz2zgpyfgdyjg814m3cc4g3my09hdnb5xvagv"))))
8822 (build-system pyproject-build-system)
8823 (arguments
8824 (list
8825 #:test-flags
8826 ;; XXX: Connection refused.
8827 #~(list "-k" (string-join
8828 (list "not test_ntlm_http_with_cbt"
8829 "test_ntlm_http_without_cbt"
8830 "test_ntlm_https_with_cbt"
8831 "test_ntlm_https_without_cbt")
8832 " and not "))
8833 #:phases
8834 #~(modify-phases %standard-phases
8835 (add-before 'check 'spawn-test-server
8836 (lambda _
8837 ;; Taken from .github/workflows/ci.yml.
8838 (spawn "python"
8839 (list "python" "-m" "tests.test_server")))))))
8840 (propagated-inputs
8841 (list python-cryptography python-pyspnego python-requests))
8842 (native-inputs (list python-flask python-pytest python-setuptools))
8843 (home-page "https://github.com/requests/requests-ntlm")
8844 (synopsis "NTLM authentication support for Requests")
8845 (description
8846 "This package allows for HTTP NTLM authentication using the requests
8847library.")
8848 (license license:isc)))
8849
8850(define-public python-requests-mock
8851 (package
8852 (name "python-requests-mock")
8853 (version "1.12.1")
8854 (source
8855 (origin
8856 (method url-fetch)
8857 (uri (pypi-uri "requests-mock" version))
8858 (sha256
8859 (base32 "008l6xysgs6ax56lairg1li5i4bb04i2z19w5bl5claj7crjxqg9"))))
8860 (build-system pyproject-build-system)
8861 (native-inputs
8862 (list python-purl
8863 python-pytest
8864 python-requests-futures
8865 python-setuptools
8866 python-setuptools-scm
8867 python-testtools))
8868 (propagated-inputs
8869 (list python-requests))
8870 (home-page "https://requests-mock.readthedocs.org/")
8871 (synopsis "Mock out responses from the requests package")
8872 (description
8873 "This module provides a building block to stub out the HTTP requests
8874portions of your testing code.")
8875 (license license:asl2.0)))
8876
8877(define-public python-requests-toolbelt
8878 (package
8879 (name "python-requests-toolbelt")
8880 (version "1.0.0")
8881 (source
8882 (origin
8883 (method url-fetch)
8884 (uri (pypi-uri "requests-toolbelt" version))
8885 (sha256
8886 (base32 "1ijvip427ki177ycrblcn1mfgsq7ixzpvqqfvidjn0a7s2is10bn"))))
8887 (build-system pyproject-build-system)
8888 (arguments
8889 (list
8890 #:test-flags
8891 ;; Requiring networking or fail due not valid certs: AttributeError:
8892 ;; 'MockHTTPResponse' object has no attribute 'close'
8893 #~(list "-k" (string-append "not test_dump_all"
8894 " and not test_dump_response"
8895 " and not test_prepared_request_override_base"
8896 " and not test_prepared_request_with_base"
8897 " and not test_request_override_base"
8898 " and not test_request_with_base"))))
8899 (native-inputs
8900 (list python-betamax
8901 python-mock
8902 python-pyopenssl
8903 python-pytest
8904 python-setuptools
8905 python-trustme
8906 python-wheel))
8907 (propagated-inputs
8908 (list python-requests))
8909 (synopsis "Extensions to python-requests")
8910 (description "This is a toolbelt of useful classes and functions to be used
8911with python-requests.")
8912 (home-page "https://github.com/requests/toolbelt/")
8913 (license license:asl2.0)))
8914
8915(define-public python-requests-ftp
8916 (package
8917 (name "python-requests-ftp")
8918 (version "0.3.1")
8919 (source
8920 (origin
8921 (method git-fetch)
8922 (uri (git-reference
8923 (url "https://github.com/Lukasa/requests-ftp")
8924 (commit (string-append "v" version))))
8925 (file-name (git-file-name name version))
8926 (sha256
8927 (base32 "1c7xbz2fxb12ldaw2pkfg5qd29g6slf4a2gavhqvz26cd1r82ny7"))))
8928 (build-system pyproject-build-system)
8929 (arguments
8930 ;; XXX: No connection adapters found.
8931 (list #:test-flags #~(list "--ignore=tests/test_ftp_proxy.py")))
8932 (native-inputs
8933 (list python-pyftpdlib python-pytest python-setuptools python-six))
8934 (propagated-inputs (list python-requests))
8935 (home-page "https://github.com/Lukasa/requests-ftp")
8936 (synopsis "FTP Transport Adapter for Requests")
8937 (description "Requests-FTP is an implementation of a simple FTP transport
8938adapter for use with the Requests library.")
8939 (license license:asl2.0)))
8940
8941(define-public python-mohawk
8942 (let ((commit "b7899166880e890f01cf2531b5686094ba08df8f")
8943 (revision "0"))
8944 (package
8945 (name "python-mohawk")
8946 (version (git-version "1.1.0" revision commit))
8947 (source
8948 (origin
8949 (method git-fetch)
8950 (uri (git-reference
8951 (url "https://github.com/kumar303/mohawk")
8952 (commit commit)))
8953 (file-name (git-file-name name version))
8954 (sha256
8955 (base32 "00y9fimcj851rk2770wqk61fac9pnxfnzca4fvsci57zw18i50m6"))
8956 (patches
8957 (search-patches "python-mohawk-pytest.patch"))))
8958 (build-system pyproject-build-system)
8959 (arguments
8960 (list #:test-flags #~(list "mohawk/tests.py")))
8961 (native-inputs (list python-pytest python-setuptools))
8962 (propagated-inputs (list python-six)) ;TODO: remove python-mohawk when
8963 ;python-six is removed?
8964 (home-page "https://github.com/kumar303/mohawk")
8965 (synopsis "Library for Hawk HTTP authorization")
8966 (description
8967 "Mohawk is an alternate Python implementation of the Hawk HTTP
8968authorization scheme.")
8969 (license license:bsd-3))))
8970
8971(define-public python-msal
8972 (package
8973 (name "python-msal")
8974 (version "1.34.0")
8975 (home-page
8976 "https://github.com/AzureAD/microsoft-authentication-library-for-python")
8977 (source
8978 (origin
8979 (method git-fetch)
8980 (uri (git-reference
8981 (url home-page)
8982 (commit version)))
8983 (file-name (git-file-name name version))
8984 (sha256
8985 (base32 "1xcyiv742ihnzypjw7syamnhqffdy6wsvvv0f5jcl3pap0apbk0z"))
8986 (patches (search-patches "python-msal-requests.patch"))))
8987 (build-system pyproject-build-system)
8988 (arguments
8989 (list
8990 #:test-flags
8991 #~(list
8992 "--ignore=tests/test_benchmark.py"
8993 ;; XXX: Ignoring cryptography version scheme tests.
8994 "-k"
8995 "not test_ceiling_should_be_latest_cryptography_version_plus_three"
8996 ;; XXX: These tests try to access the network.
8997 "--ignore=tests/test_application.py"
8998 "--ignore=tests/test_ccs.py"
8999 ;; XXX: These tests assume they are run on Windows.
9000 "--ignore=tests/test_mi.py")
9001 #:phases
9002 #~(modify-phases %standard-phases
9003 (add-after 'unpack 'set-cryptography-version
9004 (lambda _
9005 (substitute* "tests/test_cryptography.py"
9006 (("^latest_cryptography_version = @version@")
9007 (format #f "latest_cryptography_version = ~s"
9008 #$(package-version
9009 (this-package-input "python-cryptography")))))))
9010 (add-before 'check 'configure-tests
9011 (lambda* (#:key tests? #:allow-other-keys)
9012 (when tests?
9013 (setenv "TRAVIS_TAG" "1")))))))
9014 (native-inputs
9015 (list nss-certs-for-test python-mock python-pytest python-setuptools))
9016 (propagated-inputs (list python-cryptography python-pyjwt python-requests))
9017 (synopsis "Microsoft Authentication Library (MSAL) for Python")
9018 (description
9019 "The Microsoft Authentication Library for Python enables applications to
9020integrate with the Microsoft identity platform. It allows you to sign in
9021users or apps with Microsoft identities (Azure AD, Microsoft Accounts and
9022Azure AD B2C accounts) and obtain tokens to call Microsoft APIs such as
9023Microsoft Graph or your own APIs registered with the Microsoft identity
9024platform. It is built using industry standard OAuth2 and OpenID Connect
9025protocols.")
9026 (license license:expat)))
9027
9028(define-public python-oauthlib
9029 (package
9030 (name "python-oauthlib")
9031 (version "3.3.1")
9032 (source
9033 (origin
9034 (method git-fetch)
9035 (uri (git-reference
9036 (url "https://github.com/oauthlib/oauthlib")
9037 (commit (string-append "v" version))))
9038 (file-name (git-file-name name version))
9039 (sha256
9040 (base32 "0aa38lpa6s1k56v7w7kw2w4l159kaz4gn03m698a8hfdjkx92fb5"))))
9041 (build-system pyproject-build-system)
9042 (native-inputs (list python-pytest python-mock python-setuptools))
9043 (propagated-inputs (list python-cryptography python-pyjwt python-blinker))
9044 (home-page "https://github.com/oauthlib/oauthlib")
9045 (synopsis "OAuth implementation for Python")
9046 (description
9047 "Oauthlib is a generic, spec-compliant, thorough implementation of the
9048OAuth request-signing logic.")
9049 (license license:bsd-3)))
9050
9051(define-public python-urllib3
9052 (package
9053 (name "python-urllib3")
9054 (version "2.7.0")
9055 (source
9056 (origin
9057 (method url-fetch)
9058 (uri (pypi-uri "urllib3" version))
9059 (sha256
9060 (base32
9061 "0k2za0kdl4y8mdhay0wbnf6522n4ybr61gk7gik19srwnv1hw7i3"))))
9062 (build-system pyproject-build-system)
9063 (arguments `(#:tests? #f))
9064 (native-inputs
9065 (list python-hatch-vcs
9066 python-hatchling
9067 python-setuptools-scm))
9068 (propagated-inputs
9069 (append
9070 ;; These 5 inputs are used to build urrlib3[secure]
9071 (list python-certifi
9072 python-idna
9073 python-pysocks)
9074 (if (member (%current-system)
9075 (package-transitive-supported-systems python-cryptography))
9076 (list python-cryptography)
9077 '())
9078 (if (member (%current-system)
9079 (package-transitive-supported-systems python-pyopenssl))
9080 (list python-pyopenssl)
9081 '())))
9082 (home-page "https://urllib3.readthedocs.io/")
9083 (synopsis "HTTP library with thread-safe connection pooling")
9084 (description
9085 "Urllib3 supports features left out of urllib and urllib2 libraries. It
9086can reuse the same socket connection for multiple requests, it can POST files,
9087supports url redirection and retries, and also gzip and deflate decoding.")
9088 (license license:expat)))
9089
9090(define-public python-urllib3-1.26
9091 (package
9092 (inherit python-urllib3)
9093 (version "1.26.17")
9094 (source
9095 (origin
9096 (method url-fetch)
9097 (uri (pypi-uri "urllib3" version))
9098 (sha256
9099 (base32
9100 "08fzhaf77kbjj5abpl9xag6fpfxkdp1k5s7sqd3ayacdq91a5mi4"))))
9101 (native-inputs
9102 (list python-setuptools
9103 python-wheel))))
9104
9105(define-public python-wsgiproxy2
9106 (package
9107 (name "python-wsgiproxy2")
9108 (version "0.5.1")
9109 (source
9110 (origin
9111 (method git-fetch)
9112 (uri (git-reference
9113 (url "https://github.com/gawel/WSGIProxy2/")
9114 (commit version)))
9115 (file-name (git-file-name name version))
9116 (sha256
9117 (base32 "0aw9ibla2cqzlbm3vzyk1yk3d8pccpbpdkqx99q30hq1fz1izsm2"))))
9118 (build-system pyproject-build-system)
9119 (arguments (list #:test-backend #~'unittest))
9120 (native-inputs (list python-webtest python-setuptools))
9121 (propagated-inputs (list python-requests python-six python-urllib3
9122 python-webob))
9123 (home-page "https://github.com/gawel/WSGIProxy2/")
9124 (synopsis "WSGI Proxy with various http client backends")
9125 (description
9126 "WSGI turns HTTP requests into WSGI function calls. WSGIProxy turns WSGI
9127function calls into HTTP requests. It also includes code to sign requests and
9128pass private data, and to spawn subprocesses to handle requests.")
9129 (license license:expat)))
9130
9131(define-public python-pastedeploy
9132 (package
9133 (name "python-pastedeploy")
9134 (version "3.1.0")
9135 (source
9136 (origin
9137 (method url-fetch)
9138 (uri (pypi-uri "PasteDeploy" version))
9139 (sha256
9140 (base32 "15as15mgz9xn33abwrp0x0mbj537ib3q47z8ky5475c05wasznwx"))))
9141 (build-system pyproject-build-system)
9142 (native-inputs (list python-pytest python-setuptools))
9143 (home-page "https://pylonsproject.org/")
9144 (synopsis "Load, configure, and compose WSGI applications and servers")
9145 (description
9146 "This tool provides code to load WSGI applications and servers from URIs;
9147these URIs can refer to Python Eggs for INI-style configuration files. Paste
9148Script provides commands to serve applications based on this configuration
9149file.")
9150 (license license:expat)))
9151
9152(define-public python-webtest
9153 (package
9154 (name "python-webtest")
9155 (version "3.0.6")
9156 (source
9157 (origin
9158 (method url-fetch)
9159 (uri (pypi-uri "webtest" version))
9160 (sha256
9161 (base32 "0jwl8i9xvm5xim1h2jrwfbqac1g3fpiazfdwfp2md3s4899gsmj2"))))
9162 (build-system pyproject-build-system)
9163 (arguments
9164 ;; Tests require python-pyquery, which creates a circular dependency.
9165 `(#:tests? #f))
9166 (native-inputs
9167 (list python-setuptools))
9168 (propagated-inputs
9169 (list python-beautifulsoup4
9170 python-waitress
9171 python-webob))
9172 (home-page "https://docs.pylonsproject.org/projects/webtest/")
9173 (synopsis "Helper to test WSGI applications")
9174 (description
9175 "Webtest allows you to test your Python web applications without
9176starting an HTTP server. It supports anything that supports the minimum of
9177WSGI.")
9178 (license license:expat)))
9179
9180(define-public python-flask
9181 (package
9182 (name "python-flask")
9183 (version "3.1.3")
9184 (source
9185 (origin
9186 (method git-fetch)
9187 (uri (git-reference
9188 (url "https://github.com/pallets/flask")
9189 (commit version)))
9190 (file-name (git-file-name name version))
9191 (sha256
9192 (base32 "006s5rm4syg48ymmwlnrkx8f8j758waksvhdsfiqx51zv52c0p8l"))))
9193 (build-system pyproject-build-system)
9194 (arguments
9195 (list
9196 #:test-flags
9197 ;; assert 404 == 400
9198 ;; This test is removed on master branch.
9199 #~(list (string-append "--deselect=tests/test_reqctx.py"
9200 "::test_bad_environ_raises_bad_request"))))
9201 (native-inputs
9202 (list python-flit-core
9203 python-pytest))
9204 (propagated-inputs
9205 (list python-blinker
9206 python-click
9207 python-itsdangerous
9208 python-jinja2
9209 python-markupsafe
9210 python-werkzeug
9211 ;; [optional]
9212 python-asgiref
9213 python-dotenv))
9214 (home-page "https://palletsprojects.com/p/flask/")
9215 (synopsis "Microframework based on Werkzeug, Jinja2 and good intentions")
9216 (description "Flask is a micro web framework based on the Werkzeug toolkit
9217and Jinja2 template engine. It is called a micro framework because it does not
9218presume or force a developer to use a particular tool or library.")
9219 (license license:bsd-3)))
9220
9221(define-public python-flask-compress
9222 (package
9223 (name "python-flask-compress")
9224 (version "1.24")
9225 (source
9226 (origin
9227 (method git-fetch)
9228 (uri (git-reference
9229 (url "https://github.com/colour-science/flask-compress")
9230 (commit (string-append "v" version))))
9231 (file-name (git-file-name name version))
9232 (sha256
9233 (base32 "0mid5c34r75vax1r7l2l5sjjhs6bl8rbsdmhc7kz39snq6xw3cr5"))))
9234 (build-system pyproject-build-system)
9235 (native-inputs
9236 (list python-flask-caching
9237 python-pytest
9238 python-setuptools
9239 python-setuptools-scm))
9240 (propagated-inputs
9241 (list python-backports-zstd
9242 python-brotli
9243 python-flask))
9244 (home-page "https://github.com/colour-science/flask-compress")
9245 (synopsis "Compress responses in a Flask app")
9246 (description
9247 "This package lets you compress Flask application responses and static
9248files with gzip, deflate or brotli. Flask-Compress both adds the various
9249headers required for a compressed response and compresses the response data.")
9250 (license license:expat)))
9251
9252(define-public python-flask-seasurf
9253 (package
9254 (name "python-flask-seasurf")
9255 (version "2.0.0")
9256 (source (origin
9257 (method url-fetch)
9258 (uri (pypi-uri "Flask-SeaSurf" version))
9259 (sha256
9260 (base32
9261 "0g5dsm2ikv8q4qcrb2446pbs972l5wkxyfmxsriqdsl02nz06h4f"))))
9262 (build-system pyproject-build-system)
9263 (arguments
9264 (list #:tests? #false)) ;there are none
9265 (propagated-inputs (list python-flask))
9266 (native-inputs (list python-setuptools python-wheel))
9267 (home-page "https://github.com/maxcountryman/flask-seasurf/")
9268 (synopsis "CSRF extension for Flask")
9269 (description "SeaSurf is a Flask extension for preventing cross-site
9270request forgery (CSRF). CSRF attacks are problematic because the mechanism
9271they use is relatively easy to exploit. This extension attempts to aid you in
9272securing your application from such attacks. This extension is based on the
9273Django middleware.")
9274 (license license:bsd-3)))
9275
9276(define-public python-flask-wtf
9277 (package
9278 (name "python-flask-wtf")
9279 (version "1.2.2")
9280 (source
9281 (origin
9282 (method url-fetch)
9283 (uri (pypi-uri "Flask-WTF" version))
9284 (sha256
9285 (base32
9286 "0sv6hjva1fdizb7sr46230pplx8qz8rnb4bxrfy71xbc8cgfxlkr"))))
9287 (build-system pyproject-build-system)
9288 (propagated-inputs
9289 (list python-flask python-flask python-itsdangerous python-wtforms))
9290 (native-inputs
9291 (list python-hatchling python-pytest))
9292 (home-page "https://github.com/lepture/flask-wtf")
9293 (synopsis "Simple integration of Flask and WTForms")
9294 (description "Flask-WTF integrates Flask and WTForms, including CSRF, file
9295upload, and reCAPTCHA.")
9296 (license license:bsd-3)))
9297
9298(define-public python-flask-multistatic
9299 (package
9300 (name "python-flask-multistatic")
9301 (version "1.0")
9302 (source
9303 (origin
9304 (method url-fetch)
9305 (uri (pypi-uri "flask-multistatic" version))
9306 (sha256
9307 (base32
9308 "0p4v50rwv64wcd0zlq7rzl4waprwr4hj19s3cgf1isywa7jcisgm"))))
9309 (build-system pyproject-build-system)
9310 (arguments (list #:tests? #f)) ; No tests upstream.
9311 (native-inputs (list python-setuptools))
9312 (propagated-inputs (list python-flask))
9313 (home-page "https://pagure.io/flask-multistatic")
9314 (synopsis "Flask plugin to allow overriding static files")
9315 (description "@code{flask-multistatic} is a flask plugin that adds support
9316for overriding static files.")
9317 (license license:gpl3+)))
9318
9319(define-public python-responses
9320 (package
9321 (name "python-responses")
9322 (version "0.25.3")
9323 (source (origin
9324 (method url-fetch)
9325 (uri (pypi-uri "responses" version))
9326 (sha256
9327 (base32
9328 "1fld6lsa143md4lxccwxq9iyqm9d8a05i9sp7lqjibnrmd3r4yv1"))))
9329 (build-system pyproject-build-system)
9330 (native-inputs
9331 (list python-pytest
9332 python-pytest-asyncio
9333 python-pytest-httpserver
9334 python-setuptools
9335 python-tomli
9336 python-tomli-w
9337 python-wheel))
9338 (propagated-inputs
9339 (list python-requests
9340 python-pyyaml
9341 python-urllib3))
9342 (home-page "https://github.com/getsentry/responses")
9343 (synopsis "Utility for mocking out the `requests` Python library")
9344 (description "A utility library for mocking out the `requests` Python
9345library.")
9346 (license license:asl2.0)))
9347
9348(define-public python-grequests
9349 (let ((commit "60f70e99e942a2df378b4e4f6202dcf862754c2d")
9350 (revision "0"))
9351 (package
9352 (name "python-grequests")
9353 (version (git-version "0.7.0" revision commit))
9354 (source
9355 (origin
9356 (method git-fetch)
9357 (uri (git-reference
9358 (url "https://github.com/kennethreitz/grequests")
9359 (commit commit)))
9360 (file-name (git-file-name name version))
9361 (sha256
9362 (base32 "0132yv1rr4pmrmwasrnasqbnd80pi6rgy52608731p7lidkmxz9a"))))
9363 (build-system pyproject-build-system)
9364 (arguments
9365 (list
9366 ;; XXX: Most failing tests seem to be caused by network access,
9367 ;; but there is no easy/flag way to disable tests selectively.
9368 #:tests? #f
9369 #:test-backend #~'unittest
9370 #:test-flags #~(list "tests.py")))
9371 (propagated-inputs (list python-gevent python-requests))
9372 (native-inputs (list python-setuptools))
9373 (home-page "https://github.com/kennethreitz/grequests")
9374 (synopsis "Python library for asynchronous HTTP requests")
9375 (description
9376 "GRequests is a Python library that allows you to use @code{Requests}
9377with @code{Gevent} to make asynchronous HTTP Requests easily.")
9378 (license license:bsd-2))))
9379
9380(define-public python-gwebsockets
9381 (package
9382 (name "python-gwebsockets")
9383 (version "0.7")
9384 (source
9385 (origin
9386 (method git-fetch)
9387 (uri (git-reference
9388 (url "https://github.com/sugarlabs/gwebsockets")
9389 (commit (string-append "v" version))))
9390 (file-name (git-file-name name version))
9391 (sha256
9392 (base32 "0w422yz0qdix5xb6aqrrci1s1hy4whncspwb03m9ankqww0s1yv2"))))
9393 (build-system pyproject-build-system)
9394 (arguments (list #:tests? #f)) ; No tests upstream.
9395 (native-inputs (list python-setuptools))
9396 (propagated-inputs (list python-pygobject))
9397 (home-page "https://github.com/sugarlabs/gwebsockets")
9398 (synopsis "GLib based websockets server")
9399 (description
9400 "This package provides a websocket server written in Python. It uses GIO
9401for network communication and hence it easily integrates with the GLib
9402mainloop.")
9403 (license license:asl2.0)))
9404
9405(define-public python-dpkt
9406 (package
9407 (name "python-dpkt")
9408 (version "1.9.8")
9409 (source
9410 (origin
9411 (method git-fetch)
9412 (uri (git-reference
9413 (url "https://github.com/kbandla/dpkt")
9414 (commit (string-append "v" version))))
9415 (file-name (git-file-name name version))
9416 (sha256
9417 (base32 "0dhy8l4sqfxqdda6lishb95g3v6hnw14l20ipqpzb6vaw1vf7mzj"))))
9418 (build-system pyproject-build-system)
9419 (arguments
9420 (list
9421 #:test-flags
9422 #~(list "--pyargs" "dpkt")))
9423 (native-inputs (list python-pytest python-setuptools))
9424 (home-page "https://github.com/kbandla/dpkt")
9425 (synopsis "Packet generator and parser for TCP/IP protocols")
9426 (description
9427 "The dpkt module is a fast, simple packet generator and parser for the
9428basic TCP/IP protocols.")
9429 (license license:bsd-3)))
9430
9431(define-public python-geventhttpclient
9432 (package
9433 (name "python-geventhttpclient")
9434 (version "2.3.9")
9435 (source (origin
9436 (method git-fetch)
9437 (uri (git-reference
9438 (url "https://github.com/geventhttpclient/geventhttpclient")
9439 (commit version)
9440 (recursive? #true)))
9441 (file-name (git-file-name name version))
9442 (sha256
9443 (base32
9444 "1diq6n9sr92rsqbpxlbhbn1d22hrlzp6swykz9bfzh7sxpywa6j8"))))
9445 (build-system pyproject-build-system)
9446 (arguments
9447 (list
9448 #:test-flags
9449 ;; Disable network tests.
9450 '(list "-k"
9451 (string-append "not test_client_simple"
9452 " and not test_client_ssl"
9453 " and not test_client_with_default_headers"
9454 " and not test_client_without_leading_slash"
9455 " and not test_download"
9456 " and not test_fail_invalid_ca_certificate"
9457 " and not test_httpbin_multipart"
9458 " and not test_multi_queries_greenlet_safe"
9459 " and not test_no_form_encode_header"
9460 " and not test_no_form_encoded_header"
9461 " and not test_request_with_headers"
9462 " and not test_response_context_manager"
9463 " and not test_urllib_request"))))
9464 (native-inputs (list nss-certs-for-test
9465 python-dpkt python-pytest python-requests
9466 python-setuptools python-wheel))
9467 (propagated-inputs (list python-brotli python-certifi python-gevent
9468 python-urllib3))
9469 (home-page "https://github.com/geventhttpclient/geventhttpclient")
9470 (synopsis "HTTP client library for gevent")
9471 (description "@code{python-geventhttpclient} is a high performance,
9472concurrent HTTP client library for python using @code{gevent}.")
9473 (license license:expat)))
9474
9475(define-public python-gevent-websocket
9476 (package
9477 (name "python-gevent-websocket")
9478 (version "0.10.1")
9479 (source
9480 (origin
9481 (method url-fetch)
9482 (uri (pypi-uri "gevent-websocket" version))
9483 (sha256
9484 (base32 "1c2zv2rahp1gil3cj66hfsqgy0n35hz9fny3ywhr2319d0lz7bky"))))
9485 (build-system pyproject-build-system)
9486 (arguments
9487 (list #:tests? #f)) ; no tests in PyPI or git
9488 (native-inputs
9489 (list python-setuptools
9490 python-wheel))
9491 (propagated-inputs
9492 (list python-gevent))
9493 (home-page "https://gitlab.com/noppo/gevent-websocket")
9494 (synopsis "Websocket handler for the gevent pywsgi server")
9495 (description
9496 "Websocket handler for the gevent pywsgi server, a Python network
9497library.
9498
9499Features include:
9500@itemize
9501@item integration on both socket level or using an abstract interface
9502@item RPC and PubSub framework using @acronym{WebSocket Application Messaging
9503Protocol, WAMP}
9504@item easily extendible using a simple WebSocket protocol plugin API
9505@end itemize")
9506 (license license:asl2.0)))
9507
9508(define-public python-requests-oauthlib
9509 (package
9510 (name "python-requests-oauthlib")
9511 (version "2.0.0")
9512 (source
9513 (origin
9514 (method git-fetch)
9515 (uri (git-reference (url
9516 "https://github.com/requests/requests-oauthlib")
9517 (commit (string-append "v" version))))
9518 (file-name (git-file-name name version))
9519 (sha256 (base32 "0i0vnanxqilnf2rgng7n96rl8fzq0dbcl3rpl7zkxj50kv66nqwl"))))
9520 (build-system pyproject-build-system)
9521 (arguments
9522 (list
9523 #:test-flags
9524 #~(list
9525 "--ignore=tests/test_core.py" ; requires network access.
9526 "--ignore=tests/examples/test_native_spa_pkce_auth0.py"
9527 "-k" "not test_fetch_access_token"))) ; flaky tests.
9528 (native-inputs
9529 (list python-requests-mock python-pytest python-setuptools))
9530 (propagated-inputs
9531 (list python-oauthlib python-requests))
9532 (home-page "https://github.com/requests/requests-oauthlib")
9533 (synopsis "OAuthlib authentication support for Requests")
9534 (description
9535 "Requests-OAuthlib uses the Python Requests and OAuthlib libraries to
9536provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
9537 (license license:isc)))
9538
9539(define-public python-s3fs
9540 (package
9541 (name "python-s3fs")
9542 (version "2026.1.0")
9543 (source
9544 (origin
9545 (method url-fetch)
9546 (uri (pypi-uri "s3fs" version))
9547 (sha256
9548 (base32 "17fhx4qnpcwhrfckn27wdjvlxink1kcpaiganxij4fjmp7gm58xp"))))
9549 (build-system pyproject-build-system)
9550 ;; TODO: Many tests fail with "No such file or directory" raised by the
9551 ;; HTTP client.
9552 (arguments (list #:tests? #false))
9553 (native-inputs
9554 (list python-setuptools))
9555 (propagated-inputs
9556 (list python-aiobotocore
9557 python-aiohttp
9558 python-fsspec))
9559 (home-page "https://github.com/fsspec/s3fs/")
9560 (synopsis "Convenient filesystem interface over S3")
9561 (description "This package provides a convenient filesystem interface over
9562S3.")
9563 (license license:bsd-3)))
9564
9565(define-public python-s3transfer
9566 (package
9567 (name "python-s3transfer")
9568 (version "0.16.0")
9569 (source
9570 (origin
9571 (method url-fetch)
9572 (uri (pypi-uri "s3transfer" version))
9573 (sha256
9574 (base32 "087rmdwsn9drkh5rwwbfym5p8qvirc8gllnd54i7j9c04q9hz6cf"))))
9575 (build-system pyproject-build-system)
9576 (arguments
9577 (list
9578 ;; tests: 630 passed, 51 skipped
9579 #:test-flags
9580 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
9581 ;; Tests require networking.
9582 "--ignore" "tests/integration")))
9583 (native-inputs
9584 (list python-pytest
9585 python-pytest-xdist
9586 python-setuptools))
9587 (propagated-inputs
9588 (list python-botocore))
9589 (home-page "https://github.com/boto/s3transfer")
9590 (synopsis "Amazon S3 Transfer Manager")
9591 (description
9592 "S3transfer is a Python library for managing Amazon S3 transfers.")
9593 (license license:asl2.0)))
9594
9595(define-public python-flask-restful
9596 (package
9597 (name "python-flask-restful")
9598 (version "0.3.10")
9599 (source
9600 (origin
9601 (method url-fetch)
9602 (uri (pypi-uri "Flask-RESTful" version))
9603 (sha256
9604 (base32
9605 "0dzckjjz3aw8nmisr5g9mnv02s2nqlhblykr9ydqzpr703pz4jpy"))))
9606 (build-system pyproject-build-system)
9607 (arguments
9608 ;; See <https://github.com/flask-restful/flask-restful/issues/980>.
9609 (list #:tests? #f))
9610 (propagated-inputs
9611 (list python-aniso8601 python-flask python-pytz))
9612 (native-inputs
9613 (list python-blinker
9614 python-mock
9615 python-pytest
9616 python-setuptools
9617 python-six))
9618 (home-page "https://github.com/flask-restful/flask-restful/")
9619 (synopsis "Flask module for creating REST APIs")
9620 (description
9621 "This package contains a Flask module for creating REST APIs.")
9622 (license license:bsd-3)))
9623
9624(define-public python-flask-sqlalchemy
9625 (package
9626 (name "python-flask-sqlalchemy")
9627 ;; Released version fails tests in Python 3.12.
9628 (properties '((commit . "168cb4b7b50fe5176307a10d873781bfafc6eeda")
9629 (revision . "0")))
9630 (version (git-version "3.1.1"
9631 (assoc-ref properties 'revision)
9632 (assoc-ref properties 'commit)))
9633 (source
9634 (origin
9635 (method git-fetch)
9636 (uri (git-reference
9637 (url "https://github.com/pallets-eco/flask-sqlalchemy")
9638 (commit (assoc-ref properties 'commit))))
9639 (file-name (git-file-name name version))
9640 (sha256
9641 (base32
9642 "0xw8v1540m21x9crpgb0i3rxyhh1d24ldg354vndw9cif74ls5p6"))))
9643 (build-system pyproject-build-system)
9644 (arguments
9645 (list
9646 #:test-flags
9647 #~(list "-k" (string-append "not test_explicit_table[db2]"
9648 " and not test_explicit_table[db4]")
9649 "-W" "ignore::DeprecationWarning")))
9650 (native-inputs
9651 (list python-flit-core
9652 python-pytest))
9653 (propagated-inputs
9654 (list python-flask
9655 python-sqlalchemy-2))
9656 (home-page "https://github.com/mitsuhiko/flask-sqlalchemy")
9657 (synopsis "Module adding SQLAlchemy support to your Flask application")
9658 (description
9659 "This package adds SQLAlchemy support to your Flask application.")
9660 (license license:bsd-3)))
9661
9662(define-public python-flask-restful-swagger
9663 (package
9664 (name "python-flask-restful-swagger")
9665 (version "0.20.1")
9666 ;; XXX: Unbundle minified javascript.
9667 (source
9668 (origin
9669 (method git-fetch)
9670 (uri (git-reference
9671 (url "https://github.com/rantav/flask-restful-swagger")
9672 (commit version)))
9673 (file-name (git-file-name name version))
9674 (sha256
9675 (base32 "1ppdwn25ijf8b3zchxkvwj4ipc68v3p522i8mm51jm0w6mg5bvsh"))))
9676 (build-system pyproject-build-system)
9677 (arguments (list #:tests? #f)) ; No tests.
9678 (native-inputs (list python-setuptools))
9679 (propagated-inputs (list python-flask-restful python-six))
9680 (home-page "https://github.com/rantav/flask-restful-swagger")
9681 (synopsis "Extract Swagger specs from Flask-Restful projects")
9682 (description "This package lets you extract Swagger API documentation
9683specs from your Flask-Restful projects.")
9684 (license license:expat)))
9685
9686(define-public python-htmlmin
9687 (package
9688 (name "python-htmlmin")
9689 (version "0.1.12")
9690 (source
9691 (origin
9692 (method url-fetch)
9693 (uri (pypi-uri "htmlmin" version))
9694 (sha256
9695 (base32
9696 "0y51xhabw6x8jk8k93xl8vznshpz3jb6l28075r5sjip613fzhah"))))
9697 (build-system pyproject-build-system)
9698 (arguments
9699 (list #:tests? #f)) ; no tests
9700 (native-inputs (list python-setuptools))
9701 (home-page "https://htmlmin.readthedocs.org/en/latest/")
9702 (synopsis "HTML minifier")
9703 (description "@code{htmlmin} is an HTML minifier that just works.
9704It comes with safe defaults and easily configurable options.")
9705 (license license:bsd-3)))
9706
9707;; XXX: Forked renamed and updated version.
9708(define-public python-htmlmin2
9709 (package/inherit python-htmlmin
9710 (name "python-htmlmin2")
9711 (version "0.1.13")
9712 (source
9713 (origin
9714 (method git-fetch)
9715 (uri (git-reference
9716 (url "https://github.com/wilhelmer/htmlmin")
9717 (commit (string-append "v" version))))
9718 (file-name (git-file-name name version))
9719 (sha256
9720 (base32 "1y7mcx8d451hwa1wrg2lffg7ccdy3w5m7xwb5xqp8h2852pypfh2"))))
9721 (build-system pyproject-build-system)
9722 (arguments (list #:test-backend #~'unittest))
9723 (native-inputs (list python-setuptools))
9724 (home-page "https://github.com/wilhelmer/htmlmin")
9725 (description
9726 "@code{htmlmin2} is an HTML minifier that just works. It comes with safe
9727defaults and easily configurable options. This variant is an updated fork of
9728the original @code{python-htmlmin}.")
9729 (license license:bsd-3)))
9730
9731(define-public python-flask-htmlmin
9732 (package
9733 (name "python-flask-htmlmin")
9734 (version "3.0.0")
9735 (source
9736 (origin
9737 (method git-fetch)
9738 (uri (git-reference
9739 (url "https://github.com/hamidfzm/Flask-HTMLmin")
9740 (commit (string-append "v" version))))
9741 (file-name (git-file-name name version))
9742 (sha256
9743 (base32 "0ybqssnqwa9zgv61azp5r1grgnq28ypfhr80p9rp61x2z0y0zl32"))))
9744 (build-system pyproject-build-system)
9745 (native-inputs (list python-pytest python-setuptools))
9746 (propagated-inputs (list python-cssmin python-flask python-htmlmin2))
9747 (home-page "https://github.com/hamidfzm/Flask-HTMLmin")
9748 (synopsis "HTML response minifier for Flask")
9749 (description
9750 "Minify @code{text/html} MIME type responses when using @code{Flask}.")
9751 (license license:bsd-3)))
9752
9753(define-public python-jsmin
9754 (package
9755 (name "python-jsmin")
9756 (version "3.0.1")
9757 (source
9758 (origin
9759 (method url-fetch)
9760 (uri (pypi-uri "jsmin" version))
9761 (sha256
9762 (base32
9763 "1z1brjsvni0260bypldkl8a05sgp0qk18x560zl44igr3q99m5f0"))))
9764 (build-system pyproject-build-system)
9765 (arguments (list #:test-backend #~'unittest))
9766 (native-inputs
9767 (list python-setuptools))
9768 (home-page "https://github.com/tikitu/jsmin/")
9769 (synopsis "Python JavaScript minifier")
9770 (description
9771 "@code{jsmin} is a JavaScript minifier, usable from both Python code and
9772on the command line.")
9773 (license license:expat)))
9774
9775(define-public python-flask-login
9776 (let ((commit "c8bba84b9ba6768e878317fc46c54bd13fa1ac07")
9777 (revision "0"))
9778 (package
9779 (name "python-flask-login")
9780 (version (git-version "0.6.3" revision commit))
9781 (source
9782 (origin
9783 (method git-fetch)
9784 (uri (git-reference
9785 (url "https://github.com/maxcountryman/flask-login")
9786 (commit commit)))
9787 (file-name (git-file-name name version))
9788 (sha256
9789 (base32 "0q0ga1zwm06kvpnsf50ckmsc77959i1spx7z2y3jkbwaa4klsyli"))))
9790 (build-system pyproject-build-system)
9791 (propagated-inputs
9792 (list python-flask))
9793 (native-inputs
9794 ;; For tests.
9795 (list python-blinker
9796 python-flit-core
9797 python-mock
9798 python-pytest
9799 python-semantic-version
9800 python-werkzeug))
9801 (home-page "https://github.com/maxcountryman/flask-login")
9802 (synopsis "User session management for Flask")
9803 (description
9804 "@code{Flask-Login} provides user session management for Flask. It
9805handles the common tasks of logging in, logging out, and remembering your
9806users' sessions over extended periods of time.")
9807 (license license:expat))))
9808
9809(define-public python-oauth2client
9810 (package
9811 (name "python-oauth2client")
9812 (version "4.1.3")
9813 (source
9814 (origin
9815 (method git-fetch)
9816 (uri (git-reference
9817 (url "https://github.com/google/oauth2client/")
9818 (commit (string-append "v" version))))
9819 (file-name (git-file-name name version))
9820 (sha256
9821 (base32 "0xm19dv5kmi82zzrx3d4mp326irr3x37q818hlspz514dzjq2ad1"))))
9822 (build-system pyproject-build-system)
9823 (arguments
9824 (list #:tests? #f))
9825 (native-inputs
9826 (list python-setuptools))
9827 (propagated-inputs
9828 (list python-httplib2
9829 python-pyasn1
9830 python-pyasn1-modules
9831 python-pyparsing
9832 python-rsa
9833 python-six))
9834 (home-page "https://github.com/google/oauth2client/")
9835 (synopsis "OAuth 2.0 client library")
9836 (description "@code{python-oauth2client} provides an OAuth 2.0 client
9837library for Python")
9838 (license license:asl2.0)))
9839
9840(define-public python-flask-oidc
9841 (package
9842 (name "python-flask-oidc")
9843 (version "2.3.1")
9844 (source
9845 (origin
9846 (method url-fetch)
9847 (uri (pypi-uri "flask_oidc" version))
9848 (sha256
9849 (base32
9850 "1200xhqiqlqfmrq54v2p6cf3nny86njjw8r7sk5j59hlk9a683zk"))))
9851 (build-system pyproject-build-system)
9852 (propagated-inputs
9853 (list python-authlib
9854 python-blinker
9855 python-flask
9856 python-requests
9857 python-responses))
9858 (native-inputs
9859 (list python-pytest python-poetry-core))
9860 (home-page "https://github.com/puiterwijk/flask-oidc")
9861 (synopsis "OpenID Connect extension for Flask")
9862 (description "@code{python-flask-oidc} provides an OpenID Connect extension
9863for Flask.")
9864 (license license:bsd-2)))
9865
9866(define-public python-webassets
9867 (package
9868 (name "python-webassets")
9869 (version "3.0.0")
9870 (source
9871 (origin
9872 (method git-fetch)
9873 (uri (git-reference
9874 (url "https://github.com/miracle2k/webassets")
9875 (commit version)))
9876 (file-name (git-file-name name version))
9877 (sha256
9878 (base32 "11hxvdqw86q6r665iryjzwx21ys8jh2c63mw016ldr6j49l0zyyh"))))
9879 (build-system pyproject-build-system)
9880 (propagated-inputs (list python-pyyaml python-zope-dottedname))
9881 (native-inputs (list python-hatchling python-pytest))
9882 (home-page "https://github.com/miracle2k/webassets")
9883 (synopsis "Media asset management")
9884 (description
9885 "This package provides utilities to merge, minify and compress Javascript
9886and CSS files,supporting a variety of different filters, including YUI, jsmin,
9887jspacker or CSS tidy. It also supports URL rewriting in CSS files.")
9888 (license license:bsd-2)))
9889
9890(define-public python-elastic-transport
9891 (package
9892 (name "python-elastic-transport")
9893 (version "9.1.0")
9894 (source
9895 (origin
9896 (method url-fetch)
9897 (uri (pypi-uri "elastic_transport" version))
9898 (sha256
9899 (base32 "0g879z8rqrfbwkxsm6xcycjha1swl7gdgs6m0y0j1zmh4m5f940m"))))
9900 (build-system pyproject-build-system)
9901 (arguments
9902 (list
9903 #:test-flags
9904 ;; Deselect failing tests (mostly due to network not reachable)
9905 #~(list "-k"
9906 (string-append
9907 "not .badssl.com"
9908 " and not test_assert_fingerprint_in_cert_chain_failure"))))
9909 (propagated-inputs (list python-certifi python-urllib3))
9910 (native-inputs (list nss-certs-for-test
9911 python-aiohttp
9912 ;; python-furo
9913 python-httpx
9914 python-opentelemetry-api
9915 python-opentelemetry-sdk
9916 python-orjson
9917 python-pytest
9918 python-pytest-asyncio-0.26
9919 ;; python-pytest-cov
9920 python-pytest-httpbin
9921 python-pytest-httpserver
9922 python-pytest-mock
9923 python-requests
9924 python-respx ;test
9925 python-setuptools
9926 ;; python-sphinx
9927 ;; python-sphinx-autodoc-typehints
9928 python-trustme
9929 python-wheel))
9930 (home-page "https://github.com/elastic/elastic-transport-python")
9931 (synopsis "Common library for Python Elastic client libraries")
9932 (description
9933 "This library was lifted from @code{elasticsearch-py} and then transformed to
9934be used across all Elastic services rather than only Elasticsearch. It
9935provides transport classes and utilities shared among Python Elastic client
9936libraries.")
9937 ;; Apache-2.0 in setup.py and LICENSE file.
9938 (license license:asl2.0)))
9939
9940(define-public python-elasticsearch
9941 (package
9942 (name "python-elasticsearch")
9943 (version "9.1.1")
9944 (source
9945 (origin
9946 (method git-fetch) ; no tests in PyPI release
9947 (uri (git-reference
9948 (url "https://github.com/elastic/elasticsearch-py")
9949 (commit (string-append "v" version))))
9950 (file-name (git-file-name name version))
9951 (sha256
9952 (base32 "015x73y84nyigcyg00lh32p2pfrqf834fr7clfnzymgzrrxa73jf"))))
9953 (build-system pyproject-build-system)
9954 (native-inputs
9955 (list nss-certs-for-test
9956 python-aiohttp
9957 python-dateutil
9958 python-mock
9959 python-orjson
9960 python-pytest
9961 python-pytest-asyncio
9962 python-pytz
9963 python-pyyaml
9964 python-requests
9965 python-hatchling))
9966 (propagated-inputs
9967 (list python-certifi
9968 python-elastic-transport))
9969 (home-page "https://github.com/elastic/elasticsearch-py")
9970 (synopsis "Low-level client for Elasticsearch")
9971 (description "Official low-level client for Elasticsearch. Its goal is to
9972provide common ground for all Elasticsearch-related code in Python; because of
9973this it tries to be opinion-free and very extendable.")
9974 ;; Apache-2.0 in setup.py and LICENSE file.
9975 (license license:asl2.0)))
9976
9977(define-public python-engineio
9978 (package
9979 (name "python-engineio")
9980 (version "4.13.4")
9981 (source
9982 (origin
9983 (method git-fetch)
9984 (uri (git-reference
9985 (url "https://github.com/miguelgrinberg/python-engineio/")
9986 (commit (string-append "v" version))))
9987 (file-name (git-file-name name version))
9988 (sha256
9989 (base32 "1ndp68cqssjpvln958v236rg5jgpzy57vs3z45sz7xfscmbi893r"))))
9990 (build-system pyproject-build-system)
9991 (native-inputs
9992 (list python-pytest
9993 python-pytest-asyncio
9994 python-setuptools
9995 python-tornado))
9996 (propagated-inputs
9997 (list python-simple-websocket
9998 ;; [optional]
9999 python-aiohttp
10000 python-requests
10001 python-websocket-client))
10002 (home-page "https://github.com/miguelgrinberg/python-engineio/")
10003 (synopsis "Engine.IO server")
10004 (description "This package provides a Python implementation of the
10005@code{Engine.IO} realtime client and server.")
10006 (license license:expat)))
10007
10008(define-public python-ephemeral-port-reserve
10009 (package
10010 (name "python-ephemeral-port-reserve")
10011 (version "1.1.4")
10012 (source
10013 (origin
10014 (method git-fetch)
10015 (uri (git-reference
10016 (url "https://github.com/Yelp/ephemeral-port-reserve")
10017 (commit (string-append "v" version))))
10018 (file-name (git-file-name name version))
10019 (sha256
10020 (base32 "1ifmf5zcw7mhbm73awmf5jwc4rw8lhk81mn4zp797lwkysjm38s7"))))
10021 (build-system pyproject-build-system)
10022 (native-inputs
10023 (list python-pytest
10024 python-setuptools))
10025 (home-page "https://github.com/Yelp/ephemeral-port-reserve/")
10026 (synopsis "Find an unused port, reliably")
10027 (description
10028 "Bind to an ephemeral port, force it into the TIME_WAIT state, and unbind
10029it.")
10030 (license license:expat)))
10031
10032(define-public python-flask-migrate
10033 (package
10034 (name "python-flask-migrate")
10035 (version "4.1.0")
10036 (home-page "https://github.com/miguelgrinberg/flask-migrate/")
10037 (source (origin
10038 (method git-fetch)
10039 (uri (git-reference (url home-page)
10040 (commit (string-append "v" version))))
10041 (file-name (git-file-name name version))
10042 (sha256
10043 (base32
10044 "09qw1hhyssa5gahm199x67d55c55m3k9m23xp2bdacwsiv8jw57g"))))
10045 (build-system pyproject-build-system)
10046 (propagated-inputs
10047 (list python-flask python-alembic python-flask-sqlalchemy))
10048 (native-inputs
10049 (list python-pytest python-setuptools python-wheel))
10050 (synopsis "SQLAlchemy database migrations for Flask programs using
10051Alembic")
10052 (description "This package contains SQLAlchemy database migration tools
10053for Flask programs that are using @code{python-alembic}.")
10054 (license license:expat)))
10055
10056(define-public python-genshi
10057 (package
10058 (name "python-genshi")
10059 (version "0.7.10")
10060 (source
10061 (origin
10062 (method git-fetch)
10063 (uri (git-reference
10064 (url "https://github.com/edgewall/genshi")
10065 (commit version)))
10066 (file-name (git-file-name name version))
10067 (sha256
10068 (base32 "1dmf0ggp0s3371jv483kjriw9jscawxcik6q70a0wqjdfh5383i6"))))
10069 (build-system pyproject-build-system)
10070 (arguments (list #:test-backend #~'unittest))
10071 (native-inputs (list python-setuptools))
10072 (propagated-inputs (list python-six))
10073 (home-page "https://genshi.edgewall.org/")
10074 (synopsis "Toolkit for generation of output for the web")
10075 (description "Genshi is a Python library that provides an integrated set
10076of components for parsing, generating, and processing HTML, XML or other
10077textual content for output generation on the web.")
10078 (license license:bsd-3)))
10079
10080(define-public python-flask-principal
10081 (package
10082 (name "python-flask-principal")
10083 (version "0.4.0")
10084 (source
10085 (origin
10086 (method git-fetch)
10087 (uri (git-reference
10088 (url "https://github.com/pallets-eco/flask-principal")
10089 (commit version)))
10090 (file-name (git-file-name name version))
10091 (sha256
10092 (base32 "0hcqcj768inmyfsw1y2vk6pa9p22dh138ll809rhpz9vjz6spnqk"))))
10093 (build-system pyproject-build-system)
10094 (propagated-inputs (list python-blinker))
10095 (native-inputs (list python-flask python-pynose python-setuptools))
10096 (home-page "https://github.com/pallets-eco/flask-principal")
10097 (synopsis "Identity management for Flask")
10098 (description
10099 "@code{flask_principal} is a identity management library for Flask. It
10100supports managing both authentication and authorization data in a thread-local
10101variable.")
10102 (license license:expat)))
10103
10104(define-public python-flask-httpauth
10105 (package
10106 (name "python-flask-httpauth")
10107 (version "4.8.0")
10108 (source
10109 (origin
10110 (method url-fetch)
10111 (uri (pypi-uri "Flask-HTTPAuth" version))
10112 (sha256
10113 (base32
10114 "0yh9fn6pak64has89pcy03f1cn198vkil872y5jjr53kph2qlmk6"))))
10115 (build-system pyproject-build-system)
10116 (propagated-inputs (list python-flask))
10117 (native-inputs
10118 (list nss-certs-for-test
10119 python-pytest
10120 python-setuptools
10121 python-wheel))
10122 (home-page "https://github.com/miguelgrinberg/flask-httpauth/")
10123 (synopsis "Basic and Digest HTTP authentication for Flask routes")
10124 (description "@code{flask_httpauth} provides Basic and Digest HTTP
10125authentication for Flask routes.")
10126 (license license:expat)))
10127
10128(define-public python-uritemplate
10129 (package
10130 (name "python-uritemplate")
10131 (version "4.2.0")
10132 (source
10133 (origin
10134 (method url-fetch)
10135 (uri (pypi-uri "uritemplate" version))
10136 (sha256
10137 (base32
10138 "03lxxkk0kjn6z7z1f9hqvsaqfrny1qds7vi36f35b2c7h38jw328"))))
10139 (build-system pyproject-build-system)
10140 (native-inputs (list python-pytest python-setuptools))
10141 (home-page "https://uritemplate.readthedocs.io/")
10142 (synopsis "Library to deal with URI Templates")
10143 (description "@code{uritemplate} provides Python library to deal with URI
10144Templates.")
10145 ;; The software is made available under the terms of *either* of the
10146 ;; licenses found in LICENSE.APACHE or LICENSE.BSD. Contributions
10147 ;; are made under *both* licenses (excerpt from the LICENSE file).
10148 (license (list license:bsd-2 license:asl2.0))))
10149
10150(define-public python-uritemplate-3
10151 (package
10152 (inherit python-uritemplate)
10153 (name "python-uritemplate")
10154 (version "3.0.1")
10155 (source (origin
10156 (method url-fetch)
10157 (uri (pypi-uri "uritemplate" version))
10158 (sha256
10159 (base32 "1bkwmgr0ia9gcn4bszs2xlvml79f0bi2s4a87xg22ky9rq8avy2s"))))))
10160
10161(define-public python-publicsuffix2
10162 (package
10163 (name "python-publicsuffix2")
10164 (version "2.2019-12-21")
10165 (source
10166 (origin
10167 (method git-fetch)
10168 (uri (git-reference
10169 (url "https://github.com/pombredanne/python-publicsuffix2")
10170 (commit (string-append "release-" version))))
10171 (file-name (git-file-name name version))
10172 (sha256
10173 (base32 "1dkvfvl0izq9hqzilnw8ipkbgjs9xyad9p21i3864hzinbh0wp9r"))))
10174 (build-system pyproject-build-system)
10175 (arguments
10176 (list
10177 #:tests? #f ;the test suite requires network access
10178 #:phases
10179 #~(modify-phases %standard-phases
10180 (add-after 'unpack 'ignore-maintainer-inputs
10181 (lambda _
10182 ;; Comment out a demand for python-requests, which is used only by
10183 ;; the unused ‘update_psl’ helper command.
10184 (substitute* "setup.py"
10185 (("'requests " match)
10186 (format #f "# ~a" match))))))))
10187 (native-inputs (list python-setuptools))
10188 (home-page "https://github.com/pombredanne/python-publicsuffix2")
10189 (synopsis
10190 "Get a public suffix for a domain name using the Public Suffix List")
10191 (description
10192 "Get a public suffix for a domain name using the Public Suffix List.
10193Forked from and using the same API as the publicsuffix package.")
10194 (license (list license:expat license:mpl2.0))))
10195
10196(define-public python-werkzeug
10197 (package
10198 (name "python-werkzeug")
10199 (version "3.1.8")
10200 (source
10201 (origin
10202 (method git-fetch)
10203 (uri (git-reference
10204 (url "https://github.com/pallets/werkzeug")
10205 (commit version)))
10206 (file-name (git-file-name name version))
10207 (sha256
10208 (base32 "1jwrrjv50n5rcfzax4qf0237znkcpcafd17hx0r77f997yv3ghlv"))))
10209 (build-system pyproject-build-system)
10210 (arguments
10211 (list
10212 #:test-flags
10213 #~(list "-m" "not dev_server")))
10214 (native-inputs
10215 (list python-ephemeral-port-reserve
10216 python-flit-core
10217 python-pytest
10218 python-pytest-timeout
10219 python-watchdog))
10220 (propagated-inputs
10221 (list python-markupsafe))
10222 (home-page "https://palletsprojects.com/p/werkzeug/")
10223 (synopsis "Utilities for WSGI applications")
10224 (description "One of the most advanced WSGI utility modules. It includes a
10225powerful debugger, full-featured request and response objects, HTTP utilities to
10226handle entity tags, cache control headers, HTTP dates, cookie handling, file
10227uploads, a powerful URL routing system and a bunch of community-contributed
10228addon modules.")
10229 (license license:x11)))
10230
10231(define-public python-werkzeug-1.0
10232 (package
10233 (inherit python-werkzeug)
10234 (version "1.0.1")
10235 (source (origin
10236 (method url-fetch)
10237 (uri (pypi-uri "Werkzeug" version))
10238 (sha256
10239 (base32
10240 "0z74sa1xw5h20yin9faj0vvdbq713cgbj84klc72jr9nmpjv303c"))
10241 (patches (search-patches "python-werkzeug-tests.patch"))))
10242 (arguments
10243 (list
10244 #:phases
10245 '(modify-phases %standard-phases
10246 (add-after 'unpack 'ignore-warnings
10247 (lambda _
10248 (substitute* "setup.cfg"
10249 ((" error.*") "")))))))
10250 (propagated-inputs
10251 (list python-requests))
10252 (native-inputs
10253 (list python-pytest python-pytest-timeout python-setuptools
10254 python-wheel))))
10255
10256(define-public python-wtforms
10257 (package
10258 (name "python-wtforms")
10259 (version "3.2.2")
10260 (source
10261 (origin
10262 (method url-fetch)
10263 (uri (pypi-uri "wtforms" version))
10264 (sha256
10265 (base32 "14qbayp2gfmahaqn5migwyz2h1cq3gcdr4q2vd75vwvhhqzwf03v"))))
10266 (build-system pyproject-build-system)
10267 (native-inputs
10268 (list python-babel
10269 python-email-validator
10270 python-hatchling
10271 python-pytest
10272 python-setuptools))
10273 (propagated-inputs (list python-markupsafe))
10274 (home-page "https://wtforms.readthedocs.io/")
10275 (synopsis
10276 "Form validation and rendering library for Python web development")
10277 (description
10278 "WTForms is a flexible forms validation and rendering library
10279for Python web development. It is very similar to the web form API
10280available in Django, but is a standalone package.")
10281 (license license:bsd-3)))
10282
10283(define-public python-wtforms-sqlalchemy
10284 (package
10285 (name "python-wtforms-sqlalchemy")
10286 (version "0.4.1")
10287 (source
10288 (origin
10289 (method url-fetch)
10290 (uri (pypi-uri "WTForms-SQLAlchemy" version))
10291 (sha256
10292 (base32 "1nx4x0ifanlbrzh3f9ns8ihnchlkzf54ilvqmgcgcz2j72vm43rp"))))
10293 (build-system pyproject-build-system)
10294 (native-inputs (list python-pytest python-setuptools python-wheel))
10295 (propagated-inputs (list python-sqlalchemy python-wtforms))
10296 (home-page "https://github.com/wtforms/wtforms-sqlalchemy/")
10297 (synopsis "SQLAlchemy tools for WTForms")
10298 (description
10299 "WTForms-SQLAlchemy is a fork of the @code{wtforms.ext.sqlalchemy}
10300package from WTForms. The package has been renamed to
10301@code{wtforms_sqlalchemy} but otherwise should function the same as
10302@code{wtforms.ext.sqlalchemy} did.")
10303 (license license:bsd-3)))
10304
10305(define-public python-urlgrabber
10306 (package
10307 (name "python-urlgrabber")
10308 (version "4.1.0")
10309 (source
10310 (origin
10311 (method url-fetch)
10312 (uri (pypi-uri "urlgrabber" version))
10313 (sha256
10314 (base32 "0fg16zlw49cw7pjq9dhpc5vd35d5zz1mlki55m464qxfmfpzhnh7"))))
10315 (build-system pyproject-build-system)
10316 (arguments
10317 (list
10318 #:tests? #f ; Most tests require network access.
10319 #:phases
10320 #~(modify-phases %standard-phases
10321 (replace 'check
10322 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
10323 (when tests?
10324 (invoke "python" "test/runtests.py")))))))
10325 (native-inputs (list python-setuptools))
10326 (propagated-inputs
10327 (list python-pycurl python-setuptools python-six))
10328 (home-page "http://urlgrabber.baseurl.org/") ; no HTTPS
10329 (synopsis "High-level cross protocol url-grabber")
10330 (description
10331 "@code{urlgrabber} is a library that unifies access to files available on
10332the web, FTP or locally. It supports HTTP, FTP and file:// protocols, it
10333supports features like HTTP keep-alive, reget, throttling and more.")
10334 (license license:lgpl2.1+)))
10335
10336(define-public python-pycares
10337 (package
10338 (name "python-pycares")
10339 (version "4.11.0")
10340 (source
10341 (origin
10342 (method git-fetch)
10343 (uri (git-reference
10344 (url "https://github.com/saghul/pycares")
10345 (commit (string-append "v" version))))
10346 (file-name (git-file-name name version))
10347 (sha256
10348 (base32 "18syxp9bpm70zfiw427p7cpp6wg0ybrw6b32c1zvdp2i8jgd82xl"))
10349 (snippet #~(begin
10350 (rmdir "deps/c-ares")))))
10351 (build-system pyproject-build-system)
10352 (arguments
10353 (list
10354 ;; XXX: Half of the tests require internet access
10355 ;; There is currently no markers to avoid running them.
10356 #:tests? #f
10357 #:phases
10358 #~(modify-phases %standard-phases
10359 (add-after 'unpack 'configure-system-lib
10360 (lambda _
10361 (setenv "PYCARES_USE_SYSTEM_LIB" "1"))))))
10362 (native-inputs (list python-pytest python-setuptools))
10363 (inputs (list c-ares))
10364 (propagated-inputs (list python-cffi))
10365 (home-page "https://github.com/saghul/pycares")
10366 (synopsis "Python interface for @code{c-ares}")
10367 (description
10368 "@code{pycares} is a Python module which provides an interface to
10369@code{c-ares}, a C library that performs DNS requests and name resolutions
10370asynchronously.")
10371 (license license:expat)))
10372
10373(define-public python-yarl
10374 (package
10375 (name "python-yarl")
10376 (version "1.18.3")
10377 (source
10378 (origin
10379 (method url-fetch)
10380 (uri (pypi-uri "yarl" version))
10381 (sha256
10382 (base32
10383 "1qfj6kvdxr8bzka4lp0bh0xfgr5mzx7zzvj2jb4vcxxzbk20265c"))))
10384 (build-system pyproject-build-system)
10385 (arguments
10386 (list
10387 #:test-flags '(list "--ignore-glob=tests/test_*_benchmarks.py")
10388 #:phases
10389 '(modify-phases %standard-phases
10390 (add-after 'unpack 'avoid-pytest-cov-preload
10391 (lambda _
10392 (substitute* "pytest.ini"
10393 (("-p pytest_cov") ""))))
10394 (add-after 'unpack 'patch-build-system
10395 (lambda _
10396 ;; XXX: I don't know how to tell it to build the extensions in
10397 ;; place.
10398 (substitute* "packaging/pep517_backend/_backend.py"
10399 (("build_inplace=False") "build_inplace=True")))))))
10400 (native-inputs
10401 (list python-cython
10402 python-expandvars
10403 python-pytest
10404 python-pytest-xdist
10405 python-setuptools
10406 python-tomli))
10407 (propagated-inputs
10408 (list python-packaging python-idna python-multidict python-propcache))
10409 (home-page "https://github.com/aio-libs/yarl/")
10410 (synopsis "Yet another URL library")
10411 (description "@code{yarl} module provides handy @code{URL} class
10412for URL parsing and changing.")
10413 (license license:asl2.0)))
10414
10415(define-public python-google
10416 (package
10417 (name "python-google")
10418 (version "3.0.0")
10419 (source
10420 (origin
10421 (method url-fetch)
10422 (uri (pypi-uri "google" version))
10423 (sha256
10424 (base32 "1gncv3l11za0mpxvmpaf5n5j3jzp282rz62yml4ha4z55q930d8l"))))
10425 (build-system pyproject-build-system)
10426 (arguments (list #:tests? #f)) ;There are no tests.
10427 (native-inputs (list python-setuptools))
10428 (propagated-inputs (list python-beautifulsoup4))
10429 (home-page "https://breakingcode.wordpress.com/")
10430 (synopsis "Python bindings to the Google search engine")
10431 (description
10432 "This package provides Python bindings for using the Google search
10433engine. Its module is called @code{googlesearch}.")
10434 (license license:bsd-3)))
10435
10436(define-public python-google-api-client
10437 (package
10438 (name "python-google-api-client")
10439 (version "2.198.0")
10440 (source
10441 (origin
10442 (method git-fetch)
10443 (uri (git-reference
10444 (url "https://github.com/google/google-api-python-client")
10445 (commit (string-append "v" version))))
10446 (file-name (git-file-name name version))
10447 (sha256
10448 (base32 "1adjr3ylp8bwbvywxm11hs4y913pvaga0dn6nwmb3622y62zxfhg"))))
10449 (build-system pyproject-build-system)
10450 (arguments
10451 (list
10452 #:test-flags
10453 #~(list
10454 "-k"
10455 (string-join
10456 (list
10457 ;; XXX: Deprecated behavior.
10458 "not test_client_options_universe_configured_with_mtls"
10459 "test_universe_env_var_configured_with_mtls"
10460 ;; XXX: Requires CA certificates.
10461 "test_credentials_and_credentials_file_mutually_exclusive")
10462 " and not ")
10463 "tests")))
10464 (native-inputs
10465 (list python-parameterized
10466 python-pytest
10467 python-setuptools))
10468 (propagated-inputs
10469 (list python-google-api-core
10470 python-google-auth
10471 python-google-auth-httplib2
10472 python-httplib2
10473 python-pyparsing
10474 python-uritemplate-3))
10475 (home-page "https://github.com/google/google-api-python-client")
10476 (synopsis "Core Python library for accessing Google APIs")
10477 (description "Python client library for Google's discovery based APIs")
10478 (license license:asl2.0)))
10479
10480(define-public python-google-auth-httplib2
10481 (package
10482 (name "python-google-auth-httplib2")
10483 (version "0.4.0")
10484 (source (origin
10485 (method url-fetch)
10486 (uri (pypi-uri "google_auth_httplib2" version))
10487 (sha256
10488 (base32 "0dgdzy2ps3z71dc2b4s1fhmyx094nq0sg75sagav995p0ji31c6m"))))
10489 (build-system pyproject-build-system)
10490 (propagated-inputs
10491 (list python-google-auth python-httplib2))
10492 (native-inputs
10493 (list python-pytest
10494 python-pyparsing
10495 python-pytest-localserver
10496 python-flask
10497 python-setuptools))
10498 (home-page "https://github.com/googleapis/google-cloud-python")
10499 (synopsis "Google Authentication Library: httplib2 transport")
10500 (description "This package provides a Google Authentication Library plugin
10501for httplib2 transport.")
10502 (license license:asl2.0)))
10503
10504(define-public python-google-auth-oauthlib
10505 (package
10506 (name "python-google-auth-oauthlib")
10507 (version "1.2.4")
10508 (home-page
10509 "https://github.com/GoogleCloudPlatform/\
10510google-auth-library-python-oauthlib")
10511 (source
10512 (origin
10513 (method git-fetch)
10514 (uri (git-reference
10515 (url home-page)
10516 (commit (string-append "v" version))))
10517 (file-name (git-file-name name version))
10518 (sha256
10519 (base32 "1j25kdbs2j1x23pdv4n49xl9pz2ppn55vsav65ir796kq4lf9nca"))))
10520 (build-system pyproject-build-system)
10521 (propagated-inputs (list python-google-auth python-requests-oauthlib))
10522 (native-inputs
10523 (list python-click python-mock python-pytest python-setuptools))
10524 (synopsis "Google Authentication Library: oauthlib")
10525 (description "This package provides a Google Authentication Library plugin
10526with oauthlib.")
10527 (license license:asl2.0)))
10528
10529(define-public whoogle-search
10530 (package
10531 (name "whoogle-search")
10532 (version "0.8.4")
10533 (source (origin
10534 (method url-fetch)
10535 (uri (pypi-uri "whoogle-search" version))
10536 (sha256
10537 (base32
10538 "0hsy4l98nzj6i1lf63wvqd0yharkaz44zsxh863ymy47rxnwimz7"))))
10539 (build-system pyproject-build-system)
10540 (arguments
10541 (list
10542 ;; The tests need network access
10543 #:tests? #f))
10544 (propagated-inputs
10545 (list python-beautifulsoup4
10546 python-brotli
10547 python-cryptography
10548 python-cssutils
10549 python-defusedxml
10550 python-flask
10551 python-dotenv
10552 python-requests
10553 python-stem
10554 python-validators
10555 python-waitress))
10556 (native-inputs (list python-setuptools python-wheel))
10557 (home-page "https://github.com/benbusby/whoogle-search")
10558 (synopsis "Self-hosted, ad-free, privacy-respecting metasearch engine")
10559 (description
10560 "Get Google results, but without any ads, javascript, AMP links,
10561cookies, or IP address tracking. Quick and simple to implement as a primary
10562search engine replacement on both desktop and mobile.")
10563 (license license:expat)))
10564
10565(define-public python-hawkauthlib
10566 (package
10567 (name "python-hawkauthlib")
10568 (version "2.0.0")
10569 (source
10570 (origin
10571 (method git-fetch)
10572 (uri (git-reference
10573 (url "https://github.com/mozilla-services/hawkauthlib")
10574 (commit (string-append "v" version))))
10575 (file-name (git-file-name name version))
10576 (sha256
10577 (base32 "0pdpk3fp87ngfsyp4lm2z7z8b203jxsmvbz59q6r6xgg9sp4cl3l"))))
10578 (build-system pyproject-build-system)
10579 (arguments
10580 (list
10581 #:test-backend #~'unittest
10582 #:phases
10583 #~(modify-phases %standard-phases
10584 (add-after 'unpack 'fix-python-incompatibilities
10585 (lambda _
10586 (substitute* (find-files "hawkauthlib/tests" "\\.py$")
10587 (("assertEquals") "assertEqual")))))))
10588 (native-inputs (list python-setuptools))
10589 (propagated-inputs (list python-requests python-webob))
10590 (home-page "https://github.com/mozilla-services/hawkauthlib")
10591 (synopsis "Hawk Access Authentication protocol")
10592 (description
10593 "This is a low-level Python library for implementing Hawk Access
10594Authentication, a simple HTTP request-signing scheme.")
10595 (license license:mpl2.0)))
10596
10597(define-public python-pybrowserid
10598 (package
10599 (name "python-pybrowserid")
10600 (version "0.14.0")
10601 (source
10602 (origin
10603 (method git-fetch)
10604 (uri (git-reference
10605 (url "https://github.com/mozilla/PyBrowserID")
10606 (commit version)))
10607 (file-name (git-file-name name version))
10608 (sha256
10609 (base32 "0in0sbj56wrz5mlrj6wkd3h7rrp7714c5rkxvkfwp60s2hr6ynj6"))))
10610 (build-system pyproject-build-system)
10611 (arguments
10612 (list
10613 #:test-backend #~'unittest
10614 #:phases
10615 #~(modify-phases %standard-phases
10616 (add-after 'unpack 'python-3.12-compatibility
10617 (lambda _
10618 (substitute* (find-files "browserid/tests" "\\.py")
10619 (("assertEquals") "assertEqual")))))))
10620 (propagated-inputs (list python-requests))
10621 (native-inputs (list python-mock python-setuptools))
10622 (home-page "https://github.com/mozilla/PyBrowserID")
10623 (synopsis "Python library for the BrowserID protocol")
10624 (description
10625 "This is a Python client library for the BrowserID protocol that
10626underlies Mozilla Persona.")
10627 (license license:mpl2.0)))
10628
10629(define-public python-pyfxa
10630 (package
10631 (name "python-pyfxa")
10632 (version "0.8.1")
10633 (source
10634 (origin
10635 (method git-fetch)
10636 (uri (git-reference
10637 (url "https://github.com/mozilla/PyFxA")
10638 (commit (string-append "v" version))))
10639 (file-name (git-file-name name version))
10640 (sha256
10641 (base32 "11iaw50x5ic9cqp3jwkvhk8mz00dhg8xhl1kkx45zrb8nnrfw2vs"))))
10642 (build-system pyproject-build-system)
10643 (arguments
10644 (list
10645 ;; These tests require network access
10646 #:test-flags #~(list "--ignore=fxa/tests/test_core.py")))
10647 (propagated-inputs
10648 (list python-cryptography
10649 python-pyjwt
10650 python-parameterized
10651 python-hawkauthlib
10652 python-requests))
10653 (native-inputs
10654 (list python-grequests
10655 python-hatchling
10656 python-mock
10657 python-pytest
10658 python-responses))
10659 (home-page "https://github.com/mozilla/PyFxA")
10660 (synopsis "Firefox Accounts client library for Python")
10661 (description
10662 "This is a Python library for interacting with the Firefox Accounts
10663ecosystem.")
10664 (license license:mpl2.0)))
10665
10666(define-public python-hyperlink
10667 (package
10668 (name "python-hyperlink")
10669 (version "21.0.0")
10670 (source
10671 (origin
10672 (method url-fetch)
10673 (uri (pypi-uri "hyperlink" version))
10674 (sha256
10675 (base32
10676 "0sx50lkivsfjxx9zr4yh7l9gll2l9kvl0v0w8w4wk2x5v9bzjyj2"))))
10677 (build-system pyproject-build-system)
10678 (arguments
10679 (list #:phases
10680 #~(modify-phases %standard-phases
10681 (add-before 'check 'pretend-to-be-CI
10682 (lambda _
10683 ;; Pretend to be a CI system to skip flaky tests.
10684 (setenv "CI" "true"))))))
10685 (native-inputs
10686 (list python-pytest python-setuptools python-wheel))
10687 (propagated-inputs
10688 (list python-idna))
10689 (home-page "https://github.com/python-hyper/hyperlink")
10690 (synopsis "Python module to create immutable URLs according to spec")
10691 (description "This package provides a Python module to create immutable, and
10692correct URLs for Python according to RFCs 3986 and 3987.")
10693 (license license:expat)))
10694
10695(define-public python-treq
10696 (package
10697 (name "python-treq")
10698 (version "24.9.1")
10699 (source
10700 (origin
10701 (method url-fetch)
10702 (uri (pypi-uri "treq" version))
10703 (sha256
10704 (base32
10705 "1a7yrq2m7hf77fia4fc0c6zanvwnykpgirdbs1cyvr7k0k27znhm"))))
10706 (build-system pyproject-build-system)
10707 (native-inputs
10708 (list python-httpbin
10709 python-pytest
10710 python-service-identity
10711 python-setuptools
10712 python-wheel))
10713 (propagated-inputs
10714 (list python-attrs
10715 python-hyperlink
10716 python-incremental
10717 python-requests
10718 python-twisted
10719 python-typing-extensions))
10720 (home-page "https://github.com/twisted/treq")
10721 (synopsis "Requests-like API built on top of twisted.web's Agent")
10722 (description "This package provides an HTTP library inspired by
10723@code{requests} but written on top of Twisted's @code{Agents}. It offers a
10724high level API for making HTTP requests when using Twisted.")
10725 (license license:expat)))
10726
10727(define-public python-ws4py
10728 (package
10729 (name "python-ws4py")
10730 (version "0.6.0")
10731 (source
10732 (origin
10733 (method git-fetch)
10734 (uri (git-reference
10735 (url "https://github.com/Lawouach/WebSocket-for-Python")
10736 (commit version)))
10737 (file-name (git-file-name name version))
10738 (sha256
10739 (base32
10740 "00y6s8gk20936njqbxr8vjliviiz7r7pqrlwg7xi8zzs6903xvv6"))))
10741 (build-system pyproject-build-system)
10742 (arguments
10743 (list
10744 #:phases
10745 #~(modify-phases %standard-phases
10746 (add-after 'unpack 'remove-cherrypy-support
10747 (lambda _
10748 (delete-file "ws4py/server/cherrypyserver.py")
10749 (delete-file "test/test_cherrypy.py"))))))
10750 (native-inputs (list python-setuptools python-pytest))
10751 (propagated-inputs
10752 (list python-gevent python-tornado))
10753 (home-page "https://github.com/Lawouach/WebSocket-for-Python")
10754 (synopsis "WebSocket client and server library")
10755 (description
10756 "This package provides a WebSocket client and server library for Python.")
10757 (license license:bsd-3)))
10758
10759(define-public python-slowapi
10760 (package
10761 (name "python-slowapi")
10762 (version "0.1.9")
10763 (source
10764 (origin
10765 (method git-fetch)
10766 (uri (git-reference
10767 (url "https://github.com/laurents/slowapi")
10768 (commit (string-append "v" version))))
10769 (file-name (git-file-name name version))
10770 (sha256
10771 (base32 "1lc1n6lvh01dhhrc507qri9rz1w72l2riii03ixh7n7n1gwjpws7"))))
10772 (build-system pyproject-build-system)
10773 (arguments
10774 (list
10775 #:test-flags
10776 ;; These tests fail because the timestamp contains more decimal points
10777 ;; than expected, so a simple equality comparison fails.
10778 '(list "-k" (string-append "not test_headers_no_breach"
10779 " and not test_headers_breach"))))
10780 (propagated-inputs (list python-limits python-redis))
10781 (native-inputs
10782 (list python-fastapi
10783 python-hiro
10784 python-mock
10785 python-poetry-core
10786 python-pytest))
10787 (home-page "https://github.com/laurents/slowapi")
10788 (synopsis "Rate limiting extension for Starlette and Fastapi")
10789 (description
10790 "This package provides a rate limiting extension for Starlette and
10791Fastapi.")
10792 (license license:expat)))
10793
10794(define-public python-slugify
10795 (package
10796 (name "python-slugify")
10797 (version "8.0.4")
10798 (source
10799 (origin
10800 (method git-fetch)
10801 (uri (git-reference
10802 (url "https://github.com/un33k/python-slugify")
10803 (commit (string-append "v" version))))
10804 (file-name (git-file-name name version))
10805 (sha256
10806 (base32 "0z83nwy7acc72mb2jv3516nfplah1wm61wkmnzl71dh8i4q985yd"))))
10807 (build-system pyproject-build-system)
10808 (arguments (list #:test-backend #~'unittest))
10809 (native-inputs (list python-setuptools))
10810 (propagated-inputs (list python-unidecode python-text-unidecode))
10811 (home-page "https://github.com/un33k/python-slugify")
10812 (synopsis "Python Slugify application that handles Unicode")
10813 (description "This package provides a @command{slufigy} command and
10814library to create slugs from unicode strings while keeping it DRY.")
10815 (license license:expat)))
10816
10817(define-public python-tinycss2
10818 (package
10819 (name "python-tinycss2")
10820 (version "1.5.1")
10821 (source
10822 (origin
10823 (method git-fetch)
10824 (uri (git-reference
10825 (url "https://github.com/Kozea/tinycss2")
10826 (commit (string-append "v" version))
10827 (recursive? #true)))
10828 (file-name (git-file-name name version))
10829 (sha256
10830 (base32 "1ww5m8rmpva9mq04cz1h9rx76vg2h5nnijzi0vprf5wzp8g9snb5"))))
10831 (build-system pyproject-build-system)
10832 (native-inputs
10833 (list python-flit-core
10834 python-pytest))
10835 (propagated-inputs
10836 (list python-webencodings))
10837 (home-page "https://doc.courtbouillon.org/tinycss2/stable/")
10838 (synopsis "Low-level CSS parser for Python")
10839 (description "@code{tinycss2} can parse strings, return Python objects
10840representing tokens and blocks, and generate CSS strings corresponding to
10841these objects.
10842
10843Based on the CSS Syntax Level 3 specification, @code{tinycss2} knows the
10844grammar of CSS but doesn’t know specific rules, properties or values supported
10845in various CSS modules.")
10846 (license license:bsd-3)))
10847
10848(define-public python-tinyhtml5
10849 (package
10850 (name "python-tinyhtml5")
10851 (version "2.1.0")
10852 (source
10853 (origin
10854 (method git-fetch)
10855 (uri (git-reference
10856 (url "https://github.com/CourtBouillon/tinyhtml5")
10857 (commit version)))
10858 (file-name (git-file-name name version))
10859 (sha256
10860 (base32 "1q8z2ym2q6083ky0f9vwf73k3gimffnbfwlpmd69bp6anc4fa81x"))))
10861 (build-system pyproject-build-system)
10862 (propagated-inputs
10863 (list python-webencodings))
10864 (native-inputs
10865 (list python-flit-core
10866 python-pytest))
10867 (home-page "https://github.com/CourtBouillon/tinyhtml5")
10868 (synopsis "Small HTML parser based on the WHATWG HTML specification")
10869 (description "This Python module is a HTML5 parser that transforms a
10870possibly malformed HTML document into an ElementTree tree. This module is a
10871simplified fork of html5lib.")
10872 (license license:expat)))
10873
10874(define-public python-uvloop
10875 (package
10876 (name "python-uvloop")
10877 (version "0.22.1")
10878 (source
10879 (origin
10880 (method git-fetch)
10881 (uri (git-reference
10882 (url "https://github.com/MagicStack/uvloop")
10883 (commit (string-append "v" version))))
10884 (file-name (git-file-name name version))
10885 (sha256
10886 (base32 "1qbykwwz4ac3f7472g22z4i5rrd5kcr8hmxn5kswmja57j1nxlpl"))
10887 (modules '((guix build utils)))
10888 (snippet
10889 '(begin
10890 (delete-file-recursively "vendor")))))
10891 (build-system pyproject-build-system)
10892 (arguments
10893 (list
10894 ;; tests: 470 passed, 32 skipped, 8 deselected, 5 warnings, 104 subtests passed
10895 #:test-flags
10896 ;; The tests are prone to get stuck. Use pytest-timeout’s --timeout flag
10897 ;; to get a meaningful idea about where.
10898 #~(list "--timeout=300"
10899 "--timeout-method=thread"
10900 "-k" (string-join
10901 (list
10902 ;; Timeout, because SIGINT cannot be sent to child.
10903 "not test_signals_sigint_pycode_continue"
10904 "test_signals_sigint_pycode_stop"
10905 "test_signals_sigint_uvcode"
10906 "test_signals_sigint_uvcode_two_loop_runs"
10907 #$@(if (target-riscv64?)
10908 `("test_renegotiation")
10909 `()))
10910 " and not "))
10911 #:phases
10912 #~(modify-phases %standard-phases
10913 (add-after 'unpack 'preparations
10914 (lambda _
10915 ;; Use packaged libuv.
10916 (substitute* "setup.py" (("self.use_system_libuv = False")
10917 "self.use_system_libuv = True"))
10918 ;; Replace hardcoded shell command.
10919 (substitute* "uvloop/loop.pyx"
10920 (("b'/bin/sh'") (string-append "b'" (which "sh") "'")))
10921 (substitute* "tests/test_process.py"
10922 (("'env'") (string-append "'" (which "env") "'")))))
10923 #$@(if (target-riscv64?)
10924 `((add-after 'unpack 'adjust-test-timeouts
10925 (lambda _
10926 (substitute* '("tests/test_tcp.py"
10927 "tests/test_unix.py")
10928 (("SSL_HANDSHAKE_TIMEOUT = 15\\.0")
10929 "SSL_HANDSHAKE_TIMEOUT = 30.0")))))
10930 '())
10931 (add-before 'check 'pre-check
10932 (lambda* (#:key tests? #:allow-other-keys)
10933 (when tests?
10934 ;; Remove Python module, which conflicts with the installed
10935 ;; version, but lacks the built C module.
10936 (delete-file-recursively "uvloop")))))))
10937 (native-inputs
10938 (list python-aiohttp
10939 python-cython
10940 python-psutil
10941 python-pyopenssl
10942 python-pytest
10943 python-pytest-timeout
10944 python-setuptools))
10945 (inputs
10946 (list libuv))
10947 (home-page "https://github.com/MagicStack/uvloop")
10948 (synopsis "Fast implementation of asyncio event loop on top of libuv")
10949 (description
10950 "@code{uvloop} is a fast, drop-in replacement of the built-in asyncio
10951event loop. It is implemented in Cython and uses libuv under the hood.")
10952 (license license:expat)))
10953
10954(define-public python-httptools
10955 (package
10956 (name "python-httptools")
10957 (version "0.7.1")
10958 (source
10959 (origin
10960 ;; PyPI tarball comes with a vendored http-parser and no tests.
10961 (method git-fetch)
10962 (uri (git-reference
10963 (url "https://github.com/MagicStack/httptools")
10964 (commit (string-append "v" version))))
10965 (file-name (git-file-name name version))
10966 (sha256
10967 (base32 "0j9c1av3y1smg6lgh0i031l07i9plzbvv14jj53vpzm35sy7kbl7"))
10968 (modules '((guix build utils)))
10969 (snippet
10970 #~(begin (delete-file-recursively "vendor")))))
10971 (build-system pyproject-build-system)
10972 (arguments
10973 (list
10974 #:test-flags
10975 ;; XXX: AssertionError: HttpParserError not raised.
10976 #~(list "-k" "not test_parser_response_leninent_headers_1")
10977 #:phases
10978 #~(modify-phases %standard-phases
10979 (add-after 'unpack 'configure-build-ext
10980 (lambda _
10981 (with-output-to-file "setup.cfg"
10982 (lambda ()
10983 (display "\
10984[build_ext]
10985use_system_llhttp = true
10986use_system_http_parser = true
10987cython_always = true"))))))))
10988 (native-inputs
10989 (list python-cython
10990 python-pytest
10991 python-setuptools))
10992 (inputs
10993 (list http-parser
10994 llhttp))
10995 (home-page "https://github.com/MagicStack/httptools")
10996 (synopsis "Collection of framework independent HTTP protocol utils")
10997 (description
10998 "@code{httptools} is a Python binding for the nodejs HTTP parser.")
10999 (license license:expat)))
11000
11001(define-public python-uvicorn
11002 (package
11003 (name "python-uvicorn")
11004 ;; 0.49.0 (2026-06-03), release does not work with python-websockets 16.0,
11005 ;; see: <https://github.com/Kludex/uvicorn/pull/2985>.
11006 (properties '((commit . "e8a31bca03254b8457c4c89596e310282cc33edc")
11007 (revision . "0")))
11008 (version (git-version "0.49.0"
11009 (assoc-ref properties 'revision)
11010 (assoc-ref properties 'commit)))
11011 (source
11012 (origin
11013 (method git-fetch)
11014 (uri (git-reference
11015 (url "https://github.com/encode/uvicorn")
11016 (commit (assoc-ref properties 'commit))))
11017 (file-name (git-file-name name version))
11018 (sha256
11019 (base32 "1vd1680a1k3jcdgc3jd5p3a6zmhz4r8bgzb7v7zhpxrkkdsisrxj"))))
11020 (build-system pyproject-build-system)
11021 (arguments
11022 (list
11023 #:test-flags
11024 #~(list "--ignore=tests/benchmarks"
11025 #$@(cond
11026 ((or (target-aarch64?)
11027 (target-riscv64?))
11028 '("-k not test_send_binary_data_to_server_bigger_than_default_on_websockets"))
11029 (#t '())))))
11030 (native-inputs
11031 (list nss-certs-for-test
11032 python-a2wsgi
11033 python-hatchling
11034 python-httpx-bootstrap
11035 python-pytest
11036 python-pytest-asyncio
11037 python-pytest-mock
11038 python-pytest-xdist
11039 python-requests
11040 python-trustme
11041 python-wsproto))
11042 (propagated-inputs
11043 (list python-a2wsgi
11044 python-click
11045 python-dotenv
11046 python-h11
11047 python-httptools
11048 python-pyyaml
11049 python-uvloop
11050 python-watchfiles
11051 python-websockets))
11052 (home-page "https://github.com/encode/uvicorn")
11053 (synopsis "Fast ASGI server implementation")
11054 (description
11055 "@code{uvicorn} is a fast ASGI server implementation, using @code{uvloop}
11056and @code{httptools}. It currently supports HTTP/1.1 and WebSockets. Support
11057for HTTP/2 is planned.")
11058 (license license:bsd-3)))
11059
11060(define-public python-translation-finder
11061 (package
11062 (name "python-translation-finder")
11063 (version "2.22")
11064 (source
11065 (origin
11066 (method url-fetch)
11067 (uri (pypi-uri "translation_finder" version))
11068 (sha256
11069 (base32 "1hav99ccijvk2w8wpvba2pc7ba1z150vja2wvaimd069mc08pjd2"))))
11070 (build-system pyproject-build-system)
11071 (arguments
11072 (list
11073 #:test-flags
11074 ;; AssertionError: 31 != 30 : Mismatched count of results
11075 #~(list "--deselect=translation_finder/test_api.py::APITest::test_discover_file")))
11076 (native-inputs
11077 (list python-pytest
11078 python-setuptools))
11079 (propagated-inputs
11080 (list python-charset-normalizer
11081 python-ruamel.yaml
11082 python-weblate-language-data))
11083 (home-page "https://weblate.org/")
11084 (synopsis "Translation file finder for Weblate")
11085 (description "This package provides a function to find translation file in
11086the source code of a project. It supports many translation file formats and
11087is part of the Weblate translation platform.")
11088 (license license:gpl3+)))
11089
11090(define-public python-gitlab
11091 (package
11092 (name "python-gitlab")
11093 (version "7.0.0")
11094 (source
11095 (origin
11096 (method git-fetch)
11097 (uri (git-reference
11098 (url "https://github.com/python-gitlab/python-gitlab")
11099 (commit (string-append "v" version))))
11100 (file-name (git-file-name name version))
11101 (sha256
11102 (base32 "0rf1hz5n724f8sfc7g3fzfz96jsv9y145pi6gc8qscsjq3z4vi37"))))
11103 (build-system pyproject-build-system)
11104 (arguments
11105 (list
11106 #:test-flags
11107 #~(list "--ignore=tests/unit/test_graphql.py"
11108 ;; XXX: Missing helper script.
11109 "-k" "not test_data_from_helper" "tests/unit")))
11110 (native-inputs
11111 (list python-anyio
11112 python-pytest
11113 python-responses
11114 python-setuptools))
11115 (propagated-inputs (list python-requests python-requests-toolbelt))
11116 (home-page "https://github.com/python-gitlab/python-gitlab")
11117 (synopsis "Interact with GitLab API")
11118 (description "This package provides an extended library for interacting
11119with GitLab instances through their API.")
11120 (license license:lgpl3+)))
11121
11122(define-public python-path-and-address
11123 (package
11124 (name "python-path-and-address")
11125 (version "2.0.1")
11126 (source
11127 (origin
11128 (method git-fetch)
11129 (uri (git-reference
11130 (url "https://github.com/joeyespo/path-and-address")
11131 (commit (string-append "v" version))))
11132 (file-name (git-file-name name version))
11133 (sha256
11134 (base32 "0b0afpsaim06mv3lhbpm8fmawcraggc11jhzr6h72kdj1cqjk5h6"))))
11135 (build-system pyproject-build-system)
11136 (native-inputs
11137 (list python-pytest python-setuptools))
11138 (home-page "https://github.com/joeyespo/path-and-address")
11139 (synopsis "Functions for command-line server tools used by humans")
11140 (description "Path-and-address resolves ambiguities of command-line
11141interfaces, inferring which argument is the path, and which is the address.")
11142 (license license:expat)))
11143
11144(define-public python-port-for
11145 (package
11146 (name "python-port-for")
11147 (version "0.7.4")
11148 (source
11149 (origin
11150 (method url-fetch)
11151 (uri (pypi-uri "port_for" version))
11152 (sha256
11153 (base32 "13826s2d4hzzmv69wws6a7ryhminclv2bqaw6cpl929gnbki6xzw"))))
11154 (build-system pyproject-build-system)
11155 (propagated-inputs
11156 (list python-urllib3))
11157 (native-inputs
11158 (list python-pytest python-setuptools python-wheel))
11159 (home-page "https://github.com/kmike/port-for/")
11160 (synopsis "TCP localhost port finder and association manager")
11161 (description
11162 "This package provides a utility that helps with local TCP ports
11163management. It can find an unused TCP localhost port and remember the
11164association.")
11165 (license license:expat)))
11166
11167(define-public python-livereload
11168 (package
11169 (name "python-livereload")
11170 (version "2.7.1")
11171 (source
11172 (origin
11173 (method git-fetch)
11174 (uri (git-reference
11175 (url "https://github.com/lepture/python-livereload")
11176 (commit (string-append "v" version))))
11177 (file-name (git-file-name name version))
11178 (sha256
11179 (base32 "19wkdd1grw6mcd4qi8iaw4jdr207h3m24951vgy69j7g904lynjq"))))
11180 (build-system pyproject-build-system)
11181 (arguments (list #:test-backend #~'unittest))
11182 (native-inputs (list python-django python-setuptools))
11183 (propagated-inputs (list python-tornado))
11184 (home-page "https://github.com/lepture/python-livereload")
11185 (synopsis "Python LiveReload")
11186 (description
11187 "Python LiveReload provides a command line utility, @command{livereload},
11188for starting a web server in a directory. It can trigger arbitrary commands
11189and serve updated contents upon changes to the directory.")
11190 (license license:bsd-3)))
11191
11192(define-public python-vf-1
11193 (package
11194 (name "python-vf-1")
11195 (version "1.0.0")
11196 (source
11197 (origin
11198 (method git-fetch)
11199 (uri (git-reference
11200 (url "https://git.sr.ht/~solderpunk/VF-1")
11201 (commit (string-append "v" version))))
11202 (file-name (git-file-name name version))
11203 (sha256
11204 (base32 "1j8l4xivm6rs8jms1ixx0i9fz4yxr84hbz1pdc498jgkgzy1v8ih"))))
11205 (build-system pyproject-build-system)
11206 (arguments (list #:tests? #f)) ; No tests.
11207 (native-inputs (list python-setuptools))
11208 (home-page "https://git.sr.ht/~solderpunk/VF-1")
11209 (synopsis "Command line gopher client")
11210 (description "@code{VF-1} is a command line gopher client with
11211@acronym{TLS, Transport Layer Security} support.")
11212 (license license:bsd-2)))
11213
11214(define-public python-httpcore
11215 (package
11216 (name "python-httpcore")
11217 (version "1.0.9")
11218 (source
11219 (origin
11220 ;; PyPI tarball does not contain tests.
11221 (method git-fetch)
11222 (uri (git-reference
11223 (url "https://github.com/encode/httpcore")
11224 (commit version)))
11225 (file-name (git-file-name name version))
11226 (sha256
11227 (base32 "0yhm2n8qflpwjsjggyj757m0gw3n68al0my0ljybndwp933ipl32"))))
11228 (build-system pyproject-build-system)
11229 (native-inputs
11230 (list nss-certs-for-test
11231 python-hatch-fancy-pypi-readme
11232 python-hatchling
11233 python-pytest
11234 python-pytest-asyncio
11235 python-pytest-httpbin
11236 python-pytest-trio
11237 python-uvicorn
11238 python-trustme))
11239 (propagated-inputs
11240 (list python-anyio
11241 python-certifi
11242 python-h11
11243 python-h2
11244 python-sniffio
11245 python-socksio
11246 python-trio
11247 python-trio-typing))
11248 (home-page "https://github.com/encode/httpcore")
11249 (synopsis "Minimal, low-level HTTP client")
11250 (description
11251 "HTTP Core provides a minimal and low-level HTTP client, which does one
11252thing only: send HTTP requests.
11253
11254Some things HTTP Core does do:
11255
11256@itemize
11257@item Sending HTTP requests.
11258@item Provides both sync and async interfaces.
11259@item Supports HTTP/1.1 and HTTP/2.
11260@item Async backend support for asyncio and trio.
11261@item Automatic connection pooling.
11262@item HTTP(S) proxy support.
11263@end itemize")
11264 (license license:bsd-3)))
11265
11266;;; Variant used to break a cycle between python-httpx and python-uvicorn.
11267(define-public python-httpcore-bootstrap
11268 (hidden-package
11269 (package/inherit python-httpcore
11270 (name "python-httpcore-bootstrap")
11271 (arguments (list #:tests? #f))
11272 (native-inputs (list python-hatchling
11273 python-hatch-fancy-pypi-readme)))))
11274
11275(define-public python-httpx
11276 (package
11277 (name "python-httpx")
11278 (version "0.28.1")
11279 (source
11280 (origin
11281 ;; PyPI tarball does not contain tests.
11282 (method git-fetch)
11283 (uri (git-reference
11284 (url "https://github.com/encode/httpx")
11285 (commit version)))
11286 (file-name (git-file-name name version))
11287 (sha256
11288 (base32 "00d6rb21xwazwb0sj68zhra0qxxcwkd0vv7bg3k1jg94dmk2w7xl"))))
11289 (build-system pyproject-build-system)
11290 (arguments
11291 (list
11292 ;; 1401 passed, 1 skipped, 5 deselected
11293 #:test-flags
11294 #~(list "-o" "asyncio_mode=auto"
11295 ;; CLI tests are broken.
11296 "--ignore=tests/test_main.py"
11297 "-k" (string-join
11298 ;; These tests try to open an outgoing connection.
11299 (list "not test_async_proxy_close"
11300 "test_sync_proxy_clos"
11301 "test_write_timeout")
11302 " and not "))))
11303 (native-inputs
11304 (list nss-certs-for-test
11305 python-chardet
11306 python-cryptography
11307 python-hatch-fancy-pypi-readme
11308 python-hatchling
11309 python-pytest
11310 python-pytest-asyncio
11311 python-pytest-trio
11312 python-setuptools
11313 python-trio
11314 python-trustme
11315 python-uvicorn))
11316 (propagated-inputs
11317 (list python-anyio
11318 python-certifi
11319 python-httpcore
11320 python-idna
11321 ;; [brotli]
11322 python-brotli
11323 ;; [http2]
11324 python-h2
11325 ;; [socks]
11326 python-socksio
11327 ;; [zstd]
11328 python-zstandard
11329 ;; For trio, see:
11330 ;; <https://github.com/python-trio/trio/issues/2802>.
11331 python-sniffio))
11332 (home-page "https://www.python-httpx.org/")
11333 (synopsis "HTTP client for Python")
11334 (description
11335 "HTTPX is a fully featured HTTP client for Python 3, which provides sync
11336and async APIs, and support for both HTTP/1.1 and HTTP/2.
11337
11338HTTPX builds on the well-established usability of requests, and gives you:
11339
11340@itemize
11341@item A broadly requests-compatible API.
11342@item Standard synchronous interface, but with async support if you need it.
11343@item HTTP/1.1 and HTTP/2 support.
11344@item Ability to make requests directly to WSGI applications or ASGI applications.
11345@item Strict timeouts everywhere.
11346@item Fully type annotated.
11347@item 99% test coverage.
11348@end itemize
11349
11350Plus all the standard features of requests:
11351
11352@itemize
11353@item International Domains and URLs
11354@item Keep-Alive & Connection Pooling
11355@item Sessions with Cookie Persistence
11356@item Browser-style SSL Verification
11357@item Basic/Digest Authentication
11358@item Elegant Key/Value Cookies
11359@item Automatic Decompression
11360@item Automatic Content Decoding
11361@item Unicode Response Bodies
11362@item Multipart File Uploads
11363@item HTTP(S) Proxy Support
11364@item Connection Timeouts
11365@item Streaming Downloads
11366@item .netrc Support
11367@item Chunked Requests
11368@end itemize")
11369 (license license:bsd-3)))
11370
11371;;; Variant used to break a cycle with python-uvicorn.
11372(define-public python-httpx-bootstrap
11373 (hidden-package
11374 (package/inherit python-httpx
11375 (name "python-httpx-bootstrap")
11376 (arguments (list #:tests? #f))
11377 (native-inputs
11378 (list python-hatchling
11379 python-hatch-fancy-pypi-readme))
11380 (propagated-inputs
11381 (modify-inputs propagated-inputs
11382 (replace "python-httpcore" python-httpcore-bootstrap))))))
11383
11384(define-public python-httpx-sse
11385 (package
11386 (name "python-httpx-sse")
11387 (version "0.4.3")
11388 (source
11389 (origin
11390 (method git-fetch)
11391 (uri (git-reference
11392 (url "https://github.com/florimondmanca/httpx-sse")
11393 (commit version)))
11394 (file-name (git-file-name name version))
11395 (sha256
11396 (base32 "0zliqd1rkvc0mjppscvqmg8j17hsiwvxn439yhn6qbjvk5ydncz8"))))
11397 (build-system pyproject-build-system)
11398 (native-inputs
11399 (list python-pytest
11400 python-pytest-asyncio
11401 python-setuptools
11402 python-setuptools-scm
11403 python-sse-starlette))
11404 (propagated-inputs (list python-httpx))
11405 (home-page "https://github.com/florimondmanca/httpx-sse")
11406 (synopsis "Consume Server-Sent Event (SSE) messages with HTTPX.")
11407 (description "Consume Server-Sent Event (SSE) messages with HTTPX.")
11408 (license license:expat)))
11409
11410(define-public python-httpx-ws
11411 (package
11412 (name "python-httpx-ws")
11413 (version "0.9.0")
11414 (source
11415 (origin
11416 (method git-fetch)
11417 (uri (git-reference
11418 (url "https://github.com/frankie567/httpx-ws")
11419 (commit (string-append "v" version))))
11420 (file-name (git-file-name name version))
11421 (sha256
11422 (base32 "1hin6fndvfnx3mjgy30x0ghgjalikxavyj24klcknnly9sqzg83v"))))
11423 (build-system pyproject-build-system)
11424 (propagated-inputs
11425 (list python-anyio
11426 python-httpcore
11427 python-httpx
11428 python-wsproto))
11429 (native-inputs
11430 (list nss-certs-for-test
11431 python-hatch-regex-commit
11432 python-hatchling
11433 python-pytest
11434 python-pytest-cov
11435 python-starlette
11436 python-uvicorn))
11437 (home-page "https://github.com/frankie567/httpx-ws")
11438 (synopsis "WebSockets support for HTTPX")
11439 (description "This package provides @code{WebSockets} support for HTTPX.")
11440 (license license:expat)))
11441
11442(define-public python-wsgiprox
11443 (package
11444 (name "python-wsgiprox")
11445 (version "1.5.2")
11446 (source
11447 (origin
11448 (method url-fetch)
11449 (uri (pypi-uri "wsgiprox" version))
11450 (sha256
11451 (base32 "11fsm199pvwbmqx2lccznvws65aam1rqqv0w79gal8hispwgd5rs"))))
11452 (build-system pyproject-build-system)
11453 (arguments
11454 ;; The test suite hangs (see:
11455 ;; https://github.com/webrecorder/wsgiprox/issues/6).
11456 (list
11457 #:tests? #f
11458 #:phases
11459 #~(modify-phases %standard-phases
11460 (add-after 'unpack 'fix-pytest-argument
11461 (lambda _
11462 ;; See: https://github.com/webrecorder/wsgiprox/issues/7.
11463 (substitute* "setup.py"
11464 (("--doctest-module")
11465 "--doctest-modules")))))))
11466 (propagated-inputs
11467 (list python-certauth
11468 python-gevent
11469 python-six
11470 python-websocket-client))
11471 (native-inputs
11472 (list python-mock python-waitress python-setuptools))
11473 (home-page "https://github.com/webrecorder/wsgiprox")
11474 (synopsis "HTTP/S proxy with WebSockets over WSGI")
11475 (description
11476 "@code{wsgiprox} is a Python WSGI (Web Server Gateway Interface)
11477middle-ware for adding HTTP and HTTPS proxy support to a WSGI application.
11478The library accepts HTTP and HTTPS proxy connections, and routes them to a
11479designated prefix.")
11480 (license license:asl2.0)))
11481
11482(define-public python-warcio
11483 ;; The PyPI release is missing some test support files (see:
11484 ;; https://github.com/webrecorder/warcio/issues/132).
11485 (package
11486 (name "python-warcio")
11487 (version "1.8.1")
11488 (source
11489 (origin
11490 (method git-fetch)
11491 (uri (git-reference
11492 (url "https://github.com/webrecorder/warcio")
11493 (commit (string-append "v" version))))
11494 (file-name (git-file-name name version))
11495 (sha256
11496 (base32
11497 "19wwg7zmx33c942dbahdkng1byiwr4c9cd1ayrsh13f818n17zps"))))
11498 (build-system pyproject-build-system)
11499 (arguments
11500 (list
11501 #:test-flags ; These tests fail due to networking requirements.
11502 '(list "-k" (format #f "not ~a"
11503 (string-join
11504 '("test_post_chunked"
11505 "test_remote"
11506 "test_capture_http_proxy"
11507 "test_capture_https_proxy"
11508 "test_capture_https_proxy_same_session")
11509 " and not "))
11510 ; The following test requires the hookdns package.
11511 "--ignore=test/test_capture_http_proxy.py")))
11512 (native-inputs
11513 (list python-httpbin
11514 python-pytest
11515 python-requests
11516 python-setuptools
11517 python-wsgiprox))
11518 (home-page "https://github.com/webrecorder/warcio")
11519 (synopsis "Streaming web archival archive (WARC) library")
11520 (description "warcio is a Python library to read and write the WARC format
11521commonly used in Web archives. It is designed for fast, low-level access to
11522web archival content, oriented around a stream of WARC records rather than
11523files.")
11524 (license license:asl2.0)))
11525
11526(define-public python-websockets
11527 (package
11528 (name "python-websockets")
11529 (version "16.0")
11530 (source
11531 (origin
11532 (method git-fetch)
11533 (uri (git-reference
11534 (url "https://github.com/aaugustin/websockets")
11535 (commit version)))
11536 (file-name (git-file-name name version))
11537 (sha256
11538 (base32
11539 "1f71siwmjxn8b671x8lkkxx56q3xm99f2kmjqpzfcv3air9n94gg"))))
11540 (build-system pyproject-build-system)
11541 (arguments
11542 (list #:test-backend #~'unittest
11543 #:phases
11544 #~(modify-phases %standard-phases
11545 (add-before 'check 'extend-test-timeout
11546 (lambda _
11547 ;; Some architectures need an even longer timeout. Make it
11548 ;; long enough that it should never fail due to timeout.
11549 #$@(if (target-riscv64?)
11550 #~((setenv "WEBSOCKETS_TESTS_TIMEOUT_FACTOR" "100"))
11551 #~((setenv "WEBSOCKETS_TESTS_TIMEOUT_FACTOR" "10"))))))))
11552 (native-inputs
11553 (list python-setuptools))
11554 (home-page "https://github.com/aaugustin/websockets")
11555 (synopsis
11556 "Python implementation of the WebSocket Protocol (RFC 6455 & 7692)")
11557 (description
11558 "@code{websockets} is a library for building WebSocket servers and clients
11559in Python with a focus on correctness and simplicity.
11560
11561Built on top of @code{asyncio}, Python's standard asynchronous I/O framework,
11562it provides an elegant coroutine-based API.")
11563 (license license:bsd-3)))
11564
11565(define-public selenium-manager
11566 (package
11567 (name "selenium-manager")
11568 (version "4.34.2")
11569 (source
11570 (origin
11571 (method git-fetch)
11572 (uri (git-reference
11573 (url "https://github.com/SeleniumHQ/selenium")
11574 (commit (string-append "selenium-" version "-python"))))
11575 (file-name (git-file-name name version))
11576 (sha256
11577 (base32 "14fg8r4rm9d7169rlm29l5yn08wgllmqk1zc6six3dlrzzf5mxil"))))
11578 (build-system cargo-build-system)
11579 (arguments
11580 (list
11581 ;; XXX: Almost all tests require either browsers or network access.
11582 #:tests? #f
11583 #:install-source? #f ; Most likely intended as a leaf.
11584 #:phases
11585 #~(modify-phases %standard-phases
11586 (add-after 'unpack 'chdir
11587 (lambda _
11588 (chdir "rust"))))))
11589 (native-inputs (list pkg-config))
11590 (inputs (cons* (list zstd "lib") xz
11591 (cargo-inputs 'selenium-manager)))
11592 (home-page "https://www.selenium.dev")
11593 (synopsis "CLI tool to manager the browser test infrastructure")
11594 (description
11595 "Selenium simplifies web browser automation. It specifically provides
11596infrastructure for the W3C WebDriver specification — a platform and
11597language-neutral coding interface compatible with all major web browsers.
11598
11599Selenium Manager is a CLI tool that automatically manages the browser/driver
11600infrastructure required by Selenium.")
11601 (license license:asl2.0)))
11602
11603(define-public python-selenium
11604 (package/inherit selenium-manager
11605 (name "python-selenium")
11606 (build-system pyproject-build-system)
11607 (arguments
11608 (list
11609 ;; XXX: Disable failing tests.
11610 #:test-flags
11611 #~(list "--ignore-glob=test/selenium/webdriver/*"
11612 ;; Probably requires those.
11613 "--ignore-glob=test/unit/selenium/webdriver/chrome/*"
11614 "--ignore-glob=test/unit/selenium/webdriver/firefox/*"
11615 ;; XXX: SSL certificates access.
11616 "--ignore=test/unit/selenium/webdriver/remote/remote_connection_tests.py"
11617 "-k" "not test_missing_cdp_devtools_version_falls_back")
11618 #:phases
11619 #~(modify-phases %standard-phases
11620 (add-after 'unpack 'chdir
11621 (lambda _
11622 (chdir "py")))
11623 (add-after 'chdir 'inject-selenium-manager-binary
11624 (lambda* (#:key inputs #:allow-other-keys)
11625 (substitute* "selenium/webdriver/common/selenium_manager.py"
11626 (("compiled_path = Path.*")
11627 (format #f "return Path(~s)~%"
11628 (search-input-file inputs "bin/selenium-manager"))))
11629 (substitute* "pyproject.toml"
11630 (("\\[\\[tool\\.setuptools-rust\\.bins\\]\\]")
11631 "")
11632 (("target = \"selenium\\.webdriver\\.common.*\"")
11633 ""))))
11634 (add-after 'chdir 'relax-requirements
11635 (lambda _
11636 (substitute* "pyproject.toml"
11637 (("\"(typing_extensions|trio|urllib3.*)~=.*\"," _ target)
11638 (format #f "~s," target))))))))
11639 (propagated-inputs (list python-certifi
11640 python-trio
11641 python-trio-websocket
11642 python-typing-extensions
11643 python-urllib3
11644 python-websocket-client))
11645 (inputs (list selenium-manager))
11646 (native-inputs (list python-filetype
11647 python-pytest
11648 python-pytest-mock
11649 python-pytest-trio
11650 python-setuptools
11651 python-setuptools-rust))
11652 (synopsis "Python bindings for Selenium")
11653 (description
11654 "Selenium enables web browser automation. It specifically provides
11655infrastructure for the W3C WebDriver specification — a platform and
11656language-neutral coding interface compatible with all major web browsers.")))
11657
11658(define-public python-rapidjson
11659 (package
11660 (name "python-rapidjson")
11661 (version "1.23")
11662 (source
11663 (origin
11664 (method git-fetch)
11665 (uri (git-reference
11666 (url "https://github.com/python-rapidjson/python-rapidjson")
11667 (commit (string-append "v" version))))
11668 (file-name (git-file-name name version))
11669 (sha256
11670 (base32 "0ajf919gg3qmi68jb0m6v80al2n65cn2ac36qz46s0h6zh92cl86"))
11671 (modules '((guix build utils)))
11672 (snippet
11673 '(delete-file-recursively "rapidjson"))))
11674 (build-system pyproject-build-system)
11675 (arguments
11676 (list
11677 #:test-flags '(list "tests")
11678 #:phases
11679 #~(modify-phases %standard-phases
11680 ;; We cannot seem to use #:configure-flags with the
11681 ;; pyproject-build-system to override rj_include_dir.
11682 (add-after 'unpack 'override-rapidjson-sources
11683 (lambda _
11684 (substitute* "setup.py"
11685 (("^rj_include_dir =.*")
11686 (string-append "rj_include_dir = '"
11687 #$(this-package-native-input "rapidjson")
11688 "/include/rapidjson" "'"))
11689 (("if not os.path.isdir.*") "if False:")))))))
11690 (native-inputs
11691 (list rapidjson python-pytest python-pytz python-setuptools))
11692 (home-page "https://github.com/python-rapidjson/python-rapidjson")
11693 (synopsis "Python wrapper around rapidjson")
11694 (description "This package provides a python wrapper around rapidjson.")
11695 (license license:expat)))
11696
11697(define-public python-venusian
11698 (package
11699 (name "python-venusian")
11700 (version "3.1.1")
11701 (source
11702 (origin
11703 (method url-fetch)
11704 (uri (pypi-uri "venusian" version))
11705 (sha256
11706 (base32 "0h8cdwx5x6i1ydc9s0hxwvy73l6iwlqijn2l77mq74k6anrv6ksk"))))
11707 (build-system pyproject-build-system)
11708 (native-inputs
11709 (list python-pytest
11710 python-setuptools))
11711 (home-page "https://docs.pylonsproject.org/projects/venusian")
11712 (synopsis "Library for deferring decorator actions")
11713 (description
11714 "Venusian is a library which allows framework authors to defer decorator
11715actions. Instead of taking actions when a function (or class) decorator is
11716executed at import time, you can defer the action usually taken by the
11717decorator until a separate scan phase.")
11718 (license license:repoze)))
11719
11720(define-public python-zope-deprecation
11721 (package
11722 (name "python-zope-deprecation")
11723 (version "6.0")
11724 (source (origin
11725 (method url-fetch)
11726 (uri (pypi-uri "zope_deprecation" version))
11727 (sha256
11728 (base32
11729 "0pzimp7xr8m0836bbsrx8wa9ybl58s5hwacas95nsfp6m2ypwwhq"))))
11730 (build-system pyproject-build-system)
11731 (arguments
11732 (list #:tests? #f)) ;no tests in PyPI
11733 (native-inputs
11734 (list python-setuptools))
11735 (home-page "https://zopedeprecation.readthedocs.io/")
11736 (synopsis "Function for marking deprecations")
11737 (description "The @code{zope.deprecation} module provides a function for
11738marking modules, classes, functions, methods and properties as deprecated,
11739displaying warnings when usaged in application code.")
11740 (license license:zpl2.1)))
11741
11742(define-public python-translationstring
11743 (package
11744 (name "python-translationstring")
11745 (version "1.4")
11746 (source (origin
11747 (method url-fetch)
11748 (uri (pypi-uri "translationstring" version))
11749 (sha256
11750 (base32
11751 "1wvncdzi1wj37x226qcf0yycz7js6l83na0pmc9blsbfsww7b55z"))))
11752 (build-system pyproject-build-system)
11753 (native-inputs
11754 (list python-pytest
11755 python-setuptools))
11756 (home-page "https://docs.pylonsproject.org/projects/translationstring")
11757 (synopsis "Internationalization tooling for the Pylons project")
11758 (description "This package provides a library used by various Pylons
11759project packages for internationalization (i18n) duties related to
11760translation.")
11761 (license license:repoze)))
11762
11763(define-public python-plaster
11764 (package
11765 (name "python-plaster")
11766 (version "1.1.2")
11767 (source (origin
11768 (method url-fetch)
11769 (uri (pypi-uri "plaster" version))
11770 (sha256
11771 (base32
11772 "167gfh0ahdll9m96ypgasji6yry2hkn9f0ml1b0lf4ccpxagrgpq"))))
11773 (build-system pyproject-build-system)
11774 (native-inputs
11775 (list python-pytest
11776 python-setuptools))
11777 (home-page "https://docs.pylonsproject.org/projects/plaster/en/latest/")
11778 (synopsis "Configuration loader for multiple config file formats")
11779 (description
11780 "Plaster is a loader interface around multiple config file formats. It
11781exists to define a common API for applications to use when they wish to load
11782configuration. The library itself does not aim to handle anything except a
11783basic API that applications may use to find and load configuration settings.
11784Any specific constraints should be implemented in a pluggable loader which can
11785be registered via an entrypoint.")
11786 (license license:repoze)))
11787
11788(define-public python-plaster-pastedeploy
11789 (package
11790 (name "python-plaster-pastedeploy")
11791 (version "1.0.1")
11792 (source (origin
11793 (method url-fetch)
11794 (uri (pypi-uri "plaster_pastedeploy" version))
11795 (sha256
11796 (base32
11797 "04hl71p76wnwiy195p5w51bn3c6ba0lgx8nsfm42d9s15rnjw9my"))))
11798 (build-system pyproject-build-system)
11799 (native-inputs
11800 (list python-pytest
11801 python-setuptools))
11802 (propagated-inputs
11803 (list python-plaster python-pastedeploy))
11804 (home-page "https://github.com/Pylons/plaster_pastedeploy")
11805 (synopsis "Plugin for python-plaster adding PasteDeploy syntax")
11806 (description
11807 "This plugin for @code{python-plaster} adds support for PasteDeploy
11808syntax, it provides a plaster @code{Loader} object that can parse ini files
11809according to the standard set by PasteDeploy")
11810 (license license:expat)))
11811
11812(define-public python-hupper
11813 (package
11814 (name "python-hupper")
11815 (version "1.12.1")
11816 (source
11817 (origin
11818 (method url-fetch)
11819 (uri (pypi-uri "hupper" version))
11820 (sha256
11821 (base32 "1srj7sqxdgxr0nnhh9lw8jmp64chwgg8iwfm9b4g9v7l1wbm9gq6"))))
11822 (build-system pyproject-build-system)
11823 (arguments
11824 (list
11825 ;; RuntimeError: timeout waiting for change to
11826 ;; file=/tmp/guix-build-python-hupper-1.12.1.drv-0/tmpm9n4697p
11827 #:test-flags #~(list "--ignore=tests/test_it.py")))
11828 (native-inputs
11829 (list python-pytest python-setuptools python-wheel))
11830 (propagated-inputs
11831 (list python-watchdog))
11832 (home-page "https://readthedocs.org/projects/hupper")
11833 (synopsis "Integrated process monitor tracking changes to imported Python files")
11834 (description
11835 "Hupper is an integrated process monitor that will track changes to any
11836imported Python files in sys.modules as well as custom paths. When files are
11837changed the process is restarted.")
11838 (license license:expat)))
11839
11840(define-public python-pyowm
11841 (package
11842 (name "python-pyowm")
11843 (version "3.3.0")
11844 (source
11845 (origin
11846 (method git-fetch)
11847 (uri (git-reference
11848 (url "https://github.com/csparpa/pyowm")
11849 (commit version)))
11850 (file-name (git-file-name name version))
11851 (sha256
11852 (base32
11853 "1ha4pp96y3jk33qnyir5851cnj4dc06q6wqn1b0w54l3fsds28vi"))))
11854 (build-system pyproject-build-system)
11855 (arguments (list #:test-flags #~(list "tests/unit")))
11856 (native-inputs (list python-pytest python-setuptools python-wheel))
11857 (propagated-inputs
11858 (list python-geojson-for-pyowm
11859 python-pysocks
11860 python-requests))
11861 (home-page "https://github.com/csparpa/pyowm")
11862 (synopsis "Python wrapper around OpenWeatherMap web APIs")
11863 (description
11864 "This package provides a Python wrapper around OpenWeatherMap web APIs.")
11865 (license license:expat)))
11866
11867(define-public python-pyramid
11868 (package
11869 (name "python-pyramid")
11870 (version "2.1")
11871 (source
11872 (origin
11873 (method git-fetch)
11874 (uri (git-reference
11875 (url "https://github.com/Pylons/pyramid")
11876 (commit version)))
11877 (file-name (git-file-name name version))
11878 (sha256
11879 (base32 "0my03b81009w9zqx5cdn9qixh0jah49hr0379n98kx2j3b8cfk1p"))))
11880 (build-system pyproject-build-system)
11881 (native-inputs
11882 (list python-pytest
11883 python-setuptools
11884 python-webtest
11885 python-zope-component))
11886 (propagated-inputs
11887 (list python-hupper
11888 python-plaster
11889 python-plaster-pastedeploy
11890 python-translationstring
11891 python-venusian
11892 python-webob
11893 python-zope-deprecation
11894 python-zope-interface))
11895 (home-page "https://trypyramid.com/")
11896 (synopsis "Python web-framework suitable for small and large sites")
11897 (description
11898 "Pyramid makes it easy to write web applications. From minimal
11899request/response web apps to larger, grown applications.")
11900 (license license:repoze)))
11901
11902(define-public python-pyramid-chameleon
11903 ;; PyPI lacks a fresh release, use the latest commit associated with
11904 ;; unrleased version, see:
11905 ;; <https://github.com/Pylons/pyramid_chameleon/issues/27>
11906 (let ((commit "956c77ba37120c430e871c834d3cd4ed5ac8dccf")
11907 (revision "0"))
11908 (package
11909 (name "python-pyramid-chameleon")
11910 (version (git-version "0.4.dev0" revision commit))
11911 (source
11912 (origin
11913 (method git-fetch)
11914 (uri (git-reference
11915 (url "https://github.com/Pylons/pyramid_chameleon")
11916 (commit commit)))
11917 (file-name (git-file-name name version))
11918 (sha256
11919 (base32 "0rsb921xi7736h1xikc904bq2zzmrj1g8qgyimjw5wxdcd8927b1"))))
11920 (build-system pyproject-build-system)
11921 (native-inputs
11922 (list python-pytest
11923 python-setuptools))
11924 (propagated-inputs
11925 (list python-chameleon
11926 python-pyramid))
11927 (home-page "https://github.com/Pylons/pyramid_chameleon")
11928 (synopsis "Chameleon template compiler for pyramid")
11929 (description
11930 "These package provides bindings for the Chameleon templating system
11931 for the Pyramid web framework.")
11932 (license license:repoze))))
11933
11934(define-public python-pyramid-debugtoolbar
11935 (package
11936 (name "python-pyramid-debugtoolbar")
11937 (version "4.12.1")
11938 (source
11939 (origin
11940 (method git-fetch)
11941 (uri (git-reference
11942 (url "https://github.com/Pylons/pyramid_debugtoolbar")
11943 (commit version)))
11944 (file-name (git-file-name name version))
11945 (sha256
11946 (base32 "0kalb5rsrlcz62zv9a39kp28mvwg9j6gymvzxbybdnvk51v9if56"))))
11947 (build-system pyproject-build-system)
11948 (arguments
11949 (list
11950 #:test-flags
11951 ;; Large diff assertion not equal faileurs.
11952 #~(list #$@(map (lambda (test)
11953 (string-append "--deselect=tests"
11954 "/test_panels/test_sqla.py::" test))
11955 (list "TestSimpleSelect::test_panel"
11956 "TestTransactionCommit::test_panel"
11957 "TestTransactionRollback::test_panel")))))
11958 (native-inputs
11959 (list python-pytest
11960 python-setuptools
11961 python-webtest))
11962 (propagated-inputs
11963 (list python-pyramid
11964 python-pyramid-chameleon
11965 python-pyramid-jinja2
11966 python-pyramid-mako
11967 python-selenium
11968 python-sqlalchemy
11969 python-waitress))
11970 (home-page "https://github.com/Pylons/pyramid_debugtoolbar")
11971 (synopsis "Pyramid debug toolbar")
11972 (description
11973 "This package provides an interactive HTML debugger for Pyramid
11974application development.")
11975 (license license:bsd-3)))
11976
11977(define-public python-pyramid-jinja2
11978 (package
11979 (name "python-pyramid-jinja2")
11980 (version "2.10.1")
11981 (source
11982 (origin
11983 (method url-fetch)
11984 (uri (pypi-uri "pyramid_jinja2" version))
11985 (sha256
11986 (base32 "0xqnqbqhx9bkrg2ic3blflsk8xc8kh7i2dm2kha9apqkbjrqql4c"))))
11987 (build-system pyproject-build-system)
11988 (arguments
11989 (list
11990 #:test-flags
11991 ;; Two tests failed with assertion not equal.
11992 #~(list "-k" "not test_it_relative_to_package and not test_options")))
11993 (native-inputs
11994 (list python-pytest
11995 python-setuptools
11996 python-webtest))
11997 (propagated-inputs
11998 (list python-jinja2
11999 python-markupsafe
12000 python-pyramid
12001 python-zope-deprecation))
12002 (home-page "https://github.com/Pylons/pyramid_jinja2")
12003 (synopsis "Jinja2 template bindings for the Pyramid web framework")
12004 (description "This package provides Jinja2 template bindings for the
12005Pyramid web framework.")
12006 (license license:repoze)))
12007
12008(define-public python-pyramid-mako
12009 ;; 1.1.0 was released in 2019, there a lot of compatibility changes on
12010 ;; master, us the latest commit for now.
12011 (let ((commit "1a6f4c00c7134530d2975f34d904b64a41b28b21")
12012 (revision "0"))
12013 (package
12014 (name "python-pyramid-mako")
12015 (version (git-version "1.1.0" revision commit))
12016 (source
12017 (origin
12018 (method git-fetch)
12019 (uri (git-reference
12020 (url "https://github.com/Pylons/pyramid_mako")
12021 (commit commit)))
12022 (file-name (git-file-name name version))
12023 (sha256
12024 (base32 "0v0571z2gby4apsalkdk83gs0d5mw79d56518h3bwwxzbq32kkns"))))
12025 (build-system pyproject-build-system)
12026 (native-inputs
12027 (list python-pytest
12028 python-setuptools))
12029 (propagated-inputs
12030 (list python-mako
12031 python-pyramid))
12032 (home-page "https://github.com/Pylons/pyramid_mako")
12033 (synopsis "Mako template bindings for the Pyramid web framework")
12034 (description
12035 "This package provides Mako template bindings for the Pyramid web
12036framework.")
12037 (license license:repoze))))
12038
12039(define-public python-pyramid-retry
12040 (package
12041 (name "python-pyramid-retry")
12042 (version "2.1.1")
12043 (source
12044 (origin
12045 (method url-fetch)
12046 (uri (pypi-uri "pyramid_retry" version))
12047 (sha256
12048 (base32 "1jf07v6zhli0abgm2qajzfwg68bl9zy4xygjwl4svawbwrm2ga5s"))))
12049 (build-system pyproject-build-system)
12050 (native-inputs
12051 (list python-pytest
12052 python-setuptools
12053 python-webtest))
12054 (propagated-inputs
12055 (list python-pyramid
12056 python-zope-interface))
12057 (home-page "https://github.com/Pylons/pyramid_retry")
12058 (synopsis "Pyramid execution policy supporting retrying failed requests")
12059 (description
12060 "@code{pyramid_retry} is an execution policy for Pyramid that wraps requests
12061and can retry them a configurable number of times under certain \"retryable\"
12062error conditions before indicating a failure to the client.")
12063 (license license:expat)))
12064
12065(define-public python-pyramid-tm
12066 (package
12067 (name "python-pyramid-tm")
12068 (version "2.6")
12069 (source
12070 (origin
12071 (method url-fetch)
12072 (uri (pypi-uri "pyramid_tm" version))
12073 (sha256
12074 (base32 "173hg16hldfh5n3mn482xx64nldk308dzri31jd0qa4528cx4j41"))))
12075 (build-system pyproject-build-system)
12076 (native-inputs
12077 (list python-pytest
12078 python-setuptools
12079 python-webtest))
12080 (propagated-inputs
12081 (list python-pyramid
12082 python-transaction))
12083 (home-page "https://github.com/Pylons/pyramid_tm")
12084 (synopsis "Centralized transaction management for Pyramid")
12085 (description
12086 "@code{pyramid_tm} is a package which allows Pyramid requests to join the
12087active @url{https://pypi.org/project/transaction/, transaction} as provided by
12088the Python transaction package.")
12089 (license license:repoze)))
12090
12091(define-public python-random-user-agent
12092 (package
12093 (name "python-random-user-agent")
12094 (version "1.0.1")
12095 (source
12096 (origin
12097 (method url-fetch)
12098 (uri (pypi-uri "random_user_agent" version))
12099 (sha256
12100 (base32 "04nhzdh2ki7ybhjrmghxci6hcm6i03vvin2q2ynj87fbr1pa534g"))))
12101 (build-system pyproject-build-system)
12102 (arguments (list #:tests? #f)) ; No tests.
12103 (native-inputs (list python-setuptools))
12104 (home-page "https://github.com/Luqman-Ud-Din/random_user_agent")
12105 (synopsis "List of user agents")
12106 (description
12107 "This package provides a list of user agents, from a collection of more
12108than 326,000 known user-agents. Users can pick a random one, or select one
12109based on filters.")
12110 (license license:expat)))
12111
12112(define-public python-rangehttpserver
12113 (package
12114 (name "python-rangehttpserver")
12115 (version "1.4.0")
12116 (source
12117 (origin
12118 (method git-fetch)
12119 (uri (git-reference
12120 (url "https://github.com/danvk/RangeHTTPServer")
12121 (commit version)))
12122 (file-name (git-file-name name version))
12123 (sha256
12124 (base32 "1dx533fsbq1mbz3by7qkm5bh2c253nwvm8214pqbwbfq07kqkwf2"))))
12125 (build-system pyproject-build-system)
12126 (native-inputs
12127 (list python-pytest
12128 python-requests
12129 python-setuptools))
12130 (home-page "https://github.com/danvk/RangeHTTPServer")
12131 (synopsis "SimpleHTTPServer with support for range requests")
12132 (description
12133 "This tool provides a simple HTTP server with support for Range
12134requests.")
12135 (license license:asl2.0)))
12136
12137(define-public python-flask-restx
12138 (package
12139 (name "python-flask-restx")
12140 (version "1.3.0")
12141 (source
12142 (origin
12143 (method git-fetch) ;no tests in PyPI archive
12144 (uri (git-reference
12145 (url "https://github.com/python-restx/flask-restx")
12146 (commit version)))
12147 (file-name (git-file-name name version))
12148 (sha256
12149 (base32 "1qmm3i1cdv0bvzsc1gn4ql2dsf1fbx85fk69vcmzpsdxzczmw508"))))
12150 (build-system pyproject-build-system)
12151 (arguments
12152 (list
12153 ;; 1214 passed, 6 skipped, 16 deselected, 3 warnings
12154 #:test-flags
12155 #~(list "--benchmark-skip"
12156 ;; ValueError: http://www.google.com is not a valid URL. Domain
12157 ;; does not exists.
12158 "--deselect=tests/test_inputs.py::URLTest::test_check"
12159 "-k" (string-join
12160 ;; See: <https://github.com/python-restx/flask-restx/issues/620>.
12161 (list "not test_rfc822_value"
12162 "test_iso8601_value"
12163 ;; assert 404 == 2000
12164 "test_specs_endpoint_host_and_subdomain"
12165 ;; ValueError: [email protected] is not a valid email
12166 "test_valid_value_check")
12167 " and not "))))
12168 (native-inputs
12169 (list python-blinker
12170 python-faker
12171 python-pytest
12172 python-pytest-benchmark
12173 python-pytest-flask
12174 python-pytest-mock
12175 python-setuptools))
12176 (propagated-inputs
12177 (list python-aniso8601
12178 python-flask
12179 python-importlib-resources
12180 python-jsonschema
12181 python-pytz
12182 python-werkzeug))
12183 (home-page "https://github.com/python-restx/flask-restx")
12184 (synopsis
12185 "Framework for fast, easy and documented API development with Flask")
12186 (description
12187 "Flask-RESTX is an extension for Flask that adds support for quickly building
12188REST APIs. Flask-RESTX encourages best practices with minimal setup. If you are familiar
12189 with Flask, Flask-RESTX should be easy to pick up. It provides a coherent collection of
12190decorators and tools to describe your API and expose its documentation properly using
12191Swagger.")
12192 (license license:bsd-3)))
12193
12194(define-public python-flask-socketio
12195 (package
12196 (name "python-flask-socketio")
12197 (version "5.6.1")
12198 (source
12199 (origin
12200 (method git-fetch)
12201 (uri (git-reference
12202 (url "https://github.com/miguelgrinberg/Flask-SocketIO/")
12203 (commit (string-append "v" version))))
12204 (file-name (git-file-name name version))
12205 (sha256
12206 (base32 "1bs594bxggwn78yhf86whv6bcs8gb7mhrm5dnk5x4c3jb20nhfmm"))))
12207 (build-system pyproject-build-system)
12208 (native-inputs
12209 (list python-pytest
12210 python-redis
12211 python-setuptools))
12212 (propagated-inputs
12213 (list python-flask
12214 python-socketio))
12215 (home-page "https://github.com/miguelgrinberg/Flask-SocketIO/")
12216 (synopsis "Socket.IO integration for Flask applications")
12217 (description "Socket.IO integration for Flask applications")
12218 (license license:expat)))
12219
12220(define-public python-manuel
12221 (package
12222 (name "python-manuel")
12223 (version "1.13.0")
12224 (source
12225 (origin
12226 (method url-fetch)
12227 (uri (pypi-uri "manuel" version))
12228 (sha256
12229 (base32 "0nl8psji3fizbxw34gdg22dndlg9lf5f56mnh1vr4vgsx06i4qsx"))))
12230 (build-system pyproject-build-system)
12231 (arguments
12232 (list
12233 ;; FIXME: Tests are broken, see: <https://github.com/benji-york/manuel/pull/32>.
12234 #:tests? #f))
12235 (propagated-inputs
12236 (list python-setuptools)) ;install requires
12237 (home-page "https://pypi.org/project/manuel/")
12238 (synopsis "Build tested documentation")
12239 (description
12240 "Manuel lets you mix and match traditional doctests with custom test syntax.")
12241 (license license:asl2.0)))
12242
12243(define-public python-marshmallow-jsonapi
12244 (package
12245 (name "python-marshmallow-jsonapi")
12246 (version "0.26.0")
12247 (source
12248 (origin
12249 (method git-fetch)
12250 (uri (git-reference
12251 ;; XXX: Deprecated upstream: This repository has been archived
12252 ;; by the owner on Jun 6, 2024. It is now read-only.
12253 ;; Using a maintained fork. The pypi name of this fork
12254 ;; is marshmallow-jsonapi-minfork.
12255 (url "https://github.com/tadams42/marshmallow-jsonapi")
12256 (commit version)))
12257 (file-name (git-file-name name version))
12258 (sha256
12259 (base32 "07sizh4m03rrk1139ci3psh5npk42cdsdfsdp574pz1fd5ncrq91"))))
12260 (build-system pyproject-build-system)
12261 (native-inputs
12262 (list python-faker
12263 python-flask
12264 python-pytest
12265 python-setuptools))
12266 (propagated-inputs (list python-marshmallow))
12267 (home-page "https://github.com/marshmallow-code/marshmallow-jsonapi")
12268 (synopsis "JSON:API 1.0 formatting with Marshmallow")
12269 (description
12270 "The marshmallow-jsonapi package provides a simple way to produce
12271@uref{https://jsonapi.org, JSON:API}-compliant data in any Python Web
12272framework. It includes optional utilities to integrate with Flask. This is a
12273forked version whose pypi name is @code{marshmallow_jsonapi_minfork}.")
12274 (license license:expat)))
12275
12276(define-public python-pecan
12277 (package
12278 (name "python-pecan")
12279 (version "1.8.0")
12280 (source
12281 (origin
12282 (method git-fetch)
12283 (uri (git-reference
12284 (url "https://github.com/pecan/pecan")
12285 (commit version)))
12286 (file-name (git-file-name name version))
12287 (sha256
12288 (base32 "0w693jpnjy358992f3jrrlf31knkqn0jvz2jx0iz7ziikprc61p8"))))
12289 (build-system pyproject-build-system)
12290 (arguments
12291 (list
12292 #:test-flags '(list "--pyargs" "pecan")))
12293 (native-inputs
12294 (list gunicorn
12295 python-genshi
12296 python-jinja2
12297 python-pytest
12298 python-sqlalchemy-2
12299 python-webtest))
12300 (propagated-inputs
12301 (list python-mako
12302 python-webob))
12303 (home-page "http://github.com/pecan/pecan")
12304 (synopsis "WSGI object-dispatching web framework")
12305 (description "This package provides a WSGI object-dispatching web
12306framework, designed to be lean and fast, with few dependencies.")
12307 (license license:bsd-3)))
12308
12309(define-public python-persistent
12310 (package
12311 (name "python-persistent")
12312 (version "6.1.1")
12313 (source
12314 (origin
12315 (method git-fetch)
12316 (uri (git-reference
12317 (url "https://github.com/zopefoundation/persistent/")
12318 (commit version)))
12319 (file-name (git-file-name name version))
12320 (sha256
12321 (base32 "19qwqg49zql2c8l4vjxjb9haw0bzd6lk8p4v3hip2irch6a4578a"))))
12322 (build-system pyproject-build-system)
12323 (arguments
12324 (list
12325 #:phases
12326 #~(modify-phases %standard-phases
12327 (replace 'check
12328 (lambda* (#:key tests? #:allow-other-keys)
12329 (if tests?
12330 (invoke "zope-testrunner" "--test-path=src"
12331 ;; XXX: Ignore doc tests.
12332 "!persistent.tests.test_docs")
12333 (format #t "test suite not run~%")))))))
12334 (propagated-inputs
12335 (list python-cffi
12336 python-zope-deferredimport
12337 python-zope-interface
12338 python-zope-testrunner))
12339 (native-inputs
12340 (list python-manuel python-zope-testrunner python-setuptools))
12341 (home-page "https://github.com/zopefoundation/persistent/")
12342 (synopsis "Translucent persistent objects")
12343 (description
12344 "This package contains a generic persistence implementation for Python.
12345It forms the core protocol for making objects interact \"transparently\" with
12346a database such as the ZODB.")
12347 (license license:zpl2.1)))
12348
12349(define-public python-transaction
12350 (package
12351 (name "python-transaction")
12352 (version "5.0")
12353 (source
12354 (origin
12355 (method url-fetch)
12356 (uri (pypi-uri "transaction" version))
12357 (sha256
12358 (base32 "0x0i5graxb93aa8bwf5rmm9zq7d7r6q2b4pw358wph5whbbpnvhh"))))
12359 (build-system pyproject-build-system)
12360 (native-inputs
12361 (list python-pytest
12362 python-setuptools))
12363 (propagated-inputs
12364 (list python-zope-interface))
12365 (home-page "https://github.com/zopefoundation/transaction")
12366 (synopsis "Transaction management for Python")
12367 (description "This package contains a generic transaction implementation
12368for Python. It is mainly used by the ZODB.")
12369 (license license:zpl2.1)))
12370
12371(define-public python-truststore
12372 (package
12373 (name "python-truststore")
12374 (version "0.10.4")
12375 (source
12376 (origin
12377 (method url-fetch)
12378 (uri (pypi-uri "truststore" version))
12379 (sha256
12380 (base32 "00f3xc7720rkddsn291yrw871kfnimi6d9xbwi75xbb3ci1vv4cx"))))
12381 (build-system pyproject-build-system)
12382 (arguments
12383 (list #:tests? #f)) ;all tests require Internet access
12384 (native-inputs
12385 (list python-flit-core))
12386 (home-page "https://github.com/sethmlarson/truststore")
12387 (synopsis "Verify certificates using native system trust stores")
12388 (description
12389 "Truststore is a library which exposes native system certificate stores (ie
12390\"trust stores\") through an @code{ssl.SSLContext-like} API. This means that
12391Python applications no longer need to rely on certifi as a root certificate
12392store.")
12393 (license license:expat)))
12394
12395(define-public python-robot-detection
12396 (package
12397 (name "python-robot-detection")
12398 (version "0.4.0")
12399 (source
12400 (origin
12401 (method git-fetch)
12402 (uri (git-reference
12403 (url "https://github.com/rory/robot-detection")
12404 (commit (string-append "v" version))))
12405 (file-name (git-file-name name version))
12406 (sha256
12407 (base32 "1gxk13rn0gw5pfc4abhfnzg8qi05xa0ygs26pgkp0swygkzq6wsq"))))
12408 (build-system pyproject-build-system)
12409 (arguments (list #:test-backend #~'unittest))
12410 (native-inputs (list python-setuptools))
12411 (propagated-inputs (list python-six))
12412 (home-page "https://github.com/rory/robot-detection")
12413 (synopsis "Detect web crawlers")
12414 (description
12415 "@code{robot_detection} is a python module to detect if a given HTTP User
12416Agent is a web crawler. It uses the list of registered robots from
12417@url{http://www.robotstxt.org}.")
12418 (license license:gpl3+)))
12419
12420(define-public python-robotframework-requests
12421 (package
12422 (name "python-robotframework-requests")
12423 (version "0.9.7")
12424 (source
12425 (origin
12426 (method git-fetch) ; no tests in PyPI release
12427 (uri (git-reference
12428 (url "https://github.com/MarketSquare/robotframework-requests")
12429 (commit (string-append "v" version))))
12430 (file-name (git-file-name name version))
12431 (sha256
12432 (base32 "077j8p5k41v53slyv8h32fcmqfi7m6z3r4gmyqqaawm5szfmy61m"))))
12433 (build-system pyproject-build-system)
12434 (native-inputs
12435 (list python-pytest
12436 python-setuptools
12437 python-wheel))
12438 (propagated-inputs
12439 (list python-requests
12440 python-robotframework))
12441 (home-page "https://github.com/MarketSquare/robotframework-requests")
12442 (synopsis "Robot Framework keyword library wrapper around requests")
12443 (description
12444 "@code{RequestsLibrary} is a @url{https://robotframework.org/, Robot
12445Framework} library aimed to provide HTTP API testing functionalities by
12446wrapping the @code{requests} Python library.")
12447 (license license:expat)))
12448
12449(define-public python-pysolr
12450 (package
12451 (name "python-pysolr")
12452 (version "3.10.0")
12453 (source
12454 (origin
12455 (method url-fetch)
12456 (uri (pypi-uri "pysolr" version))
12457 (sha256
12458 (base32 "02gl1sma5cnpd7srpri1g68lpsg3s5n3lr462p5ll8v9s4nllyqj"))))
12459 (build-system pyproject-build-system)
12460 (arguments
12461 '(#:tests? #f)) ; Tests require network access.
12462 (native-inputs
12463 (list python-setuptools
12464 python-setuptools-scm
12465 python-wheel))
12466 (propagated-inputs
12467 (list python-requests))
12468 (home-page "https://github.com/django-haystack/pysolr/")
12469 (synopsis "Lightweight python wrapper for Apache Solr")
12470 (description
12471 "This module provides an interface that queries the Apache Solr server
12472using a pure Python implementation.")
12473 (license license:bsd-3)))
12474
12475(define-public python-pyjsparser
12476 ;; XXX: This project is potentially abandonware, consider to remove in next
12477 ;; refresh cycle, see:
12478 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/28>,
12479 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/39>, and
12480 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/40>.
12481 (package
12482 (name "python-pyjsparser")
12483 (version "2.7.1")
12484 (source
12485 (origin
12486 (method url-fetch)
12487 (uri (pypi-uri "pyjsparser" version))
12488 (sha256
12489 (base32 "0ycmf9fsvwliqmm1n6sfz7x71y7i2kbfgn39d8lsbiccfxmxlq5y"))))
12490 (build-system pyproject-build-system)
12491 (arguments
12492 '(#:tests? #f)) ;no tests in PyPI
12493 (native-inputs (list python-setuptools))
12494 (home-page "https://github.com/PiotrDabkowski/pyjsparser")
12495 (synopsis "Fast JavaScript parser")
12496 (description
12497 "This package provides a fast JavaScript parser (based on esprima.js)")
12498 (license license:expat)))
12499
12500(define-public python-js2py
12501 (package
12502 (name "python-js2py")
12503 (properties '((commit . "2e017b86e2f18a6c8a842293b1687f2ce7baa12e")
12504 (revision . "0")))
12505 (version (git-version "0.74"
12506 (assoc-ref properties 'revision)
12507 (assoc-ref properties 'commit)))
12508 (source
12509 (origin
12510 (method git-fetch)
12511 (uri (git-reference
12512 (url "https://github.com/PiotrDabkowski/Js2Py")
12513 (commit (assoc-ref properties 'commit))))
12514 (file-name (git-file-name name version))
12515 (sha256
12516 (base32 "0rsac03shkm0yxq91hzxdvhb96wy168bxdw8azi25bvlm8s3l27p"))
12517 (patches
12518 (list
12519 (origin
12520 (method url-fetch)
12521 (uri (string-append "https://github.com/PiotrDabkowski/Js2Py/commit"
12522 "/fd7df4a91fb08060914c7b1d9e94583d18f3371b"
12523 ".patch"))
12524 (file-name (string-append name "-" version "-pull-327.patch"))
12525 (sha256
12526 (base32 "14v89v8qqrsq0d63xbilkvx19l1rk59mlrbxvd4sj138lk7160ki")))))))
12527 (build-system pyproject-build-system)
12528 (arguments
12529 (list #:tests? #f)) ; tests require Node
12530 (native-inputs
12531 (list python-setuptools))
12532 (propagated-inputs
12533 (list python-pyjsparser
12534 python-six
12535 python-tzlocal))
12536 (home-page "https://github.com/PiotrDabkowski/Js2Py")
12537 (synopsis "JavaScript to Python translator")
12538 (description
12539 "This package provides a JavaScript to Python translator and a JavaScript
12540interpreter written in pure Python.")
12541 (license license:expat)))
12542
12543(define-public python-http-ece
12544 (package
12545 (name "python-http-ece")
12546 (version "1.2.1")
12547 (source
12548 (origin
12549 (method git-fetch)
12550 (uri (git-reference
12551 (url "https://github.com/web-push-libs/encrypted-content-encoding")
12552 (commit (string-append "v" version))))
12553 (file-name (git-file-name name version))
12554 (sha256
12555 (base32 "16kd9dsfpyfvq4iw6bbrrqrvsnf5lwgwa6p9f3b1y56ab18y0kzx"))))
12556 (build-system pyproject-build-system)
12557 (arguments
12558 `(#:phases
12559 (modify-phases %standard-phases
12560 (add-after 'unpack 'change-directory
12561 (lambda _ (chdir "python") #t)))))
12562 (native-inputs
12563 (list python-pytest python-setuptools))
12564 (propagated-inputs
12565 (list python-cryptography))
12566 (home-page "https://github.com/web-push-libs/encrypted-content-encoding")
12567 (synopsis "Encrypted Content Encoding for HTTP")
12568 (description
12569 "This package provides a simple implementation of Encrypted Content
12570Encoding for HTTP.")
12571 (license license:expat)))
12572
12573(define-public python-imap-tools
12574 (package
12575 (name "python-imap-tools")
12576 (version "1.9.0")
12577 (source
12578 (origin
12579 (method git-fetch) ; no tests in PyPI release
12580 (uri (git-reference
12581 (url "https://github.com/ikvk/imap_tools")
12582 (commit (string-append "v" version))))
12583 (file-name (git-file-name name version))
12584 (sha256
12585 (base32 "0iawc6shxn8p0ysiqiahfic5rp1r16f7rfn11c8y2fl8falckynr"))))
12586 (arguments
12587 (list
12588 #:test-flags
12589 ;; Tests require a network connection
12590 #~(list "-k" (string-append "not test_action"
12591 " and not test_attributes"
12592 " and not test_connection"
12593 " and not test_folders"
12594 " and not test_idle"
12595 " and not test_live"))))
12596 (build-system pyproject-build-system)
12597 (native-inputs
12598 (list python-pytest python-setuptools python-wheel))
12599 (home-page "https://github.com/ikvk/imap_tools")
12600 (synopsis "Work with email and mailbox by IMAP")
12601 (description
12602 "This Python library provides tools to deal with email and mailboxes
12603over IMAP:
12604
12605@itemize
12606@item Parsed email message attributes
12607@item Query builder for searching emails
12608@item Work with emails in folders (copy, delete, flag, move, seen)
12609@item Work with mailbox folders (list, set, get, create, exists, rename, delete, status)
12610@end itemize")
12611 (license license:asl2.0)))
12612
12613(define-public python-giturlparse
12614 (package
12615 (name "python-giturlparse")
12616 (version "0.12.0")
12617 (source
12618 (origin
12619 (method git-fetch)
12620 (uri (git-reference
12621 (url "https://github.com/nephila/giturlparse")
12622 (commit version)))
12623 (file-name (git-file-name name version))
12624 (sha256
12625 (base32 "1fdbxp176p17sn5xc1418mz2vk00hlcsd5qmi2fdcfphqal6raan"))))
12626 (build-system pyproject-build-system)
12627 (native-inputs (list python-pytest python-setuptools))
12628 (home-page "https://github.com/nephila/giturlparse")
12629 (synopsis "Git URL parsing module")
12630 (description
12631 "This package provides a git URL parsing module which supports parsing
12632and rewriting of remote git URLs from various hosting providers.")
12633 (license license:asl2.0)))
12634
12635(define-public python-hstspreload
12636 (package
12637 (name "python-hstspreload")
12638 (version "2025.1.1")
12639 (source
12640 (origin
12641 (method git-fetch)
12642 (uri (git-reference
12643 (url "https://github.com/sethmlarson/hstspreload")
12644 (commit version)))
12645 (file-name (git-file-name name version))
12646 (sha256
12647 (base32 "02mdzhgdz3sprgc26qb084zy639h2zw2yc8d2vm1r18ap9k51ayq"))))
12648 (build-system pyproject-build-system)
12649 (arguments (list #:tests? #f)) ; tests require external resources.
12650 (native-inputs (list python-setuptools))
12651 (home-page "https://github.com/sethmlarson/hstspreload")
12652 (synopsis "Chromium HSTS Preload list as a Python package")
12653 (description
12654 "@code{python-hstspreload} contains Chromium HSTS Preload list
12655as a Python package.")
12656 (license license:bsd-3)))
12657
12658(define-public python-sanic-routing
12659 (package
12660 (name "python-sanic-routing")
12661 (version "23.12.0")
12662 (source
12663 (origin
12664 (method url-fetch)
12665 (uri (pypi-uri "sanic-routing" version))
12666 (sha256
12667 (base32 "014bhkharcgyprdvlk7wjxhjp1pr0cva1nwj4f2qrr23qiidrjhx"))))
12668 (build-system pyproject-build-system)
12669 (arguments
12670 ;; PyPi sources does not contain tests, recursive dependency on
12671 ;; python-sanic.
12672 (list #:tests? #f))
12673 (native-inputs (list python-setuptools python-wheel))
12674 (home-page "https://github.com/sanic-org/sanic-routing/")
12675 (synopsis "Routing component for Sanic")
12676 (description "Internal package for @code{python-sanic}, which provides
12677the @code{BasicRouter}.")
12678 (license license:expat)))
12679
12680(define-public python-sanic-testing
12681 (package
12682 (name "python-sanic-testing")
12683 (version "23.12.0")
12684 (source
12685 (origin
12686 (method url-fetch)
12687 (uri (pypi-uri "sanic-testing" version))
12688 (sha256
12689 (base32 "0gqkzv90sbj9rw7yfly9c58lq9dq30g5hhcgjl3ihzjb66vm571b"))))
12690 (build-system pyproject-build-system)
12691 (arguments
12692 ;; PyPi sources does not contain tests, recursive dependency on
12693 ;; python-sanic.
12694 (list #:tests? #f))
12695 (propagated-inputs (list python-httpx python-sanic-bootstrap))
12696 (native-inputs (list python-setuptools python-wheel))
12697 (home-page "https://github.com/sanic-org/sanic-testing/")
12698 (synopsis "Test clients for Sanic")
12699 (description "Internal package for @code{python-sanic}, which is
12700meant to be the core testing utility and clients for testing Sanic
12701applications.")
12702 (license license:expat)))
12703
12704(define-public python-sanic
12705 (package
12706 (name "python-sanic")
12707 (version "25.12.1")
12708 (source
12709 (origin
12710 (method url-fetch)
12711 (uri (pypi-uri "sanic" version))
12712 (sha256
12713 (base32 "0zxll83cvmcpiad3rri7cn9y8wi8xn7x0b00dimg0c20irhbylbv"))
12714 ;; Loosen requirements for both python-sanic and python-sanic-bootstrap.
12715 (modules '((guix build utils)))
12716 (snippet #~(substitute* "setup.py"
12717 (("setuptools>=[0-9.]*")
12718 "setuptools")))))
12719 (build-system pyproject-build-system)
12720 (arguments
12721 (list
12722 #:test-flags
12723 #~(list "--asyncio-mode=auto"
12724 "--ignore=tests/benchmark/"
12725 "--ignore=tests/typing/test_typing.py"
12726 ;; Most tests hang or fail
12727 "--ignore=tests/test_cli.py"
12728 "--ignore=tests/worker/test_worker_serve.py"
12729 "-k"
12730 (string-append
12731 ;; PyPi sources lack examples module.
12732 "not test_gunicorn_"
12733 ;; Does not expect brotli and reordered headers.
12734 " and not test_raw_headers"
12735 ;; These look like buggy testcases.
12736 " and not test_zero_downtime"
12737 " and not test_non_default_uvloop_config_raises_warning"
12738 " and not test_listeners_triggered"
12739 " and not test_keep_alive_connection_context"
12740 " and not test_keep_alive_client_timeout"
12741 " and not test_conflicting_body_methods_overload"
12742 " and not test_unix_connection"
12743 ;; Unclear why they fail since core-updates merge.
12744 " and not test_missing_sni"
12745 " and not test_no_matching_cert"
12746 " and not test_wildcards"
12747 ;; These tests fail because subprotocols appear to be
12748 ;; parameterized as None
12749 " and not test_websocket_route_with_subprotocols"
12750 ;; AF_UNIX path too long
12751 " and not test_setup_and_teardown_unix"
12752 " and not test_configure_socket"
12753 ;; Freezes
12754 " and not test_server_run_with_repl"
12755 " and not test_server_run"
12756 " and not test_no_workers"
12757 ;; Raises DaemonError: Group 'root' does not exist
12758 " and not test_validate_user_sets_uid_and_gid"
12759 " and not test_validate_group_sets_gid"
12760 ;; Raises AssertionError:
12761 ;; assert 'text/xml; charset=utf-8' == 'application/xml'
12762 " and not test_guess_content_type"
12763 ;; Don't know.
12764 " and not test_chained_exception_handler"))))
12765 (propagated-inputs
12766 (list python-aiofiles
12767 python-aioquic
12768 python-html5tagger
12769 python-httptools
12770 python-multidict
12771 python-sanic-routing
12772 python-tracerite
12773 python-typing-extensions
12774 python-ujson
12775 python-uvloop
12776 python-websockets))
12777 (native-inputs
12778 (list python-bandit
12779 python-beautifulsoup4
12780 python-chardet
12781 python-cryptography
12782 python-docutils
12783 python-pygments
12784 python-pytest
12785 python-pytest-asyncio
12786 python-pytest-benchmark
12787 python-pytest-sanic
12788 python-pytest-xdist
12789 python-sanic-testing
12790 python-setuptools
12791 python-slotscheck
12792 python-towncrier
12793 python-types-ujson
12794 python-uvicorn))
12795 (home-page "https://github.com/sanic-org/sanic/")
12796 (synopsis "Async Python web server/framework")
12797 (description
12798 "Sanic is a Python web server and web framework that's written to go
12799fast. It allows the usage of the @code{async/await} syntax added in Python
128003.5, which makes your code non-blocking and speedy.")
12801 (license license:expat)))
12802
12803(define-public python-sanic-bootstrap
12804 (package
12805 (inherit python-sanic)
12806 (name "python-sanic-bootstrap")
12807 (arguments (list #:tests? #f))
12808 (native-inputs (list python-setuptools))))
12809
12810(define-public python-socketio
12811 (package
12812 (name "python-socketio")
12813 (version "5.16.4")
12814 (source
12815 (origin
12816 (method git-fetch)
12817 (uri (git-reference
12818 (url "https://github.com/miguelgrinberg/python-socketio/")
12819 (commit (string-append "v" version))))
12820 (file-name (git-file-name name version))
12821 (sha256
12822 (base32 "0695mq1nijlljkmpgn3nk6gfv34rzpgxrdsld1l1vix6gxyxna0y"))))
12823 (build-system pyproject-build-system)
12824 (arguments
12825 (list
12826 ;; tests: 642 passed, 5 warnings
12827 #:test-flags
12828 ;; Tests freeze.
12829 #~(list "--ignore=tests/async/test_admin.py"
12830 "--ignore=tests/common/test_admin.py")))
12831 (native-inputs
12832 (list python-msgpack
12833 python-pytest
12834 python-pytest-asyncio
12835 python-pytest-timeout
12836 python-redis
12837 python-setuptools
12838 python-uvicorn
12839 python-valkey))
12840 (propagated-inputs
12841 (list python-bidict
12842 python-engineio
12843 ;; [optional]
12844 python-aiohttp
12845 python-requests
12846 python-websocket-client))
12847 (home-page "https://github.com/miguelgrinberg/python-socketio/")
12848 (synopsis "Python Socket.IO server")
12849 (description
12850 "This package provides a Python implementation of the @code{Socket.IO}
12851realtime client and server.")
12852 (license license:expat)))
12853
12854(define-public python-socks
12855 (package
12856 (name "python-socks")
12857 (version "2.8.1")
12858 (source
12859 (origin
12860 (method git-fetch)
12861 (uri (git-reference
12862 (url "https://github.com/romis2012/python-socks")
12863 (commit (string-append "v" version))))
12864 (file-name (git-file-name name version))
12865 (sha256
12866 (base32 "1x95i9w3izivdgz6hadh5kiil12i4ljk4ashgh3g0rjv2rw33vhj"))))
12867 (build-system pyproject-build-system)
12868 (propagated-inputs (list python-trio))
12869 (native-inputs
12870 (list python-anyio
12871 python-flask
12872 python-pytest
12873 python-pytest-asyncio
12874 python-pytest-trio
12875 python-setuptools
12876 python-tiny-proxy
12877 python-trustme
12878 python-yarl))
12879 (home-page "https://github.com/romis2012/python-socks")
12880 (synopsis
12881 "Core proxy (SOCKS4, SOCKS5, HTTP tunneling) functionality for Python")
12882 (description
12883 "Socks is a library providing core proxy (SOCKS4, SOCKS5, HTTP tunneling)
12884 functionality.")
12885 (license license:asl2.0)))
12886
12887(define-public python-socksio
12888 (package
12889 (name "python-socksio")
12890 (version "1.0.0")
12891 (source
12892 (origin
12893 (method url-fetch)
12894 (uri (pypi-uri "socksio" version))
12895 (sha256
12896 (base32 "1b64j45w35jzhjhnq44bnyad9ydh1iyyd7a6j2c8phxmllyyp2zq"))))
12897 (build-system pyproject-build-system)
12898 (native-inputs
12899 (list python-flit-core python-pytest))
12900 (home-page "https://github.com/sethmlarson/socksio")
12901 (synopsis "Sans-I/O implementation of SOCKS4, SOCKS4A, and SOCKS5")
12902 (description "The @code{socksio} Python module is a client-side sans-I/O
12903SOCKS proxy implementation. It supports SOCKS4, SOCKS4A, and SOCKS5.
12904@code{socksio} is a sans-I/O library similar to @code{h11} or @code{h2}; this
12905means the library itself does not handle the actual sending of the bytes
12906through the network, it only deals with the implementation details of the
12907SOCKS protocols. It can be paired with any I/O library.")
12908 (license license:expat)))
12909
12910(define-public python-simple-websocket
12911 (package
12912 (name "python-simple-websocket")
12913 (version "1.1.0")
12914 (source
12915 (origin
12916 (method url-fetch)
12917 (uri (pypi-uri "simple_websocket" version))
12918 (sha256
12919 (base32 "1r1all55d5dimiw3qwdhj53cxj9yjgnskcysmcscarx0g9726fbr"))))
12920 (build-system pyproject-build-system)
12921 (arguments
12922 ;; Requires Internet access to resolve example.com
12923 (list #:test-flags '(list "--ignore=tests/test_client.py")))
12924 (propagated-inputs (list python-wsproto))
12925 (native-inputs (list python-pytest
12926 python-setuptools))
12927 (home-page "https://github.com/miguelgrinberg/simple-websocket")
12928 (synopsis "Simple WebSocket server and client for Python")
12929 (description "This package provides a simple @code{WebSocket} server and
12930client for Python.")
12931 (license license:expat)))
12932
12933(define-public python-siosocks
12934 (package
12935 (name "python-siosocks")
12936 (version "0.3.0")
12937 (source
12938 (origin
12939 (method git-fetch)
12940 (uri (git-reference
12941 (url "https://github.com/pohmelie/siosocks")
12942 (commit (string-append "v" version))))
12943 (file-name (git-file-name name version))
12944 (sha256
12945 (base32 "0zcib4j5bfxlryfa412wmlkk8ivsiwxrfbpij5s7ag839ii2lxa5"))))
12946 (build-system pyproject-build-system)
12947 (native-inputs
12948 (list python-pytest
12949 python-pytest-asyncio
12950 python-pytest-trio
12951 python-setuptools))
12952 (propagated-inputs (list python-trio))
12953 (home-page "https://github.com/pohmelie/siosocks")
12954 (synopsis "SOCKSv4 & SOCKSv5 TCP proxy protocol implementation in Python")
12955 (description
12956 "This package provides a Python module and framework for sans-io socks proxy
12957client/server with couple io backends.
12958
12959Features:
12960@itemize
12961@item Only TCP connect (no BIND, no UDP)
12962@item Both client and server
12963@item SOCKS versions: 4, 4a, 5
12964@item SOCKSv5 auth: no auth, username/password
12965@item Couple io backends: @code{asyncio}, @code{trio}, @code{socketserver}
12966@item One-shot socks server (@code{python -m siosocks})
12967@end itemize")
12968 (license license:expat)))
12969
12970(define-public python-tiny-proxy
12971 (package
12972 (name "python-tiny-proxy")
12973 (version "0.2.1")
12974 (source
12975 (origin
12976 (method url-fetch)
12977 (uri (pypi-uri "tiny_proxy" version))
12978 (sha256
12979 (base32 "05nq62fn3p7s1a6dkdvnrzmk39d9ddrzb3pqbbli025qs3m9j1bq"))))
12980 (build-system pyproject-build-system)
12981 ;; There are only a handful of tests and they require the as yet
12982 ;; unpackaged httpx_socks.
12983 (arguments (list #:tests? #false))
12984 (propagated-inputs (list python-anyio))
12985 (native-inputs
12986 (list python-httpx
12987 python-pytest
12988 python-setuptools
12989 python-wheel))
12990 (home-page "https://github.com/romis2012/tiny-proxy")
12991 (synopsis "Simple proxy server (SOCKS4(a), SOCKS5(h), HTTP tunnel)")
12992 (description "This package provides a simple proxy server (SOCKS4(a),
12993SOCKS5(h), HTTP tunnel).")
12994 (license license:asl2.0)))
12995
12996(define-public python-google-auth
12997 (package
12998 (name "python-google-auth")
12999 (version "2.56.0")
13000 (source
13001 (origin
13002 (method url-fetch)
13003 (uri (pypi-uri "google_auth" version))
13004 (sha256
13005 (base32 "0lx5cw49lfjqvd9vx1vlslrxyh9q0xd6d46np5a2dab9nlqa03zr"))))
13006 (build-system pyproject-build-system)
13007 (propagated-inputs
13008 (list python-aiohttp
13009 python-cryptography
13010 python-pyasn1-modules
13011 python-requests
13012 python-rsa
13013 python-urllib3))
13014 (native-inputs
13015 (list nss-certs-for-test
13016 python-aiohttp
13017 python-aioresponses
13018 python-flask
13019 python-freezegun
13020 python-grpcio
13021 python-oauth2client
13022 python-packaging
13023 python-pyjwt
13024 python-pyopenssl
13025 python-pytest
13026 python-pytest-asyncio
13027 python-pytest-localserver
13028 python-pyu2f
13029 python-requests
13030 python-responses
13031 python-rsa
13032 python-setuptools
13033 python-urllib3))
13034 (home-page "https://github.com/googleapis/google-auth-library-python")
13035 (synopsis "Google Authentication Library")
13036 (description "This library simplifies using Google's various
13037server-to-server authentication mechanisms to access Google APIs.")
13038 (license license:asl2.0)))
13039
13040(define-public python-google-resumable-media
13041 (package
13042 (name "python-google-resumable-media")
13043 (version "2.8.0")
13044 (source
13045 (origin
13046 (method git-fetch)
13047 (uri (git-reference
13048 (url
13049 "https://github.com/googleapis/google-resumable-media-python")
13050 (commit (string-append "v" version))))
13051 (file-name (git-file-name name version))
13052 (sha256
13053 (base32 "0ndida5yr06bal0m09yri80bvf8x7yy690b14ywnxl4ixi8rlh6s"))))
13054 (build-system pyproject-build-system)
13055 (arguments
13056 (list
13057 #:test-flags
13058 #~(list
13059 ;; XXX: Missing test_utils.retry.
13060 "--ignore-glob=tests*/system/"
13061 ;; XXX: md5_hash is not mock.sentinel.md5_hash
13062 "-k" (string-join
13063 (list "not test_brotli"
13064 "test_constructor"
13065 "test_decompress")
13066 " and not "))))
13067 (propagated-inputs (list python-google-crc32c))
13068 (native-inputs
13069 (list python-google-auth
13070 python-mock
13071 python-pytest
13072 python-pytest-asyncio
13073 python-setuptools
13074 python-test-utils))
13075 (home-page "https://github.com/googleapis/google-resumable-media-python")
13076 (synopsis "Utilities for Google Media Downloads and Resumable Uploads")
13077 (description "This package provides utilities for Google Media Downloads
13078and Resumable Uploads.")
13079 (license license:asl2.0)))
13080
13081(define-public python-googleapis-common-protos
13082 (package
13083 (name "python-googleapis-common-protos")
13084 (version "1.66.0")
13085 (source
13086 (origin
13087 (method git-fetch)
13088 (uri (git-reference
13089 (url "https://github.com/googleapis/python-api-common-protos")
13090 (commit (string-append "v" version))))
13091 (file-name (git-file-name name version))
13092 (sha256
13093 (base32 "1fb7bcmjngmwwhqrldslli6r5z3s6r2kj4ywjmdjj92d1i51c29r"))))
13094 (build-system pyproject-build-system)
13095 (propagated-inputs (list python-protobuf))
13096 (native-inputs (list python-pytest python-setuptools))
13097 (home-page "https://github.com/googleapis/python-api-common-protos")
13098 (synopsis "Common protobufs used in Google APIs")
13099 (description
13100 "This package contains Python classes generated from the common protos in
13101the @code{googleapis/api-common-protos} repository.")
13102 (license license:asl2.0)))
13103
13104(define-public python-google-api-core
13105 (package
13106 (name "python-google-api-core")
13107 (version "2.29.0")
13108 (source
13109 (origin
13110 (method git-fetch)
13111 (uri (git-reference
13112 (url "https://github.com/googleapis/python-api-core")
13113 (commit (string-append "v" version))))
13114 (file-name (git-file-name name version))
13115 (sha256
13116 (base32 "0ahs8abyl7719paarlnspqp8yds149w7vm3w7zz6f7q04sscd862"))))
13117 (build-system pyproject-build-system)
13118 (arguments
13119 (list
13120 #:test-flags
13121 ;; XXX: DeprecationWarning: datetime.datetime.utcfromtimestamp() is
13122 ;; deprecated and scheduled for removal in a future version. Use
13123 ;; timezone-aware objects to represent datetimes in UTC:
13124 ;; datetime.datetime.fromtimestamp(timestamp, datetime.UTC).
13125 #~(list "-W" "ignore::DeprecationWarning")))
13126 (propagated-inputs
13127 (list python-google-auth
13128 python-googleapis-common-protos
13129 python-protobuf
13130 python-proto-plus
13131 python-requests))
13132 (native-inputs
13133 (list python-mock
13134 python-pytest
13135 python-pytest-asyncio
13136 python-pytest-mock
13137 python-setuptools))
13138 (home-page "https://github.com/googleapis/python-api-core")
13139 (synopsis "Google API client core library")
13140 (description
13141 "This library defines common helpers used by all Google API clients.")
13142 (license license:asl2.0)))
13143
13144(define-public python-google-cloud-core
13145 (package
13146 (name "python-google-cloud-core")
13147 (version "2.5.0")
13148 (source
13149 (origin
13150 (method git-fetch)
13151 (uri (git-reference
13152 (url "https://github.com/googleapis/python-cloud-core")
13153 (commit (string-append "v" version))))
13154 (file-name (git-file-name name version))
13155 (sha256
13156 (base32 "1d7li74cakgl9vghxfir9nxwy36980alvxwgwjg0zyla3hgj07cq"))))
13157 (build-system pyproject-build-system)
13158 (arguments
13159 (list
13160 #:test-flags
13161 ;; XXX: DeprecationWarning: datetime.datetime.utcfromtimestamp() is
13162 ;; deprecated and scheduled for removal in a future version. Use
13163 ;; timezone-aware objects to represent datetimes in UTC:
13164 ;; datetime.datetime.fromtimestamp(timestamp, datetime.UTC).
13165 #~(list "-W" "ignore::DeprecationWarning")))
13166 (propagated-inputs (list python-google-api-core python-google-auth))
13167 (native-inputs
13168 (list python-grpcio
13169 python-grpcio-status
13170 python-pytest
13171 python-setuptools))
13172 (home-page "https://github.com/googleapis/python-cloud-core")
13173 (synopsis "Google Cloud API client core library")
13174 (description
13175 "This library defines common helpers (e.g. base @code{Client} classes)
13176used by all of the @code{google-cloud-*} packages.")
13177 (license license:asl2.0)))
13178
13179(define-public python-google-cloud-storage
13180 (package
13181 (name "python-google-cloud-storage")
13182 (version "2.19.0")
13183 (source
13184 (origin
13185 (method git-fetch)
13186 (uri (git-reference
13187 (url "https://github.com/googleapis/python-storage")
13188 (commit (string-append "v" version))))
13189 (file-name (git-file-name name version))
13190 (sha256
13191 (base32 "19w10v2j4ciwlf8j2ylm77f8z1b0kqzg8lkh9rvh2swv1zrhydpj"))))
13192 (build-system pyproject-build-system)
13193 (arguments
13194 (list
13195 #:test-flags
13196 #~(list
13197 ;; XXX: Missing test_utils.retry.
13198 "--ignore=tests/system/"
13199 ;; Needs docker.
13200 "--ignore=tests/conformance/"
13201 ;; XXX: Deprecations.
13202 "-k" (string-join
13203 (list "not test_set_api_request_attr"
13204 "test_create_bucket_w_custom_endpoint"
13205 "test_ctor_w_api_endpoint_override"
13206 "test_ctor_w_custom_endpoint_use_auth"
13207 "test_list_buckets_w_custom_endpoint")
13208 " and not ")
13209 "tests")))
13210 (native-inputs
13211 (list python-googleapis-common-protos
13212 python-mock
13213 python-pytest
13214 python-test-utils
13215 python-setuptools))
13216 (propagated-inputs
13217 (list python-google-api-core
13218 python-google-auth
13219 python-google-cloud-core
13220 python-google-resumable-media
13221 python-protobuf
13222 python-requests))
13223 (home-page "https://github.com/googleapis/python-storage")
13224 (synopsis "Google Cloud Storage API client library")
13225 (description
13226 "Google Cloud Storage allows you to store data on Google infrastructure,
13227and it can be used to distribute large data objects to users via direct
13228download. This package provides a Google Cloud Storage API client library for
13229Python.")
13230 (license license:asl2.0)))
13231
13232(define-public python-smart-open
13233 (package
13234 (name "python-smart-open")
13235 (version "7.3.0")
13236 (source
13237 (origin
13238 (method git-fetch) ;no tests in PyPI archive
13239 (uri (git-reference
13240 (url "https://github.com/piskvorky/smart_open")
13241 (commit (string-append "v" version))))
13242 (file-name (git-file-name name version))
13243 (sha256
13244 (base32 "1jk3dj0j7idv94g1ga5wyvybakj4l150g26cbsjkrjfpy017vxab"))))
13245 (build-system pyproject-build-system)
13246 (arguments
13247 (list
13248 #:test-flags
13249 #~(list "--ignore=ci_helpers/"
13250 "--ignore=integration-tests/"
13251 ;; FIXME: Enable when guix/guix#1436 is resolved.
13252 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri"
13253 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri_contains_question_mark"
13254 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri_contains_slash"
13255 "--deselect=tests/test_smart_open.py::ParseUriTest::test_scheme"
13256 "--ignore=tests/test_gcs.py")))
13257 (propagated-inputs
13258 (list python-azure-common
13259 python-azure-core
13260 python-azure-storage-blob
13261 python-boto3
13262 ;; python-google-cloud-storage ;see guix/guix#1436
13263 python-paramiko
13264 python-requests
13265 python-wrapt
13266 python-zstandard))
13267 (native-inputs
13268 (list python-numpy
13269 python-moto
13270 python-pytest
13271 python-pytest-rerunfailures
13272 python-responses
13273 python-setuptools
13274 python-setuptools-scm
13275 python-wheel))
13276 (home-page "https://github.com/piskvorky/smart_open")
13277 (synopsis "Utilities for streaming large files")
13278 (description
13279 "This package provides utilities for streaming large files (S3, HDFS,
13280GCS, Azure Blob Storage, gzip, bz2, etc.)")
13281 (license license:expat)))
13282
13283(define-public python-smart-open-6
13284 (package
13285 (inherit python-smart-open)
13286 (name "python-smart-open")
13287 (version "6.4.0")
13288 (source
13289 (origin
13290 (method git-fetch)
13291 (uri (git-reference
13292 (url "https://github.com/piskvorky/smart_open")
13293 (commit (string-append "v" version))))
13294 (file-name (git-file-name name version))
13295 (sha256
13296 (base32 "1vpx37b6lsb6iwi59776ywjrqk1czv8arlhaf9073lrsbilqvj3x"))))
13297 (arguments
13298 (list
13299 ;; XXX: Tests need some older native inputs, disable for now.
13300 #:tests? #f))))
13301
13302(define-public python-w3lib
13303 (package
13304 (name "python-w3lib")
13305 (version "2.3.1")
13306 (source
13307 (origin
13308 (method url-fetch)
13309 (uri (pypi-uri "w3lib" version))
13310 (sha256
13311 (base32
13312 "1929layzxwdnf43hhrz7rabv388b2yibj7mnq9s62mr760mc12jw"))))
13313 (build-system pyproject-build-system)
13314 (native-inputs
13315 (list python-pytest python-setuptools python-wheel))
13316 (home-page "https://github.com/scrapy/w3lib")
13317 (synopsis "Python library of web-related functions")
13318 (description
13319 "This is a Python library of web-related functions, such as: remove
13320comments, or tags from HTML snippets, extract base url from HTML snippets,
13321translate entities on HTML strings, among other things.")
13322 (license license:bsd-3)))
13323
13324(define-public python-webcolors
13325 (package
13326 (name "python-webcolors")
13327 (version "25.10.0")
13328 (source
13329 (origin
13330 (method git-fetch)
13331 (uri (git-reference
13332 (url "https://github.com/ubernostrum/webcolors")
13333 (commit version)))
13334 (sha256
13335 (base32 "1wknzir5252y30wcpwxb04ngmrdw1llzqmrpiajyhkm81x2lgrym"))))
13336 (build-system pyproject-build-system)
13337 (native-inputs
13338 (list python-pdm-backend python-pytest))
13339 (home-page "https://github.com/ubernostrum/webcolors")
13340 (synopsis "HTML/CSS color definitions library")
13341 (description "@code{python-webcolors} is a module for working with
13342HTML/CSS color definitions. Normalizing and converting between the following
13343formats is supported.
13344@itemize
13345@item Specification-defined color names
13346@item Six-digit hexadecimal
13347@item Three-digit hexadecimal
13348@item Integer rgb() triplet
13349@item Percentage rgb() triplet
13350@end itemize
13351Only the RGB colorspace is supported. Conversion to/from the HSL colorspace
13352can be handled by the @code{colorsys} module in the Python standard library.")
13353 (license license:bsd-3)))
13354
13355(define-public python-woob
13356 ;; TODO: woob requires backends which are currently installed on the fly in
13357 ;; ~/.local/share/woob/modules/3.7/woob_modules/ , perhaps we should install
13358 ;; them in the store instead. Many modules are included in the modules
13359 ;; directory in the source tree, but it is unclear how to install them.
13360 ;; Many modules require extra dependencies though, so maybe they should be
13361 ;; packaged independently of woob itself.
13362 (package
13363 (name "python-woob")
13364 (version "3.7")
13365 (source
13366 (origin
13367 (method git-fetch)
13368 (uri (git-reference
13369 (url "https://gitlab.com/woob/woob.git")
13370 (commit version)))
13371 (file-name (git-file-name name version))
13372 (sha256
13373 (base32 "1sy0aykff56xs4dnc7ak6m8is2zgz9fprf3i1pk8n861xz1z748i"))))
13374 (build-system pyproject-build-system)
13375 (arguments
13376 (list
13377 #:test-flags
13378 ;; Deselect tests that require DNS lookup.
13379 #~(list
13380 "--deselect=tests/browser/adapters.py::TestAdapter::test_ciphers"
13381 "--deselect=tests/browser/browsers.py::TestBrowser::test_verify")
13382 #:phases
13383 #~(modify-phases %standard-phases
13384 (add-before 'build 'relax-requirements
13385 (lambda _
13386 (substitute* "pyproject.toml"
13387 ;; packaging ~= 23.0
13388 (("\"packaging .*\",")
13389 "")
13390 ;; rich~=13.0
13391 (("\"rich .*\",")
13392 "\"rich\",")))))))
13393 (native-inputs
13394 (list nss-certs-for-test
13395 python-pytest
13396 python-setuptools))
13397 (propagated-inputs
13398 (list python-babel
13399 python-colorama
13400 python-cssselect
13401 python-dateutil
13402 python-feedparser
13403 python-html2text
13404 python-lxml
13405 python-packaging
13406 python-pillow
13407 python-prettytable
13408 python-pycountry
13409 python-pyyaml
13410 python-requests
13411 python-responses
13412 python-rich
13413 python-termcolor
13414 python-unidecode))
13415 (home-page "https://woob.tech/")
13416 (synopsis "Woob, Web Outside Of Browsers")
13417 (description
13418 "Woob is a collection of applications able to interact with
13419websites, without requiring the user to open them in a browser. It also
13420provides well-defined APIs to talk to websites lacking one.")
13421 (license license:lgpl3+)))
13422
13423(define-public python-flask-combo-jsonapi
13424 (let ((commit "3cfff98ecdbadc45d25a3fd443ad67d3743be6f5")
13425 (revision "0"))
13426 (package
13427 (name "python-flask-combo-jsonapi")
13428 (version (git-version "1.1.0" revision commit))
13429 (source
13430 (origin
13431 (method git-fetch)
13432 (uri (git-reference
13433 (url "https://github.com/AdCombo/flask-combo-jsonapi")
13434 (commit commit)))
13435 (file-name (git-file-name name version))
13436 (sha256
13437 (base32 "1lp81v96qh9hdj3c95kvfaq0vy5vd8cm55j03aszc93bs8z5jg7h"))))
13438 (build-system pyproject-build-system)
13439 (arguments
13440 (list
13441 #:test-flags
13442 #~(list
13443 "-k"
13444 (string-join
13445 (list
13446 ;; XXX: This tests a feature that doesn't make sense when dropping
13447 ;; marshmallow < 3 support.
13448 "not test_compute_schema_propagate_context"
13449 ;; The following tests fail for unknown reasons (see:
13450 ;; https://github.com/AdCombo/flask-combo-jsonapi/issues/66).
13451 "test_get_list_with_simple_filter_relationship_custom_qs_api"
13452 "test_get_list_with_simple_filter_relationship_error")
13453 " and not "))
13454 #:phases
13455 #~(modify-phases %standard-phases
13456 (add-after 'unpack 'loosen-requirements
13457 (lambda _
13458 ;; Don't pin specific versions of dependencies.
13459 (substitute* "requirements.txt"
13460 (("^(sqlalchemy|marshmallow|Flask)[=<>].*" _ dep)
13461 (string-append dep "\n"))
13462 (("^marshmallow_jsonapi[=<>].*")
13463 "marshmallow_jsonapi_minfork\n"))
13464 ;; Drop support for marshmallow < 3.
13465 (substitute* (list "flask_combo_jsonapi/data_layers/alchemy.py"
13466 "flask_combo_jsonapi/schema.py")
13467 (("from marshmallow\\.base import SchemaABC")
13468 "from marshmallow import Schema")
13469 (("if isinstance\\(related_schema_cls, SchemaABC\\):")
13470 "if isinstance(related_schema_cls, Schema):"))
13471 (substitute* "tests/test_sqlalchemy_data_layer.py"
13472 (("default=None")
13473 "dump_default=None")
13474 (("missing=")
13475 "load_default=")))))))
13476 (propagated-inputs
13477 (list python-flask
13478 python-marshmallow
13479 python-marshmallow-jsonapi
13480 python-simplejson
13481 python-sqlalchemy
13482 python-apispec
13483 python-simplejson
13484 python-six))
13485 (native-inputs
13486 (list python-pytest python-setuptools))
13487 (home-page "https://github.com/AdCombo/flask-combo-jsonapi")
13488 (synopsis "Flask extension to quickly create JSON:API 1.0 REST Web APIs")
13489 (description
13490 "Flask-COMBO-JSONAPI is a Python Flask extension for building REST Web
13491APIs compliant with the @uref{https://jsonapi.org, JSON:API 1.0}
13492specification.
13493
13494It tries to combine the power of Flask-Restless with the flexibility of
13495Flask-RESTful to quickly build APIs that fit the complexity of existing
13496real-life projects with legacy data and diverse storage providers.")
13497 (license license:expat))))
13498
13499(define-public python-mwparserfromhell
13500 (package
13501 (name "python-mwparserfromhell")
13502 (version "0.7.2")
13503 (source
13504 (origin
13505 (method git-fetch)
13506 (uri (git-reference
13507 (url "https://github.com/earwig/mwparserfromhell")
13508 (commit (string-append "v" version))))
13509 (file-name (git-file-name name version))
13510 (sha256
13511 (base32 "083ir0nccm14431mmn243862gq731ww98fwpd95zm1yccvpzdy68"))))
13512 (build-system pyproject-build-system)
13513 (native-inputs (list python-pytest python-setuptools))
13514 (home-page "https://github.com/earwig/mwparserfromhell")
13515 (synopsis "Python parser for MediaWiki wikicode")
13516 (description
13517 "The MediaWiki Parser From Hell is a python library package that provides
13518a parser for MediaWiki.
13519
13520It exposes parses as normal string objects with additional methods giving
13521access to the special Wikicode features it contains (hyperlinks, tags,
13522templates…). The parser doesn't interpolate strings at all, it remains at a
13523purely formal level.
13524
13525Full documentation may be found at
13526@uref{https://mwparserfromhell.readthedocs.io, ReadTheDocs}")
13527 (license license:expat)))
13528
13529(define-public python-tweepy
13530 (package
13531 (name "python-tweepy")
13532 (version "4.16.0")
13533 (source
13534 (origin
13535 (method git-fetch)
13536 (uri
13537 (git-reference
13538 (url "https://github.com/tweepy/tweepy")
13539 (commit (string-append "v" version))))
13540 (file-name (git-file-name name version))
13541 (sha256
13542 (base32 "1k99qf0h1ykz0c56wdnlsyvd6zrcsrc4rl7rnlaxrpjppxjnpcpn"))))
13543 (build-system pyproject-build-system)
13544 (arguments
13545 ;; tests: 149 passed, 3 skipped, 1 warning
13546 (list #:test-backend #~'unittest
13547 #:test-flags #~(list "discover" "tests")))
13548 (native-inputs
13549 (list nss-certs-for-test
13550 python-flit-core
13551 python-urllib3-1.26
13552 python-vcrpy))
13553 (propagated-inputs
13554 (list python-aiohttp
13555 python-async-lru
13556 python-oauthlib
13557 python-requests
13558 python-requests-oauthlib))
13559 (home-page "https://www.tweepy.org/")
13560 (synopsis "Twitter library for Python")
13561 (description
13562 "This package provides @code{Tweepy}, an easy-to-use Python library for
13563accessing the Twitter API.")
13564 (license license:expat)))
13565
13566(define-public python-quart
13567 (package
13568 (name "python-quart")
13569 (version "0.20.0")
13570 (source
13571 (origin
13572 (method git-fetch)
13573 (uri (git-reference
13574 (url "https://github.com/pallets/quart")
13575 (commit version)))
13576 (file-name (git-file-name name version))
13577 (sha256
13578 (base32 "1gk6vg2cwpn70aald3m50xibjqjamgpz7an11h82w1fig6zmw2il"))))
13579 (build-system pyproject-build-system)
13580 (arguments
13581 (list
13582 #:test-flags
13583 ;; Not sure why test fails; related to a change in dependencies.
13584 #~(list "-k" "not test_cli_blueprints[cli_group2-args2]")))
13585 (native-inputs
13586 (list python-flit-core
13587 python-pytest
13588 python-pytest-asyncio))
13589 (propagated-inputs
13590 (list hypercorn
13591 python-aiofiles
13592 python-blinker
13593 python-click
13594 python-dotenv
13595 python-flask
13596 python-itsdangerous
13597 python-jinja2
13598 python-markupsafe
13599 python-toml
13600 python-werkzeug))
13601 (home-page "https://gitlab.com/pgjones/quart/")
13602 (synopsis "Python ASGI web microframework with the same API as Flask")
13603 (description
13604 "This package provides a Python ASGI web microframework with the same API
13605as Flask.")
13606 (license license:expat)))
13607
13608(define-public python-quart-trio
13609 (package
13610 (name "python-quart-trio")
13611 (version "0.12.0")
13612 (source
13613 (origin
13614 (method url-fetch)
13615 (uri (pypi-uri "quart_trio" version))
13616 (sha256
13617 (base32 "130r8hdk7xxjp380z1r3m28lw86q2a6g9rf0mgp9gs6hk04q9v02"))))
13618 (build-system pyproject-build-system)
13619 (arguments
13620 (list
13621 #:phases
13622 #~(modify-phases %standard-phases
13623 (add-after 'unpack 'remove-coverage-pytest-options
13624 (lambda _
13625 (substitute* "pyproject.toml"
13626 (("--no-cov-on-fail") "")))))))
13627 (native-inputs
13628 (list python-pdm-backend
13629 python-pytest
13630 python-pytest-sugar
13631 python-pytest-trio))
13632 (propagated-inputs
13633 (list hypercorn
13634 python-quart
13635 python-trio))
13636 (home-page "https://github.com/pgjones/quart-trio")
13637 (synopsis "Extension for Quart to support the Trio event loop")
13638 (description
13639 "This package provides a Quart extension to provide Trio support. This
13640is an alternative to using the asyncio event loop present in the Python
13641standard library and supported by default in Quart.")
13642 (license license:expat)))
13643
13644(define-public python-protego
13645 (package
13646 (name "python-protego")
13647 (version "0.4.0")
13648 (source
13649 (origin
13650 (method url-fetch)
13651 (uri (pypi-uri "protego" version))
13652 (sha256
13653 (base32 "1xn2aska8v94jqnbyv4ywczb55gaqvr298q8ybhs168knrifd9ck"))))
13654 (build-system pyproject-build-system)
13655 (native-inputs (list python-pytest python-setuptools python-wheel))
13656 (home-page "https://github.com/scrapy/protego")
13657 (synopsis "Python robots.txt parser with support for modern conventions")
13658 (description "Protego is a pure-Python @file{robots.txt} parser with support
13659for modern conventions.")
13660 (license license:bsd-3)))
13661
13662(define-public python-parsel
13663 (package
13664 (name "python-parsel")
13665 (version "1.10.0")
13666 (source
13667 (origin
13668 (method url-fetch)
13669 (uri (pypi-uri "parsel" version))
13670 (sha256
13671 (base32 "1050v20gzijfcaxpm1d4bvxqw2l7xhyf9pxrawrv8lczanwpvw8l"))))
13672 (build-system pyproject-build-system)
13673 (propagated-inputs
13674 (list python-cssselect
13675 python-jmespath
13676 python-lxml
13677 python-typing-extensions
13678 python-w3lib))
13679 (native-inputs
13680 (list python-psutil python-pytest python-setuptools python-wheel))
13681 (home-page "https://github.com/scrapy/parsel")
13682 (synopsis "Extract data from HTML and XML using XPath and CSS selectors")
13683 (description "Parsel is a library to extract and remove data from
13684HTML and XML using XPath and CSS selectors, optionally combined with
13685regular expressions.")
13686 (license license:bsd-3)))
13687
13688(define-public python-scrapy
13689 (package
13690 (name "python-scrapy")
13691 (version "2.13.3")
13692 (source
13693 (origin
13694 (method url-fetch)
13695 (uri (pypi-uri "scrapy" version))
13696 (sha256
13697 (base32 "0k90pni6vkj7axx3cji0b2x7yg4yfh5kh1csqiq9ssp42265h5xz"))))
13698 (build-system pyproject-build-system)
13699 (arguments
13700 (list #:test-flags
13701 #~(list "--numprocesses" (number->string (parallel-job-count))
13702 "-k" (string-join
13703 ;; ConnectionRefusedError: [Errno 111] Connection
13704 ;; refused
13705 (list "not test_append"
13706 "test_append_active_mode"
13707 "test_overwrite"
13708 "test_overwrite_active_mode"
13709 "test_persist"
13710 ;; AssertionError
13711 "test_start_deprecated_super")
13712 " and not ")
13713 ;; Skip documentation testing.
13714 "--ignore=docs")
13715 #:phases
13716 #~(modify-phases %standard-phases
13717 (add-before 'check 'prepare-test-environment
13718 (lambda _
13719 (setenv "HOME" "/tmp"))))))
13720 (propagated-inputs
13721 (list python-cryptography
13722 python-cssselect
13723 python-defusedxml
13724 python-itemadapter
13725 python-itemloaders
13726 python-lxml
13727 python-packaging
13728 python-parsel
13729 python-protego
13730 python-pydispatcher
13731 python-pyopenssl
13732 python-pypydispatcher
13733 python-queuelib
13734 python-service-identity
13735 python-tldextract
13736 python-twisted
13737 python-w3lib
13738 python-zope-interface))
13739 (native-inputs
13740 (list nss-certs-for-test
13741 python-hatchling
13742 python-pexpect
13743 python-pytest
13744 python-pytest-xdist
13745 python-setuptools
13746 python-sybil
13747 python-testfixtures))
13748 (home-page "https://scrapy.org")
13749 (synopsis "High-level Web crawling and Web scraping framework")
13750 (description "Scrapy is a fast high-level web crawling and web
13751scraping framework, used to crawl websites and extract structured data
13752from their pages. It can be used for a wide range of purposes, from data
13753mining to monitoring and automated testing.")
13754 (license license:bsd-3)))
13755
13756(define sdmx-test-data
13757 (let* ((commit "cd7899341b46e179e9f19b638478d70197e12c74")
13758 (revision "1")
13759 (name "sdmx-test-data")
13760 (version (git-version "0" revision commit)))
13761 (origin
13762 (method git-fetch)
13763 (uri (git-reference
13764 (url "https://github.com/khaeru/sdmx-test-data")
13765 (commit commit)))
13766 (file-name (git-file-name name version))
13767 (sha256
13768 (base32 "1n9y83raxxpgljbi0wjj27lhmyn19fnc2325a6cchwsa3b65ywv7")))))
13769
13770(define-public python-sdmx1
13771 (package
13772 (name "python-sdmx1")
13773 (version "2.26.0")
13774 (source
13775 (origin
13776 (method git-fetch)
13777 (uri (git-reference
13778 (url "https://github.com/khaeru/sdmx")
13779 (commit (string-append "v" version))))
13780 (file-name (git-file-name name version))
13781 (sha256
13782 (base32 "096c60pxzcw71bc9fj3hpjprrdiia365rqalapxx56g6g1vkgka9"))))
13783 (build-system pyproject-build-system)
13784 (arguments
13785 (list
13786 #:test-flags
13787 #~(list
13788 ;; 804 passed, 122 skipped, 28 deselected, 23 xfailed, 1 xpassed, 3 warnings
13789 ;; XXX: 'Version' object has no attribute 'pre'
13790 "--ignore=sdmx/tests/model/test_version.py"
13791 ;; Most of these tests require network connection.
13792 "--ignore=sdmx/tests/test_client.py"
13793 "--ignore=sdmx/tests/test_sources.py"
13794 "--ignore=sdmx/tests/test_docs.py"
13795 "--ignore=sdmx/tests/test_session.py"
13796 "--ignore=sdmx/tests/writer/test_xml.py"
13797 "--ignore=sdmx/tests/reader/test_xml_v21.py"
13798 "--deselect=sdmx/tests/convert/test_pandas.py::test_dataset_constraint"
13799 ;; Wrong python-flaky version
13800 "--deselect=sdmx/tests/format/test_xml.py::test_install_schemas_in_user_cache"
13801 "--deselect=sdmx/tests/format/test_xml.py::test_install_schemas"
13802 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_from_v2_1_samples"
13803 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_from_v3_0_samples"
13804 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_invalid_doc"
13805 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_invalid_message_type"
13806 "--deselect=sdmx/tests/format/test_xml.py::test_validate_xml_max_errors"
13807 ;; sqlite3.OperationalError
13808 "--deselect=sdmx/tests/util/test_requests.py::TestOfflineAdapter::test_raises")
13809 #:phases
13810 #~(modify-phases %standard-phases
13811 (add-after 'unpack 'fix-version
13812 (lambda _
13813 ;; versioningit needs git tags; patch pyproject.toml to use
13814 ;; static version and create _version.py directly.
13815 (substitute* "pyproject.toml"
13816 (("version.source = \"versioningit\"")
13817 "
13818[tool.hatch.version]
13819path = \"sdmx/_version.py\"")
13820 ((", \"versioningit\"")
13821 ""))
13822 (call-with-output-file "sdmx/_version.py"
13823 (lambda (port)
13824 (format port "__version__ = \"~a\"~%" #$version)))))
13825 (add-before 'check 'pre-check
13826 (lambda _
13827 (setenv "SDMX_TEST_DATA" #$sdmx-test-data)
13828 (setenv "HOME" (dirname (getcwd))))))))
13829 (propagated-inputs
13830 (list python-dateutil
13831 python-lxml
13832 python-pandas
13833 python-platformdirs
13834 python-requests))
13835 (native-inputs
13836 (list python-filelock
13837 python-flaky
13838 python-hatchling
13839 python-jinja2
13840 python-pyarrow
13841 python-pytest
13842 python-pytest-cov
13843 python-pytest-xdist
13844 python-requests-mock
13845 python-requests-cache
13846 python-responses))
13847 (home-page "https://sdmx1.readthedocs.io")
13848 (synopsis "Statistical Data and Metadata eXchange (SDMX) for Python")
13849 (description "This package provides a Python implementation of the
13850SDMX 2.1 and 3.0 standards for Statistical Data and Metadata eXchange.
13851These standards are developed and used by statistical agencies and
13852international organisations. This package can be used to:
13853@itemize
13854@item Explore and retrieve data available from SDMX-REST web services
13855operated by providers including the World Bank, International Monetary
13856Fund, Eurostat, OECD, and United Nations;
13857@item Read and write data and metadata in file formats including
13858SDMX-ML (XML), SDMX-JSON, and SDMX-CSV;
13859@item Convert data and metadata into @code{python-pandas} objects, for
13860use with the analysis, plotting, and other tools in the Python data
13861science ecosystem;
13862@item Apply the SDMX information model (IM) to structure and publish
13863your own data.
13864@end itemize")
13865 (license license:asl2.0)))
13866
13867(define-public python-jstyleson
13868 (let ((commit "8c47cc9e665b3b1744cccfaa7a650de5f3c575dd")
13869 (revision "0"))
13870 (package
13871 (name "python-jstyleson")
13872 (version (git-version "0.0.2" revision commit))
13873 (source
13874 (origin
13875 (method git-fetch)
13876 (uri (git-reference
13877 (url "https://github.com/linjackson78/jstyleson")
13878 (commit commit)))
13879 (file-name (git-file-name name version))
13880 (sha256
13881 (base32 "0r72mq7h294w5icpdbjd202w25kwr1dz7nh79f6m74xisc9cixia"))))
13882 (build-system pyproject-build-system)
13883 (native-inputs (list python-pytest python-setuptools))
13884 (home-page "https://github.com/linjackson78/jstyleson")
13885 (synopsis "JSON parser supporting js-style comments")
13886 (description
13887 "@code{jstyleson} is a Python library to parse JSON. Contrary to the
13888standard Python @code{json} library, it understands js-style comments.
13889Trailing comma is also supported.")
13890 (license license:expat))))
13891
13892(define-public python-html-text
13893 (package
13894 (name "python-html-text")
13895 (version "0.7.0")
13896 (source
13897 (origin
13898 (method url-fetch)
13899 (uri (pypi-uri "html_text" version))
13900 (sha256
13901 (base32 "10lixghras86av966ha9piqfl1iscf7nffg69dmz13sxjh371jrx"))))
13902 (build-system pyproject-build-system)
13903 (native-inputs
13904 (list python-pytest
13905 python-setuptools
13906 python-wheel))
13907 (propagated-inputs
13908 (list python-lxml
13909 python-lxml-html-clean))
13910 (home-page "https://github.com/TeamHG-Memex/html-text")
13911 (synopsis "Extract text from HTML")
13912 (description "HTML to Text is a Python library for extract text from HTML.
13913Contrary to other solution such as LXML or Beautiful Soup, the text extracted
13914with @code{html_text} does not contain elements such as JavaScript or inline
13915styles not normally visible to users. It also normalizes white space
13916characters in a smarter, more visually pleasing style.")
13917 (license license:expat)))
13918
13919(define-public python-mf2py
13920 (package
13921 (name "python-mf2py")
13922 (version "2.0.1")
13923 (source
13924 (origin
13925 (method git-fetch)
13926 (uri (git-reference
13927 (url "https://github.com/microformats/mf2py")
13928 (commit (string-append "v" version))))
13929 (file-name (git-file-name name version))
13930 (sha256
13931 (base32 "0ajnf0zrh1l48fvix9fbs1qvgbqhiljqnrm51rx44p7dbarpw4ls"))))
13932 (build-system pyproject-build-system)
13933 (native-inputs (list python-mock python-poetry-core python-pytest))
13934 (propagated-inputs
13935 (list python-beautifulsoup4 python-html5lib python-requests))
13936 (home-page "https://github.com/microformats/mf2py")
13937 (synopsis "Python Microformats2 parser")
13938 (description
13939 "This Python library provides a Microformats2 parser implementing the
13940full Microformats2 (mf2) specification, including backward compatibility with
13941Microformats1 (mf1).")
13942 (license license:expat)))
13943
13944(define-public python-extruct
13945 (package
13946 (name "python-extruct")
13947 (version "0.18.0")
13948 (source (origin
13949 (method git-fetch) ;for tests
13950 (uri (git-reference
13951 (url "https://github.com/scrapinghub/extruct")
13952 (commit (string-append "v" version))))
13953 (file-name (git-file-name name version))
13954 (sha256
13955 (base32
13956 "03qdldqrvmbsk6klq4nkxvvp3b2a0qqgqg115i3crbmialiaai45"))))
13957 (build-system pyproject-build-system)
13958 (arguments
13959 (list
13960 #:test-flags
13961 ;; 67 passed, 3 deselected
13962 ;; XXX: 3 tests fail with errors in assertion.
13963 #~(list "-k" (string-append
13964 "not test_microformat"
13965 " and not test_microformat"
13966 " and not test_umicroformat"))))
13967 (native-inputs
13968 (list python-pytest
13969 python-setuptools
13970 python-wheel))
13971 (propagated-inputs
13972 (list python-html-text
13973 python-jstyleson
13974 python-lxml
13975 python-mf2py
13976 python-pyrdfa3
13977 python-rdflib
13978 python-w3lib))
13979 (home-page "https://github.com/scrapinghub/extruct")
13980 (synopsis "Extract embedded metadata from HTML markup")
13981 (description "@code{extruct} is a Python library for extracting embedded
13982metadata from HTML markup. Currently, extruct supports:
13983@itemize
13984@item W3C's HTML Microdata
13985@item embedded JSON-LD
13986@item Microformat via mf2py
13987@item Facebook's Open Graph
13988@item (experimental) RDFa via rdflib
13989@item Dublin Core Metadata (DC-HTML-2003)
13990@end itemize")
13991 (license license:bsd-3)))
13992
13993(define-public python-wadllib
13994 (package
13995 (name "python-wadllib")
13996 (version "2.0.0")
13997 (source
13998 (origin
13999 (method url-fetch)
14000 (uri (pypi-uri "wadllib" version))
14001 (sha256
14002 (base32 "09vlfg4mzdmkqk6br7j8ms3116qk5am0nf4v1jkzwd7swhisznqy"))))
14003 (build-system pyproject-build-system)
14004 (arguments
14005 (list
14006 ;; XXX: Doctests are currently failing.
14007 #:tests? #f
14008 #:phases
14009 #~(modify-phases %standard-phases
14010 (replace 'check
14011 (lambda* (#:key tests? #:allow-other-keys)
14012 (if tests?
14013 (invoke "zope-testrunner" "--test-path=src")
14014 (format #t "test suite not run~%")))))))
14015 (native-inputs
14016 (list python-multipart python-setuptools python-zope-testrunner))
14017 (propagated-inputs (list python-lazr-uri))
14018 (home-page "https://launchpad.net/wadllib")
14019 (synopsis "Web Application Description Language (WADL) navigation library")
14020 (description "The @code{wadllib} Python library allows navigating HTTP
14021resources using Web Application Description Language (WADL) files as guides.")
14022 (license license:lgpl3)))
14023
14024(define-public python-zeep
14025 (package
14026 (name "python-zeep")
14027 (version "4.3.1")
14028 (source
14029 (origin
14030 (method url-fetch)
14031 (uri (pypi-uri "zeep" version))
14032 (sha256
14033 (base32 "0vm0asfak0pxfa9i753imcy72hk8gkxbj6pmw185b7dhw7lqalzl"))))
14034 (build-system pyproject-build-system)
14035 (arguments
14036 (list
14037 #:phases
14038 '(modify-phases %standard-phases
14039 (add-after 'unpack 'compatibility
14040 (lambda _
14041 ;; Relax requests-file requirement.
14042 (substitute* "pyproject.toml"
14043 (("\"requests-file.*\",")
14044 "\"requests-file\","))
14045 ;; httpx removed the "proxies" keyword. It's now either "mounts"
14046 ;; or "proxy". See https://github.com/encode/httpx/pull/2879.
14047 (substitute* "src/zeep/transports.py"
14048 (("proxies=") "proxy="))))
14049 ;; One test requires write access
14050 (add-before 'check 'set-HOME
14051 (lambda _ (setenv "HOME" (getcwd)))))))
14052 (propagated-inputs
14053 (list python-attrs
14054 python-isodate
14055 python-lxml
14056 python-platformdirs
14057 python-pytz
14058 python-requests
14059 python-requests-file
14060 python-requests-toolbelt))
14061 (native-inputs
14062 (list nss-certs-for-test
14063 python-freezegun
14064 python-pretend
14065 python-pytest
14066 python-pytest-asyncio
14067 python-pytest-httpx
14068 python-requests-mock
14069 python-setuptools
14070 python-wheel))
14071 (home-page "https://docs.python-zeep.org/en/stable/")
14072 (synopsis "Python SOAP client based on lxml / requests")
14073 (description "Zeep is a Python SOAP client. Highlights:
14074
14075@itemize
14076@item Build on top of @code{lxml} and @code{requests}.
14077@item Support for Soap 1.1, Soap 1.2 and HTTP bindings.
14078@item Support for WS-Addressing headers.
14079@item Support for WSSE (UserNameToken / x.509 signing).
14080@item Support for @code{asyncio} via @code{httpx}.
14081@item Experimental support for XOP messages.
14082@end itemize")
14083 (license license:expat)))
14084
14085(define-public python-http-client
14086 (package
14087 (name "python-http-client")
14088 (version "3.3.7")
14089 (source
14090 (origin
14091 (method git-fetch)
14092 (uri (git-reference
14093 (url "https://github.com/sendgrid/python-http-client")
14094 (commit version)))
14095 (file-name (git-file-name name version))
14096 (sha256
14097 (base32 "0z0ziw3f4zw5fj4spiwhhs2x8qs3i5999ry2p6a5sc8b1lkkj2zi"))))
14098 (build-system pyproject-build-system)
14099 (arguments
14100 (list
14101 #:test-backend #~'unittest
14102 #:phases
14103 #~(modify-phases %standard-phases
14104 (add-after 'unpack 'fix-tests
14105 (lambda _
14106 ;; The test expects the copyright to be updated each year.
14107 (substitute* "tests/test_daterange.py"
14108 (("time\\.strftime\\(\"%Y\"\\)") "2022")))))))
14109 (native-inputs
14110 (list python-setuptools))
14111 (home-page "https://github.com/sendgrid/python-http-client")
14112 (synopsis "HTTP REST client for Python")
14113 (description
14114 "This package provides access to any RESTful or RESTful-like API.")
14115 (license license:expat)))
14116
14117(define-public python-sendgrid
14118 (package
14119 (name "python-sendgrid")
14120 (version "6.9.7")
14121 (source
14122 (origin
14123 (method git-fetch)
14124 (uri (git-reference
14125 (url "https://github.com/sendgrid/sendgrid-python")
14126 (commit version)))
14127 (file-name (git-file-name name version))
14128 (sha256
14129 (base32 "0kvp4gm3bpcsj2mkv05pgvlcv1jlsfhcljcv61wz5kq9d273h7rg"))))
14130 (build-system pyproject-build-system)
14131 (arguments
14132 (list
14133 #:test-flags
14134 #~(list "--ignore=test/integ"
14135 ;; Network access is required.
14136 "--ignore=live_test.py")))
14137 (native-inputs
14138 (list python-pytest
14139 python-setuptools))
14140 (propagated-inputs
14141 (list python-cryptography
14142 python-http-client
14143 python-flask
14144 python-pyyaml
14145 python-six ;hard dependency
14146 python-starkbank-ecdsa
14147 python-werkzeug))
14148 (home-page "https://github.com/sendgrid/sendgrid-python/")
14149 (synopsis "SendGrid API library for Python")
14150 (description
14151 "The @code{sendgrid} Python library allows access to the
14152SendGrid Web API v3. Version 3+ of the library provides full support for all
14153SendGrid Web API v3 endpoints, including the new v3 /mail/send.")
14154 (license license:expat)))
14155
14156(define-public python-sse-starlette
14157 (package
14158 (name "python-sse-starlette")
14159 (version "3.4.4")
14160 (source
14161 (origin
14162 (method git-fetch)
14163 (uri (git-reference
14164 (url "https://github.com/sysid/sse-starlette")
14165 (commit (string-append "v" version))))
14166 (file-name (git-file-name name version))
14167 (sha256
14168 (base32 "0jzy3mjszl7fr524cggyf8k97x6jpykvmxldmm2ckmrqjpyj8jmz"))))
14169 (build-system pyproject-build-system)
14170 (arguments
14171 (list
14172 #:test-flags
14173 #~(list
14174 ;; XXX: Server fails to start.
14175 "--ignore=tests/experimentation/test_multiple_consumers_asyncio.py"
14176 "--ignore=tests/experimentation/test_multiple_consumers_threads.py"
14177 ;; XXX: Missing test dependency - testcontainers, Docker is required.
14178 "--ignore=tests/integration/test_multiple_consumers.py")))
14179 (native-inputs
14180 (list python-asgi-lifespan
14181 python-httpx
14182 python-portend
14183 python-pytest
14184 python-pytest-asyncio
14185 python-psutil
14186 python-setuptools
14187 python-tenacity
14188 python-uvicorn))
14189 (propagated-inputs
14190 (list python-anyio
14191 python-starlette))
14192 (home-page "https://github.com/sysid/sse-starlette")
14193 (synopsis "SSE plugin for Starlette")
14194 (description
14195 "This package provides SSE plugin for Starlette.")
14196 (license license:bsd-3)))
14197
14198(define-public python-sseclient-py
14199 (package
14200 (name "python-sseclient-py")
14201 (version "1.9.0")
14202 (source
14203 (origin
14204 (method git-fetch)
14205 (uri (git-reference
14206 (url "https://github.com/mpetazzoni/sseclient")
14207 (commit (string-append "sseclient-py-" version))))
14208 (file-name (git-file-name name version))
14209 (sha256
14210 (base32 "1yi2v8z89mygsr1vzyc4r3j7flr3jrh6a6kzqfdh86i5a5j5v280"))))
14211 (build-system pyproject-build-system)
14212 (native-inputs (list python-hatchling python-pytest))
14213 (arguments
14214 (list
14215 #:test-backend #~'unittest
14216 #:test-flags #~'("discover" "--verbose" "tests")))
14217 (home-page "https://github.com/mpetazzoni/sseclient")
14218 (synopsis "Pure-Python Server Side Events (SSE) client")
14219 (description
14220 "This package provides a Python client for SSE event sources that
14221seamlessly integrates with @code{urllib3} and @code{requests}.")
14222 (license license:asl2.0)))
14223
14224(define-public python-starlette
14225 (package
14226 (name "python-starlette")
14227 (version "0.49.1")
14228 (source (origin
14229 (method git-fetch)
14230 (uri (git-reference
14231 (url "https://github.com/encode/starlette")
14232 (commit version)))
14233 (file-name (git-file-name name version))
14234 (sha256
14235 (base32
14236 "0w9cyaxpc2p99hqrfw164iypacx3i1gsmn2z0xywgd21alva82ji"))))
14237 (build-system pyproject-build-system)
14238 (propagated-inputs (list python-anyio
14239 python-typing-extensions
14240 ;; [all] extra dependencies:
14241 python-itsdangerous
14242 python-jinja2
14243 python-multipart
14244 python-pyyaml
14245 python-requests))
14246 (native-inputs (list python-hatchling
14247 python-httpx
14248 python-pytest
14249 python-typing-extensions))
14250 (home-page "https://github.com/encode/starlette")
14251 (synopsis "Little ASGI library")
14252 (description
14253 "Starlette is a lightweight ASGI (Asynchronous Server Gateway
14254Interface) framework/toolkit for building async web services in Python.")
14255 (license license:bsd-3)))
14256
14257(define-public python-starsessions
14258 (package
14259 (name "python-starsessions")
14260 (version "1.3.0")
14261 (source (origin
14262 (method git-fetch)
14263 (uri (git-reference
14264 (url "https://github.com/alex-oleshkevich/starsessions")
14265 (commit (string-append "v" version))))
14266 (file-name (git-file-name name version))
14267 (sha256
14268 (base32
14269 "00dkdhp22vfmcn0w4y7f2ii8m1xj5i7409x58g3l8lvk6v5ng2nf"))))
14270 (build-system pyproject-build-system)
14271 (arguments
14272 (list
14273 #:test-flags
14274 ;; These tests require a running redis server
14275 '(list "--ignore=tests/backends/test_redis.py"
14276 ;; XXX: this failure indicates a real compatibility problem, but
14277 ;; it seems restricted to the tests only.
14278 ;; AttributeError: 'Cookies' object has no attribute
14279 ;; 'clear_session_cookies'
14280 "-k"
14281 (string-append "not test_session_clears_on_tab_close"
14282 ;; This fails because an error is not raised.
14283 " and not test_session_wants_secret_key"))
14284 #:phases
14285 '(modify-phases %standard-phases
14286 (add-after 'unpack 'compatibilitiy
14287 (lambda _
14288 ;; aioredis has been renamed
14289 (substitute* "starsessions/backends/redis.py"
14290 (("aioredis") "redis")))))))
14291 (propagated-inputs
14292 (list python-redis
14293 python-itsdangerous
14294 python-starlette))
14295 (native-inputs
14296 (list python-httpx
14297 python-poetry-core
14298 python-pytest
14299 python-pytest-asyncio
14300 python-requests))
14301 (home-page "https://github.com/alex-oleshkevich/starsessions")
14302 (synopsis "Pluggable session support for Starlette and FastAPI")
14303 (description
14304 "This package adds pluggable session backends and ships default
14305@code{InMemoryBackend} and @code{CookieBackend} implementations for Starlette
14306and FastAPI.")
14307 (license license:expat)))
14308
14309(define-public python-whereismyip
14310 (package
14311 (name "python-whereismyip")
14312 (version "0.1.0")
14313 (source
14314 (origin
14315 (method url-fetch)
14316 (uri (pypi-uri "whereismyip" version))
14317 (sha256
14318 (base32 "0psrlvax8249ccs2rvgdygpckzz22vxjcyzr2pql06d48k61gk54"))))
14319 (build-system pyproject-build-system)
14320 (arguments (list #:tests? #false)) ; There are no tests.
14321 (native-inputs (list python-setuptools))
14322 (home-page "https://pypi.org/project/whereismyip/")
14323 (synopsis "Queries multiple geolocation services until one succeeds")
14324 (description
14325 "This package provides a simple Python library that queries multiple geolocation
14326services until one succeeds.")
14327 (license license:gpl3)))
14328
14329(define-public python-whitenoise
14330 (package
14331 (name "python-whitenoise")
14332 (version "6.9.0")
14333 (source (origin
14334 (method git-fetch) ; PyPI missing test fails
14335 (uri (git-reference
14336 (url "https://github.com/evansd/whitenoise")
14337 (commit version)))
14338 (file-name (git-file-name name version))
14339 (sha256
14340 (base32
14341 "0y00a59ww9f631m51d5db5xcnbckzcwfm64wabp5vamn7l1kqqsj"))))
14342 (build-system pyproject-build-system)
14343 (arguments
14344 (list
14345 #:test-flags #~(list "-k" "not test_modified"))) ; HTTP 304 error
14346 (native-inputs (list python-brotli
14347 python-django
14348 python-requests
14349 python-pytest
14350 python-setuptools
14351 python-wheel))
14352 (home-page "https://github.com/evansd/whitenoise")
14353 (synopsis "Static file serving for WSGI applications")
14354 (description
14355 "WhiteNoise allows your web app to serve its own static files, making it
14356a self-contained unit that can be deployed anywhere without relying on nginx,
14357Amazon S3 or any other external service.")
14358 (license license:expat)))
14359
14360(define-public python-suds
14361 (package
14362 (name "python-suds")
14363 (version "1.2.0")
14364 (source
14365 (origin
14366 (method url-fetch)
14367 (uri (pypi-uri "suds" version))
14368 (sha256
14369 (base32 "1byyg7b2ixpr8hc849a6dd0qn5daxqawz6lb3php8lrmsb1n5cc3"))))
14370 (build-system pyproject-build-system)
14371 (arguments
14372 (list #:phases
14373 #~(modify-phases %standard-phases
14374 ;; XXX: chirp expects suds instead of suds_community
14375 (add-after 'install 'add-custom-dist-info
14376 (lambda _
14377 (for-each
14378 (lambda (dir)
14379 (with-directory-excursion (dirname dir)
14380 (symlink
14381 (basename dir)
14382 (string-append "suds-" #$version ".dist-info"))))
14383 (find-files #$output
14384 (lambda (file stat)
14385 (string-suffix? ".dist-info" file))
14386 #:directories? #t)))))))
14387 (native-inputs
14388 (list python-pytest
14389 python-setuptools
14390 python-wheel))
14391 (home-page "https://github.com/suds-community/suds")
14392 (synopsis "Lightweight SOAP python client for consuming Web Services")
14393 (description
14394 "Suds is a lightweight SOAP-based web service client for Python.")
14395 (license license:lgpl3+)))
14396
14397(define-public python-fastapi
14398 (package
14399 (name "python-fastapi")
14400 (version "0.137.1")
14401 (source
14402 (origin
14403 (method url-fetch)
14404 (uri (pypi-uri "fastapi" version))
14405 (sha256
14406 (base32 "072lzn48rwf9rjix4nqb5ym6hnaj2fb3jxclilym7n9h89q608w2"))))
14407 (build-system pyproject-build-system)
14408 (arguments
14409 (list
14410 ;; tests: 1126 passed, 12 skipped, 2 deselected
14411 #:test-backend #~'custom
14412 #:test-flags
14413 #~(list
14414 ;; Cannot import 'scripts' with just 'pytest'.
14415 "-m" "pytest"
14416 ;; Needs strawberry and sqlmodel.
14417 "--ignore=tests/test_tutorial/"
14418 ;; Fails due to failure to capture stdout.
14419 "--ignore=tests/test_fastapi_cli.py")))
14420 (native-inputs
14421 (list python-anyio
14422 python-dirty-equals
14423 python-flask
14424 python-inline-snapshot
14425 python-pdm-backend
14426 ;; python-pwdlib
14427 python-pyjwt
14428 python-pytest
14429 python-pytest-timeout
14430 python-pytest-xdist
14431 python-sqlalchemy-2
14432 ;; python-sqlmodel
14433 python-types-orjson
14434 python-types-ujson))
14435 (propagated-inputs
14436 (list python-starlette
14437 python-pydantic
14438 python-typing-extensions
14439 python-annotated-doc
14440 ;; [optional]
14441 python-email-validator
14442 python-fastapi-cli
14443 ;; python-fastar
14444 python-httpx
14445 python-itsdangerous
14446 python-jinja2
14447 python-multipart
14448 python-orjson
14449 python-pydantic
14450 python-pydantic-extra-types
14451 python-pydantic-settings
14452 python-pyyaml
14453 python-ujson
14454 python-uvicorn))
14455 (home-page "https://github.com/fastapi/fastapi")
14456 (synopsis "Web framework based on type hints")
14457 (description "FastAPI provides a web API framework based on pydantic and
14458starlette.")
14459 (license license:expat)))
14460
14461(define-public python-fastapi-csrf-protect
14462 (package
14463 (name "python-fastapi-csrf-protect")
14464 (version "0.3.3")
14465 (source (origin
14466 (method git-fetch)
14467 (uri (git-reference
14468 (url "https://github.com/aekasitt/fastapi-csrf-protect")
14469 (commit (string-append "v" version))))
14470 (file-name (git-file-name name version))
14471 (sha256
14472 (base32
14473 "181yawlbpd4709mamsradr9zj0jrbp4qvwfvmggs80pd36iiwyy8"))))
14474 (build-system pyproject-build-system)
14475 (propagated-inputs
14476 (list python-fastapi python-itsdangerous
14477 python-pydantic))
14478 (native-inputs
14479 (list python-poetry-core
14480 python-pytest))
14481 (home-page "https://github.com/aekasitt/fastapi-csrf-protect")
14482 (synopsis "Cross-Site Request Forgery (XSRF) protection")
14483 (description
14484 "This package provides a stateless implementation of @dfn{Cross-Site
14485Request Forgery} (XSRF) Protection by using the Double Submit Cookie mitigation
14486pattern.")
14487 (license license:expat)))
14488
14489(define-public python-fastapi-pagination-minimal
14490 (package
14491 (name "python-fastapi-pagination-minimal")
14492 (version "0.15.15")
14493 (source (origin
14494 (method git-fetch)
14495 (uri (git-reference
14496 (url "https://github.com/uriyyo/fastapi-pagination")
14497 (commit version)))
14498 (file-name (git-file-name name version))
14499 (sha256
14500 (base32
14501 "0jfmk5m2yrki9rw9izci2fxamam45mk36gl77rwbd5hnngkqbahv"))))
14502 (build-system pyproject-build-system)
14503 ;; We run the tests in python-fastapi-pagination only.
14504 (arguments (list #:tests? #false))
14505 ;; These are the only required dependencies,
14506 ;; please add all optional dependencies to the
14507 ;; full python-fastapi-pagination below.
14508 (propagated-inputs (list python-fastapi python-pydantic))
14509 (native-inputs (list python-hatchling))
14510 (home-page "https://github.com/uriyyo/fastapi-pagination")
14511 (synopsis "FastAPI pagination library")
14512 (description "@code{fastapi-pagination} is a Python library designed to
14513simplify pagination in FastAPI applications. It provides a set of utility
14514functions and data models to help you paginate your database queries and
14515return paginated responses to your clients.")
14516 (license license:expat)))
14517
14518(define-public python-fastapi-pagination
14519 (package
14520 (inherit python-fastapi-pagination-minimal)
14521 (name "python-fastapi-pagination")
14522 (arguments
14523 (list
14524 #:test-flags
14525 #~(list "--asyncio-mode=auto"
14526 "--ignore=tests/ext"
14527 ;; Netwok access is required.
14528 "-k" (string-join
14529 (list "not test_optional_params[postgres-default]"
14530 "test_optional_params[postgres-limit-offset]"
14531 "test_optional_params[sqlite-default]"
14532 "test_optional_params[sqlite-limit-offset]")
14533 " and not "))
14534 #:phases
14535 '(modify-phases %standard-phases
14536 (add-after 'unpack 'patch-tests
14537 (lambda _
14538 ;; We don't have a package for python-cassandra or motor, but we
14539 ;; also don't need them as we only run the unit tests anyway.
14540 (substitute* "tests/conftest.py"
14541 (("from cassandra.*") "")
14542 (("from motor.*") "")))))))
14543 (propagated-inputs
14544 (modify-inputs (package-propagated-inputs
14545 python-fastapi-pagination-minimal)
14546 (prepend python-asyncpg
14547 python-databases
14548 python-django
14549 python-fastapi
14550 python-pydantic
14551 python-sqlalchemy
14552 (package
14553 (inherit python-tortoise-orm)
14554 (arguments
14555 (substitute-keyword-arguments (package-arguments
14556 python-tortoise-orm)
14557 ((#:phases phases '%standard-phases)
14558 `(modify-phases ,phases
14559 (delete 'sanity-check)))))
14560 (propagated-inputs
14561 (modify-inputs propagated-inputs
14562 (replace "python-aiosqlite" python-aiosqlite)))))))
14563 (native-inputs
14564 (list python-aiosqlite
14565 python-asgi-lifespan
14566 python-asyncpg
14567 python-dirty-equals
14568 python-faker
14569 python-hatchling
14570 python-httpx
14571 python-pytest
14572 python-pytest-asyncio
14573 python-sqlalchemy
14574 python-typing-extensions))
14575 (description
14576 (string-append (package-description python-fastapi-pagination-minimal)
14577 "
14578
14579This package, as opposed to @code{python-fastapi-pagination-minimal}, depends on
14580all available optional dependencies supported by mainline
14581@code{fastapi-pagination}."))))
14582
14583(define-public python-fastapi-cli
14584 (package
14585 (name "python-fastapi-cli")
14586 (version "0.0.7")
14587 (source
14588 (origin
14589 (method url-fetch)
14590 (uri (pypi-uri "fastapi_cli" version))
14591 (sha256
14592 (base32 "0pk0ldmymc25ys4v6mslzd5vsjh9r69hfylh2ljl29pmarcvdcq2"))))
14593 (build-system pyproject-build-system)
14594 ;; Tests require fastapi, which depends on this package.
14595 (arguments (list #:tests? #false))
14596 (propagated-inputs (list python-rich-toolkit python-typer python-uvicorn))
14597 (native-inputs
14598 (list python-inline-snapshot python-pdm-backend python-pytest))
14599 (home-page "https://pypi.org/project/fastapi-cli/")
14600 (synopsis
14601 "Run and manage FastAPI apps from the command line with FastAPI CLI")
14602 (description
14603 "FastAPI CLI is a command line program fastapi that you can use to serve
14604your FastAPI app, manage your FastAPI project, and more.")
14605 (license license:expat)))
14606
14607(define-public python-pyactiveresource
14608 (package
14609 (name "python-pyactiveresource")
14610 (version "2.2.2")
14611 (source
14612 (origin
14613 (method git-fetch)
14614 (uri (git-reference
14615 (url "https://github.com/Shopify/pyactiveresource")
14616 (commit (string-append "v" version))))
14617 (file-name (git-file-name name version))
14618 (sha256
14619 (base32 "03pw6fwqjn09fbd6xmng0arlz75pp6ykw25c8d1snp4bxlzkrwqf"))))
14620 (build-system pyproject-build-system)
14621 ;; XXX: The package is fine, but the tests started failing on [email protected].
14622 ;; The package is not actively maintained, consider removing it once leaf.
14623 (arguments (list #:tests? #f))
14624 (native-inputs
14625 (list python-dateutil python-pytest python-pyyaml python-setuptools))
14626 (propagated-inputs (list python-six))
14627 (home-page "https://github.com/Shopify/pyactiveresource/")
14628 (synopsis "ActiveResource for Python")
14629 (description
14630 "This package provides a Python port of the ActiveResource project.
14631
14632Active Resource attempts to provide a coherent wrapper object-relational
14633mapping for REST web services. It follows the same philosophy as Active
14634Record, in that one of its prime aims is to reduce the amount of code needed
14635to map to these resources. This is made possible by relying on a number of
14636code- and protocol-based conventions that make it easy for Active Resource to
14637infer complex relations and structures.")
14638 (license license:expat)))
14639
14640(define-public python-shopifyapi
14641 (package
14642 (name "python-shopifyapi")
14643 (version "12.7.0")
14644 (source
14645 (origin
14646 (method git-fetch)
14647 (uri (git-reference
14648 (url "https://github.com/Shopify/shopify_python_api")
14649 (commit (string-append "v" version))))
14650 (file-name (git-file-name name version))
14651 (sha256
14652 (base32 "11zjm3aspb247wwlmfmq6wwk6lv3xyv3lqnd78sczjg9anba3779"))))
14653 (build-system pyproject-build-system)
14654 (arguments
14655 (list
14656 #:test-flags
14657 #~'("-k"
14658 ;; Disable a failing test.
14659 "not test_raises_if_aud_doesnt_match_api_key")))
14660 (native-inputs (list python-mock python-pytest python-setuptools))
14661 (propagated-inputs (list python-pyactiveresource python-pyjwt
14662 python-pyyaml python-six))
14663 (home-page "https://github.com/Shopify/shopify_python_api")
14664 (synopsis "Shopify API for Python")
14665 (description
14666 "This package provides the Shopify API for Python.
14667
14668The ShopifyAPI library allows Python developers to programmatically access the
14669admin section of stores using an ActiveResource-like interface similar the
14670ruby Shopify API gem. The library makes HTTP requests to Shopify in order to
14671list, create, update, or delete resources (e.g. Order, Product, Collection).")
14672 (license license:expat)))
14673
14674(define-public python-pybadges
14675 (package
14676 (name "python-pybadges")
14677 (version "3.0.1")
14678 (source (origin
14679 (method git-fetch)
14680 (uri (git-reference
14681 (url "https://github.com/google/pybadges")
14682 (commit version)))
14683 (file-name (git-file-name name version))
14684 (sha256
14685 "1zgb9idz7m3mzf8wvik0gwmyrxp753axqjv2pab326cr5myj1s4b")))
14686 (build-system pyproject-build-system)
14687 (arguments
14688 (list
14689 #:test-flags
14690 #~'("-k"
14691 ;; Disable network dependent tests.
14692 "not test_changes and not test_not_image_url and not test_http_url")))
14693 (propagated-inputs (list python-jinja2 python-requests python-setuptools))
14694 (native-inputs (list python-flask
14695 python-fonttools
14696 python-pillow
14697 python-pytest
14698 python-wheel
14699 python-xmldiff))
14700 (home-page "https://github.com/google/pybadges")
14701 (synopsis "Generate Github-style badges on the command-line")
14702 (description
14703 "This package provides @code{python-pybadges}: a library and command-line
14704tool for generating Github-style badges as SVG images.")
14705 (license license:asl2.0)))
14706
14707(define-public python-grid5000
14708 (package
14709 (name "python-grid5000")
14710 (version "1.2.4")
14711 (source (origin
14712 (method git-fetch)
14713 (uri (git-reference
14714 (url "https://gitlab.inria.fr/msimonin/python-grid5000")
14715 (commit (string-append "v" version))))
14716 (file-name (git-file-name name version))
14717 (sha256
14718 "0px5dr6kn7i5dyy4g42vqap1zpkc4hdvg7prrxdkkl57lfhz5w61")))
14719 (build-system pyproject-build-system)
14720 (arguments
14721 (list #:tests? #f)) ; No tests.
14722 (native-inputs (list python-setuptools))
14723 (propagated-inputs (list python-requests python-ipython python-pyyaml))
14724 (home-page "https://pypi.org/project/python-grid5000/")
14725 (synopsis "Grid5000 python client")
14726 (description
14727 "python-grid5000 is a python package wrapping the Grid5000 REST API.
14728You can use it as a library in your python project or you can explore the
14729Grid5000 resources interactively using the embedded shell.")
14730 (license license:gpl3+)))
14731
14732(define-public python-enoslib
14733 (package
14734 (name "python-enoslib")
14735 (version "8.0.1")
14736 (source
14737 (origin
14738 (method git-fetch)
14739 (uri (git-reference
14740 (url "https://gitlab.inria.fr/discovery/enoslib")
14741 (commit (string-append "v" version))))
14742 (file-name (git-file-name name version))
14743 (sha256 "0vs6b0bnlv95mzv0rjbxqwrhzkgjkn91gqipgwdf7y4ffpz8nybg")))
14744 (arguments
14745 (list
14746 #:test-flags
14747 #~(list "enoslib/tests/unit"
14748 "--ignore" "enoslib/tests/unit/infra/test_utils.py"
14749 "--ignore-glob" "enoslib/tests/unit/infra/enos_iotlab/*")
14750 #:phases
14751 #~(modify-phases %standard-phases
14752 (add-before 'check 'pre-check
14753 (lambda* (#:key tests? #:allow-other-keys)
14754 (when tests?
14755 ;; Otherwise Ansible fails to create its config directory.
14756 (setenv "HOME" "/tmp"))))
14757 ;; Disable the sanity check, which fails with the following error:
14758 ;;
14759 ;; ContextualVersionConflict(rich 12.4.1
14760 ;; (/gnu/store/...-python-rich-12.4.1/lib/python3.9/site-packages),
14761 ;; Requirement.parse('rich[jupyter]~=12.0.0'), {'enoslib'})
14762 ;;
14763 ;; The optional jupyter dependency of rich isn't critical for
14764 ;; EnOSlib to work
14765 (delete 'sanity-check))))
14766 (build-system pyproject-build-system)
14767 (native-inputs
14768 (list python-ddt
14769 python-freezegun
14770 python-pytest
14771 python-setuptools
14772 python-wheel))
14773 (propagated-inputs
14774 (list ansible
14775 python-cryptography
14776 python-grid5000
14777 python-jsonschema
14778 python-netaddr
14779 python-packaging
14780 python-requests
14781 python-rich
14782 python-sshtunnel
14783 python-pytz))
14784 (home-page "https://discovery.gitlabpages.inria.fr/enoslib/index.html")
14785 (synopsis "Deploy distributed testbeds on a variety of platforms")
14786 (description
14787 "EnOSlib is a library to build experimental frameworks on various
14788scientific testbeds. It lets you deploy networks of machines on actual
14789hardware on Grid'5000 or via OpenStack, to Vagrant, Chameleon, and more.")
14790 (license license:gpl3+)))
14791
14792(define-public python-pynetbox
14793 (package
14794 (name "python-pynetbox")
14795 (version "7.4.1")
14796 (source (origin
14797 (method url-fetch)
14798 (uri (pypi-uri "pynetbox" version))
14799 (sha256
14800 (base32
14801 "1hq0mqykwdsmcrj61fxxzdkpc7wnld4grhkcxy560ym79jbbb0iz"))))
14802 (build-system pyproject-build-system)
14803 (arguments
14804 (list
14805 #:test-flags
14806 ;; Integration tests depend on docker.
14807 '(list "--ignore=tests/integration")))
14808 (propagated-inputs (list python-packaging python-requests))
14809 (native-inputs
14810 (list python-pytest
14811 python-setuptools
14812 python-setuptools-scm
14813 python-wheel))
14814 (home-page "https://github.com/netbox-community/pynetbox")
14815 (synopsis "NetBox API client library")
14816 (description "Python module to query and edit data stored in a
14817@url{https://netbox.dev,NetBox} instance.")
14818 (license license:asl2.0)))
14819
14820(define-public python-waybackpack
14821 (package
14822 (name "python-waybackpack")
14823 (version "0.6.4")
14824 (source
14825 (origin
14826 (method url-fetch)
14827 (uri (pypi-uri "waybackpack" version))
14828 (sha256
14829 (base32 "16lcr2hv7gmp199fh3psrnv68j20pfxria8v6gchrpl1jqx9f923"))))
14830 (build-system pyproject-build-system)
14831 (arguments
14832 (list #:tests? #f)) ; would require network (and SSL certificates)
14833 (propagated-inputs (list python-requests))
14834 (native-inputs (list python-pytest python-setuptools python-wheel))
14835 (home-page "https://github.com/jsvine/waybackpack")
14836 (synopsis
14837 "Download the entire Wayback Machine archive for a given URL")
14838 (description
14839 "This package provides a library and a command-line tool that lets
14840you download the entire Wayback Machine archive for a given URL.")
14841 (license license:expat)))
14842
14843(define-public python-xyzservices
14844 (package
14845 (name "python-xyzservices")
14846 (version "2025.4.0")
14847 (source
14848 (origin
14849 (method url-fetch)
14850 (uri (pypi-uri "xyzservices" version))
14851 (sha256
14852 (base32 "1n096zg9bd4n6w6axcm16m9sxdkc6qy1mipva0scbyj86rqn9rvg"))))
14853 (build-system pyproject-build-system)
14854 (arguments
14855 (list
14856 #:test-flags #~(list "-m" "not request")))
14857 (native-inputs
14858 (list python-pytest
14859 python-mercantile
14860 python-requests
14861 python-setuptools
14862 python-setuptools-scm))
14863 (home-page "https://github.com/geopandas/xyzservices")
14864 (synopsis "Source of XYZ tiles providers")
14865 (description "@code{xyzservices} is a lightweight library providing a
14866repository of available XYZ services offering raster basemap tiles. The
14867repository is provided via Python API and as a compressed JSON file.")
14868 (license license:bsd-3)))
14869
14870(define-public s3cmd
14871 (package
14872 (name "s3cmd")
14873 (version "2.4.0")
14874 (source
14875 (origin
14876 (method git-fetch)
14877 (uri (git-reference
14878 (url "https://github.com/s3tools/s3cmd")
14879 (commit (string-append "v" version))))
14880 (file-name (git-file-name name version))
14881 (sha256
14882 (base32 "168c49d1v8r7azv66zz0w07jalf434c2jpg2xzads5jnxzmiy73k"))))
14883 (build-system pyproject-build-system)
14884 (arguments
14885 (list
14886 #:tests? #f ; XXX: Tests require network access.
14887 #:phases
14888 #~(modify-phases %standard-phases
14889 (add-after 'unpack 'hide-wrapping
14890 (lambda _
14891 (substitute* "S3/MultiPart.py"
14892 (("sys\\.argv\\[0\\]")
14893 "\"s3cmd\""))
14894 (substitute* "s3cmd"
14895 (("optparser\\.get_prog_name\\(\\)")
14896 "\"s3cmd\"")))))))
14897 (native-inputs (list python-setuptools))
14898 (inputs (list python-dateutil python-magic))
14899 (home-page "https://s3tools.org/s3cmd")
14900 (synopsis "Command line tool for S3-compatible storage services")
14901 (description
14902 "S3cmd is a command line tool for uploading, retrieving and managing data
14903in storage services that are compatible with the Amazon Simple Storage
14904Service (S3) protocol, including S3 itself. It supports rsync-like backup,
14905GnuPG encryption, and more. It also supports management of Amazon's
14906CloudFront content delivery network.")
14907 (license license:gpl2+)))