projects/guix·blob mpd-fix-groups · refs

13398 lines · 483.9 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 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 Artur Wroblewski <[email protected]>
88;;; Copyright © 2025 Allan Adair <[email protected]>
89;;;
90;;; This file is part of GNU Guix.
91;;;
92;;; GNU Guix is free software; you can redistribute it and/or modify it
93;;; under the terms of the GNU General Public License as published by
94;;; the Free Software Foundation; either version 3 of the License, or (at
95;;; your option) any later version.
96;;;
97;;; GNU Guix is distributed in the hope that it will be useful, but
98;;; WITHOUT ANY WARRANTY; without even the implied warranty of
99;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
100;;; GNU General Public License for more details.
101;;;
102;;; You should have received a copy of the GNU General Public License
103;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
104
105(define-module (gnu packages python-web)
106 #:use-module ((guix licenses) #:prefix license:)
107 #:use-module (guix build-system cargo)
108 #:use-module (guix build-system copy)
109 #:use-module (guix build-system pyproject)
110 #:use-module (guix build-system python)
111 #:use-module (guix deprecation)
112 #:use-module (guix download)
113 #:use-module (guix gexp)
114 #:use-module (guix git-download)
115 #:use-module (guix packages)
116 #:use-module (guix utils)
117 #:use-module (gnu packages admin)
118 #:use-module (gnu packages base)
119 #:use-module (gnu packages bash)
120 #:use-module (gnu packages nss)
121 #:use-module (gnu packages check)
122 #:use-module (gnu packages cmake)
123 #:use-module (gnu packages compression)
124 #:use-module (gnu packages curl)
125 #:use-module (gnu packages databases)
126 #:use-module (gnu packages django)
127 #:use-module (gnu packages freedesktop)
128 #:use-module (gnu packages glib)
129 #:use-module (gnu packages gnupg)
130 #:use-module (gnu packages graphviz)
131 #:use-module (gnu packages groff)
132 #:use-module (gnu packages iso-codes)
133 #:use-module (gnu packages libevent)
134 #:use-module (gnu packages libffi)
135 #:use-module (gnu packages libidn)
136 #:use-module (gnu packages linux)
137 #:use-module (gnu packages lsof)
138 #:use-module (gnu packages node)
139 #:use-module (gnu packages openstack)
140 #:use-module (gnu packages pcre)
141 #:use-module (gnu packages pkg-config)
142 #:use-module (gnu packages protobuf)
143 #:use-module (gnu packages python)
144 #:use-module (gnu packages python-build)
145 #:use-module (gnu packages python-check)
146 #:use-module (gnu packages python-compression)
147 #:use-module (gnu packages python-crypto)
148 #:use-module (gnu packages python-science)
149 #:use-module (gnu packages python-xyz)
150 #:use-module (gnu packages qt)
151 #:use-module (gnu packages rdf)
152 #:use-module (gnu packages rpc)
153 #:use-module (gnu packages rust)
154 #:use-module (gnu packages rust-apps)
155 #:use-module (gnu packages serialization)
156 #:use-module (gnu packages sphinx)
157 #:use-module (gnu packages texinfo)
158 #:use-module (gnu packages time)
159 #:use-module (gnu packages tls)
160 #:use-module (gnu packages version-control)
161 #:use-module (gnu packages web)
162 #:use-module (gnu packages xml)
163 #:use-module (gnu packages)
164 #:use-module (srfi srfi-1))
165
166(define-public python-aiocoap
167 (package
168 (name "python-aiocoap")
169 (version "0.4.14")
170 (source
171 (origin
172 (method git-fetch) ; tests miss data and module files in PyPI release
173 (uri (git-reference
174 (url "https://github.com/chrysn/aiocoap")
175 (commit version)))
176 (file-name (git-file-name name version))
177 (sha256
178 (base32 "0yxvcg5llgmccv0a9hfm4nr7zxv9al4wh257m95a06g5c52v6hxz"))))
179 (build-system pyproject-build-system)
180 (arguments
181 (list
182 #:test-flags
183 ;; OSError: [Errno 98] error while attempting to bind on address ('::1',
184 ;; 8683, 0, 0): address already in use
185 #~(list "--ignore=tests/test_server.py"
186 "-k" (string-join
187 ;; TypeError: can only concatenate str (not "NoneType") to
188 ;; str
189 (list "not test_options"
190 "test_uri_parser"
191 "test_help" ; returned non-zero exit status 1.
192 "test_routing" ; address already in use
193 "test_tls")
194 " and not "))))
195 (native-inputs
196 (list openssl ;for tests/test_tls.py
197 python-pytest
198 python-setuptools
199 python-wheel))
200 (propagated-inputs
201 (list ;; python-cbor-diag
202 python-cbor2
203 python-cryptography
204 ;; python-dtlssocket
205 python-filelock
206 ;; python-ge25519
207 python-pygments
208 python-termcolor
209 python-websockets))
210 (home-page "https://github.com/chrysn/aiocoap")
211 (synopsis "Python CoAP library")
212 (description
213 "The aiocoap package is an implementation of @url{@acronym{CoAP, the
214Constrained Application Protocol}, http://coap.space/}. It facilitates
215writing applications that talk to network enabled embedded
216@acronym{IoT,Internet of Things} devices.")
217 (license license:expat)))
218
219(define-public python-anaconda-client
220 (package
221 (name "python-anaconda-client")
222 (version "1.13.1")
223 (source
224 (origin
225 (method git-fetch)
226 (uri (git-reference
227 (url "https://github.com/Anaconda-Platform/anaconda-client")
228 (commit version)))
229 (file-name (git-file-name name version))
230 (sha256
231 (base32 "06nn3cwhrrajsbn9pils2539lzplfnyhn9java3xrpm3ksxq9g72"))))
232 (build-system pyproject-build-system)
233 (arguments
234 (list
235 #:test-flags
236 #~(list "--deselect=tests/utils/test_conda.py::test_find_conda"
237 "--deselect=tests/utils/test_conda.py::test_conda_vars")
238 #:phases
239 #~(modify-phases %standard-phases
240 (add-after 'unpack 'fix-pytest-config
241 (lambda _
242 (substitute* "setup.cfg"
243 (("addopts=.*") "addopts=\n")))))))
244 (native-inputs
245 (list python-freezegun
246 python-pytest
247 python-setuptools))
248 (propagated-inputs
249 (list python-anaconda-cli-base
250 python-conda-package-handling
251 python-conda-package-streaming
252 python-dateutil
253 python-defusedxml
254 python-nbformat
255 python-pillow
256 python-platformdirs
257 python-pytz
258 python-pyyaml
259 python-requests
260 python-requests-toolbelt
261 python-setuptools
262 python-tqdm
263 python-urllib3))
264 (home-page "https://github.com/Anaconda-Platform/anaconda-client")
265 (synopsis "Anaconda Cloud command line client library")
266 (description
267 "Anaconda Cloud command line client library provides an interface to
268Anaconda Cloud. Anaconda Cloud is useful for sharing packages, notebooks and
269environments.")
270 (license license:bsd-3)))
271
272(define-public python-apprise
273 (package
274 (name "python-apprise")
275 (version "1.9.4")
276 (source
277 (origin
278 (method url-fetch)
279 (uri (pypi-uri "apprise" version))
280 (sha256
281 (base32 "126951n9lnlqrw5lbsvs9xs7jzg33bqqxm7cfnqag2csw6p24ca8"))))
282 (build-system pyproject-build-system)
283 (arguments
284 (list
285 ;; These tests used to be ran with --numprocesses, but that seems to have
286 ;; made them non-deterministic.
287 #:test-flags
288 #~(list "--ignore=tests/test_plugin_macosx.py"
289 "-k" "not test_plugin_glib_send_raises_generic")))
290 (native-inputs
291 (list python-babel
292 python-pytest
293 python-pytest-mock
294 python-setuptools))
295 (propagated-inputs
296 (list python-certifi
297 python-click
298 python-markdown
299 python-pygobject
300 python-pyyaml
301 python-requests
302 python-requests-oauthlib))
303 (home-page "https://github.com/caronc/apprise")
304 (synopsis "Push notification library")
305 (description
306 "Apprise is a Python library that allows sending push notifications to a
307broad range of notification services, such as Telegram, Discord, Slack, Amazon
308SNS, Gotify, etc.")
309 (license license:bsd-2)))
310
311(define-public python-blacksheep
312 (package
313 (name "python-blacksheep")
314 (version "2.4.2")
315 (source
316 (origin
317 (method git-fetch)
318 (uri (git-reference
319 (url "https://github.com/Neoteroi/BlackSheep")
320 (commit (string-append "v" version))))
321 (file-name (git-file-name name version))
322 (sha256
323 (base32 "0v9pkg3ffxxcdc8ynjjh5fgis5m49m65sbrgcrghmz0xkik5ny5w"))))
324 (build-system pyproject-build-system)
325 (arguments
326 (list
327 ;; tests: 1675 passed, 3 skipped
328 ;;
329 ;; Run all unit tests, but do not run integration tests from `itests`
330 ;; directory.
331 #:test-flags
332 #~(list "tests")
333 #:phases
334 #~(modify-phases %standard-phases
335 (add-before 'build 'cythonize
336 (lambda _
337 (with-directory-excursion "blacksheep"
338 (for-each (lambda (file)
339 (invoke "cython" "-3" file "-I" "."))
340 (find-files "." ".*\\.pyx$"))))))))
341 (native-inputs
342 (list nss-certs-for-test
343 python-cython
344 python-flask
345 python-jinja2
346 python-pydantic
347 python-pyjwt
348 python-pytest
349 python-pytest-asyncio
350 python-setuptools))
351 (propagated-inputs
352 (list python-certifi
353 python-essentials-openapi
354 python-guardpost
355 python-itsdangerous))
356 (home-page "https://github.com/Neoteroi/BlackSheep")
357 (synopsis "Asynchronous framework to build event based web applications")
358 (description
359 "BlackSheep is a lightweight, asynchronous, event driven Web framework.
360
361The framework offers
362@itemize
363@item A rich code API, based on dependency injection and inspired by Flask and
364ASP.NET Core.
365@item A typing-friendly codebase, which enables a comfortable development
366experience thanks to hints when coding with IDEs.
367@item Built-in generation of OpenAPI Documentation, supporting version 3, YAML,
368and JSON.
369@item A cross-platform framework, using the most modern versions of Python.
370@item Good performance.
371@end itemize")
372 (license license:expat)))
373
374(define-public python-cloudpathlib
375 (package
376 (name "python-cloudpathlib")
377 (version "0.23.0")
378 (source
379 (origin
380 (method git-fetch)
381 (uri (git-reference
382 (url "https://github.com/drivendataorg/cloudpathlib")
383 (commit (string-append "v" version))))
384 (file-name (git-file-name name version))
385 (sha256
386 (base32 "1dqwml269lpz51drgg3s27sqmvwa1vldw2rj34ssnqppcmc5h5lm"))))
387 (build-system pyproject-build-system)
388 (arguments
389 (list
390 ;; tests: 977 passed, 15 skipped, 8642 warnings
391 #:test-flags
392 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
393 ;; TODO: Package azure-identity (required for this file)
394 "--ignore=tests/test_azure_specific.py"
395 ;; TypeError: Retry.__init__() got an unexpected keyword
396 ;; argument 'timeout'
397 "--deselect=tests/test_gs_specific.py::test_timeout_and_retry")
398 #:phases
399 #~(modify-phases %standard-phases
400 (add-after 'unpack 'fix-pytest-config
401 (lambda _
402 (substitute* "pyproject.toml"
403 (("addopts =.*") "")))))))
404 (native-inputs
405 (list ;; python-azure-identity
406 python-dotenv
407 python-flit-core
408 python-pydantic-2
409 python-pytest
410 python-pytest-cases
411 python-pytest-xdist
412 python-shortuuid
413 python-tenacity))
414 (propagated-inputs
415 (list python-azure-storage-blob
416 python-azure-storage-file-datalake
417 python-boto3
418 python-google-cloud-storage
419 python-typing-extensions))
420 (home-page "https://github.com/drivendataorg/cloudpathlib")
421 (synopsis "Pathlib-style classes for cloud storage services")
422 (description
423 "This package provides a Python library with classes that mimic
424@code{pathlib.Path}'s interface for URIs from different cloud storage
425services.")
426 (license license:expat)))
427
428(define-public python-conda-package-handling
429 (package
430 (name "python-conda-package-handling")
431 (version "2.4.0")
432 (source
433 (origin
434 (method git-fetch)
435 (uri (git-reference
436 (url "https://github.com/conda/conda-package-handling/")
437 (commit version)))
438 (file-name (git-file-name name version))
439 (sha256
440 (base32 "1l2zbbwlxp9azpshixvxnb9354xajxkn88934grpwl70blgb3yq2"))))
441 (build-system pyproject-build-system)
442 (native-inputs
443 (list python-bottle
444 python-mock
445 python-pytest
446 python-pytest-cov
447 python-pytest-mock
448 python-setuptools))
449 (propagated-inputs
450 (list python-conda-package-streaming))
451 (home-page "https://conda.io")
452 (synopsis "Create and extract conda packages of various formats")
453 (description
454 "This library is an abstraction of Conda package handling and a tool for
455extracting, creating, and converting between formats.")
456 (license license:bsd-3)))
457
458(define-public python-conda-package-streaming
459 (package
460 (name "python-conda-package-streaming")
461 (version "0.12.0")
462 (source
463 (origin
464 (method url-fetch)
465 (uri (pypi-uri "conda_package_streaming" version))
466 (sha256
467 (base32 "1fcyx83swx1wfndrl0vdk8c2pixshn54gkjy7xchkra13kw2yas2"))))
468 (build-system pyproject-build-system)
469 (arguments
470 ;; TODO: Cycles with python-conda-package-handling, implement bootstrap.
471 (list #:tests? #f))
472 (native-inputs
473 (list python-flit-core))
474 (propagated-inputs
475 (list python-requests
476 python-zstandard))
477 (home-page "https://conda.github.io/conda-package-streaming/")
478 (synopsis "Conda formats (@code{.conda}, @code{.tar.bz2}) reader library")
479 (description
480 "This package provides an efficient library to read from new and old format
481@code{.conda} and @code{.tar.bz2} conda packages.")
482 (license license:bsd-3)))
483
484(define-public python-dependency-groups
485 (package
486 (name "python-dependency-groups")
487 (version "1.3.1")
488 (source
489 (origin
490 (method url-fetch)
491 (uri (pypi-uri "dependency_groups" version))
492 (sha256
493 (base32 "1zgymnk6k984h2wfdpp0vws2ihwqrr9lmxhrij9zs5q5140q61vq"))))
494 (build-system pyproject-build-system)
495 (propagated-inputs (list python-packaging python-tomli))
496 (native-inputs (list python-flit-core))
497 (home-page "https://dependency-groups.readthedocs.io/")
498 (synopsis "Tools and library for resolving PEP 735 Dependency Group data")
499 (description
500 "This package provides a library which is able to parse dependency groups (PEP
501735), following includes, and provide that data as output.")
502 (license license:expat)))
503
504(define-public python-devpi-common
505 (package
506 (name "python-devpi-common")
507 (version "4.0.4")
508 (source
509 (origin
510 (method url-fetch)
511 (uri (pypi-uri "devpi_common" version))
512 (sha256
513 (base32 "1k217b0fvsc7k2afw6wwlvqr1ksnv1vjzfm61g358vn98nd0lni3"))))
514 (build-system pyproject-build-system)
515 (propagated-inputs (list python-lazy python-packaging-legacy
516 python-requests))
517 (native-inputs
518 (list python-pytest
519 python-setuptools
520 python-wheel))
521 (home-page "https://github.com/devpi/devpi")
522 (synopsis
523 "Utilities jointly used by devpi-server, devpi-client and others")
524 (description
525 "This package provides utilities jointly used by devpi-server,
526devpi-client and others.")
527 (license license:expat)))
528
529(define-public python-devpi-client
530 (package
531 (name "python-devpi-client")
532 (version "7.2.0")
533 (source
534 (origin
535 (method url-fetch)
536 (uri (pypi-uri "devpi-client" version))
537 (sha256
538 (base32 "0ywx4ql8lsypb17n2miq39bmkrp232sdk8g6pskqp1y3b223chy1"))))
539 (build-system pyproject-build-system)
540 (arguments
541 (list
542 #:test-flags
543 ;; This wants to use pip install
544 '(list "--ignore=testing/test_upload.py"
545 ;; These complain about finding distutils. It's not my fault,
546 ;; mate, setuptools is right there, but you won't pick it!
547 "--ignore=testing/test_list_remove.py"
548 "--ignore=testing/test_main.py"
549 "--ignore=testing/test_install.py"
550 "--ignore=testing/test_functional.py"
551 "--ignore=testing/test_test.py")
552 #:phases
553 '(modify-phases %standard-phases
554 (add-after 'unpack 'patch-tests
555 (lambda _
556 ;; Do not replace the directory name of the store item.
557 (substitute* "testing/conftest.py"
558 (("\"devpi-server\", \"devpi-init\"")
559 "\"/bin/devpi-server\", \"/bin/devpi-init\""))))
560 (add-before 'check 'set-HOME
561 ;; Some tests need this
562 (lambda _ (setenv "HOME" "/tmp"))))))
563 (propagated-inputs (list python-pypa-build
564 python-check-manifest
565 python-colorama
566 python-devpi-common
567 python-iniconfig
568 python-pkginfo
569 python-platformdirs
570 python-pluggy
571 python-pypitoken
572 python-tomli))
573 (native-inputs
574 (list python-devpi-server
575 python-pytest
576 python-setuptools
577 python-virtualenv))
578 (home-page "https://github.com/devpi/devpi")
579 (synopsis "Devpi upload/install/... commands for Python developers")
580 (description
581 "The devpi command line tool is typically used in conjunction with
582devpi-server. It allows uploading, testing and installing packages from devpi
583indexes.")
584 (license license:expat)))
585
586(define-public python-devpi-process
587 (package
588 (name "python-devpi-process")
589 (version "1.0.2")
590 (source
591 (origin
592 (method url-fetch)
593 (uri (pypi-uri "devpi_process" version))
594 (sha256
595 (base32 "0v26i8bs0n8f2ikizwyvq77fw3l0nsyl4wj8yff0r3y351ydqbs1"))))
596 (build-system pyproject-build-system)
597 (arguments
598 (list
599 #:phases
600 '(modify-phases %standard-phases
601 (add-after 'unpack 'relax-requirements
602 (lambda _
603 ;; Our package is too old, sorry.
604 (substitute* "pyproject.toml"
605 (("typing-extensions>=4.12.2")
606 "typing-extensions>=4.10.0"))))
607 (add-after 'unpack 'patch-tool-locations
608 (lambda* (#:key inputs #:allow-other-keys)
609 (substitute* "src/devpi_process/__init__.py"
610 (("_exe\\(\"devpi-init\"\\)")
611 (string-append "\"" (search-input-file inputs "/bin/devpi-init") "\""))
612 (("_exe\\(\"devpi-server\"\\)")
613 (string-append "\"" (search-input-file inputs "/bin/devpi-server") "\""))
614 (("_exe\\(\"devpi\"\\)")
615 (string-append "\"" (search-input-file inputs "/bin/devpi") "\""))))))))
616 (propagated-inputs (list python-devpi-client python-devpi-server
617 python-typing-extensions))
618 (native-inputs
619 (list nss-certs-for-test
620 python-covdefaults
621 python-hatchling
622 python-hatch-vcs
623 python-httpx
624 python-pytest
625 python-pytest-cov))
626 (home-page "https://github.com/devpi/devpi")
627 (synopsis "API to create and use a devpi server process")
628 (description
629 "This package provides a programmatic API to create and use a devpi
630server process.")
631 (license license:expat)))
632
633(define-public python-devpi-server
634 (package
635 (name "python-devpi-server")
636 (version "6.17.0")
637 (source
638 (origin
639 (method url-fetch)
640 (uri (pypi-uri "devpi_server" version))
641 (sha256
642 (base32 "13lybrw8j6zjxwvx6sk7bw6854hd2m18s1xcvl0q100j4n06p6ml"))))
643 (build-system pyproject-build-system)
644 (arguments
645 (list
646 #:test-flags
647 ;; These all fail with: "module 'py' has no attribute 'io'"
648 #~(list "--ignore=test_devpi_server/test_importexport.py"
649 "--ignore=test_devpi_server/test_main.py"
650 "--ignore=test_devpi_server/test_genconfig.py")
651 #:phases
652 #~(modify-phases %standard-phases
653 (add-after 'unpack 'relax-requirements
654 (lambda _
655 (substitute* "pyproject.toml"
656 ;; It straggles to check argon2 in passlib on any versions
657 ;; starting from 6.14.0: UnknownExtra("passlib 1.7.4 has no
658 ;; such extra feature 'argon2'",).
659 (("passlib\\[argon2\\]") "passlib")))))))
660 (propagated-inputs (list python-argon2-cffi
661 python-attrs
662 python-defusedxml
663 python-devpi-common
664 python-httpx
665 python-itsdangerous
666 python-lazy
667 python-legacy-cgi
668 python-passlib
669 python-platformdirs
670 python-pluggy
671 python-py
672 python-pyramid
673 python-repoze-lru
674 python-ruamel.yaml-0.16 ;FIXME: rename
675 python-strictyaml
676 python-waitress))
677 (native-inputs
678 (list python-execnet
679 python-pytest
680 python-pytest-asyncio
681 python-pytest-timeout
682 python-setuptools
683 python-webtest))
684 (home-page "https://devpi.net")
685 (synopsis "Pypi.org caching server")
686 (description "This package implements a reliable private and pypi.org
687caching server.")
688 (license license:expat)))
689
690(define-public python-dicomweb-client
691 (package
692 (name "python-dicomweb-client")
693 (version "0.60.0")
694 (source
695 (origin
696 (method git-fetch)
697 (uri (git-reference
698 (url "https://github.com/ImagingDataCommons/dicomweb-client")
699 (commit (string-append "v" version))))
700 (file-name (git-file-name name version))
701 (sha256
702 (base32 "1zad0905cc4jy4hnh9yhcw63bg25f7xa33x9rj9fhh5r4fznha8d"))))
703 (build-system pyproject-build-system)
704 (arguments
705 (list
706 #:phases
707 #~(modify-phases %standard-phases
708 (add-after 'unpack 'remove-dynamic-versioning
709 (lambda _
710 (substitute* "pyproject.toml"
711 ;; Dynamic versioning via 'uv-dynamic-versioning' is
712 ;; not suitable for Guix.
713 (("dynamic = \\[\"version\"\\]")
714 (string-append "version = \""
715 #$version "\""))))))))
716 (native-inputs
717 (list python-hatchling
718 python-pytest
719 python-pytest-localserver))
720 (propagated-inputs
721 (list python-numpy
722 python-pillow
723 python-pydicom
724 python-requests
725 python-retrying))
726 (home-page "https://github.com/ImagingDataCommons/dicomweb-client")
727 (synopsis "Python client for DICOMweb RESTful services")
728 (description
729 "@code{dicomweb_client} provides client intefaces for DICOMweb RESTful
730services QIDO-RS, WADO-RS and STOW-RS to search, retrieve and store
731DICOM objects over the web, respectively.")
732 (license license:expat)))
733
734(define-public python-docusign-esign
735 (package
736 (name "python-docusign-esign")
737 (version "5.0.0")
738 (source
739 (origin
740 (method url-fetch)
741 (uri (pypi-uri "docusign-esign" version))
742 (sha256
743 (base32 "18n9szjxbmsccz4vlvsl4xa73jn0y16l0c344m83gil25v2amn69"))))
744 (build-system pyproject-build-system)
745 ;; Testing requires undocumented setup changes with network access to
746 ;; <demo.docusign.net>, and so testing is disabled here.
747 (arguments `(#:tests? #f))
748 (native-inputs
749 (list python-setuptools
750 python-wheel))
751 (propagated-inputs
752 (list python-certifi
753 python-dateutil
754 python-urllib3
755 python-pyjwt
756 python-cryptography))
757 (home-page "https://developers.docusign.com/")
758 (synopsis "DocuSign Python Client")
759 (description
760 "The Official DocuSign Python Client Library used to interact with the
761eSign REST API. Send, sign, and approve documents using this client.")
762 (license license:expat)))
763
764(define-public python-domain-connect
765 (package
766 (name "python-domain-connect")
767 (version "0.0.11")
768 (source
769 (origin
770 (method git-fetch) ;no tests in PyPI archive
771 (uri (git-reference
772 (url "https://github.com/Domain-Connect/domainconnect_python")
773 (commit (string-append "v" version))))
774 (file-name (git-file-name name version))
775 (sha256
776 (base32 "1dhqbx15h074g51mj73j9hlyvb11isjnj4s9ih5kbw1g4vf1q1jk"))))
777 (build-system pyproject-build-system)
778 (arguments
779 (list
780 ;; Check and sanity-check phases require /etc/resolv.conf, which is not
781 ;; present in container.
782 #:tests? #f
783 #:phases #~(modify-phases %standard-phases (delete 'sanity-check))))
784 (native-inputs
785 (list python-setuptools
786 python-wheel))
787 (propagated-inputs
788 (list python-cryptography
789 python-dnspython
790 python-future
791 python-publicsuffix
792 python-publicsuffixlist))
793 (home-page "https://github.com/Domain-Connect/domainconnect_python")
794 (synopsis "Client library for Domain Connect protocol")
795 (description
796 "This package provides a Service Provider functionality in both Sync and
797Async mode for @url{https://domainconnect.org/, Domain Connect protocol}.")
798 (license license:expat)))
799
800(define-public python-domain-connect-dyndns
801 (package
802 (name "python-domain-connect-dyndns")
803 (version "0.0.9")
804 (source
805 (origin
806 (method url-fetch)
807 (uri (pypi-uri "domain-connect-dyndns" version))
808 (sha256
809 (base32 "0srrblcb64bp7k5cqqivx4kykqdkmmzmspxwv66vix9k7wxdwqzx"))))
810 (build-system pyproject-build-system)
811 (arguments
812 (list
813 ;; Check and sanity-check phases require /etc/resolv.conf, which is not
814 ;; present in container.
815 #:tests? #f
816 #:phases #~(modify-phases %standard-phases (delete 'sanity-check))))
817 (native-inputs
818 (list python-setuptools
819 python-wheel))
820 (propagated-inputs
821 (list python-dnspython
822 python-domain-connect
823 python-requests
824 python-validators))
825 (home-page "https://github.com/Domain-Connect/DomainConnectDDNS-Python")
826 (synopsis "Domain Connect Dynamic DNS in Python")
827 ;; Project lacks meaningful description in README, see
828 ;; <https://github.com/Domain-Connect/DomainConnectDDNS-Python/issues/43>.
829 (description
830 "Python client library for Dynamic DNS using
831@url{https://www.domainconnect.org/, Domain Connect} protocol.")
832 (license license:expat)))
833
834(define-public python-dropbox
835 (package
836 (name "python-dropbox")
837 (version "12.0.2")
838 (source
839 (origin
840 (method git-fetch) ; no tests in PyPI release
841 (uri (git-reference
842 (url "https://github.com/dropbox/dropbox-sdk-python")
843 (commit (string-append "v" version))))
844 (file-name (git-file-name name version))
845 (sha256
846 (base32 "0pyvi2mbibah42kq8804d98ghypm46wr8swqr34apnvnlp9j2nzl"))))
847 (build-system pyproject-build-system)
848 (arguments
849 (list
850 #:test-flags
851 #~(list "-k" (string-join
852 ;; Network access is required.
853 (list "not test_bad_auth"
854 "test_app_auth"
855 "test_bad_pins"
856 "test_bad_pins_session"
857 "test_downscope"
858 "test_multi_auth"
859 "test_path_root"
860 "test_path_root_err"
861 "test_refresh"
862 "test_rpc"
863 "test_team"
864 "test_upload_download"
865 "test_versioned_route")
866 " and not "))
867 #:phases
868 #~(modify-phases %standard-phases
869 (add-after 'unpack 'relax-requirements
870 (lambda _
871 (substitute* "setup.py"
872 ;; 'stone>=2,<3.3.3',
873 ((">=2,<3.3.3") ">=2,<3.4.0"))))
874 (add-before 'check 'pre-check
875 (lambda _
876 ;; Otherwise tests setup erroring.
877 (setenv "LEGACY_USER_DROPBOX_TOKEN" "guix")
878 (setenv "LEGACY_USER_CLIENT_ID" "guix")
879 (setenv "LEGACY_USER_CLIENT_SECRET" "guix")
880 (setenv "LEGACY_USER_REFRESH_TOKEN" "guix")
881 (setenv "SCOPED_USER_DROPBOX_TOKEN" "guix")
882 (setenv "SCOPED_USER_CLIENT_ID" "guix")
883 (setenv "SCOPED_USER_CLIENT_SECRET" "guix")
884 (setenv "SCOPED_USER_REFRESH_TOKEN" "guix")
885 (setenv "SCOPED_TEAM_DROPBOX_TOKEN" "guix")
886 (setenv "SCOPED_TEAM_CLIENT_ID" "guix")
887 (setenv "SCOPED_TEAM_CLIENT_SECRET" "guix")
888 (setenv "SCOPED_TEAM_REFRESH_TOKEN" "guix")
889 (setenv "DROPBOX_SHARED_LINK" "guix"))))))
890 (native-inputs
891 (list nss-certs-for-test
892 python-mock
893 python-pytest
894 python-pytest-mock
895 python-setuptools
896 python-wheel))
897 (propagated-inputs
898 (list python-requests python-six python-stone))
899 (home-page "https://www.dropbox.com/developers")
900 (synopsis "Official Dropbox API Client")
901 (description "This package provides a Python SDK for integrating with the
902Dropbox API v2.")
903 (license license:expat)))
904
905(define-public python-essentials-openapi
906 (package
907 (name "python-essentials-openapi")
908 (version "1.2.1")
909 (source
910 (origin
911 (method git-fetch)
912 (uri (git-reference
913 (url "https://github.com/Neoteroi/essentials-openapi")
914 (commit (string-append "v" version))))
915 (file-name (git-file-name name version))
916 (sha256
917 (base32 "0f3lhpkqhvv8sr1c34cvzdqkc61306m03w3jp0zdih1v6is05j8x"))))
918 (build-system pyproject-build-system)
919 (native-inputs
920 (list python-flask
921 python-hatchling
922 python-pydantic
923 python-pytest
924 python-rich))
925 (propagated-inputs
926 (list python-essentials
927 python-httpx
928 python-jinja2
929 python-markupsafe
930 python-pyyaml))
931 (home-page "https://github.com/Neoteroi/essentials-openapi/")
932 (synopsis "Generator for OpenAPI Documentation")
933 (description
934 "Generator for OpenAPI Documentation version 2 and 3, in JSON and YAML
935formats. Generator for other kinds of documents from OpenAPI Documentation
936files.")
937 (license license:expat)))
938
939(define-public python-eventlet
940 (package
941 (name "python-eventlet")
942 (version "0.40.2")
943 (source
944 (origin
945 (method url-fetch)
946 (uri (pypi-uri "eventlet" version))
947 (sha256
948 (base32
949 "1c6qr1cnam79wxm1sh5y04061iyy3shs02yd0mlh47bngwknqqs2"))))
950 (build-system pyproject-build-system)
951 (arguments
952 (list
953 #:test-flags
954 '(list "-k"
955 (string-append
956 "not TestGetaddrinfo"
957 " and not TestProxyResolver"
958 " and not test_noraise_dns_tcp"
959 " and not test_raise_dns_tcp"
960 " and not test_hosts_no_network"
961 " and not test_import_rdtypes_then_eventlet"
962 " and not test_patcher_existing_locks"
963 " and not test_dns_methods_are_green"))
964 #:phases
965 #~(modify-phases %standard-phases
966 (add-after 'unpack 'avoid-OSError
967 (lambda _
968 ;; If eventlet tries to load greendns, an OSError is thrown when
969 ;; getprotobyname is called. Thankfully there is an environment
970 ;; variable to disable the greendns import, so use it. Note that
971 ;; this error is propagated to child packages too, so enforce the
972 ;; changed default.
973 (substitute* "eventlet/green/socket.py"
974 (("os\\.environ\\.get\\(\"EVENTLET_NO_GREENDNS\", ''\\)")
975 "os.environ.get(\"EVENTLET_NO_GREENDNS\", \"yes\")")))))))
976 (native-inputs
977 (list python-pypa-build
978 python-hatch-vcs
979 python-hatchling
980 python-pytest))
981 (propagated-inputs
982 (list python-dnspython python-greenlet))
983 (home-page "https://eventlet.net")
984 (synopsis "Concurrent networking library for Python")
985 (description
986 "Eventlet is a concurrent networking library for Python that
987allows you to change how you run your code, not how you write it.
988It uses @code{epoll} or @code{libevent} for highly scalable non-blocking I/O.
989Coroutines ensure that the developer uses a blocking style of programming
990that is similar to threading, but provide the benefits of non-blocking I/O.
991The event dispatch is implicit, which means you can easily use @code{Eventlet}
992from the Python interpreter, or as a small part of a larger application.
993
994Note: In Guix, this package assumes the environment variable
995@code{EVENTLET_NO_GREENDNS} defaults to @code{yes}. To try to use it, set it
996to anything else.")
997 (license license:expat)))
998
999(define-public python-flask-caching
1000 (package
1001 (name "python-flask-caching")
1002 (version "2.3.1")
1003 (source
1004 (origin
1005 (method url-fetch)
1006 (uri (pypi-uri "flask_caching" version))
1007 (sha256
1008 (base32 "1jcqgfzvqhgpngf9nhpfjs129cslh8jyczfy8kw11y7b9qdzvmv5"))))
1009 (build-system pyproject-build-system)
1010 (arguments
1011 (list
1012 #:test-flags
1013 ;; Tests requiring running Redis or dated python-cache.
1014 #~(list "--deselect=tests/test_init.py::test_init_nullcache[MemcachedCache]"
1015 "--deselect=tests/test_init.py::test_init_nullcache[RedisCache]"
1016 "--deselect=tests/test_init.py::test_init_nullcache[RedisSentinelCache]"
1017 "--deselect=tests/test_init.py::test_init_nullcache[SASLMemcachedCache]"
1018 "--deselect=tests/test_init.py::test_init_nullcache[SpreadSASLMemcachedCache]"
1019 "-k" "not test_client_override_reflected_on_cachelib_methods")))
1020 (native-inputs
1021 (list python-pytest
1022 python-pytest-asyncio
1023 python-pytest-xprocess
1024 python-setuptools))
1025 (propagated-inputs
1026 (list python-cachelib
1027 python-flask))
1028 (home-page "https://github.com/pallets-eco/flask-caching")
1029 (synopsis "Caching extension for Flask")
1030 (description
1031 "This package provides a caching support to Flask applications, it's a
1032fort ok https://github.com/thadeusb/flask-cache.")
1033 (license license:bsd-3)))
1034
1035(define-public python-gdown
1036 (package
1037 (name "python-gdown")
1038 (version "5.2.0")
1039 (source
1040 (origin
1041 (method url-fetch)
1042 (uri (pypi-uri "gdown" version))
1043 (sha256
1044 (base32 "11y7xx6zjipx15a5626lhiwmwb2jxp4mdcwqrnij0mfqc981ci91"))))
1045 (build-system pyproject-build-system)
1046 (arguments (list #:tests? #f)) ;network access is required
1047 (native-inputs
1048 (list python-hatch-fancy-pypi-readme
1049 python-hatch-vcs
1050 python-hatchling))
1051 (propagated-inputs
1052 (list python-beautifulsoup4
1053 python-filelock
1054 python-requests
1055 python-tqdm))
1056 (home-page "https://github.com/wkentaro/gdown")
1057 (synopsis "Google Drive Public File/Folder Downloader")
1058 (description
1059 "This package implements a functionality to download large files
1060recursivly from Google Drive with option to filter them by file
1061formats (PDF/XML/CSV).")
1062 (license license:expat)))
1063
1064(define-public python-globus-sdk
1065 (package
1066 (name "python-globus-sdk")
1067 (version "3.56.0")
1068 (source
1069 (origin
1070 (method git-fetch) ;no tests in PyPI archive
1071 (uri (git-reference
1072 (url "https://github.com/globus/globus-sdk-python")
1073 (commit version)))
1074 (file-name (git-file-name name version))
1075 (sha256
1076 (base32 "11nljda2ir4gna4xa5vkj5nzxnjwadkh97qplkk9nrj44szphnzw"))))
1077 (build-system pyproject-build-system)
1078 (arguments
1079 (list
1080 #:test-flags
1081 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count))))
1082 #:phases
1083 #~(modify-phases %standard-phases
1084 (add-before 'check 'pre-check
1085 (lambda _ (setenv "HOME" "/tmp"))))))
1086 (native-inputs
1087 (list python-flaky
1088 python-pytest
1089 python-pytest-randomly
1090 python-pytest-xdist
1091 python-responses
1092 python-setuptools
1093 python-wheel))
1094 (propagated-inputs
1095 (list python-cryptography
1096 python-importlib-resources
1097 python-pyjwt
1098 python-requests))
1099 (home-page "https://github.com/globus/globus-sdk-python")
1100 (synopsis "Globus SDK for Python")
1101 (description
1102 "This package provides a SDK for convenient Pythonic interface to
1103@url{https://www.globus.org/, Globus} APIs.")
1104 (license license:asl2.0)))
1105
1106(define-public python-guardpost
1107 (package
1108 (name "python-guardpost")
1109 (version "1.0.3")
1110 (source
1111 (origin
1112 (method git-fetch)
1113 (uri (git-reference
1114 (url "https://github.com/Neoteroi/guardpost")
1115 (commit (string-append "v" version))))
1116 (file-name (git-file-name name version))
1117 (sha256
1118 (base32 "1q09w953d4cjjvp8pp3kkkhw0y9kq2jgj6fihdz9np55pwxkfd15"))))
1119 (build-system pyproject-build-system)
1120 (arguments
1121 (list
1122 ;; Possible timing issue, see:
1123 ;; <https://github.com/Neoteroi/GuardPost/issues/18>.
1124 #:test-flags '(list "--ignore=tests/test_jwts.py")))
1125 (native-inputs
1126 (list python-cryptography
1127 python-flask
1128 python-hatchling
1129 python-pyjwt
1130 python-pytest
1131 python-pytest-asyncio))
1132 (propagated-inputs
1133 (list python-rodi))
1134 (home-page "https://github.com/Neoteroi/GuardPost/")
1135 (synopsis
1136 "Authentication and authorization framework for Python applications")
1137 (description
1138 "GuardPost is a framework to handle authentication and
1139authorization in asynchronous Python applications.
1140
1141Its features include
1142
1143@itemize
1144@item Strategy to implement authentication.
1145@item Strategy to implement authorization.
1146@item Support for dependency injection
1147@item Built-in support for JSON Web Tokens (JWTs) authentication.
1148@end itemize")
1149 (license license:expat)))
1150
1151(define-public python-hookdns
1152 (package
1153 (name "python-hookdns")
1154 (version "2.0.0")
1155 (source
1156 (origin
1157 (method url-fetch)
1158 (uri (pypi-uri "hookdns" version))
1159 (sha256
1160 (base32 "087x12dy6slhyqwqblby2fpjdcy61yk3lqp3fplami0rmbn02fb7"))))
1161 (build-system pyproject-build-system)
1162 (arguments
1163 (list
1164 #:test-flags
1165 #~(list "-k" (string-join
1166 ;; Tests requiring networking.
1167 (list
1168 "not test_patch_contextmanager_with_another_hostname"
1169 "test_patch_contextmanager_with_another_hostname_ipv6"
1170 "test_patch_contextmanager_with_ipv4"
1171 "test_patch_contextmanager_with_name"
1172 "test_patch_contextmanager_with_public_fqdn_and_"
1173 "test_patch_contextmanager_with_unknown_hostname"
1174 "test_patch_decorator_with_another_hostname"
1175 "test_patch_decorator_with_another_hostname_ipv6"
1176 "test_patch_decorator_with_ipv4"
1177 "test_patch_decorator_with_name"
1178 "test_patch_decorator_with_public_fqdn_and_a_name_for_"
1179 "test_patch_decorator_with_unknown_hostname"
1180 "test_real_getaddrinfo_with_name_ipv6"
1181 "test_real_getaddrinfo_with_public_fqdn_ipv4"
1182 "test_real_getaddrinfo_with_public_fqdn_ipv6"
1183 "test_real_gethostbyname_ex_with_public_fqdn"
1184 "test_real_gethostbyname_with_public_fqdn"
1185 "test_real_requests_ip"
1186 "test_real_requests_name"
1187 "test_real_requests_with_public_fqdn"
1188 "test_reentrant")
1189 " and not "))))
1190 (native-inputs
1191 (list python-pytest
1192 python-requests
1193 python-setuptools
1194 python-wheel))
1195 (home-page "https://github.com/cle-b/hookdns")
1196 (synopsis "DNS resolution customization library")
1197 (description
1198 "HookDNS implements functionality that allows for modifying name
1199resolution in a Python script without any changes to the hosts file or the use
1200of a fake DNS resolver.")
1201 (license license:asl2.0)))
1202
1203(define-public python-httpretty
1204 (package
1205 (name "python-httpretty")
1206 (version "1.1.4")
1207 (source
1208 (origin
1209 (method url-fetch)
1210 (uri (pypi-uri "httpretty" version))
1211 (sha256
1212 (base32 "0s1vjdaf3pk2xd0hvi5f7p3jm2rgwpbc734jdp9r50m1smfhxpi0"))))
1213 (build-system pyproject-build-system)
1214 (arguments
1215 (list
1216 #:test-flags
1217 ;; Only run Unit tests.
1218 #~(list "--ignore=tests/bugfixes"
1219 "--ignore=tests/functional"
1220 "--ignore=tests/pyopenssl"
1221 "-k" (string-join
1222 ;; Tests pattern failing with one of these errors:
1223 ;; AttributeError: '(str|bool|bytes|list|tuple)' object
1224 ;; has no attribute 'should'
1225 ;; AttributeError: 'function' object has no attribute
1226 ;; 'when'
1227 ;; AttributeError: 'AssertionBuilder' object has no
1228 ;; attribute 'should_not'
1229 (list "not fake_socket_passes_through"
1230 "fakesock_socket"
1231 "request_parse_body_when"
1232 "test_Entry_class_normalizes_headers"
1233 "test_has_request"
1234 "test_httpretty_should_raise_proper"
1235 "test_parse_request_line_connect"
1236 "test_request_parse_querystring"
1237 "test_request_string_representation"
1238 "test_request_stubs_internals")
1239 " and not "))))
1240 (native-inputs
1241 (list nss-certs-for-test
1242 python-freezegun
1243 python-mock
1244 python-pytest
1245 python-setuptools
1246 python-sure
1247 python-wheel))
1248 (home-page "https://httpretty.readthedocs.io")
1249 (synopsis "HTTP client mock for Python")
1250 (description
1251 "@code{httpretty} is a helper for faking web requests,inspired by Ruby's
1252@code{fakeweb}.")
1253 (license license:expat)))
1254
1255(define-public python-huggingface-hub
1256 (package
1257 (name "python-huggingface-hub")
1258 (version "0.31.4")
1259 (source
1260 (origin
1261 (method git-fetch)
1262 (uri (git-reference
1263 (url "https://github.com/huggingface/huggingface_hub")
1264 (commit (string-append "v" version))))
1265 (file-name (git-file-name name version))
1266 (sha256
1267 (base32 "1rjkrmvvyzxlbnbndrg4v9qq39grn46c26zrdjgpf114gci5pwap"))))
1268 (build-system pyproject-build-system)
1269 (arguments
1270 (list
1271 #:test-flags
1272 ;; We don't have sentence_transformers...
1273 '(list "--ignore=contrib/sentence_transformers/test_sentence_transformers.py"
1274 ;; ...nor do we have InquirerPy...
1275 "--ignore=tests/test_command_delete_cache.py"
1276 ;; ...or timm...
1277 "--ignore=contrib/timm/test_timm.py"
1278 ;; ...or spacy_huggingface_hub
1279 "--ignore=contrib/spacy/test_spacy.py"
1280 ;; These all require internet access
1281 "--ignore=tests/test_cache_no_symlinks.py"
1282 "--ignore=tests/test_cache_layout.py"
1283 "--ignore=tests/test_commit_scheduler.py"
1284 "--ignore=tests/test_file_download.py"
1285 "--ignore=tests/test_hf_api.py"
1286 "--ignore=tests/test_hf_file_system.py"
1287 "--ignore=tests/test_inference_api.py"
1288 "--ignore=tests/test_inference_async_client.py"
1289 "--ignore=tests/test_inference_client.py"
1290 "--ignore=tests/test_inference_text_generation.py"
1291 "--ignore=tests/test_login_utils.py"
1292 "--ignore=tests/test_offline_utils.py"
1293 "--ignore=tests/test_repocard.py"
1294 "--ignore=tests/test_repository.py"
1295 "--ignore=tests/test_snapshot_download.py"
1296 "--ignore=tests/test_utils_cache.py"
1297 "--ignore=tests/test_utils_git_credentials.py"
1298 "--ignore=tests/test_utils_http.py"
1299 "--ignore=tests/test_utils_pagination.py"
1300 "--ignore=tests/test_webhooks_server.py"
1301 "-k" (string-append
1302 "not test_push_to_hub"
1303 " and not test_from_pretrained_model_id_only"
1304 " and not test_from_pretrained_model_id_and_revision"
1305 ;; These all require internet access
1306 " and not test_auth"
1307 " and not test_oauth"
1308 " and not test_utils_sha"
1309 " and not test_inference_providers"
1310 " and not test_xet"))
1311 #:phases
1312 '(modify-phases %standard-phases
1313 (add-before 'check 'pre-check
1314 ;; Some tests need to write to HOME.
1315 (lambda _ (setenv "HOME" "/tmp"))))))
1316 (propagated-inputs
1317 (list python-filelock
1318 python-fsspec
1319 python-packaging
1320 python-pyyaml
1321 python-requests
1322 python-tqdm
1323 python-typing-extensions))
1324 (native-inputs
1325 (list python-aiohttp
1326 python-fastapi
1327 python-jedi
1328 python-jinja2
1329 python-mypy
1330 python-numpy
1331 python-pillow
1332 python-pydantic-2
1333 python-pytest
1334 python-pytest-asyncio
1335 python-pytest-cov
1336 python-pytest-env
1337 python-pytest-mock
1338 python-pytest-rerunfailures
1339 python-pytest-vcr
1340 python-pytest-xdist
1341 python-setuptools
1342 python-types-requests
1343 python-types-toml
1344 python-types-urllib3
1345 python-typing-extensions
1346 python-urllib3
1347 python-wheel))
1348 (home-page "https://huggingface.co/docs/huggingface_hub/")
1349 (synopsis "Client library for accessing the huggingface.co hub")
1350 (description
1351 "This package provides a client library to download and publish models,
1352datasets and other repos on the @url{huggingface.co} hub.")
1353 (license license:asl2.0)))
1354
1355(define-public python-kubernetes
1356 (package
1357 (name "python-kubernetes")
1358 (version "34.1.0")
1359 (source
1360 (origin
1361 (method url-fetch)
1362 (uri (pypi-uri "kubernetes" version))
1363 (sha256
1364 (base32 "04ir03887spls3wqspvbsivqjrbwz0innn86mkrs546jnnqfvs4g"))))
1365 (build-system pyproject-build-system)
1366 (arguments
1367 (list
1368 #:test-flags
1369 #~(list
1370 ;; The following tests expect a local running Kubernetes cluster.
1371 "--ignore=kubernetes/e2e_test"
1372 "--ignore=kubernetes/dynamic")))
1373 (native-inputs
1374 (list python-pytest
1375 python-setuptools))
1376 (propagated-inputs
1377 (list python-certifi
1378 python-dateutil
1379 python-durationpy
1380 python-google-auth
1381 python-pyyaml
1382 python-requests
1383 python-requests-oauthlib
1384 python-six ;XXX: hard dependency
1385 python-urllib3-1.26 ;sanity check, requires urllib3<2.4.0,>=1.24.2
1386 python-websocket-client))
1387 (home-page "https://github.com/kubernetes-client/python")
1388 (synopsis "Python client for Kubernetes")
1389 (description
1390 "This package provides an official Python client library for
1391@url{http://kubernetes.io, Kubernetes}.")
1392 (license license:asl2.0)))
1393
1394(define-public python-lazr-restfulclient
1395 (package
1396 (name "python-lazr-restfulclient")
1397 (version "0.14.6")
1398 (source
1399 (origin
1400 (method url-fetch)
1401 (uri (pypi-uri "lazr.restfulclient" version))
1402 (sha256
1403 (base32 "1nzzmp9aaaxh25jy3wm71cpf9dfw56s4g303c8a3nij874fjmwa3"))))
1404 (build-system pyproject-build-system)
1405 (arguments
1406 (list
1407 #:phases
1408 #~(modify-phases %standard-phases
1409 ;; Disable part of the test suite to avoid the lazr.authentication
1410 ;; requirement, which requires 'oauth', a Python 2 only library.
1411 (add-after 'unpack 'remove-some-checks
1412 (lambda _
1413 (with-directory-excursion "src/lazr/restfulclient/tests"
1414 (for-each delete-file '("test_oauth.py" "test_docs.py")))
1415 (substitute* "setup.py"
1416 (("\"(oauth|lazr\\.(authentication|restful>=0\\.11\\.0))\",")
1417 ""))))
1418 (replace 'check
1419 (lambda* (#:key tests? #:allow-other-keys)
1420 (if tests?
1421 (invoke "zope-testrunner" "--test-path=src")
1422 (format #t "test suite not run~%")))))))
1423 (native-inputs
1424 (list python-setuptools
1425 python-testtools
1426 python-wheel
1427 python-wsgi-intercept
1428 python-zope-testrunner))
1429 (propagated-inputs
1430 (list python-distro
1431 python-httplib2
1432 python-oauthlib
1433 python-pyparsing
1434 python-setuptools
1435 python-six
1436 python-wadllib))
1437 (home-page "https://launchpad.net/lazr.restfulclient")
1438 (synopsis "Web client Python library extending wadlib")
1439 (description "This package provides a programmable client library that
1440adds functionality on top of @code{wadlib}.")
1441 (license license:lgpl3+)))
1442
1443(define-public python-launchpadlib
1444 (package
1445 (name "python-launchpadlib")
1446 (version "2.1.0")
1447 (source
1448 (origin
1449 (method url-fetch)
1450 (uri (pypi-uri "launchpadlib" version))
1451 (sha256
1452 (base32 "0br4j76l83lvyrhm8psml9cqmdsn65rx48w1q1a0s1bmpf85ihml"))))
1453 (build-system pyproject-build-system)
1454 (arguments
1455 (list #:phases #~(modify-phases %standard-phases
1456 (add-before 'check 'set-home
1457 (lambda _
1458 ;; Tests require a writable home.
1459 (setenv "HOME" "/tmp"))))))
1460 (propagated-inputs
1461 (list python-httplib2 python-lazr-restfulclient python-lazr-uri))
1462 (native-inputs (list python-pytest python-testresources python-wadllib
1463 python-setuptools python-wheel))
1464 (home-page "https://documentation.ubuntu.com/launchpad")
1465 (synopsis "Python client library for Launchpad's web service")
1466 (description "@code{launchpadlib} is a Python library that allows
1467scripting Launchpad via its the web service API.")
1468 (license license:lgpl3+)))
1469
1470(define-public python-lazr-uri
1471 (package
1472 (name "python-lazr-uri")
1473 (version "1.0.7")
1474 (source
1475 (origin
1476 (method url-fetch)
1477 (uri (pypi-uri "lazr_uri" version))
1478 (sha256
1479 (base32 "1vm34pw8fksc6m8fnqwh215sqdlw546cxcdga93i2l746grzc37d"))))
1480 (build-system pyproject-build-system)
1481 (arguments
1482 (list
1483 #:phases
1484 #~(modify-phases %standard-phases
1485 (replace 'check
1486 (lambda* (#:key tests? #:allow-other-keys)
1487 (if tests?
1488 (invoke "zope-testrunner" "--test-path=src")
1489 (format #t "test suite not run~%")))))))
1490 (native-inputs (list python-setuptools python-zope-testrunner))
1491 (home-page "https://launchpad.net/lazr.uri")
1492 (synopsis "Python URI manipulation library")
1493 (description "This Python package provides a self-contained, easily
1494reusable library for parsing, manipulating, and generating URIs.")
1495 (license license:lgpl3)))
1496
1497(define-public python-ldaptor
1498 (package
1499 (name "python-ldaptor")
1500 (version "21.2.0")
1501 (source
1502 (origin
1503 (method url-fetch)
1504 (uri (pypi-uri "ldaptor" version))
1505 (sha256
1506 (base32 "0n53czn5pyh8923y282spdb7xc8c9rhn0n43bczanjjx6wcynjcc"))))
1507 (build-system pyproject-build-system)
1508 (arguments
1509 (list
1510 #:test-flags
1511 #~(list "-m" "twisted.trial"
1512 (string-append "-j" (number->string (parallel-job-count)))
1513 "ldaptor")
1514 #:phases
1515 #~(modify-phases %standard-phases
1516 (add-before 'check 'disable-failing-tests
1517 (lambda _
1518 ;; Testing with Twisted 22.4 results in infinite loop creating
1519 ;; temporary config files, see
1520 ;; <https://github.com/twisted/ldaptor/issues/238>.
1521 (delete-file "ldaptor/test/test_config.py")))
1522 (replace 'check
1523 (lambda* (#:key tests? test-flags #:allow-other-keys)
1524 (when tests?
1525 (apply invoke "python" test-flags)))))))
1526 (native-inputs
1527 (list python-setuptools
1528 python-wheel))
1529 (propagated-inputs
1530 (list python-passlib
1531 python-pyopenssl
1532 python-service-identity ; to pass sanity check, for Twisted[tls]
1533 python-pyparsing
1534 python-twisted
1535 python-zope-interface))
1536 (home-page "https://github.com/twisted/ldaptor")
1537 (synopsis "Pure-Python Twisted library for LDAP")
1538 (description
1539 "This package provides a Python Twisted library for LDAP, which key
1540feaatures are:
1541@itemize
1542@item LDAP client logic
1543@item separately-accessible LDAP and BER protocol message generation/parsing
1544@item ASCII-format LDAP filter generation and parsing
1545@item LDIF format data generation
1546@item Samba password changing logic
1547@end itemize")
1548 (license license:expat)))
1549
1550(define-public python-legacy-cgi
1551 (package
1552 (name "python-legacy-cgi")
1553 (version "2.6.1")
1554 (source
1555 (origin
1556 (method url-fetch)
1557 (uri (pypi-uri "legacy_cgi" version))
1558 (sha256
1559 (base32 "0hksizyq7awmwh3337zy0rmj47x6b5igzam6ffj74gbwfjfakbgj"))))
1560 (build-system pyproject-build-system)
1561 (native-inputs (list python-poetry-core python-pytest))
1562 (home-page "https://github.com/jackrosenthal/legacy-cgi")
1563 (synopsis "Fork of the legacy standard library cgi and cgitb modules")
1564 (description
1565 "This is a fork of the standard library modules @code{cgi} and
1566@code{cgitb}. They are slated to be removed from the Python standard library
1567in Python 3.13 by PEP-594.")
1568 (license license:psfl)))
1569
1570(define-public python-opentelemetry-api
1571 (package
1572 (name "python-opentelemetry-api")
1573 (version "1.37.0")
1574 (source
1575 (origin
1576 (method url-fetch)
1577 (uri (pypi-uri "opentelemetry_api" version))
1578 (sha256
1579 (base32 "19yr3hfwdc9sv8df4vydxcsxnpld3xi57siq4w8xanrm42qka1sl"))))
1580 (build-system pyproject-build-system)
1581 (propagated-inputs (list python-importlib-metadata
1582 python-typing-extensions))
1583 (native-inputs (list python-hatchling
1584 python-opentelemetry-test-utils-bootstrap))
1585 (home-page "https://opentelemetry.io/docs/languages/python/")
1586 (synopsis "OpenTelemetry Python API")
1587 (description "@code{OpenTelemetry} Python API.")
1588 (license license:asl2.0)))
1589
1590(define-public python-opentelemetry-api-bootstrap
1591 (hidden-package
1592 (package/inherit python-opentelemetry-api
1593 (name "python-opentelemetry-api-bootstrap")
1594 (arguments
1595 (list
1596 #:tests? #f))
1597 (native-inputs (list python-hatchling)))))
1598
1599(define-public python-opentelemetry-sdk
1600 (package
1601 (name "python-opentelemetry-sdk")
1602 (version "1.37.0")
1603 (source
1604 (origin
1605 (method url-fetch)
1606 (uri (pypi-uri "opentelemetry_sdk" version))
1607 (sha256
1608 (base32 "19fx8vf35kcss43i17zqngqhmglb36dnddasbdvfsgcm22f0i3nc"))))
1609 (build-system pyproject-build-system)
1610 (propagated-inputs (list python-opentelemetry-api
1611 python-opentelemetry-semantic-conventions
1612 python-typing-extensions))
1613 (native-inputs (list python-hatchling
1614 python-opentelemetry-test-utils-bootstrap
1615 python-pytest))
1616 (home-page "https://opentelemetry.io/docs/languages/python/")
1617 (synopsis "OpenTelemetry Python SDK")
1618 (description "@code{OpenTelemetry} Python SDK.")
1619 (license license:asl2.0)))
1620
1621(define-public python-opentelemetry-sdk-bootstrap
1622 (hidden-package
1623 (package/inherit python-opentelemetry-sdk
1624 (name "python-opentelemetry-sdk-bootstrap")
1625 (arguments (list #:tests? #f))
1626 (propagated-inputs (list python-opentelemetry-api-bootstrap
1627 python-opentelemetry-semantic-conventions-bootstrap))
1628 (native-inputs (list python-hatchling)))))
1629
1630(define-public python-opentelemetry-semantic-conventions
1631 (package
1632 (name "python-opentelemetry-semantic-conventions")
1633 (version "0.58b0")
1634 (source
1635 (origin
1636 (method url-fetch)
1637 (uri (pypi-uri "opentelemetry_semantic_conventions" version))
1638 (sha256
1639 (base32 "098czakcawikaspl46vy6vickw80mm2bnrspflrw8ya24r8nzm3b"))))
1640 (build-system pyproject-build-system)
1641 (propagated-inputs (list python-opentelemetry-api python-typing-extensions))
1642 (native-inputs (list python-hatchling))
1643 (home-page "https://opentelemetry.io/docs/languages/python/")
1644 (synopsis "OpenTelemetry Semantic Conventions")
1645 (description "@code{OpenTelemetry} Semantic Conventions.")
1646 (license license:asl2.0)))
1647
1648(define-public python-opentelemetry-semantic-conventions-bootstrap
1649 (hidden-package
1650 (package/inherit python-opentelemetry-semantic-conventions
1651 (name "python-opentelemetry-semantic-conventions-bootstrap")
1652 (arguments
1653 (list
1654 #:tests? #f))
1655 (propagated-inputs (list python-opentelemetry-api-bootstrap
1656 python-typing-extensions)))))
1657
1658(define-public python-opentelemetry-test-utils
1659 (package
1660 (name "python-opentelemetry-test-utils")
1661 (version "0.58b0")
1662 (source
1663 (origin
1664 (method url-fetch)
1665 (uri (pypi-uri "opentelemetry_test_utils" version))
1666 (sha256
1667 (base32 "0xjp04zjn7m79xsda9wp79rqyzy2c10347s967vp7xvmndwwa0ds"))))
1668 (build-system pyproject-build-system)
1669 (propagated-inputs (list python-asgiref python-opentelemetry-api
1670 python-opentelemetry-sdk))
1671 (native-inputs (list python-hatchling))
1672 (home-page "https://opentelemetry.io/docs/languages/python/")
1673 (synopsis "Test utilities for OpenTelemetry unit tests")
1674 (description "Test utilities for @code{OpenTelemetry} unit tests.")
1675 (license license:asl2.0)))
1676
1677(define-public python-opentelemetry-test-utils-bootstrap
1678 (hidden-package
1679 (package/inherit python-opentelemetry-test-utils
1680 (name "python-opentelemetry-test-utils-bootstrap")
1681 (arguments
1682 (list
1683 #:tests? #f))
1684 (propagated-inputs (list python-asgiref
1685 python-opentelemetry-api-bootstrap
1686 python-opentelemetry-sdk-bootstrap))
1687 (native-inputs (list python-hatchling)))))
1688
1689(define-public python-pathy
1690 (package
1691 (name "python-pathy")
1692 (version "0.11.0")
1693 (source
1694 (origin
1695 (method url-fetch)
1696 (uri (pypi-uri "pathy" version))
1697 (sha256
1698 (base32 "0vbhcfg8g74g90bzmdgxr1jyvwhadvlr2w9wyvs6xxwb1dmhwgdv"))))
1699 (build-system pyproject-build-system)
1700 (native-inputs
1701 (list python-mock
1702 python-pytest
1703 python-setuptools))
1704 (propagated-inputs
1705 (list python-pathlib-abc-for-python-pathy
1706 python-smart-open-6
1707 python-typer))
1708 (home-page "https://github.com/justindujardin/pathy")
1709 (synopsis "Path interface for local and cloud bucket storage")
1710 (description "Pathy is a python package (with type annotations) for
1711working with Cloud Bucket storage providers using a @code{pathlib} interface.
1712It provides @code{pathlib.Path} subclasses for local and cloud bucket
1713storage.")
1714 (license license:asl2.0)))
1715
1716(define-public python-portend
1717 (package
1718 (name "python-portend")
1719 (version "3.2.1")
1720 (source
1721 (origin
1722 (method url-fetch)
1723 (uri (pypi-uri "portend" version))
1724 (sha256
1725 (base32 "12b4ikxyv32n33mvm4brp74igl1mvw825x01sjvvs54y3yml17da"))))
1726 (build-system pyproject-build-system)
1727 ;; Do not test pyproject.toml with python-pytest-checkdocs as it tries to
1728 ;; download dependencies.
1729 (arguments
1730 '(#:test-flags '("-k" "not project")))
1731 (native-inputs
1732 (list python-pytest
1733 python-setuptools
1734 python-setuptools-scm))
1735 (propagated-inputs
1736 (list python-tempora))
1737 (home-page "https://github.com/jaraco/portend")
1738 (synopsis "Monitor TCP ports for bound or unbound states")
1739 (description
1740 "@code{python-portend} can be used to monitor TCP ports for bound or
1741unbound states. For example, waiting for a port to be occupied or freed
1742within a set timeout. @code{python-portend} can also be used directly from
1743the command line.")
1744 (license license:expat)))
1745
1746(define-public python-prawcore
1747 (package
1748 (name "python-prawcore")
1749 (version "2.4.0")
1750 (source
1751 (origin
1752 (method git-fetch)
1753 (uri (git-reference
1754 (url "https://github.com/praw-dev/prawcore")
1755 (commit (string-append "v" version))))
1756 (file-name (git-file-name name version))
1757 (sha256
1758 (base32 "1y7gh7kk002b2h1ppkr1llb2gjfnby28zvx11j4ji0wm3r3rjh5l"))))
1759 (build-system pyproject-build-system)
1760 (arguments
1761 ;; XXX: These tests fail with an incomplete request response.
1762 (list #:test-flags
1763 #~'("-k" #$(string-append
1764 "not test_revoke__access_token_with_refresh_set"
1765 " and not test_revoke__access_token_without_refresh_set"
1766 " and not test_revoke__refresh_token_with_access_set"
1767 " and not test_refresh__with_scopes"
1768 " and not test_request__patch"))))
1769 (native-inputs
1770 (list python-betamax
1771 python-betamax-matchers
1772 python-betamax-serializers
1773 python-flit-core
1774 python-mock
1775 python-pytest
1776 python-testfixtures))
1777 (propagated-inputs
1778 (list python-requests))
1779 (synopsis "Core component of PRAW")
1780 (description "PRAWcore is a low-level communication layer used by PRAW.")
1781 (home-page "https://praw.readthedocs.io/en/latest/")
1782 (license license:bsd-2)))
1783
1784(define-public python-praw
1785 (package
1786 (name "python-praw")
1787 (version "7.8.1")
1788 (source
1789 (origin
1790 (method git-fetch)
1791 (uri (git-reference
1792 (url "https://github.com/praw-dev/praw")
1793 (commit (string-append "v" version))))
1794 (file-name (git-file-name name version))
1795 (sha256
1796 (base32 "05qq43l4334cq8r8k731qnb45nq12vvfdxwbr6q84a1hafp7n4cg"))))
1797 (build-system pyproject-build-system)
1798 (arguments
1799 (list #:test-flags
1800 #~(list "--ignore=tests/units/models"
1801 "--ignore=tests/integration/models"
1802 "--ignore=tests/unit/test_config.py"
1803 "--ignore=tests/integration/test_reddit.py")))
1804 (native-inputs
1805 (list python-betamax
1806 python-betamax-matchers
1807 python-flit-core
1808 python-pytest))
1809 (propagated-inputs
1810 (list python-prawcore python-update-checker python-websocket-client))
1811 (synopsis "Python Reddit API Wrapper")
1812 (description "PRAW is a Python package that allows for simple access to
1813Reddit’s API. It aims to be easy to use and internally follows all of Reddit’s
1814API rules.")
1815 (home-page "https://praw.readthedocs.io/en/latest/")
1816 (license license:bsd-2)))
1817
1818(define-public python-frozenlist
1819 (package
1820 (name "python-frozenlist")
1821 ;; XXX: Any newer versions fail to build, check why.
1822 (version "1.3.3")
1823 (source
1824 (origin
1825 (method url-fetch)
1826 (uri (pypi-uri "frozenlist" version))
1827 (sha256
1828 (base32 "0sispcpras096fxrd0i35qs25fqy4r0x8v1d6f40pag845bwbg2q"))))
1829 (build-system pyproject-build-system)
1830 (native-inputs
1831 (list python-pytest
1832 python-setuptools
1833 python-wheel))
1834 (home-page "https://github.com/aio-libs/frozenlist")
1835 (synopsis "List-like data structure for Python")
1836 (description "@code{frozenlist.FrozenList} is a list-like structure which
1837implements @code{collections.abc.MutableSequence}. It can be made immutable
1838by calling @code{FrozenList.freeze}.")
1839 (license license:asl2.0)))
1840
1841(define-public python-aiobotocore
1842 (package
1843 (name "python-aiobotocore")
1844 (version "2.25.1")
1845 (source
1846 (origin
1847 (method url-fetch)
1848 (uri (pypi-uri "aiobotocore" version))
1849 (sha256
1850 (base32 "1g7dv81bw7vq55gv3c5jxdw7wp7dp6dwjbh79y3fiv6ppwwyg6za"))))
1851 (build-system pyproject-build-system)
1852 (arguments
1853 (list
1854 ;; TODO: Too many tests fail seemingly because they need Internet access.
1855 #:tests? #false))
1856 (propagated-inputs (list python-aiohttp
1857 python-aioitertools
1858 python-botocore
1859 python-jmespath
1860 python-multidict
1861 python-dateutil
1862 python-urllib3
1863 python-wrapt))
1864 (native-inputs
1865 (list python-setuptools))
1866 (home-page "https://pypi.org/project/aiobotocore/")
1867 (synopsis "Async client for AWS services using botocore and aiohttp")
1868 (description "This package provides an async client for Amazon services
1869using botocore and aiohttp/asyncio. This library is a mostly full featured
1870asynchronous version of botocore.")
1871 (license license:asl2.0)))
1872
1873(define-public python-aiohappyeyeballs
1874 (package
1875 (name "python-aiohappyeyeballs")
1876 (version "2.6.1")
1877 (source
1878 (origin
1879 (method url-fetch)
1880 (uri (pypi-uri "aiohappyeyeballs" version))
1881 (sha256
1882 (base32 "0n1mjip846fprc34ik6if9m8xisva2m0ygyzvz53r013648x1yf3"))))
1883 (build-system pyproject-build-system)
1884 (native-inputs
1885 (list python-poetry-core
1886 python-pytest
1887 python-pytest-asyncio-0.26
1888 python-pytest-cov))
1889 (home-page "https://github.com/aio-libs/aiohappyeyeballs")
1890 (synopsis "Happy Eyeballs for asyncio")
1891 (description "This library exists to allow connecting with Happy
1892Eyeballs (RFC 8305) when you already have a list of @code{addrinfo} and not a
1893DNS name.")
1894 (license license:psfl)))
1895
1896(define-public python-aioitertools
1897 (package
1898 (name "python-aioitertools")
1899 (version "0.12.0")
1900 (source
1901 (origin
1902 (method url-fetch)
1903 (uri (pypi-uri "aioitertools" version))
1904 (sha256
1905 (base32 "0syxv2r90d6410hc68jxhk610pdgx19n1n5rc7shaxxv9xdhbaf2"))))
1906 (build-system pyproject-build-system)
1907 ;; Curiously, no tests are collected although they exist.
1908 (arguments (list #:tests? #false))
1909 (propagated-inputs (list python-typing-extensions))
1910 (native-inputs
1911 (list python-coverage
1912 python-flake8
1913 python-flit-core
1914 python-mypy
1915 python-pytest
1916 python-pytest-asyncio
1917 python-sphinx))
1918 (home-page "https://pypi.org/project/aioitertools/")
1919 (synopsis "Itertools and builtins for AsyncIO and mixed iterables")
1920 (description
1921 "This package provides an implementation of itertools, builtins, and more
1922for AsyncIO and mixed-type iterables.")
1923 (license license:expat)))
1924
1925(define-public python-aiosignal
1926 (package
1927 (name "python-aiosignal")
1928 (version "1.4.0")
1929 (source
1930 (origin
1931 (method url-fetch)
1932 (uri (pypi-uri "aiosignal" version))
1933 (sha256
1934 (base32 "1isin9bp256scp59lbr35h48nw5p5i84b6f9kh1c50w08vcyqzpl"))))
1935 (build-system pyproject-build-system)
1936 (native-inputs
1937 (list python-pytest
1938 python-pytest-asyncio
1939 python-pytest-cov
1940 python-setuptools
1941 python-wheel))
1942 (propagated-inputs
1943 (list python-frozenlist))
1944 (home-page "https://github.com/aio-libs/aiosignal")
1945 (synopsis "Callback manager for Python @code{asyncio} projects")
1946 (description "This Python module provides @code{Signal}, an abstraction to
1947register asynchronous callbacks. The @code{Signal} abstraction can be used
1948for adding, removing and dropping callbacks.")
1949 (license license:asl2.0)))
1950
1951(define-public python-aiohttp
1952 (package
1953 (name "python-aiohttp")
1954 (version "3.11.11")
1955 (source
1956 (origin
1957 (method url-fetch)
1958 (uri (pypi-uri "aiohttp" version))
1959 (sha256
1960 (base32 "0gihj076nm3863sqfnbh786621w1ad7lj7fq88d85wzbwvqwfjdv"))
1961 (snippet
1962 #~(begin
1963 (use-modules ((guix build utils)))
1964 ;; TODO: Unbundle the llhttp sources.
1965 ;; (delete-file-recursively "vendor")
1966 (delete-file "aiohttp/_http_parser.c")
1967 (delete-file "aiohttp/_http_writer.c")))))
1968 (build-system pyproject-build-system)
1969 (arguments
1970 (list
1971 #:test-flags
1972 '(list
1973 ;; This tests requires the 'proxy.py' module, not yet packaged.
1974 "--ignore=tests/test_proxy_functional.py"
1975 ;; These tests need brotli.
1976 "--ignore=tests/test_web_sendfile_functional.py"
1977 "--ignore=tests/test_web_functional.py"
1978 ;; These tests need pytest_codspeed
1979 "--ignore-glob=tests/test_benchmarks*"
1980 ;; These tests need python_on_whales
1981 "--ignore=tests/autobahn/test_autobahn.py"
1982 "-k"
1983 ;; These tests fail for unknown reasons (see:
1984 ;; https://github.com/aio-libs/aiohttp/issues/7130)
1985 (string-append
1986 "not test_no_warnings "
1987 "and not test_default_loop "
1988 "and not test_ctor_global_loop "
1989 "and not test_set_loop_default_loop "
1990
1991 ;; Disable brotli tests, because we’re not providing that optional
1992 ;; library.
1993 "and not test_feed_eof_no_err_brotli "
1994
1995 ;; Disable the following tests as they require
1996 ;; networking.
1997 "and not TestDeflateBuffer "
1998 "and not test_client_session_timeout_zero "
1999 "and not test_empty_body "
2000 "and not test_mark_formdata_as_processed[pyloop] "
2001 "and not test_receive_runtime_err[pyloop] "
2002
2003 ;; assert 'gzip, deflate' == 'gzip, deflate, br'
2004 "and not test_headers[pyloop] "
2005 ;; ~/.. does not resolve
2006 "and not test_add_static_path_resolution"))
2007 #:phases
2008 '(modify-phases %standard-phases
2009 (add-after 'unpack 'fix-tests
2010 (lambda _
2011 ;; Make sure the timestamp of this file is > 1990, because a few
2012 ;; tests like test_static_file_if_modified_since_past_date depend
2013 ;; on it.
2014 (let ((late-90s (* 60 60 24 365 30)))
2015 (utime "tests/data.unknown_mime_type" late-90s late-90s))))
2016 (add-before 'build 'cythonize
2017 (lambda _
2018 ;; Adapted from the Makefile.
2019 (with-directory-excursion "aiohttp"
2020 (for-each
2021 (lambda (file)
2022 (invoke "cython" "-3"
2023 file "-I" "."))
2024 (find-files "." "_.*\\.pyx$"))))))))
2025 (propagated-inputs
2026 (list python-aiohappyeyeballs
2027 python-aiosignal
2028 python-async-timeout
2029 python-attrs
2030 python-frozenlist
2031 python-multidict
2032 python-propcache
2033 python-yarl))
2034 (native-inputs
2035 (list gunicorn-bootstrap
2036 python-cython
2037 python-freezegun
2038 python-pytest
2039 python-pytest-cov
2040 python-pytest-mock
2041 python-pytest-xdist
2042 python-re-assert
2043 python-setuptools
2044 python-wheel))
2045 (home-page "https://github.com/aio-libs/aiohttp/")
2046 (synopsis "Async HTTP client/server framework (asyncio)")
2047 (description "@code{aiohttp} is an asynchronous HTTP client/server
2048framework.
2049
2050Its main features are:
2051@itemize
2052@item Supports both client and server side of HTTP protocol.
2053@item Supports both client and server Web-Sockets out-of-the-box without the
2054Callback Hell.
2055@item Web-server has middlewares and pluggable routing.
2056@end itemize")
2057 (license license:asl2.0)))
2058
2059(define-public python-aiohttp-oauthlib
2060 (package
2061 (name "python-aiohttp-oauthlib")
2062 (version "0.1.0")
2063 (source
2064 (origin
2065 (method url-fetch)
2066 (uri (pypi-uri "aiohttp-oauthlib" version))
2067 (sha256
2068 (base32 "1dwk0gby27xm7384qyz2p7zw9dqhjx7m8fhfk172w36xknjx2g49"))))
2069 (build-system pyproject-build-system)
2070 (arguments (list #:tests? #f)) ; none included
2071 (propagated-inputs (list python-aiohttp python-oauthlib))
2072 (native-inputs (list python-setuptools python-setuptools-scm))
2073 (home-page "https://git.sr.ht/~whynothugo/aiohttp-oauthlib")
2074 (synopsis "OAuthlib authentication support for aiohttp")
2075 (description "Aiohttp-oauthlib uses the Python aiohttp and OAuthlib libraries to
2076provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
2077 (license license:isc)))
2078
2079(define-public python-aiohttp-client-cache
2080 (package
2081 (name "python-aiohttp-client-cache")
2082 (version "0.13.0")
2083 (source
2084 (origin
2085 (method url-fetch)
2086 (uri (pypi-uri "aiohttp_client_cache" version))
2087 (sha256
2088 (base32 "0lrq8fh94whvfmfr9ncfizq2ssa2fp1v1izd1y7f3gmd80ixcp6w"))))
2089 (build-system pyproject-build-system)
2090 (arguments
2091 (list
2092 #:test-flags
2093 ;; Run unit tests only which not require networking or additional setup.
2094 #~(list "--ignore=test/integration")))
2095 (native-inputs
2096 (list python-poetry-core
2097 ;; TODO: Missing packages: pytest-clarity,
2098 ;; nox-poetry, types-aiofiles.
2099 python-async-timeout
2100 python-brotli
2101 python-faker
2102 python-pytest
2103 python-pytest-aiohttp
2104 python-pytest-asyncio
2105 python-pytest-cov
2106 python-pytest-xdist))
2107 (propagated-inputs
2108 (list python-aiofiles
2109 python-aiohttp
2110 python-aiosqlite
2111 python-attrs
2112 python-itsdangerous
2113 python-redis
2114 python-url-normalize))
2115 (home-page "https://github.com/requests-cache/aiohttp-client-cache")
2116 (synopsis "Persistent cache for aiohttp requests")
2117 (description
2118 "This package is an asynchronous persistent caching library specifically
2119designed for @samp{aiohttp} requests in Python. With support for various
2120storage backends, it offers flexibility in how and where the cache is stored.
2121Please note that MongoDB and DynamoDB backends are not currently supported due
2122to the absence of the @samp{motor} and @samp{aioboto3} package dependencies.")
2123 (license license:expat)))
2124
2125(define-public python-aiohttp-cors
2126 (package
2127 (name "python-aiohttp-cors")
2128 (version "0.8.1")
2129 (source
2130 (origin
2131 (method url-fetch)
2132 (uri (pypi-uri "aiohttp_cors" version))
2133 (sha256
2134 (base32 "00qlzc2y65bkl1a5f5v83mmjlrhzmx3a2ngq2pm3jjdnhk5zkb6c"))))
2135 (build-system pyproject-build-system)
2136 (arguments
2137 (list
2138 #:tests? #f)) ; network access is required to run tests
2139 (native-inputs
2140 (list python-setuptools
2141 python-wheel))
2142 (propagated-inputs
2143 (list python-aiohttp))
2144 (home-page "https://github.com/aio-libs/aiohttp-cors")
2145 (synopsis "CORS support for aiohttp")
2146 (description
2147 "This library implements @acronym{CORS, Cross Origin Resource Sharing}
2148support for aiohttp asyncio-powered asynchronous HTTP server.")
2149 (license license:asl2.0)))
2150
2151(define-public python-aiohttp-retry
2152 (package
2153 (name "python-aiohttp-retry")
2154 (version "2.9.1")
2155 (source
2156 (origin
2157 (method git-fetch)
2158 (uri (git-reference
2159 (url "https://github.com/inyutin/aiohttp_retry")
2160 (commit (string-append "v" version))))
2161 (file-name (git-file-name name version))
2162 (sha256
2163 (base32 "0r5lxnxc4s8js7l86pfmdxl455v9lg3m41nz6m1xg4kwwf6j0bpi"))))
2164 (build-system pyproject-build-system)
2165 (native-inputs
2166 (list python-pytest
2167 python-pytest-aiohttp
2168 python-setuptools))
2169 (propagated-inputs
2170 (list python-aiohttp))
2171 (home-page "https://github.com/inyutin/aiohttp_retry")
2172 (synopsis "Simple retry client for aiohttp")
2173 (description
2174 "This package implements @code{RetryClient} for @code{aiohttp} to retry
2175connection to provided endpoint with timeouts logic or use:
2176
2177@itemize
2178@item @code{ExponentialRetry} with exponential backoff
2179@item @code{RandomRetry} for random backoff
2180@item @code{ListRetry} with backoff you predefine by list
2181@item @code{FibonacciRetry} with backoff that looks like fibonacci sequence
2182@item @code{JitterRetry} exponential retry with a bit of randomness
2183@end itemize")
2184 (license license:expat)))
2185
2186(define-public python-aiohttp-socks
2187 (package
2188 (name "python-aiohttp-socks")
2189 (version "0.10.1")
2190 (source
2191 (origin
2192 (method url-fetch)
2193 (uri (pypi-uri "aiohttp_socks" version))
2194 (sha256
2195 (base32
2196 "0s70jpcr9wc8ld2v1w309cz7r8mm2bipf6zbkdqqaa0z0pwf3wj9"))))
2197 (build-system pyproject-build-system)
2198 (arguments (list #:tests? #false)) ;none included
2199 (propagated-inputs
2200 (list python-aiohttp python-socks))
2201 (native-inputs (list python-setuptools python-wheel))
2202 (home-page "https://github.com/romis2012/aiohttp-socks")
2203 (synopsis "SOCKS proxy connector for aiohttp")
2204 (description "This package provides a SOCKS proxy connector for
2205aiohttp. It supports SOCKS4(a) and SOCKS5.")
2206 (license license:asl2.0)))
2207
2208(define-public python-aiodns
2209 (package
2210 (name "python-aiodns")
2211 (version "3.0.0")
2212 (source
2213 (origin
2214 (method url-fetch)
2215 (uri (pypi-uri "aiodns" version))
2216 (sha256
2217 (base32
2218 "1mlcw14hxyzd2yg89gj1l84gfi8nbl7h32iw17myxz23wymxyswl"))))
2219 (build-system python-build-system)
2220 (propagated-inputs (list python-pycares))
2221 (arguments
2222 `(#:tests? #f)) ;tests require internet access
2223 (home-page "https://github.com/saghul/aiodns")
2224 (synopsis "Simple DNS resolver for asyncio")
2225 (description "@code{aiodns} provides a simple way for doing
2226asynchronous DNS resolutions with a synchronous looking interface by
2227using @url{https://github.com/saghul/pycares,pycares}.")
2228 (license license:expat)))
2229
2230(define-public python-aioquic
2231 (package
2232 (name "python-aioquic")
2233 (version "1.2.0")
2234 (source
2235 (origin
2236 (method url-fetch)
2237 (uri (pypi-uri "aioquic" version))
2238 (sha256
2239 (base32 "16bigrn5b46c7nmpzxhnlhh4y03hwc7dbd0mi5f8r53i7yxn64pr"))))
2240 (build-system pyproject-build-system)
2241 (arguments
2242 (list
2243 #:test-flags
2244 #~(list "-k" (string-join
2245 ;; AssertionError: AlertBadCertificate not raised
2246 (list "not test_verify_subject_no_subjaltname"
2247 ;; AttributeError: module
2248 ;; 'service_identity.cryptography' has no attribute
2249 ;; 'extract_patterns'
2250 "test_verify_subject_with_subjaltname"
2251 ;; AttributeError: module
2252 ;; 'service_identity.cryptography' has no attribute
2253 ;; 'extract_patterns'
2254 "test_verify_subject_with_subjaltname_ipaddress")
2255 " and not "))))
2256 (native-inputs
2257 (list nss-certs-for-test
2258 python-pytest
2259 python-setuptools
2260 python-wheel))
2261 (inputs
2262 (list openssl))
2263 (propagated-inputs
2264 (list python-certifi
2265 python-pylsqpack
2266 python-pyopenssl
2267 python-service-identity))
2268 (home-page "https://github.com/aiortc/aioquic")
2269 (synopsis "QUIC and HTTP3 implementation in Python")
2270 (description
2271 "@code{aioquic} is a library for the QUIC network protocol in Python.
2272It features a minimal TLS 1.3 implementation, a QUIC stack and an HTTP/3 stack.")
2273 (license license:bsd-3)))
2274
2275(define-public python-aiorpcx
2276 (package
2277 (name "python-aiorpcx")
2278 (version "0.25.0")
2279 (source
2280 (origin
2281 (method git-fetch)
2282 ;; PyPI misses the util.py file used for tests.
2283 (uri (git-reference
2284 (url "https://github.com/kyuupichan/aiorpcX")
2285 (commit version)))
2286 (file-name (git-file-name name version))
2287 (sha256
2288 (base32
2289 "0sn4xxlpy0kb5b25bqrjzh2m6bskdyydc6cq8bigb7g5dacksn4q"))))
2290 (build-system pyproject-build-system)
2291 (arguments
2292 (list
2293 #:test-flags
2294 ;; This test opens a remote connection.
2295 #~(list "-k" "not test_create_connection_resolve_good")))
2296 (native-inputs (list python-pytest
2297 python-pytest-asyncio-0.26
2298 python-setuptools))
2299 (propagated-inputs
2300 (list python-attrs python-websockets))
2301 (home-page "https://github.com/kyuupichan/aiorpcX")
2302 (synopsis "Generic asyncio RPC implementation")
2303 (description
2304 "The aiorpcX library is a generic asyncio implementation of RPC suitable
2305for an application that is a client, server or both.
2306
2307The package includes a module with full coverage of JSON RPC versions 1.0 and
23082.0, JSON RPC protocol auto-detection, and arbitrary message framing. It also
2309comes with a SOCKS proxy client.")
2310 (license (list license:expat license:bsd-2))))
2311
2312(define-public python-aiostream
2313 (package
2314 (name "python-aiostream")
2315 (version "0.7.0")
2316 (source
2317 (origin
2318 (method git-fetch) ;no tests in PyPI archvie
2319 (uri (git-reference
2320 (url "https://github.com/vxgmichel/aiostream")
2321 (commit (string-append "v" version))))
2322 (file-name (git-file-name name version))
2323 (sha256
2324 (base32 "1wf89l9f0ivlv796pklpgykx6j6ksfqrmvzikd8w5j6ldln7bv50"))))
2325 (build-system pyproject-build-system)
2326 (native-inputs
2327 (list python-pytest
2328 python-pytest-cov
2329 python-pytest-asyncio
2330 python-setuptools))
2331 (propagated-inputs
2332 (list python-typing-extensions))
2333 (home-page "https://github.com/vxgmichel/aiostream")
2334 (synopsis "Generator-based operators for asynchronous iteration")
2335 (description "@code{aiostream} provides a collection of stream operators that can
2336be combined to create asynchronous pipelines of operations. It can be seen as an
2337asynchronous version of @code{itertools}, although some aspects are slightly
2338different. All the provided operators return a unified interface called a stream. A
2339stream is an enhanced asynchronous iterable.")
2340 (license license:gpl3)))
2341
2342(define-public python-asgiref
2343 (package
2344 (name "python-asgiref")
2345 (version "3.8.1")
2346 (source (origin
2347 (method url-fetch)
2348 (uri (pypi-uri "asgiref" version))
2349 (sha256
2350 (base32 "146mhkn3zp2bqf7j6r3chdlvfzgs5x1lrnqahsllgjdyl20bshy3"))))
2351 (build-system pyproject-build-system)
2352 (native-inputs
2353 (list python-mypy python-pytest python-pytest-asyncio python-setuptools
2354 python-wheel))
2355 (home-page "https://github.com/django/asgiref/")
2356 (synopsis "ASGI specs, helper code, and adapters")
2357 (description
2358 "ASGI is a standard for Python asynchronous web apps and servers to
2359communicate with each other, and positioned as an asynchronous successor to
2360WSGI. This package includes libraries for implementing ASGI servers.")
2361 (license license:bsd-3)))
2362
2363(define-public python-asgi-csrf
2364 (package
2365 (name "python-asgi-csrf")
2366 (version "0.11")
2367 (source (origin
2368 (method git-fetch) ;for tests
2369 (uri (git-reference
2370 (url "https://github.com/simonw/asgi-csrf")
2371 (commit version)))
2372 (file-name (git-file-name name version))
2373 (sha256
2374 (base32
2375 "1dn9v47z2b599cnwahxvzsll2w28940ycgh5skxgq04vcqqssf29"))))
2376 (build-system pyproject-build-system)
2377 (propagated-inputs (list python-itsdangerous python-multipart))
2378 (native-inputs (list python-asgi-lifespan
2379 python-httpx
2380 python-pytest
2381 python-pytest-asyncio
2382 python-starlette
2383 python-setuptools
2384 python-wheel))
2385 (home-page "https://github.com/simonw/asgi-csrf")
2386 (synopsis "ASGI middleware for protecting against CSRF attacks")
2387 (description "This Asynchronous Server Gateway Interface (ASGI)
2388middleware protects against Cross-site request forgery (CSRF) attacks.
2389It implements the Double Submit Cookie pattern, where a cookie is set
2390that is then compared to a @code{csrftoken} hidden form field or a
2391@code{x-csrftoken} HTTP header.")
2392 (license license:asl2.0)))
2393
2394(define-public python-asgi-lifespan
2395 (package
2396 (name "python-asgi-lifespan")
2397 (version "2.1.0")
2398 (source (origin
2399 (method git-fetch) ;for tests
2400 (uri (git-reference
2401 (url "https://github.com/florimondmanca/asgi-lifespan")
2402 (commit version)))
2403 (file-name (git-file-name name version))
2404 (sha256
2405 (base32
2406 "0iqa3h61gsq1qd6j9v68k989596m9n9k1dx8zv6135rmhzzrs296"))))
2407 (build-system pyproject-build-system)
2408 (arguments
2409 (list
2410 #:test-flags
2411 '(list "-c" "/dev/null" ;ignore coverage-related options
2412 "-k"
2413 (string-append
2414 ;; XXX: Some tests fail because of "Exceptions from Trio nursery"
2415 "not (test_lifespan_manager[trio-None-None-StartupFailed]"
2416 " or test_lifespan_manager[trio-None-BodyFailed-None]"
2417 " or test_lifespan_manager[trio-None-BodyFailed-StartupFailed]"
2418 " or test_lifespan_manager[trio-ShutdownFailed-None-None]"
2419 " or test_lifespan_manager[trio-ShutdownFailed-None-StartupFailed]"
2420 " or test_lifespan_manager[trio-ShutdownFailed-BodyFailed-StartupFailed]"
2421 " or test_lifespan_timeout[trio-slow_shutdown]"
2422 " or test_lifespan_not_supported[trio-http_only]"
2423 " or test_lifespan_not_supported[trio-http_no_assert]"
2424 " or test_lifespan_not_supported[trio-http_no_assert_before_receive_request]"
2425 ")"))
2426 #:phases
2427 '(modify-phases %standard-phases
2428 (add-after 'unpack 'compatibility
2429 (lambda _
2430 ;; httpx version 0.28.0 removed the "app" shortcut.
2431 (substitute* "tests/test_manager.py"
2432 (("app=manager.app")
2433 "transport=httpx.ASGITransport(manager.app)")))))))
2434 (native-inputs (list python-httpx
2435 python-pytest
2436 python-pytest-asyncio
2437 python-pytest-trio
2438 python-starlette
2439 python-setuptools
2440 python-wheel))
2441 (propagated-inputs (list python-sniffio))
2442 (home-page "https://github.com/florimondmanca/asgi-lifespan")
2443 (synopsis "Programmatic startup/shutdown of ASGI apps")
2444 (description "Programmatically send startup/shutdown lifespan events
2445into Asynchronous Server Gateway Interface (ASGI) applications. When
2446used in combination with an ASGI-capable HTTP client such as HTTPX, this
2447allows mocking or testing ASGI applications without having to spin up an
2448ASGI server.")
2449 (license license:expat)))
2450
2451(define-public python-a2wsgi
2452 (package
2453 (name "python-a2wsgi")
2454 (version "1.10.7")
2455 (source (origin
2456 (method url-fetch)
2457 (uri (pypi-uri "a2wsgi" version))
2458 (sha256
2459 (base32
2460 "13ikyfmkx7hlrbg5rpcdm6kw4wcsy00giil3f72hpb6sw7vjyinf"))))
2461 (build-system pyproject-build-system)
2462 (arguments
2463 (list
2464 #:test-flags
2465 #~(list "-k" (string-join
2466 (list "not test_starlette_stream_response"
2467 "test_starlette_base_http_middleware"
2468 "test_baize_stream_response"
2469 ;; Fails because of harmless whitespace differences.
2470 "test_wsgi_post")
2471 " and not "))
2472 #:build-backend "pdm.backend"))
2473 (native-inputs
2474 (list python-pdm-backend
2475 python-pytest
2476 ;; python-baize ; not packed yet
2477 python-httpx-bootstrap
2478 ;; Cycle: python-a2wsgi->python-uvicorn->
2479 ;; python-httpx->python-starlette->python-a2wsgi
2480 ;; python-starlette
2481 python-pytest-asyncio))
2482 (home-page "https://github.com/abersheeran/a2wsgi")
2483 (synopsis "Convert WSGI to ASGI or vice versa")
2484 (description
2485 "This program converts a WSGI program to an ASGI program or the other
2486way around. It depends only on the Python standard library.")
2487 (license license:asl2.0)))
2488
2489(define-public python-httpauth
2490 (package
2491 (name "python-httpauth")
2492 (version "0.4.1")
2493 (source (origin
2494 (method url-fetch)
2495 (uri (pypi-uri "httpauth" version))
2496 (sha256
2497 (base32
2498 "1m6rwvivg61l3h34hf6p6gkqmr69sb1c4k5ha379nxq0p8bfgahb"))))
2499 (build-system pyproject-build-system)
2500 (native-inputs (list python-pytest python-setuptools python-wheel))
2501 (home-page "https://github.com/jonashaag/httpauth")
2502 (synopsis "WSGI HTTP Digest Authentication middleware")
2503 (description "@code{python-httpauth} is WSGI middleware that secures some/all
2504routes using HTTP Digest Authentication.")
2505 (license license:bsd-2)))
2506
2507(define-public python-css-html-js-minify
2508 (let ((commit "8f72452960e41bc5476e50d96481f633eff72750")
2509 (revision "0"))
2510 (package
2511 (name "python-css-html-js-minify")
2512 (version (git-version "2.5.5" revision commit))
2513 (source
2514 (origin
2515 (method git-fetch)
2516 (uri (git-reference
2517 (url "https://github.com/juancarlospaco/css-html-js-minify")
2518 (commit commit)))
2519 (file-name (git-file-name name version))
2520 (sha256
2521 (base32 "1lkx03720zk6q16w3d9r3l5kryikd1cmzwrcjzsjxwrq4zfh6vdf"))))
2522 (build-system pyproject-build-system)
2523 (arguments
2524 (list
2525 #:phases
2526 #~(modify-phases %standard-phases
2527 (add-after 'unpack 'relax-requirements
2528 (lambda _
2529 (substitute* "setup.cfg"
2530 (("^tests_require.*") "")))))))
2531 (native-inputs (list python-pytest python-setuptools))
2532 (home-page "https://github.com/juancarlospaco/css-html-js-minify")
2533 (synopsis "CSS/HTML/JS minifier")
2534 (description
2535 "This package provides a single-file minifier for CSS, HTML, and JavaScript.")
2536 ;; XXX: The README just says "GNU GPL and GNU LGPL and MIT". From
2537 ;; <https://github.com/juancarlospaco/css-html-js-minify/issues/9> it
2538 ;; looks like the user can choose a license.
2539 (license (list license:gpl3+ license:lgpl3+ license:expat)))))
2540
2541(define-public python-aws-sam-translator
2542 (package
2543 (name "python-aws-sam-translator")
2544 (version "1.99.0")
2545 (source
2546 (origin
2547 (method git-fetch) ; no tests in PyPI release
2548 (uri (git-reference
2549 (url "https://github.com/aws/serverless-application-model")
2550 (commit (string-append "v" version))))
2551 (file-name (git-file-name name version))
2552 (sha256
2553 (base32 "1k9a8r0kfjsrxk5z4yhipcynr2sqcl7lpc1xmdblxk76cqvsmkb3"))))
2554 (build-system pyproject-build-system)
2555 (arguments
2556 (list
2557 #:test-flags
2558 #~(list "--numprocesses" (number->string (parallel-job-count))
2559 "--ignore=tests/bin/test_public_interface.py"
2560 "tests")
2561 #:phases
2562 #~(modify-phases %standard-phases
2563 (add-after 'unpack 'fix-pytest-config
2564 (lambda _
2565 ;; Drop test coverage requirements.
2566 (substitute* "pytest.ini"
2567 ((".*addopts.*") ""))))
2568 (add-before 'check 'pre-check
2569 (lambda _
2570 (setenv "AWS_DEFAULT_REGION" "eu-west-3"))))))
2571 (native-inputs
2572 (list python-pytest
2573 python-setuptools
2574 python-pytest-xdist
2575 python-parameterized
2576 python-pyyaml))
2577 (propagated-inputs
2578 (list python-boto3
2579 python-jsonschema
2580 python-pydantic-2
2581 python-typing-extensions))
2582 (home-page "https://github.com/aws/serverless-application-model")
2583 (synopsis "Transform AWS SAM templates into AWS CloudFormation templates")
2584 (description
2585 "AWS SAM Translator is a library that transform @dfn{Serverless Application
2586Model} (SAM) templates into AWS CloudFormation templates.")
2587 (license license:asl2.0)))
2588
2589(define-public python-aws-xray-sdk
2590 (package
2591 (name "python-aws-xray-sdk")
2592 (version "2.14.0")
2593 (home-page "https://github.com/aws/aws-xray-sdk-python")
2594 (source (origin
2595 (method git-fetch)
2596 (uri (git-reference (url home-page) (commit version)))
2597 (file-name (git-file-name name version))
2598 (sha256
2599 (base32
2600 "0khm86218rfjmgfw0azk7gnq6y9gkj95i0i30wa5v2li1z4z8qxd"))))
2601 (build-system pyproject-build-system)
2602 (arguments
2603 (list
2604 #:test-flags
2605 '(list ;; Tries to connect to external network resources
2606 "--ignore=tests/ext/aiohttp/test_client.py"
2607 "--ignore=tests/ext/httplib/test_httplib.py"
2608 "--ignore=tests/ext/httpx"
2609 "--ignore=tests/ext/requests/test_requests.py"
2610 ;; TODO: How to configure Django for these tests?
2611 "--ignore=tests/ext/django"
2612 ;; These tests require packages not yet in Guix.
2613 "--ignore=tests/ext/aiobotocore/test_aiobotocore.py"
2614 "--ignore=tests/ext/aiohttp/test_middleware.py"
2615 "--ignore=tests/ext/pg8000/test_pg8000.py"
2616 "--ignore=tests/ext/psycopg2/test_psycopg2.py"
2617 "--ignore=tests/ext/pymysql/test_pymysql.py"
2618 "--ignore=tests/ext/pynamodb/test_pynamodb.py"
2619 "--ignore=tests/ext/sqlalchemy_core/test_postgres.py"
2620 "--ignore=tests/ext/sqlalchemy_core/test_dburl.py"
2621 "--ignore=tests/test_async_recorder.py"
2622 ;; FIXME: module 'sqlalchemy.orm' has no attribute 'DeclarativeBase'.
2623 "--ignore-glob=tests/ext/sqlalchemy*"
2624 "--ignore=tests/ext/flask_sqlalchemy/test_query.py"
2625 ;; FIXME: Why is this failing?
2626 "--ignore=tests/test_patcher.py"
2627 "--ignore=tests/test_lambda_context.py")
2628 #:phases
2629 '(modify-phases %standard-phases
2630 (add-before 'check 'pre-check
2631 (lambda _
2632 ;; Allow "import tests.utils" to work as expected.
2633 (setenv "PYTHONPATH" (getcwd)))))))
2634 (native-inputs
2635 (list ;; These are required for the test suite.
2636 python-aiohttp
2637 python-bottle
2638 python-flask
2639 python-flask-sqlalchemy
2640 python-httpx
2641 python-mock
2642 python-pymysql
2643 python-pytest
2644 python-pytest-asyncio-0.26
2645 python-pytest-benchmark
2646 python-setuptools
2647 python-sqlalchemy
2648 python-webtest))
2649 (propagated-inputs
2650 (list python-botocore
2651 python-jsonpickle
2652 python-requests
2653 python-wrapt))
2654 (synopsis "Profile applications on AWS X-Ray")
2655 (description
2656 "The AWS X-Ray SDK for Python enables Python developers to record and
2657emit information from within their applications to the AWS X-Ray service.")
2658 (license license:asl2.0)))
2659
2660(define-public python-publicsuffixlist
2661 (package
2662 (name "python-publicsuffixlist")
2663 (version "1.0.2.20250202")
2664 (source
2665 (origin
2666 (method url-fetch)
2667 (uri (pypi-uri "publicsuffixlist" version))
2668 (sha256
2669 (base32 "0llam7g7sv08lcfgy18iph8br8ldjmy2qbjaykc9pd3z4iisb0yd"))))
2670 (build-system pyproject-build-system)
2671 (arguments (list #:test-backend #~'unittest))
2672 (native-inputs (list python-setuptools))
2673 (home-page "https://github.com/ko-zu/psl")
2674 (synopsis "Public suffix list for Python")
2675 (description
2676 "This package provides an implementation of
2677@url{https://publicsuffix.org/, Public Suffix List } as Python library.
2678
2679Features:
2680@itemize
2681@item supports IDN (unicode and punycoded)
2682@item shipped with built-in PSL and an updater script
2683@item written in Pure Python with no library dependencies
2684@end itemize")
2685 (license license:mpl2.0)))
2686
2687(define-public python-pycognito
2688 (package
2689 (name "python-pycognito")
2690 (version "2024.5.1")
2691 (source
2692 (origin
2693 (method url-fetch)
2694 (uri (pypi-uri "pycognito" version))
2695 (sha256
2696 (base32 "1r1sq87spqcfgg17khgpqc2ga8m9nk10flg9h23drhy2k1kcc4g2"))))
2697 (build-system pyproject-build-system)
2698 (arguments
2699 ;; XXX: cycles with python-moto, bootstrap/minimal variant is required.
2700 (list #:tests? #f))
2701 (native-inputs
2702 (list python-setuptools))
2703 (propagated-inputs
2704 (list python-boto3
2705 python-envs
2706 python-pyjwt
2707 python-requests))
2708 (home-page "https://github.com/pvizeli/pycognito")
2709 (synopsis "Python library for using AWS Cognito")
2710 (description
2711 "This package provides a Python class to integrate Boto3's Cognito
2712client so it is easy to login users, with @acronym{Secure Remote Password,
2713SRP} support.")
2714 (license license:asl2.0)))
2715
2716(define-public python-python3-saml
2717 (package
2718 (name "python-python3-saml")
2719 (version "1.16.0")
2720 (source
2721 (origin
2722 (method git-fetch)
2723 (uri (git-reference
2724 (url "https://github.com/SAML-Toolkits/python3-saml")
2725 (commit (string-append "v" version))))
2726 (file-name (git-file-name name version))
2727 (sha256
2728 (base32 "1isisymhk8zblj5942jfl0zq392q5fpjikx52nywvzb0m2dcc81b"))))
2729 (build-system pyproject-build-system)
2730 (arguments
2731 (list
2732 ;; 214 tests pass, 50 fail; many fail because of required Internet
2733 ;; access or because of assumptions about the location of test files.
2734 #:tests? #false
2735 #:phases
2736 #~(modify-phases %standard-phases
2737 ;; FIXME: This should be fixed in python-xmlsec
2738 (add-before 'check 'pre-check
2739 (lambda* (#:key inputs #:allow-other-keys)
2740 (let ((lib (search-input-file inputs
2741 "lib/libxmlsec1-openssl.so")))
2742 (setenv "LD_LIBRARY_PATH" (dirname lib))))))))
2743 (inputs (list xmlsec-openssl))
2744 (propagated-inputs (list python-isodate python-lxml python-xmlsec))
2745 (native-inputs (list python-coverage
2746 python-flake8
2747 python-freezegun
2748 python-poetry-core
2749 python-pytest
2750 python-setuptools
2751 python-wheel))
2752 (home-page "https://github.com/SAML-Toolkits/python3-saml")
2753 (synopsis "Saml Python toolkit")
2754 (description
2755 "The SAML Python Toolkit lets you add SAML support to your Python
2756software.")
2757 (license license:expat)))
2758
2759(define-public python-ovh
2760 (package
2761 (name "python-ovh")
2762 (version "1.1.0")
2763 (source (origin
2764 (method url-fetch)
2765 (uri (pypi-uri "ovh" version))
2766 (sha256
2767 (base32
2768 "0ygniv12lixh9rvnjcd01gzbzk2b5xwcg2a59b7964a77dd9p3qh"))))
2769 (build-system pyproject-build-system)
2770 (arguments (list #:tests? #f)) ; XXX: tests require networking
2771 (propagated-inputs (list python-requests))
2772 (native-inputs (list python-black
2773 python-coverage
2774 python-flake8
2775 python-isort
2776 python-pytest
2777 python-pytest-cov
2778 python-setuptools
2779 python-sphinx
2780 python-wheel))
2781 (home-page "https://api.ovh.com")
2782 (synopsis "Interact with OVHcloud APIs")
2783 (description "This package provides the official module to perform HTTP requests
2784to the OVHcloud APIs.")
2785 (license license:bsd-3)))
2786
2787(define-public python-cbor2
2788 (package
2789 (name "python-cbor2")
2790 (version "5.4.2.post1")
2791 (source
2792 (origin
2793 (method url-fetch)
2794 (uri (pypi-uri "cbor2" version))
2795 (sha256
2796 (base32 "15y78xcc3zkmvj1mdzz8gyhf3apbl91073kwhzbjk5abc1civwlw"))))
2797 (build-system pyproject-build-system)
2798 (native-inputs
2799 (list python-pytest
2800 python-pytest-cov
2801 python-setuptools
2802 python-setuptools-scm
2803 python-wheel))
2804 (home-page "https://github.com/agronholm/cbor2")
2805 (synopsis "Concise Binary Object Representation (CBOR) (de)serializer")
2806 (description "This Python library provides encoding and decoding for the
2807Concise Binary Object
2808Representation (CBOR) (@url{https://www.rfc-editor.org/rfc/rfc8949.html, RFC
28098949}) serialization format. The specification is fully compatible with the
2810original RFC 7049. Among its features are:
2811@itemize
2812@item Simple API like the @code{json} or @code{pickle} modules.
2813@item Support many CBOR tags with stdlib objects.
2814@item Generic tag decoding.
2815@item Shared value references including cyclic references.
2816@item String references compact encoding with repeated strings replaced with
2817indices.
2818@item Optional C module backend tested on big- and little-endian architectures.
2819@item Extensible tagged value handling using tag_hook and object_hook on
2820decode and default on encode.
2821@end itemize")
2822 (license license:expat)))
2823
2824(define-public python-cfn-lint
2825 (package
2826 (name "python-cfn-lint")
2827 (version "1.38.1")
2828 (source
2829 (origin
2830 (method git-fetch)
2831 (uri (git-reference
2832 (url "https://github.com/aws-cloudformation/cfn-lint")
2833 (commit (string-append "v" version))))
2834 (file-name (git-file-name name version))
2835 (sha256
2836 (base32 "1crwx0cp50h83xz8lc4ny504mx4dadpk80ln539syd4jd78qplgy"))))
2837 (build-system pyproject-build-system)
2838 (arguments
2839 (list
2840 ;; tests: 2136 passed, 11 deselected, 1 warning
2841 #:test-flags
2842 #~(list "--ignore=test/integration/"
2843 "-k" (string-join
2844 ;; Tests failing on doctest or comparing diff.
2845 (list "not test_build_graph"
2846 "test_good_template"
2847 "test_success_run"
2848 "test_update_docs"
2849 ;; ImportError: Missing optional dependencies sarif
2850 "test_sarif_formatter")
2851 " and not "))
2852 #:phases
2853 #~(modify-phases %standard-phases
2854 (add-after 'unpack 'remove-deprecated
2855 (lambda _
2856 (substitute* "src/cfnlint/data/AdditionalSpecs/LmbdRuntimeLifecycle.json"
2857 (("deprecated\": \"2025")
2858 "deprecated\": \"2125")))))))
2859 (native-inputs
2860 (list python-defusedxml
2861 python-pydot
2862 python-pytest
2863 python-setuptools))
2864 (propagated-inputs
2865 (list python-aws-sam-translator
2866 python-jsonpatch
2867 python-networkx
2868 python-pyyaml
2869 python-regex
2870 python-sympy
2871 python-typing-extensions
2872 ;; [optional]
2873 python-junit-xml))
2874 (home-page "https://github.com/aws-cloudformation/cfn-lint")
2875 (synopsis "Validate CloudFormation templates")
2876 (description
2877 "This package lets you validate CloudFormation YAML/JSON templates against
2878the CloudFormation spec and additional checks. Includes checking valid values
2879for resource properties and best practices.")
2880 (license license:expat)))
2881
2882(define-public python-requests-cache
2883 (package
2884 (name "python-requests-cache")
2885 (version "1.2.1")
2886 (source
2887 (origin
2888 (method url-fetch)
2889 (uri (pypi-uri "requests_cache" version))
2890 (sha256
2891 (base32 "1l8i4l2pd26gbrlcdb5z056wvsqfr3vvbyqq2f8x1f65zn3ckav8"))))
2892 (build-system pyproject-build-system)
2893 (arguments
2894 (list
2895 #:test-flags
2896 #~(list "--numprocesses" (number->string (parallel-job-count))
2897 ;; These tests require access to external services, e.g. MongoDB
2898 ;; and Redis.
2899 "--ignore=tests/integration"
2900 ;; AttributeError: <class 'requests.adapters.HTTPAdapter'> does
2901 ;; not have the attribute 'get_connection_with_tls_context'
2902 "-k" "not test_mock_session")
2903 #:phases
2904 #~(modify-phases %standard-phases
2905 (add-before 'check 'pre-check
2906 (lambda _
2907 ;; PermissionError: [Errno 13] Permission denied:
2908 ;; '/homeless-shelter'
2909 (setenv "HOME" "/tmp"))))))
2910 (native-inputs
2911 (list python-poetry-core
2912 python-pytest
2913 python-pytest-rerunfailures
2914 python-pytest-xdist
2915 python-requests-mock
2916 python-responses
2917 python-rich
2918 python-tenacity
2919 python-time-machine
2920 python-timeout-decorator))
2921 (propagated-inputs
2922 (list python-attrs
2923 python-boto3
2924 python-bson
2925 python-cattrs
2926 python-itsdangerous
2927 python-orjson
2928 python-platformdirs
2929 python-pymongo
2930 python-pyyaml
2931 python-redis
2932 python-requests
2933 python-ujson
2934 python-url-normalize
2935 python-urllib3))
2936 (home-page "https://github.com/requests-cache/requests-cache")
2937 (synopsis "Persistent HTTP cache for Python requests")
2938 (description
2939 "This package provides a drop-in replacement for @code{requests.Session}
2940with caching offload to SQLite, Redis, MongoDB and AWS DynamoDB or save
2941responses as planin JSON/YAML file or save responses as plain JSON/YAML
2942files.")
2943 (license license:bsd-2)))
2944
2945(define-public python-requests-futures
2946 (package
2947 (name "python-requests-futures")
2948 (version "1.0.2")
2949 (source
2950 (origin
2951 (method url-fetch)
2952 (uri (pypi-uri "requests_futures" version))
2953 (sha256
2954 (base32 "1njqfjmd72l5f32jvcppg2afrvb0cd8angdwmq7q0vik81wvazkb"))))
2955 (build-system pyproject-build-system)
2956 (native-inputs
2957 (list python-greenlet
2958 python-pytest
2959 python-pytest-httpbin
2960 python-setuptools
2961 python-werkzeug))
2962 (propagated-inputs (list python-requests))
2963 (home-page "https://github.com/ross/requests-futures")
2964 (synopsis "Asynchronous Python HTTP for Humans")
2965 (description
2966 "This package provides and add-on the Python Requests HTTP library to run
2967code asynchronously.")
2968 (license license:asl2.0)))
2969
2970(define-public python-s3path
2971 (package
2972 (name "python-s3path")
2973 (version "0.6.4")
2974 (source
2975 (origin
2976 (method url-fetch)
2977 (uri (pypi-uri "s3path" version))
2978 (sha256
2979 (base32 "1lp5243jjf9ngqmajgnfr1px1kmpkfmgh248xlqz0nkww4wcy1hh"))))
2980 (build-system pyproject-build-system)
2981 (arguments
2982 (list
2983 ;; XXX: All tests fail with error: fixture 's3_mock' not found.
2984 #:tests? #f))
2985 (native-inputs
2986 (list python-setuptools
2987 python-wheel))
2988 (propagated-inputs
2989 (list python-boto3
2990 python-smart-open))
2991 (home-page "https://github.com/liormizr/s3path")
2992 (synopsis "Pathlib extension for AWS S3 Service")
2993 (description
2994 "S3Path provide a Python convenient File-System/Path like interface for
2995AWS S3 Service using boto3 S3 resource as a driver.")
2996 (license license:asl2.0)))
2997
2998(define-public python-falcon
2999 (package
3000 (name "python-falcon")
3001 (version "4.0.2")
3002 (source
3003 (origin
3004 ;; Use git, as there are some test files missing from the PyPI release,
3005 ;; such as 'examples' directory.
3006 (method git-fetch)
3007 (uri (git-reference
3008 (url "https://github.com/falconry/falcon")
3009 (commit version)))
3010 (file-name (git-file-name name version))
3011 (sha256
3012 (base32
3013 "1zhyvfbz4c1bxd4vbsgk19dzih6kkzgin10lmsr32x3b4qgnwqxs"))))
3014 (build-system pyproject-build-system)
3015 (arguments
3016 (list
3017 #:test-flags
3018 '(list "-k" "not slow"
3019 "--ignore-glob=examples/*" "--ignore-glob=bench/*" "tests")
3020 #:phases
3021 '(modify-phases %standard-phases
3022 (add-before 'check 'pre-check
3023 (lambda _
3024 (setenv "FALCON_ASGI_WRAP_NON_COROUTINES" "Y")
3025 (setenv "FALCON_TESTING_SESSION" "Y")
3026 (setenv "PYTHONASYNCIODEBUG" "1")
3027 (setenv "HOME" "/tmp"))))))
3028 (propagated-inputs
3029 (list python-mimeparse))
3030 (native-inputs
3031 (list python-aiofiles
3032 python-cbor2
3033 python-cython ;for faster binaries
3034 python-fakeredis
3035 python-httpx
3036 python-mujson
3037 python-msgpack
3038 python-orjson
3039 python-pecan
3040 python-pillow
3041 python-pytest
3042 python-pytest-asyncio
3043 python-pytest-runner
3044 python-pyyaml
3045 python-rapidjson
3046 python-requests
3047 python-setuptools
3048 python-testtools
3049 python-ujson
3050 python-websockets
3051 python-wheel))
3052 (home-page "https://falconframework.org")
3053 (synopsis "Web framework for building APIs and application backends")
3054 (description "Falcon is a web API framework for building microservices,
3055application backends and higher-level frameworks. Among its features are:
3056@itemize
3057@item Optimized and extensible code base
3058@item Routing via URI templates and REST-inspired resource
3059classes
3060@item Access to headers and bodies through request and response
3061classes
3062@item Request processing via middleware components and hooks
3063@item Idiomatic HTTP error responses
3064@item Straightforward exception handling
3065@item Unit testing support through WSGI helpers and mocks
3066@item Compatible with both CPython and PyPy
3067@item Cython support for better performance when used with CPython
3068@end itemize")
3069 (license license:asl2.0)))
3070
3071(define-public python-falcon-cors
3072 (package
3073 (name "python-falcon-cors")
3074 (version "1.1.7")
3075 (source
3076 (origin
3077 (method url-fetch)
3078 (uri (pypi-uri "falcon-cors" version))
3079 (sha256
3080 (base32
3081 "12pym7hwsbd8b0c1azn95nas8gm3f1qpr6lpyx0958xm65ffr20p"))))
3082 (build-system python-build-system)
3083 (native-inputs
3084 (list python-falcon))
3085 (home-page
3086 "https://github.com/lwcolton/falcon-cors")
3087 (synopsis "Falcon @dfn{cross-origin resource sharing} (CORS) library")
3088 (description "This middleware provides @dfn{cross-origin resource
3089sharing} (CORS) support for Falcon. It allows applying a specially crafted
3090CORS object to the incoming requests, enabling the ability to serve resources
3091over a different origin than that of the web application.")
3092 (license license:asl2.0)))
3093
3094(define-public python-furl
3095 (package
3096 (name "python-furl")
3097 (version "2.1.4")
3098 (source
3099 (origin
3100 (method url-fetch)
3101 (uri (pypi-uri "furl" version))
3102 (sha256
3103 (base32 "05b058xisv8kghvcpaxvssml2jjkh1cmzyrrjwk2kjb62985fxl7"))))
3104 (build-system pyproject-build-system)
3105 (arguments
3106 (list #:test-flags
3107 #~(list "-k" (string-append "not test_hosts"
3108 " and not test_netloc"
3109 " and not test_odd_urls"))))
3110 (propagated-inputs
3111 (list python-orderedmultidict python-six))
3112 (native-inputs
3113 (list python-flake8 python-pytest python-setuptools python-wheel))
3114 (home-page "https://github.com/gruns/furl")
3115 (synopsis "URL manipulation in Python")
3116 (description "Furl provides an easy-to-use alternative to the
3117@code{urllib} and @code{urlparse} modules for manipulating URLs.")
3118 (license license:unlicense)))
3119
3120(define-public python-httplib2
3121 (package
3122 (name "python-httplib2")
3123 (version "0.22.0")
3124 (source
3125 (origin
3126 ;; Tests not included in the release tarball.
3127 (method git-fetch)
3128 (uri (git-reference
3129 (url "https://github.com/httplib2/httplib2")
3130 (commit (string-append "v" version))))
3131 (file-name (git-file-name name version))
3132 (sha256
3133 (base32
3134 "1zkp3glv0iha7p68p5m0sb8mrrammkdc0mx32517xry52s4iva7g"))))
3135 (build-system pyproject-build-system)
3136 (arguments
3137 (list
3138 #:phases
3139 #~(modify-phases %standard-phases
3140 (add-after 'unpack 'adjust-test-requirements
3141 (lambda _
3142 (substitute* "requirements-test.txt"
3143 (("==") ">=")))))))
3144 (native-inputs
3145 (list python-cryptography
3146 python-future
3147 python-mock
3148 python-pyparsing
3149 python-pytest
3150 python-pytest-cov
3151 python-pytest-randomly
3152 python-pytest-timeout
3153 python-setuptools))
3154 (home-page "https://github.com/httplib2/httplib2")
3155 (synopsis "Comprehensive HTTP client library")
3156 (description
3157 "A comprehensive HTTP client library supporting many features left out of
3158other HTTP libraries.")
3159 (license license:expat)))
3160
3161(define-public python-cheroot
3162 (package
3163 (name "python-cheroot")
3164 (version "10.0.1")
3165 (source
3166 (origin
3167 (method url-fetch)
3168 (uri (pypi-uri "cheroot" version))
3169 (sha256
3170 (base32
3171 "0h0p3fnpa4dxi589s7ljlzb6p3mhqdivb3pc2f36pljqfrwjzf70"))))
3172 (build-system pyproject-build-system)
3173 (arguments
3174 (list
3175 #:test-flags
3176 #~(list "--cov=cheroot"
3177 ;; Tests are flaky in parallel invocation.
3178 ;; "--numprocesses=auto"
3179 "--doctest-modules"
3180 "--showlocals"
3181 "-k" (string-append
3182 ;; Disable test requiring networking.
3183 "not test_tls_client_auth"
3184 ;; TypeError: HTTPConnection.request() got an unexpected keyword
3185 ;; argument 'chunked'
3186 " and not test_peercreds_unix_sock"
3187 " and not test_peercreds_unix_sock_with_lookup"))
3188 #:phases
3189 #~(modify-phases %standard-phases
3190 (replace 'check
3191 (lambda* (#:key tests? test-flags #:allow-other-keys)
3192 (when tests?
3193 (with-directory-excursion "/tmp"
3194 (apply invoke "pytest" "-v"
3195 (append test-flags (list #$output))))))))))
3196 (propagated-inputs
3197 (list python-jaraco-functools python-more-itertools))
3198 (native-inputs
3199 (list python-jaraco-text
3200 python-portend
3201 python-pyopenssl
3202 python-pypytools
3203 python-pytest-cov
3204 python-pytest-mock
3205 python-requests
3206 python-requests-toolbelt
3207 python-requests-unixsocket2
3208 python-setuptools
3209 python-setuptools-scm
3210 python-trustme
3211 python-wheel))
3212 (home-page "https://cheroot.cherrypy.dev")
3213 (synopsis "Highly-optimized, pure-python HTTP server")
3214 (description
3215 "Cheroot is a high-performance, pure-Python HTTP server.")
3216 (license license:bsd-3)))
3217
3218(define-public python-cherrypy
3219 (package
3220 (name "python-cherrypy")
3221 (version "18.10.0")
3222 (source
3223 (origin
3224 (method git-fetch)
3225 (uri (git-reference
3226 (url "https://github.com/cherrypy/cherrypy")
3227 (commit (string-append "v" version))))
3228 (file-name (git-file-name name version))
3229 (sha256
3230 (base32 "1mhs64z75mj3rk4rgxc3xm1yksaj253rj9czhk4632blz5yi0kbn"))))
3231 (build-system pyproject-build-system)
3232 (arguments
3233 (list
3234 #:test-flags
3235 #~(map
3236 (lambda (test)
3237 (string-append "--deselect=cherrypy/test/" test))
3238 (list
3239 ;; XXX: Unraisable exceptions.
3240 "test_config_server.py::ServerConfigTests::testMaxRequestSize"
3241 "test_core.py::CoreRequestHandlingTest::testRanges"
3242 "test_core.py::CoreRequestHandlingTest::testRedirect"
3243 "test_encoding.py::EncodingTests::\
3244test_multipart_decoding_bigger_maxrambytes"
3245 "test_encoding.py::EncodingTests::\
3246test_test_http.py::HTTPTests::test_post_filename_with_special_characters"
3247 "test_http.py::HTTPTests::test_post_multipart"
3248 "test_http.py::HTTPTests::test_post_filename_with_special_characters"
3249 "test_mime.py::SafeMultipartHandlingTest::test_Flash_Upload"
3250 "test_tutorials.py::TutorialTest::test09Files"))))
3251 (propagated-inputs
3252 (list python-cheroot
3253 python-jaraco-collections
3254 python-more-itertools
3255 python-portend
3256 python-zc-lockfile))
3257 (native-inputs
3258 (list python-objgraph
3259 python-path
3260 python-pytest
3261 python-pytest-cov
3262 python-pytest-forked
3263 python-pytest-services
3264 python-pytest-sugar
3265 python-requests-toolbelt
3266 python-setuptools))
3267 (home-page "https://www.cherrypy.dev")
3268 (synopsis "Object-Oriented HTTP framework")
3269 (description
3270 "CherryPy is a pythonic, object-oriented web framework. It helps in
3271building web applications in the same way any other object-oriented Python
3272program would be built.")
3273 (license license:bsd-3)))
3274
3275(define-public httpie
3276 (package
3277 (name "httpie")
3278 (version "3.2.4")
3279 (source
3280 (origin
3281 (method git-fetch)
3282 (uri (git-reference
3283 (url "https://github.com/httpie/cli")
3284 (commit version)))
3285 (file-name (git-file-name name version))
3286 (sha256
3287 (base32 "0ii11xfqkbawg1v8dlli4fqq5k3yc2v65z3j7k3p4gng998s94mr"))))
3288 (build-system pyproject-build-system)
3289 (arguments
3290 (list
3291 #:phases
3292 #~(modify-phases %standard-phases
3293 (add-before 'build 'remove-unnecessary-dependencies
3294 ;; Remove pip and setuptools dependencies so sanity-check.py passes.
3295 (lambda _
3296 (substitute* "setup.cfg"
3297 (("(pip|setuptools)") "")))))
3298 #:test-flags
3299 ;; test_plugins_cli.py communicates through subprocesses
3300 ;; mocking stdin, which does not work in the build container.
3301 ;; test_ssl.py cannot find the SSL certificates.
3302 ;; test_binary.py fails for an unknown reason.
3303 #~(list "--ignore=tests/test_plugins_cli.py"
3304 "--ignore=tests/test_ssl.py"
3305 "--ignore=tests/test_binary.py")))
3306 (native-inputs (list python-pytest
3307 python-pytest-httpbin
3308 python-pytest-mock
3309 python-responses
3310 python-setuptools
3311 python-werkzeug
3312 python-wheel))
3313 (propagated-inputs
3314 (list python-charset-normalizer
3315 python-defusedxml
3316 python-multidict
3317 python-pygments
3318 python-requests
3319 python-requests-toolbelt
3320 python-rich))
3321 (home-page "https://httpie.io")
3322 (synopsis "Modern, user-friendly command-line HTTP client for the API era")
3323 (description
3324 "A command line HTTP client with an intuitive UI, JSON support,
3325syntax highlighting, wget-like downloads, plugins, and more. It consists of
3326a single http command designed for painless debugging and interaction with
3327HTTP servers, RESTful APIs, and web services.")
3328 ;; CVE-2019-10751 was fixed in 1.0.3.
3329 (properties `((lint-hidden-cve "CVE-2019-10751")))
3330 (license license:bsd-3)))
3331
3332(define-public python-parfive
3333 (package
3334 (name "python-parfive")
3335 (version "2.2.0")
3336 (source
3337 (origin
3338 (method url-fetch)
3339 (uri (pypi-uri "parfive" version))
3340 (sha256
3341 (base32 "16rf02jhjr9lij8s2gqmvs01vx8kiv9f2535dnnziqwqv14d21yy"))))
3342 (build-system pyproject-build-system)
3343 (arguments
3344 (list
3345 #:test-flags
3346 ;; Disable tests requiring network access.
3347 #~(list "-k" (string-join
3348 (list "not test_ftp"
3349 "test_ftp_pasv_command"
3350 "test_ftp_http")
3351 " and not "))))
3352 (native-inputs
3353 (list python-pytest
3354 python-pytest-asyncio
3355 python-pytest-cov
3356 python-pytest-localserver
3357 python-pytest-socket
3358 python-setuptools
3359 python-setuptools-scm
3360 python-wheel))
3361 (propagated-inputs
3362 (list python-aiofiles
3363 python-aioftp
3364 python-aiohttp
3365 python-tqdm))
3366 (home-page "https://parfive.readthedocs.io/")
3367 (synopsis "HTTP and FTP parallel file downloader")
3368 (description
3369 "This package provides CLI tool and Python library @code{parallel} file
3370downloader using asyncio. parfive can handle downloading multiple files in
3371parallel as well as downloading each file in a number of chunks.
3372
3373asciicast demo of parfive parfive works by creating a downloader object,
3374appending files to it and then running the download. parfive has a synchronous
3375API, but uses asyncio to parallelise downloading the files.")
3376 (license license:expat)))
3377
3378(define-public python-html2text
3379 (package
3380 (name "python-html2text")
3381 (version "2020.1.16")
3382 (source
3383 (origin
3384 (method url-fetch)
3385 (uri (pypi-uri "html2text" version))
3386 (sha256
3387 (base32 "1fvv4z6dblii2wk1x82981ag8yhxbim1v2ksgywxsndh2s7335p2"))))
3388 (build-system pyproject-build-system)
3389 (native-inputs (list python-pytest python-setuptools python-wheel))
3390 (home-page "https://github.com/Alir3z4/html2text")
3391 (synopsis "Convert HTML into plain text")
3392 (description
3393 "html2text takes HTML and converts it into plain ASCII text
3394which is also valid markdown. html2text was originally written by Aaron
3395Swartz.")
3396 (license license:gpl3+)))
3397
3398(define-public python-jose
3399 (package
3400 (name "python-jose")
3401 (version "3.3.0")
3402 (home-page "https://github.com/mpdavis/python-jose")
3403 (source (origin
3404 (method git-fetch)
3405 (uri (git-reference (url home-page) (commit version)))
3406 (file-name (git-file-name name version))
3407 (sha256
3408 (base32
3409 "18whsdpllg8574ma4r0qawkgw4nam6lsf63pi6761j38rvl84lg9"))))
3410 (build-system pyproject-build-system)
3411 (arguments
3412 (list
3413 #:test-flags
3414 '(list "-k"
3415 ;; These fail because of unexpected locations of line breaks.
3416 (string-append "not test_public_key_to_pem "
3417 "and not test_private_key_to_pem "
3418 "and not test_public_key_load_cycle "
3419 "and not test_private_key_load_cycle"))))
3420 (native-inputs
3421 (list ;; All native inputs are for tests.
3422 python-pyasn1 python-pytest python-pytest-cov
3423 python-pytest-runner
3424 python-setuptools
3425 python-wheel))
3426 (propagated-inputs
3427 (list python-cryptography python-ecdsa python-rsa python-six))
3428 (synopsis "JOSE implementation in Python")
3429 (description
3430 "The @dfn{JavaScript Object Signing and Encryption} (JOSE) technologies
3431- JSON Web Signature (JWS), JSON Web Encryption (JWE), JSON Web Key (JWK), and
3432JSON Web Algorithms (JWA) - collectively can be used to encrypt and/or sign
3433content using a variety of algorithms.")
3434 (license license:expat)))
3435
3436(define-public python-joserfc
3437 (package
3438 (name "python-joserfc")
3439 (version "1.0.1")
3440 (source
3441 (origin
3442 (method url-fetch)
3443 (uri (pypi-uri "joserfc" version))
3444 (sha256
3445 (base32 "11m600bmj70bp96wxhwvyj4d57w0zahzq3vic7s4a4k85pl7nl64"))))
3446 (build-system pyproject-build-system)
3447 (arguments
3448 (list
3449 #:test-flags
3450 ;; No module named 'Crypto'
3451 '(list "--ignore=tests/jwe/test_chacha20.py"
3452 ;; Deprecation warnings are not raised.
3453 "-k" (string-append "not test_guess_bytes_key"
3454 " and not test_guess_callable_key"
3455 " and not test_guess_str_key"))))
3456 (propagated-inputs (list python-cryptography))
3457 (native-inputs (list python-pytest python-setuptools python-wheel))
3458 (home-page "https://github.com/authlib/joserfc")
3459 (synopsis "Python library for JOSE RFCs")
3460 (description
3461 "This package provides a Python library for JOSE RFCs, including JWS,
3462JWE, JWK, JWA, and JWT.")
3463 (license license:bsd-3)))
3464
3465(define-public python-jwcrypto
3466 (package
3467 (name "python-jwcrypto")
3468 (version "1.5.6")
3469 (source
3470 (origin
3471 (method url-fetch)
3472 (uri (pypi-uri "jwcrypto" version))
3473 (sha256
3474 (base32 "0fdhn5jrsdxqr1yr6rmh585q4j08z1aajn392vk1l20c59v8f6kp"))))
3475 (build-system pyproject-build-system)
3476 (native-inputs
3477 (list python-pytest
3478 python-setuptools))
3479 (propagated-inputs
3480 (list python-cryptography
3481 python-deprecated))
3482 (home-page "https://github.com/latchset/jwcrypto")
3483 (synopsis "Implementation of JOSE Web standards")
3484 (description
3485 "WCrypto is an implementation of the @dfn{Javascript Object Signing and
3486Encryption} (JOSE) Web Standards.")
3487 (license license:lgpl3+)))
3488
3489(define-public python-pypitoken
3490 (package
3491 (name "python-pypitoken")
3492 (version "7.0.1")
3493 (source
3494 (origin
3495 (method url-fetch)
3496 (uri (pypi-uri "pypitoken" version))
3497 (sha256
3498 (base32 "18hhwmdfs9y5ypl1n8z2h2ys2f52mv5xr043gzgb34mpmg0wi46x"))))
3499 (build-system pyproject-build-system)
3500 ;; There are no tests.
3501 (arguments (list #:tests? #false))
3502 (propagated-inputs (list python-jsonschema python-pymacaroons
3503 python-typing-extensions))
3504 (native-inputs (list python-poetry-core))
3505 (home-page "https://pypitoken.readthedocs.io/en/latest/")
3506 (synopsis "Manipulate PyPI API tokens")
3507 (description "This package lets you manipulate PyPI API tokens.")
3508 (license license:expat)))
3509
3510(define-public python-pyscss
3511 ;; XXX: no fresh release supporting Python 3.11, use the latest commit, see
3512 ;; <https://github.com/Kronuz/pyScss/issues/428>.
3513 (let ((commit "73559d047706ccd4593cf6aa092de71f35164723")
3514 (revision "0"))
3515 (package
3516 (name "python-pyscss")
3517 (version (git-version "1.4.0" revision commit))
3518 (source
3519 (origin
3520 (method git-fetch) ; no tests in PyPI release
3521 (uri (git-reference
3522 (url "https://github.com/Kronuz/pyScss")
3523 (commit commit)))
3524 (file-name (git-file-name name version))
3525 (sha256
3526 (base32 "00msypxf5dm57gyfp3jxvjinigi4km84v33w83635pms9li2k3y7"))))
3527 (build-system pyproject-build-system)
3528 (native-inputs
3529 (list python-pytest python-pytest-cov python-setuptools python-wheel))
3530 (inputs
3531 (list pcre))
3532 (home-page "https://github.com/Kronuz/pyScss")
3533 (synopsis "Scss compiler for Python")
3534 (description
3535 "@code{pyScss} is a compiler for Sass, a superset language of
3536CSS3 that adds programming capabilities and some other syntactic sugar.")
3537 (license license:expat))))
3538
3539(define-public python-jsonpickle
3540 (package
3541 (name "python-jsonpickle")
3542 (version "4.0.0")
3543 (source (origin
3544 (method url-fetch)
3545 (uri (pypi-uri "jsonpickle" version))
3546 (sha256
3547 (base32
3548 "0dipys8p4hkqnp9nwkpysfv7mhws2hrr73wgn00pdmq4n990hrzw"))))
3549 (build-system pyproject-build-system)
3550 (arguments
3551 (list
3552 #:test-flags
3553 ;; Prevent running the flake8 and black pytest plugins, which only tests
3554 ;; style and frequently causes harmless failures.
3555 '(list "-o" "addopts=''" "tests")
3556 #:phases
3557 '(modify-phases %standard-phases
3558 (add-before 'check 'pre-check
3559 (lambda* (#:key inputs #:allow-other-keys)
3560 (setenv "TZ" "UTC")
3561 (setenv "TZDIR"
3562 (search-input-directory inputs "share/zoneinfo")))))))
3563 (propagated-inputs
3564 (list python-importlib-metadata))
3565 (native-inputs
3566 (list python-bson
3567 python-ecdsa
3568 python-feedparser
3569 python-pymongo
3570 python-pytest
3571 python-pytest-benchmark
3572 python-pytest-cov
3573 python-pytest-enabler
3574 python-setuptools
3575 python-setuptools-scm
3576 python-simplejson
3577 python-sqlalchemy
3578 python-ujson
3579 python-wheel
3580 tzdata-for-tests))
3581 (home-page "https://jsonpickle.github.io/")
3582 (synopsis "Serialize object graphs into JSON")
3583 (description
3584 "This package provides a Python library for serializing any arbitrary
3585object graph to and from JSON.")
3586 (license license:bsd-3)))
3587
3588(define-public python-mechanicalsoup
3589 (package
3590 (name "python-mechanicalsoup")
3591 (version "1.4.0")
3592 (source
3593 (origin
3594 (method url-fetch)
3595 (uri (pypi-uri "mechanicalsoup" version))
3596 (sha256
3597 (base32 "0k1ac77ld6jyjm5fsr44399l5gmiwnz5w6s74i3qqx2scfbsgs6w"))))
3598 (build-system pyproject-build-system)
3599 (arguments
3600 (list
3601 #:test-flags
3602 ;; Unclear why test fails.
3603 #~(list "-k" "not test_select_form_associated_elements")
3604 ;; The following dependencies are not directly required, the developer
3605 ;; only pinned versions because of vulnerabilities. They also break
3606 ;; sanity-check because it checks for a python-certifi version which is
3607 ;; more recent than the one available in Guix.
3608 #:phases #~(modify-phases %standard-phases
3609 (add-after 'unpack 'relax-dependencies
3610 (lambda _
3611 (substitute* "requirements.txt"
3612 (("certifi.*") "")
3613 (("urllib3.*") "")))))))
3614 (propagated-inputs
3615 (list python-beautifulsoup4 python-lxml python-requests))
3616 (native-inputs
3617 (list python-pytest
3618 python-pytest-cov
3619 python-pytest-flake8
3620 python-pytest-httpbin
3621 python-pytest-mock
3622 python-requests-mock
3623 python-setuptools
3624 python-wheel))
3625 (home-page "https://mechanicalsoup.readthedocs.io/")
3626 (synopsis "Python library for automating website interaction")
3627 (description
3628 "MechanicalSoup is a Python library for automating interaction with
3629websites. It automatically stores and sends cookies, follows redirects, and can
3630follow links and submit forms. It doesn’t do JavaScript.")
3631 (license license:expat)))
3632
3633(define-public python-hyperframe
3634 (package
3635 (name "python-hyperframe")
3636 (version "6.1.0")
3637 (source
3638 (origin
3639 (method url-fetch)
3640 (uri (pypi-uri "hyperframe" version))
3641 (sha256
3642 (base32 "021v58w1b7mbwqkvbz11p3a4qk1sj91jnf6nmgg7ljl502590c7n"))))
3643 (build-system pyproject-build-system)
3644 (native-inputs
3645 (list python-pytest python-setuptools))
3646 (home-page "https://github.com/python-hyper/hyperframe")
3647 (synopsis "HTTP/2 framing layer for Python")
3648 (description
3649 "This library contains the HTTP/2 framing code used in the hyper project.
3650It provides a pure-Python codebase that is capable of decoding a binary stream
3651into HTTP/2 frames.")
3652 (license license:expat)))
3653
3654(define-public python-hpack
3655 (package
3656 (name "python-hpack")
3657 (version "4.1.0")
3658 (source
3659 (origin
3660 ;; PyPI tarball is missing some files necessary for the tests.
3661 (method git-fetch)
3662 (uri (git-reference
3663 (url "https://github.com/python-hyper/hpack")
3664 (commit (string-append "v" version))))
3665 (file-name (git-file-name name version))
3666 (sha256
3667 (base32 "1kgbx38p3a48iz914dqbx7av750a3s3x5kj3rvpcbh23ah75zg5x"))))
3668 (build-system pyproject-build-system)
3669 (native-inputs
3670 (list python-pytest python-setuptools))
3671 (home-page "https://hyper.rtfd.org")
3672 (synopsis "Pure-Python HPACK header compression")
3673 (description
3674 "This module contains a pure-Python HTTP/2 header encoding (HPACK) logic
3675for use in Python programs that implement HTTP/2.")
3676 (license license:expat)))
3677
3678(define-public python-h11
3679 (package
3680 (name "python-h11")
3681 (version "0.16.0")
3682 (source
3683 (origin
3684 (method url-fetch)
3685 (uri (pypi-uri "h11" version))
3686 (sha256
3687 (base32 "1wazxq4b4jg5001h5ypvz9pvrg80pagyd1aqm962wya5rxbbjdaf"))))
3688 (build-system pyproject-build-system)
3689 (native-inputs
3690 (list python-pytest python-setuptools))
3691 (home-page "https://github.com/python-hyper/h11")
3692 (synopsis "Pure-Python, bring-your-own-I/O implementation of HTTP/1.1")
3693 (description
3694 "This is a little HTTP/1.1 library written from scratch in Python, heavily
3695inspired by hyper-h2. It's a bring-your-own-I/O library; h11 contains no IO
3696code whatsoever. This means you can hook h11 up to your favorite network API,
3697and that could be anything you want.")
3698 (license license:expat)))
3699
3700(define-public python-h2
3701 (package
3702 (name "python-h2")
3703 (version "4.1.0")
3704 (source
3705 (origin
3706 (method url-fetch)
3707 (uri (pypi-uri "h2" version))
3708 (sha256
3709 (base32 "1fraip114fm1ha5w37pdc0sk8dn9pb0ck267zrwwpap7zc4clfm8"))))
3710 (build-system pyproject-build-system)
3711 (arguments
3712 (list
3713 ;; AssertionError: assert '<RemoteSettingsChanged
3714 ;; changed_settings:{ChangedSetting(setting=4, original_value=65536,
3715 ;; new_value=32768)}>' == '<RemoteSettingsChanged
3716 ;; changed_settings:{ChangedSetting(setting=SettingCodes.INITIAL_WINDOW_SIZE,
3717 ;; original_value=65536, new_value=32768)}>'
3718 #:test-flags
3719 #~(list "-k"
3720 (string-join
3721 (list "not test_remotesettingschanged_repr"
3722 ;; This test exceededs the Hypothesis deadline.
3723 #$@(if (target-riscv64?)
3724 #~("test_changing_max_frame_size")
3725 #~())
3726 "test_streamreset_repr"
3727 "test_settingsacknowledged_repr"
3728 "test_connectionterminated_repr[None-None]"
3729 "test_connectionterminated_repr[some"
3730 "test_remotesettingschanged_repr"
3731 "test_streamreset_repr"
3732 "test_settingsacknowledged_repr"
3733 "test_connectionterminated_repr[None-None]"
3734 "test_connectionterminated_repr[some")
3735 " and not "))))
3736 (native-inputs
3737 (list python-pytest
3738 python-setuptools
3739 python-wheel))
3740 (propagated-inputs
3741 (list python-hpack
3742 python-hyperframe))
3743 (home-page "https://github.com/python-hyper/h2")
3744 (synopsis "HTTP/2 State-Machine based protocol implementation")
3745 (description
3746 "This module contains a pure-Python implementation of a HTTP/2 protocol
3747stack. It does not provide a parsing layer, a network layer, or any rules
3748about concurrency. Instead, it's a purely in-memory solution, defined in
3749terms of data actions and HTTP/2 frames. This is one building block of a full
3750Python HTTP implementation.")
3751 (license license:expat)))
3752
3753(define-public python-slixmpp
3754 (package
3755 (name "python-slixmpp")
3756 (version "1.8.6") ; XXX: The latest version which does not requrie Rust
3757 (source
3758 (origin
3759 (method git-fetch)
3760 (uri (git-reference
3761 (url "https://codeberg.org/poezio/slixmpp")
3762 (commit (string-append "slix-" version))))
3763 (file-name (git-file-name name version))
3764 (sha256
3765 (base32 "0gpy6arwyk4lsx1hbcwbllxs6qbwn58adkp1rm1cfvfrjdv5kxx7"))))
3766 (build-system pyproject-build-system)
3767 (arguments
3768 (list
3769 #:phases
3770 #~(modify-phases %standard-phases
3771 (add-after 'unpack 'patch-setup.py
3772 (lambda _
3773 (substitute* "setup.py"
3774 (("'CC', 'cc'")
3775 "'CC', 'gcc'")))))))
3776 (native-inputs
3777 (list gnupg
3778 pkg-config
3779 python-cython
3780 python-setuptools
3781 python-wheel))
3782 (inputs
3783 (list libidn
3784 python)) ; We are building a Python extension.
3785 (propagated-inputs
3786 (list python-aiodns
3787 python-aiohttp
3788 python-cryptography
3789 python-defusedxml
3790 python-emoji
3791 python-pyasn1
3792 python-pyasn1-modules))
3793 (home-page "https://lab.louiz.org/poezio/slixmpp")
3794 (synopsis "XMPP library without threads")
3795 (description
3796 "Slixmpp is a XMPP library for Python 3.7+. It is a fork of SleekXMPP.
3797Its goal is to only rewrite the core of the library (the low level socket
3798handling, the timers, the events dispatching) in order to remove all
3799threads.")
3800 (license license:expat)))
3801
3802(define-public python-sockjs-tornado
3803 (package
3804 (name "python-sockjs-tornado")
3805 (version "1.0.6")
3806 (source
3807 (origin
3808 (method url-fetch)
3809 (uri (pypi-uri "sockjs-tornado" version))
3810 (sha256
3811 (base32
3812 "15dgv6hw6c7h3m310alw1h6p5443lrm9pyqhcv2smc13fz1v04pc"))))
3813 (build-system python-build-system)
3814 (arguments
3815 `(;; There are no tests, and running the test phase requires missing
3816 ;; dependencies
3817 #:tests? #f))
3818 (propagated-inputs
3819 (list python-tornado))
3820 (home-page "https://github.com/mrjoes/sockjs-tornado/")
3821 (synopsis
3822 "SockJS Python server implementation on top of the Tornado framework")
3823 (description
3824 "SockJS-tornado provides the server-side counterpart to a SockJS client
3825library, through the Tornado framework.
3826
3827SockJS provides a low-latency, full-duplex, cross-domain communication channel
3828between a web browser and web server.")
3829 (license license:expat)))
3830
3831(define-public python-flask-assets
3832 ;; The latest release still depends on the abandoned flask-script, whereas
3833 ;; at this later commit (already 2 years old at the time of this writing)
3834 ;; the dependency has been lifted.
3835 (let ((commit "62efd23fe95ee6a86fc1cfaa98fc1e2152093557")
3836 (revision "1"))
3837 (package
3838 (name "python-flask-assets")
3839 (version (git-version "2.1.0" revision commit))
3840 (source
3841 (origin
3842 (method git-fetch)
3843 (uri (git-reference
3844 (url "https://github.com/miracle2k/flask-assets/")
3845 (commit commit)))
3846 (file-name (git-file-name name version))
3847 (sha256
3848 (base32 "11q8vm2ipj4xrvawy9vl1l4k8kb4r72ghy1n8xrzci52v6lx8960"))))
3849 (build-system pyproject-build-system)
3850 (propagated-inputs
3851 (list python-flask python-webassets))
3852 (native-inputs
3853 (list nss-certs-for-test python-pytest python-setuptools python-wheel))
3854 (home-page "https://github.com/miracle2k/flask-assets")
3855 (synopsis "Asset management for Flask")
3856 (description "This package integrates @code{webassets} with Flask, adding
3857support for merging, minifying and compiling CSS and Javascript files.")
3858 (license license:bsd-2))))
3859
3860(define-public python-flask-babel
3861 (package
3862 (name "python-flask-babel")
3863 (version "4.0.0")
3864 (source
3865 (origin
3866 (method git-fetch) ;no tests in pypi release
3867 (uri (git-reference
3868 (url "https://github.com/python-babel/flask-babel")
3869 (commit (string-append "v" version))))
3870 (sha256
3871 (base32
3872 "19yq3f5rixbwhv7wxdarvi9hdj98a9dq8y76in9c1q3jxaigw104"))))
3873 (build-system pyproject-build-system)
3874 (native-inputs
3875 (list python-poetry-core
3876 python-pytest
3877 python-pytest-cov
3878 python-pytest-mock))
3879 (propagated-inputs
3880 (list python-babel
3881 python-flask
3882 python-jinja2
3883 python-pytz))
3884 (home-page "https://github.com/python-babel/flask-babel")
3885 (synopsis "Add i18n/l10n support to Flask applications")
3886 (description "This package implements internationalization and localization
3887support for Flask. This is based on the Python babel module as well as pytz -
3888both of which are installed automatically if you install this library.")
3889 (license license:bsd-3)))
3890
3891(define-public python-flask-cors
3892 (package
3893 (name "python-flask-cors")
3894 (version "6.0.1")
3895 (source
3896 (origin
3897 (method git-fetch) ;no tests in PyPI archive
3898 (uri (git-reference
3899 (url "https://github.com/CoryDolphin/flask-cors")
3900 (commit version)))
3901 (file-name (git-file-name name version))
3902 (sha256
3903 (base32 "01w77vfbzw994dpz6aw4vzy75nrykk6jgilc3qm2d543vjizjaf9"))))
3904 (build-system pyproject-build-system)
3905 (native-inputs
3906 (list python-pytest
3907 python-setuptools))
3908 (propagated-inputs
3909 (list python-flask
3910 python-werkzeug))
3911 (home-page "https://flask-cors.readthedocs.io/en/latest/")
3912 (synopsis "Handle Cross-Origin Resource Sharing with Flask")
3913 (description
3914 "This package provides a Flask extension for handling @acronym{CORS,Cross
3915Origin Resource Sharing}, making cross-origin AJAX possible.")
3916 (license license:expat)))
3917
3918(define-public python-flask-markdown
3919 (package
3920 (name "python-flask-markdown")
3921 (version "0.3")
3922 (source
3923 (origin
3924 (method url-fetch)
3925 (uri (pypi-uri "Flask-Markdown" version))
3926 (sha256
3927 (base32
3928 "0l32ikv4f7va926jlq4f7gx0xid247bhlxl6bd9av5dk8ljz1hyq"))))
3929 (build-system python-build-system)
3930 (arguments
3931 '(#:tests? #f)) ; Tests seem to be incompatible with latest python
3932 (propagated-inputs
3933 (list python-markdown python-flask))
3934 (native-inputs
3935 (list python-nose))
3936 (home-page "https://github.com/dcolish/flask-markdown")
3937 (synopsis "Small extension to help with using Markdown in Flask")
3938 (description
3939 "Flask-Markdown supports several extensions for Markdown and integrates
3940into Jinja2 by default.")
3941 (license license:bsd-3)))
3942
3943(define-public python-flask-misaka
3944 (package
3945 (name "python-flask-misaka")
3946 (version "1.0.1")
3947 (source
3948 (origin
3949 (method url-fetch)
3950 (uri (pypi-uri "Flask-Misaka" version))
3951 (sha256
3952 (base32
3953 "1yi9iall3ml1n8bff1mg49xajmldcm5pc0fkpl3w2rlnny08giax"))))
3954 (build-system pyproject-build-system)
3955 (arguments
3956 (list #:test-flags #~(list "tests.py")))
3957 (native-inputs
3958 (list python-flask python-pytest python-setuptools python-wheel))
3959 (propagated-inputs
3960 (list python-markupsafe python-misaka))
3961 (home-page "https://github.com/singingwolfboy/flask-misaka/")
3962 (synopsis "Flask interface to Misaka, a Markdown parsing library")
3963 (description
3964 "This package provides an interface between the Flask web framework and
3965the Misaka Markdown parser.")
3966 (license license:expat)))
3967
3968(define-public python-flask-session
3969 (package
3970 (name "python-flask-session")
3971 (version "0.8.0")
3972 (source
3973 (origin
3974 (method url-fetch)
3975 (uri (pypi-uri "flask_session" version))
3976 (sha256
3977 (base32
3978 "1zs20zpq6gxz9gsccbd2jrrbbcfvh0x9z9741gkr8dhh07mlbq10"))))
3979 (build-system pyproject-build-system)
3980 (arguments
3981 '(#:tests? #f)) ; Tests require the various storage backends to be present
3982 (native-inputs (list python-flit-core))
3983 (propagated-inputs
3984 (list python-cachelib python-flask python-msgspec))
3985 (home-page "https://github.com/pallets-eco/flask-session")
3986 (synopsis "Adds server-side session support to your Flask application")
3987 (description
3988 "Flask-Session is an extension for Flask that adds support for
3989Server-side sessions, with a variety of different backends for session
3990storage.")
3991 (license license:bsd-3)))
3992
3993(define-public python-html5lib
3994 (package
3995 (name "python-html5lib")
3996 (version "1.1")
3997 (source
3998 (origin
3999 (method url-fetch)
4000 (uri (pypi-uri "html5lib" version))
4001 (sha256
4002 (base32 "0vqlhk0hgbsfkh7ybmby93xhlx8dq6pr5blf356ka3z2c41b9rdj"))))
4003 (build-system pyproject-build-system)
4004 (arguments
4005 '(#:tests? #f)) ;tests depent on dated pytest-expect
4006 (native-inputs
4007 (list python-setuptools))
4008 (propagated-inputs
4009 (list python-six
4010 python-webencodings
4011 ;; Required by Calibre 5.
4012 python-chardet))
4013 (home-page "https://github.com/html5lib/html5lib-python")
4014 (synopsis "Python HTML parser based on the WHATWG HTML specification")
4015 (description
4016 "Html5lib is an HTML parser based on the WHATWG HTML specification
4017and written in Python.")
4018 (license license:expat)))
4019
4020(define-public python-html5-parser
4021 (package
4022 (name "python-html5-parser")
4023 (version "0.4.10")
4024 (source (origin
4025 (method url-fetch)
4026 (uri (pypi-uri "html5-parser" version))
4027 (sha256
4028 (base32
4029 "195wgxls3df7djry9cz3p2k9644l6bfd66fczbaw55fsq0c48agr"))))
4030 (build-system python-build-system)
4031 (arguments
4032 (list
4033 #:phases
4034 #~(modify-phases %standard-phases
4035 (add-before 'build 'set-configure-flags
4036 (lambda _
4037 (setenv "CFLAGS"
4038 "-Wno-error=implicit-function-declaration"))))))
4039 (native-inputs
4040 (list pkg-config))
4041 (inputs
4042 (list libxml2))
4043 (propagated-inputs
4044 (list python-lxml python-beautifulsoup4 python-chardet))
4045 (home-page "https://html5-parser.readthedocs.io")
4046 (synopsis "Fast C-based HTML5 parsing for Python")
4047 (description "This package provides a fast implementation of the HTML5
4048parsing spec for Python. Parsing is done in C using a variant of the gumbo
4049parser. The gumbo parse tree is then transformed into an lxml tree, also in
4050C, yielding parse times that can be a thirtieth of the html5lib parse times.")
4051 ;; src/as-python-tree.[c|h] are licensed GPL3. The other files
4052 ;; indicate ASL2.0, including the LICENSE file for the whole project.
4053 (license (list license:asl2.0 license:gpl3))))
4054
4055(define-public python-html5tagger
4056 (package
4057 (name "python-html5tagger")
4058 (version "1.3.0")
4059 (source (origin
4060 (method url-fetch)
4061 (uri (pypi-uri "html5tagger" version))
4062 (sha256
4063 (base32
4064 "1acd1a4f66gi4plqnsml7cf33qp83mxsnmnqpdwkpj7597xkvyl4"))))
4065 (build-system pyproject-build-system)
4066 (arguments
4067 (list #:tests? #f)) ;no tests in PyPI or Git
4068 (native-inputs
4069 (list python-setuptools python-setuptools-scm python-wheel))
4070 (home-page "https://github.com/sanic-org/html5tagger")
4071 (synopsis "Create HTML documents from Python")
4072 (description
4073 "@code{html5tagger} provides a simplified HTML5 syntax that can
4074be written directly in Python without templates.")
4075 (license license:unlicense)))
4076
4077(define-public python-minio
4078 (package
4079 (name "python-minio")
4080 (version "7.1.9")
4081 (source
4082 (origin
4083 (method git-fetch)
4084 (uri (git-reference
4085 (url "https://github.com/minio/minio-py")
4086 (commit version)))
4087 (file-name (git-file-name name version))
4088 (sha256
4089 (base32 "01734ki3p7844dya366hy1kvmmgy3xr0l0zbkchnnv4p611510vc"))))
4090 (build-system pyproject-build-system)
4091 (arguments
4092 (list
4093 #:test-flags
4094 ;; XXX: requires network access.
4095 #~(list "--ignore=tests/unit/credentials_test.py")))
4096 (native-inputs (list python-pytest python-setuptools))
4097 (propagated-inputs
4098 (list python-certifi python-dateutil python-pytz python-urllib3))
4099 (home-page "https://github.com/minio/minio-py")
4100 (synopsis "Programmatically access Amazon S3 from Python")
4101 (description
4102 "This package provides a Python library for interacting with any
4103Amazon S3 compatible object storage server.")
4104 (license license:asl2.0)))
4105
4106(define-public python-pycurl
4107 (package
4108 (name "python-pycurl")
4109 (version "7.45.4")
4110 (source
4111 (origin
4112 (method git-fetch)
4113 (uri (git-reference
4114 (url "https://github.com/pycurl/pycurl")
4115 (commit (string-append
4116 "REL_" (string-replace-substring version "." "_")))))
4117 (file-name (git-file-name name version))
4118 (sha256
4119 (base32 "00cd1l0lsml0708hpv5k4qyhqfv0qphb0p317j9aci2wdspn1mpl"))))
4120 (build-system pyproject-build-system)
4121 (arguments
4122 '(#:test-flags
4123 ;; The test suite is not thread safe:
4124 ;; - some tests want to use the same port: address already in use
4125 ;; - some tests use signal.Signal, i.e. main-thread only
4126 (list "-k" (string-append
4127 ;; Disable hanginging tests
4128 "not test_multi_socket_select"
4129 ;; E assert None is not None
4130 ;; E+ where None =
4131 ;; <tests.multi_callback_test.MultiCallbackTest
4132 ;; testMethod=test_multi_socket_action>.timer_result
4133 " and not test_multi_socket_action"
4134 ;; OSError: tests/fake-curl/libcurl/with_gnutls.so: cannot
4135 ;; open shared object file: No such file or directory
4136 " and not test_libcurl_ssl_gnutls"
4137 ;; OSError: tests/fake-curl/libcurl/with_nss.so: cannot
4138 ;; open shared object file: No such file or directory
4139 " and not test_libcurl_ssl_nss"
4140 ;; OSError: tests/fake-curl/libcurl/with_openssl.so: cannot
4141 ;; open shared object file: No such file or directory
4142 " and not test_libcurl_ssl_openssl"
4143 ;; Probably due to an expired CA
4144 " and not test_request_without_certinfo"
4145 ;; "A libcurl function was given a bad argument"
4146 " and not test_proxy_tlsauth"))
4147 #:phases (modify-phases %standard-phases
4148 (add-before 'build 'configure-tls-backend
4149 (lambda _
4150 ;; XXX: PycURL fails to automatically determine which
4151 ;; TLS backend to use when cURL is built with
4152 ;; --disable-static. See setup.py and
4153 ;; <https://github.com/pycurl/pycurl/pull/147>.
4154 (setenv "PYCURL_SSL_LIBRARY" "gnutls"))))))
4155 (native-inputs
4156 (list python-bottle
4157 python-flaky
4158 python-flask
4159 python-pytest
4160 python-setuptools
4161 python-wheel))
4162 (inputs
4163 (list curl gnutls))
4164 (home-page "http://pycurl.io/")
4165 (synopsis "Lightweight Python wrapper around libcurl")
4166 (description "Pycurl is a lightweight wrapper around libcurl. It provides
4167high-speed transfers via libcurl and frequently outperforms alternatives.")
4168
4169 ;; Per 'README.rst', this is dual-licensed: users can redistribute pycurl
4170 ;; under the terms of LGPLv2.1+ or Expat.
4171 (license (list license:lgpl2.1+ license:expat))))
4172
4173(define-public python-stripe
4174 (package
4175 (name "python-stripe")
4176 (version "13.2.0")
4177 (source
4178 (origin
4179 (method git-fetch)
4180 (uri (git-reference
4181 (url "https://github.com/stripe/stripe-python")
4182 (commit (string-append "v" version))))
4183 (file-name (git-file-name name version))
4184 (sha256
4185 (base32 "0f0d1hqias3qylrhk56w055lqrlzjs9s7wxva30v54ykmn9nj6dx"))))
4186 (build-system pyproject-build-system)
4187 (arguments
4188 '(#:tests? #f)) ;; tests require network
4189 (native-inputs
4190 (list python-flit-core))
4191 (propagated-inputs
4192 (list python-httpx
4193 python-requests))
4194 (home-page "https://github.com/stripe/stripe-python")
4195 (synopsis "Python bindings for the Stripe financial services' API")
4196 (description "This package provides access to the Stripe financial
4197services' API. It includes a pre-defined set of classes for API resources
4198that initialize themselves dynamically from API responses which makes it
4199compatible with a wide range of versions of the Stripe API.")
4200 (license license:expat)))
4201
4202(define-public python-tldextract
4203 (package
4204 (name "python-tldextract")
4205 (version "5.3.0")
4206 (source
4207 (origin
4208 (method url-fetch)
4209 (uri (pypi-uri "tldextract" version))
4210 (sha256
4211 (base32 "02c6cyh8f3dagcw786m9nl5y0n3xa98p5mb7d7xfr84l2l5bglmk"))))
4212 (build-system pyproject-build-system)
4213 (arguments
4214 (list
4215 #:phases
4216 #~(modify-phases %standard-phases
4217 (add-after 'unpack 'relax-requirements
4218 (lambda _
4219 (substitute* "pyproject.toml"
4220 (("\"requests-file.*\",")
4221 "\"requests-file\",")))))))
4222 (native-inputs
4223 (list nss-certs-for-test
4224 python-pytest
4225 python-pytest-mock
4226 python-responses
4227 python-setuptools
4228 python-setuptools-scm
4229 python-syrupy))
4230 (propagated-inputs
4231 (list python-filelock
4232 python-idna
4233 python-requests
4234 python-requests-file))
4235 (home-page "https://github.com/john-kurkowski/tldextract")
4236 (synopsis
4237 "Separate the TLD from the registered domain and subdomains of a URL")
4238 (description
4239 "TLDExtract accurately separates the TLD from the registered domain and
4240subdomains of a URL, using the Public Suffix List. By default, this includes
4241the public ICANN TLDs and their exceptions. It can optionally support the
4242Public Suffix List's private domains as well.")
4243 (license license:bsd-3)))
4244
4245(define-public python-tracerite
4246 (package
4247 (name "python-tracerite")
4248 (version "1.1.3")
4249 (source
4250 (origin
4251 (method url-fetch)
4252 (uri (pypi-uri "tracerite" version))
4253 (sha256
4254 (base32 "07mkg0sl0h335kj6yjvxki2c19gxhb7rkks1zgzh7aj0y83c17qi"))))
4255 (build-system pyproject-build-system)
4256 (arguments
4257 (list #:tests? #f)) ;no tests in PyPI or Git
4258 (native-inputs
4259 (list python-setuptools
4260 python-setuptools-scm))
4261 (propagated-inputs
4262 (list python-html5tagger))
4263 (home-page "https://github.com/sanic-org/tracerite")
4264 (synopsis "Human-readable HTML tracebacks")
4265 (description
4266 "@code{tracerite} converts Python tracebacks into useful error messages
4267in human-readable HTML format.")
4268 (license license:unlicense)))
4269
4270(define-public python-trio-websocket
4271 (package
4272 (name "python-trio-websocket")
4273 (version "0.12.2")
4274 (source
4275 (origin
4276 (method git-fetch)
4277 (uri (git-reference
4278 (url "https://github.com/HyperionGray/trio-websocket")
4279 (commit version)))
4280 (file-name (git-file-name name version))
4281 (sha256
4282 (base32 "1lm712gakpskcn3adna22kj8m1hspz9l68pmlziklr0ycphmyqac"))))
4283 (build-system pyproject-build-system)
4284 (native-inputs
4285 (list python-pytest
4286 python-pytest-trio
4287 python-setuptools
4288 python-trustme))
4289 (propagated-inputs
4290 (list python-outcome
4291 python-trio
4292 python-wsproto))
4293 (home-page "https://github.com/HyperionGray/trio-websocket")
4294 (synopsis "WebSocket library for Trio")
4295 (description "This library implements both server and client aspects of
4296the @url{https://tools.ietf.org/html/rfc6455, the WebSocket protocol},
4297striving for safety, correctness, and ergonomics. It is based on the
4298@url{https://wsproto.readthedocs.io/en/latest/, wsproto project}, which is a
4299@url{https://sans-io.readthedocs.io/, Sans-IO} state machine that implements
4300the majority of the WebSocket protocol, including framing, codecs, and events.
4301This library handles I/O using @url{https://trio.readthedocs.io/en/latest/,
4302the Trio framework}.")
4303 (license license:expat)))
4304
4305(define-public python-txacme
4306 ;; 0.9.3 tag was placed in 2020 and there a lot of changes providing
4307 ;; compatibility wit twisted, use the latest commit from trunk branch.
4308 ;;
4309 ;;See: <https://github.com/twisted/txacme/issues/165>.
4310 (let ((commit "ac18f92f6dde971a6b38f2ecfae44665815db583")
4311 (revision "0"))
4312 (package
4313 (name "python-txacme")
4314 (version (git-version "0.9.3" revision commit))
4315 (source
4316 (origin
4317 (method git-fetch) ;no fresh release in PyPI
4318 (uri (git-reference
4319 (url "https://github.com/twisted/txacme")
4320 (commit commit)))
4321 (file-name (git-file-name name version))
4322 (sha256
4323 (base32 "0mgdfxldv8qflbn75ywslbarnd4i3l7c4krs4aibl2dpryclsjzs"))))
4324 (build-system pyproject-build-system)
4325 (arguments
4326 (list #:test-backend #~'custom
4327 #:test-flags #~(list "-m" "twisted.trial" "txacme")))
4328 (native-inputs
4329 (list python-setuptools))
4330 (propagated-inputs
4331 (list python-acme
4332 python-attrs
4333 python-eliot
4334 python-josepy
4335 python-pem
4336 python-treq
4337 python-twisted
4338 python-txsni))
4339 (home-page "https://github.com/twisted/txacme")
4340 (synopsis "Twisted implexmentation of the ACME protocol")
4341 (description
4342 "ACME is Automatic Certificate Management Environment, a protocol that
4343allows clients and certificate authorities to automate verification and
4344certificate issuance. The ACME protocol is used by the free Let's Encrypt
4345Certificate Authority.
4346
4347txacme is an implementation of the protocol for Twisted, the event-driven
4348networking engine for Python.")
4349 (license license:expat))))
4350
4351(define-public python-txaio
4352 (package
4353 (name "python-txaio")
4354 (version "25.9.2")
4355 (source
4356 (origin
4357 (method url-fetch)
4358 (uri (pypi-uri "txaio" version))
4359 (sha256
4360 (base32 "16ch62yk2gdikkak113h6qw13ns9ksca817hky0vabn0fyh08874"))))
4361 (build-system pyproject-build-system)
4362 (native-inputs
4363 (list python-pytest
4364 python-setuptools))
4365 (home-page "https://github.com/crossbario/txaio")
4366 (synopsis "Compatibility layer between Python asyncio and Twisted")
4367 (description
4368 "Txaio provides a compatibility layer between the Python @code{asyncio}
4369 bsmodule and @code{Twisted}.")
4370 (license license:expat)))
4371
4372;; XXX: Potentially abandonware since 2017, consider to remove when nothing
4373;; depends on it or fails to build.
4374(define-public python-txamqp
4375 (package
4376 (name "python-txamqp")
4377 (version "0.8.2")
4378 (source
4379 (origin
4380 (method url-fetch)
4381 (uri (pypi-uri "txAMQP" version))
4382 (sha256
4383 (base32 "0jd9864k3csc06kipiwzjlk9mq4054s8kzk5q1cfnxj8572s4iv4"))))
4384 (build-system pyproject-build-system)
4385 (arguments
4386 (list #:tests? #f)) ;all tests failed
4387 (native-inputs
4388 (list python-setuptools))
4389 (propagated-inputs
4390 (list python-six python-twisted))
4391 (home-page "https://github.com/txamqp/txamqp")
4392 (synopsis "Communicate with AMQP peers and brokers using Twisted")
4393 (description
4394 "This package provides a Python library for communicating with AMQP peers
4395and brokers using the asynchronous networking framework Twisted. It contains
4396all the necessary code to connect, send and receive messages to/from an
4397AMQP-compliant peer or broker (Qpid, OpenAMQ, RabbitMQ) using Twisted. It
4398also includes support for using Thrift RPC over AMQP in Twisted
4399applications.")
4400 (license license:asl2.0)))
4401
4402(define-public python-txsni
4403 (package
4404 (name "python-txsni")
4405 (version "0.2.0")
4406 (source
4407 (origin
4408 (method git-fetch)
4409 (uri (git-reference
4410 (url "https://github.com/glyph/txsni")
4411 (commit (string-append "v" version))))
4412 (file-name (git-file-name name version))
4413 (sha256
4414 (base32 "1fl8xi7vl24hwbva5v41l6nsrbkj2l2mlsgcvdjxgph61aznwywq"))))
4415 (build-system pyproject-build-system)
4416 (arguments
4417 (list #:test-backend #~'custom
4418 #:test-flags #~(list "-m" "twisted.trial"
4419 "--temp-directory=/tmp/_trial_temp"
4420 "txsni")))
4421 (native-inputs
4422 (list python-setuptools))
4423 (propagated-inputs
4424 (list python-pyopenssl
4425 python-service-identity
4426 python-twisted))
4427 (home-page "https://github.com/glyph/txsni")
4428 (synopsis "Run TLS servers with Twisted")
4429 (description
4430 "This package provides an easy-to-use SNI endpoint for use with the
4431Twisted web framework.")
4432 (license license:expat)))
4433
4434(define-public python-txtorcon
4435 (package
4436 (name "python-txtorcon")
4437 (version "24.8.0")
4438 (source
4439 (origin
4440 (method url-fetch)
4441 (uri (pypi-uri "txtorcon" version))
4442 (sha256
4443 (base32 "1l4ajw4h7nay4vmllh6cs7zh3hnh8vj4yvgfnq3m734wil9ikzmy"))))
4444 (build-system pyproject-build-system)
4445 (native-inputs
4446 (list python-pytest
4447 python-setuptools
4448 python-wheel))
4449 (inputs
4450 (list lsof))
4451 (propagated-inputs
4452 (list python-automat
4453 python-idna
4454 python-incremental
4455 python-pyopenssl
4456 python-service-identity
4457 python-twisted
4458 python-zope-interface))
4459 (home-page "https://github.com/meejah/txtorcon")
4460 (synopsis "Twisted-based Tor controller client")
4461 (description
4462 "This package provides a Twisted-based Tor controller client,with
4463state-tracking and configuration abstractions.")
4464 (license license:expat)))
4465
4466(define-public python-url-normalize
4467 (package
4468 (name "python-url-normalize")
4469 (version "2.2.1")
4470 (source
4471 (origin
4472 (method git-fetch) ; no tests in PyPI release
4473 (uri (git-reference
4474 (url "https://github.com/niksite/url-normalize")
4475 (commit (string-append "v" version))))
4476 (file-name (git-file-name name version))
4477 (sha256
4478 (base32 "1yhsf4sk6l6nznpnqigisbfz690a4g342dsk2n6dggh7q4l3amk4"))))
4479 (build-system pyproject-build-system)
4480 (arguments
4481 (list
4482 #:test-flags #~(list "--ignore=tests/test_cli.py")))
4483 (native-inputs
4484 (list python-pytest
4485 python-pytest-cov
4486 python-pytest-socket
4487 python-setuptools))
4488 (propagated-inputs
4489 (list python-idna))
4490 (home-page "https://github.com/niksite/url-normalize")
4491 (synopsis "URL normalization for Python")
4492 (description
4493 "This package provides a URI Normalization function with following
4494features:
4495@itemize
4496@item take care of IDN domains
4497@item always provide the URI scheme in lowercase characters
4498@item always provide the host, if any, in lowercase characters
4499@item only perform percent-encoding where it is essential
4500@item always use uppercase A-through-F characters when percent-encoding
4501@item prevent dot-segments appearing in non-relative URI paths
4502@item for schemes that define a default authority, use an empty authority if
4503the default is desired
4504@item for schemes that define an empty path to be equivalent to a path of
4505@code{/}, use @code{/}
4506@item for schemes that define a port, use an empty port if the default is
4507desired
4508@item all portions of the URI must be utf-8 encoded NFC from Unicode strings
4509@end itemize")
4510 (license license:expat)))
4511
4512(define-public python-waitress
4513 (package
4514 (name "python-waitress")
4515 (version "3.0.2")
4516 (source
4517 (origin
4518 (method url-fetch)
4519 (uri (pypi-uri "waitress" version))
4520 (sha256
4521 (base32
4522 "07y3xyx2006f2ni5d55byh3y7w4kcg9xww7vmfjasi0cmzralak8"))))
4523 (build-system pyproject-build-system)
4524 (arguments
4525 ;; https://github.com/Pylons/waitress/issues/443
4526 (list #:test-flags #~(list "-k" "not test_service_port")))
4527 (native-inputs
4528 (list python-coverage python-pytest python-pytest-cov
4529 python-setuptools python-wheel))
4530 (home-page "https://github.com/Pylons/waitress")
4531 (synopsis "Waitress WSGI server")
4532 (description
4533 "Waitress is meant to be a production-quality pure-Python WSGI server
4534with very acceptable performance.")
4535 (license license:zpl2.1)))
4536
4537(define-public python-weasel
4538 (package
4539 (name "python-weasel")
4540 (version "0.4.1")
4541 (source
4542 (origin
4543 (method url-fetch)
4544 (uri (pypi-uri "weasel" version))
4545 (sha256
4546 (base32 "1aas113r29y6yxrmdlsw80rj8w4kgw1jhfjw9rsgc4rf0w7j3g5a"))))
4547 (build-system pyproject-build-system)
4548 (arguments
4549 (list
4550 #:test-flags
4551 ;; Network access is required.
4552 #~(list #$@(map (lambda (test) (string-append "--deselect="
4553 "weasel/tests/cli/"
4554 test))
4555 (list "test_cli.py::test_project_git_dir_asset"
4556 "test_cli.py::test_project_git_file_asset"
4557 "test_cli_app.py::test_project_assets")))))
4558 (native-inputs
4559 (list python-pytest
4560 python-setuptools))
4561 (propagated-inputs
4562 (list python-cloudpathlib
4563 python-confection
4564 python-packaging
4565 python-pydantic-2
4566 python-requests
4567 python-smart-open
4568 python-srsly
4569 python-typer
4570 python-wasabi))
4571 (home-page "https://github.com/explosion/weasel/")
4572 (synopsis "Small and easy workflow system")
4573 (description
4574 "This package provides a minimalistic workflow system to manage and
4575share end-to-end workflows for different use cases and domains.")
4576 (license license:expat)))
4577
4578(define-public python-webencodings
4579 (package
4580 (name "python-webencodings")
4581 (version "0.5.1")
4582 (source
4583 (origin
4584 (method url-fetch)
4585 (uri (pypi-uri "webencodings" version))
4586 (sha256
4587 (base32 "08qrgrc4hrximb2gqnl69g01s93rhf2842jfxdjljc1dbwj1qsmk"))))
4588 (build-system pyproject-build-system)
4589 (arguments
4590 (list #:test-flags #~(list "webencodings/tests.py")))
4591 (native-inputs
4592 (list python-pytest python-setuptools))
4593 (home-page "https://github.com/SimonSapin/python-webencodings")
4594 (synopsis "Character encoding aliases for legacy web content")
4595 (description
4596 "In order to be compatible with legacy web content when interpreting
4597something like @code{Content-Type: text/html; charset=latin1}, tools need to
4598use a particular set of aliases for encoding labels as well as some overriding
4599rules. For example, @code{US-ASCII} and @code{iso-8859-1} on the web are
4600actually aliases for @code{windows-1252}, and a @code{UTF-8} or @code{UTF-16}
4601BOM takes precedence over any other encoding declaration. The WHATWG
4602@url{https://encoding.spec.whatwg.org/,Encoding} standard defines all such
4603details so that implementations do not have to reverse-engineer each other.
4604
4605This module implements the Encoding standard and has encoding labels and BOM
4606detection, but the actual implementation for encoders and decoders is
4607Python’s.")
4608 (license license:bsd-3)))
4609
4610(define-public python-omnipath
4611 (package
4612 (name "python-omnipath")
4613 (version "1.0.10")
4614 (source
4615 (origin
4616 (method git-fetch)
4617 (uri (git-reference
4618 (url "https://github.com/saezlab/omnipath/")
4619 (commit (string-append "v" version))))
4620 (file-name (git-file-name name version))
4621 (sha256
4622 (base32 "0jnc7nsn6n5hqx5wlk928b7xmg0mpfqy8al9w2p707ihcwh4s1rf"))))
4623 (build-system pyproject-build-system)
4624 (arguments
4625 (list
4626 #:test-flags '(list "-k"
4627 (string-append
4628 ;; These require internet access
4629 "not test_download_homologene"
4630 " and not test_complex_genes"))
4631 #:phases
4632 #~(modify-phases %standard-phases
4633 (add-after 'unpack 'set-home
4634 (lambda _
4635 (setenv "HOME" "/tmp"))))))
4636 (propagated-inputs (list python-attrs
4637 python-docrep
4638 python-inflect
4639 python-networkx
4640 python-packaging
4641 python-pandas
4642 python-requests
4643 python-tqdm
4644 python-typing-extensions
4645 python-urllib3
4646 python-wrapt))
4647 (native-inputs (list nss-certs-for-test
4648 python-bump2version
4649 python-hatchling
4650 python-pytest
4651 python-pytest-mock
4652 python-pytest-socket
4653 python-requests-mock))
4654 (home-page "https://omnipathdb.org/")
4655 (synopsis "Python client for the OmniPath web service")
4656 (description "This package provides a Python client for the OmniPath web
4657service.")
4658 (license license:expat)))
4659
4660(define-public python-openai
4661 (package
4662 (name "python-openai")
4663 (version "1.3.5")
4664 (source (origin
4665 (method git-fetch)
4666 (uri (git-reference
4667 (url "https://github.com/openai/openai-python")
4668 (commit (string-append "v" version))))
4669 (file-name (git-file-name name version))
4670 (sha256
4671 (base32
4672 "0k1rwhj7v22x5bnv9xbk9nj9grxqmmclh9538qqjadgqxfn5x74q"))))
4673 (build-system pyproject-build-system)
4674 (arguments
4675 (list
4676 #:test-flags
4677 ;; These require internet access and an openai API key.
4678 '(list "--ignore=openai/tests/asyncio/test_endpoints.py"
4679 "--ignore=openai/tests/test_endpoints.py"
4680 "--ignore-glob=tests/api_resources/*"
4681 ;; Needs respx
4682 "--ignore=tests/api_resources/audio/test_speech.py"
4683 "--ignore=tests/api_resources/test_files.py"
4684 "--ignore=tests/test_client.py"
4685 "-k" "not test_requestor_cycle_sessions\
4686 and not test_requestor_sets_request_id\
4687 and not test_file_cli\
4688 and not test_basic_async\
4689 and not test_async\
4690 and not test_datetime_with_alias\
4691 and not test_pydantic")
4692 #:phases
4693 '(modify-phases %standard-phases
4694 (add-after 'unpack 'relax-requirements
4695 (lambda _
4696 (substitute* "pyproject.toml"
4697 (("distro>=1.7.0") "distro>=1.6.0")
4698 (("anyio>=3.5.0, <4") "anyio"))))
4699 (add-after 'unpack 'httpx-compatibility
4700 (lambda _
4701 (substitute* "src/openai/_base_client.py"
4702 (("proxies=proxies,") "")
4703 (("self._proxies = proxies") "")
4704 (("proxies: ProxiesTypes . None,") "")))))))
4705 (propagated-inputs
4706 (list python-aiohttp
4707 python-distro
4708 python-httpx
4709 python-pydantic-2
4710 python-requests
4711 python-tqdm
4712 python-typing-extensions))
4713 (native-inputs (list nss-certs-for-test
4714 python-dirty-equals
4715 python-hatchling
4716 python-pytest python-pytest-asyncio
4717 python-pytest-mock python-setuptools python-wheel))
4718 (home-page "https://github.com/openai/openai-python")
4719 (synopsis "Python client library for the OpenAI API")
4720 (description "This package provides a Python client library for the
4721OpenAI API.")
4722 (license license:expat)))
4723
4724(define-public python-openapi-schema-validator
4725 (package
4726 (name "python-openapi-schema-validator")
4727 (version "0.6.2")
4728 (source
4729 (origin
4730 (method git-fetch) ;no tests in pypi release
4731 (uri (git-reference
4732 (url "https://github.com/p1c2u/openapi-schema-validator")
4733 (commit version)))
4734 (file-name (git-file-name name version))
4735 (sha256
4736 (base32
4737 "0pgsm1x7lhc5ryj4l45ik8m5x9gqyi50dkflaiqqr4fnl0bsbx09"))))
4738 (build-system pyproject-build-system)
4739 (arguments
4740 (list
4741 #:test-flags
4742 ;; This one returns 5 instead of 4 elements
4743 '(list "-k" "not test_array_prefixitems_invalid")
4744 #:phases
4745 #~(modify-phases %standard-phases
4746 (add-after 'unpack 'remove-coverage-pytest-options
4747 (lambda _
4748 (substitute* "pyproject.toml"
4749 (("^--cov.*") ""))))
4750 ;; See https://github.com/python-openapi/openapi-schema-validator/issues/204
4751 (add-after 'unpack 'relax-requirements
4752 (lambda _
4753 (substitute* "pyproject.toml"
4754 (("jsonschema-specifications.*")
4755 "jsonschema-specifications = \">=2023.5.2\"\n")))))))
4756 (native-inputs (list python-poetry-core python-pytest))
4757 (propagated-inputs
4758 (list python-isodate
4759 python-jsonschema
4760 python-rfc3339-validator
4761 python-strict-rfc3339))
4762 (home-page "https://github.com/p1c2u/openapi-schema-validator")
4763 (synopsis "OpenAPI schema validation library for Python")
4764 (description "Openapi-schema-validator is a Python library that validates
4765a schema against:
4766@itemize
4767@item OpenAPI Schema Specification v3.0 which is an extended subset of the
4768JSON Schema Specification Wright Draft 00.
4769@item OpenAPI Schema Specification v3.1 which is an extended superset of the
4770JSON Schema Specification Draft 2020-12.
4771@end itemize")
4772 (license license:bsd-3)))
4773
4774(define-public python-openapi-spec-validator
4775 (package
4776 (name "python-openapi-spec-validator")
4777 (version "0.7.1")
4778 (source
4779 (origin
4780 (method git-fetch) ;no tests in pypi release
4781 (uri (git-reference
4782 (url "https://github.com/p1c2u/openapi-spec-validator")
4783 (commit version)))
4784 (file-name (git-file-name name version))
4785 (sha256
4786 (base32
4787 "0s5yd4dbr6knwd2g1g4v2931k14n1lm80l11n2ija18yfis8yisz"))))
4788 (build-system pyproject-build-system)
4789 (arguments
4790 (list
4791 ;; These tests attempt to fetch resources from the Internet
4792 #:test-flags '(list "--ignore-glob=tests/integration/validation/**"
4793 "-k" "not example")
4794 #:phases
4795 #~(modify-phases %standard-phases
4796 (add-after 'unpack 'remove-coverage-pytest-options
4797 (lambda _
4798 (substitute* "pyproject.toml"
4799 (("^--cov.*") "")))))))
4800 (native-inputs
4801 (list python-poetry-core
4802 python-pytest))
4803 (propagated-inputs
4804 (list python-jsonschema
4805 python-jsonschema-path
4806 python-lazy-object-proxy
4807 python-openapi-schema-validator
4808 python-pyyaml
4809 python-requests
4810 python-setuptools))
4811 (home-page "https://github.com/p1c2u/openapi-spec-validator")
4812 (synopsis "OpenAPI spec validator")
4813 (description "OpenAPI Spec Validator is a Python library that validates an
4814OpenAPI specification against the OpenAPI 2.0 (also known as Swagger), OpenAPI
48153.0 and OpenAPI 3.1 specifications. The validator aims to check for full
4816compliance with the specification.")
4817 (license license:asl2.0)))
4818
4819(define-public python-openapi-core
4820 (package
4821 (name "python-openapi-core")
4822 (version "0.19.4")
4823 (source
4824 (origin
4825 (method git-fetch)
4826 (uri (git-reference
4827 (url "https://github.com/p1c2u/openapi-core")
4828 (commit version)))
4829 (file-name (git-file-name name version))
4830 (sha256
4831 (base32
4832 "092sj2933jmvq5r76khr0vphih490vls1ga3s43gz8i47aqaxx96"))))
4833 (build-system pyproject-build-system)
4834 (arguments
4835 (list
4836 #:test-flags
4837 '(list "tests/unit"
4838 ;; Ignore Pytest configuration in setup.cfg that adds
4839 ;; unwanted flake8 and coverage options.
4840 "-c" "/dev/null"
4841 "-k" "not test_chars_valid")))
4842 (native-inputs (list python-django
4843 python-falcon
4844 python-flask
4845 python-mock
4846 python-poetry-core
4847 python-pytest
4848 python-responses))
4849 (propagated-inputs
4850 (list python-attrs
4851 python-aiohttp
4852 python-isodate
4853 python-jsonschema
4854 python-lazy-object-proxy
4855 python-more-itertools
4856 python-openapi-schema-validator
4857 python-openapi-spec-validator
4858 python-parse
4859 python-six
4860 python-werkzeug))
4861 (home-page "https://github.com/p1c2u/openapi-core")
4862 (synopsis "OpenAPI core library")
4863 (description "Openapi-core is a Python library that adds client-side and
4864server-side support for the OpenAPI Specification v3. It has features such
4865as:
4866@itemize
4867@item Validation of requests and responses
4868@item Schema casting and unmarshalling
4869@item Media type and parameters deserialization
4870@item Security providers (API keys, Cookie, Basic and Bearer HTTP
4871authentications)
4872@item Custom deserializers and formats
4873@item Integration with libraries and frameworks.
4874@end itemize")
4875 (license license:bsd-3)))
4876
4877(define-public python-openid
4878 (package
4879 (name "python-openid")
4880 (version "3.2.0")
4881 (source
4882 (origin
4883 (method url-fetch)
4884 (uri (pypi-uri "python3-openid" version))
4885 (sha256
4886 (base32
4887 "1bxf9a3ny1js422j962zfzl4a9dhj192pvai05whn7j0iy9gdyrk"))))
4888 (build-system pyproject-build-system)
4889 (arguments
4890 `(#:phases
4891 (modify-phases %standard-phases
4892 (replace 'check
4893 (lambda* (#:key tests? #:allow-other-keys)
4894 (when tests?
4895 (invoke "python" "-m" "unittest" "openid.test.test_suite")))))))
4896 (propagated-inputs
4897 (list python-defusedxml))
4898 (native-inputs
4899 (list python-psycopg2 python-django python-setuptools python-wheel))
4900 (home-page "https://github.com/necaris/python3-openid")
4901 (synopsis "OpenID support for servers and consumers")
4902 (description "This library provides OpenID authentication for Python, both
4903for clients and servers.")
4904 (license license:asl2.0)))
4905
4906(define-public python-cssutils
4907 (package
4908 (name "python-cssutils")
4909 (version "2.11.1")
4910 (source
4911 (origin
4912 (method url-fetch)
4913 (uri (pypi-uri "cssutils" version))
4914 (sha256
4915 (base32
4916 "1qpq7xvzqp4cfcb8837rnd30x4hws3rkp33qpvmnxbxn2djsfqq5"))))
4917 (build-system pyproject-build-system)
4918 (arguments
4919 (list
4920 #:phases
4921 #~(modify-phases %standard-phases
4922 (replace 'check
4923 (lambda _
4924 (invoke "pytest" "-vv" "-k"
4925 (string-append "not encutils "
4926 "and not website.logging")))))))
4927 (native-inputs
4928 (list python-cssselect
4929 python-jaraco-test
4930 python-lxml
4931 python-pytest
4932 python-setuptools
4933 python-wheel))
4934 (propagated-inputs
4935 (list python-more-itertools))
4936 (home-page "https://github.com/jaraco/cssutils")
4937 (synopsis
4938 "CSS Cascading Style Sheets library for Python")
4939 (description
4940 "Cssutils is a Python package for parsing and building CSS
4941Cascading Style Sheets. Currently it provides a DOM only and no rendering
4942options.")
4943 (license license:lgpl3+)))
4944
4945(define-public python-css-parser
4946 (package
4947 (inherit python-cssutils)
4948 (name "python-css-parser")
4949 (version "1.0.10")
4950 (source
4951 (origin
4952 (method url-fetch)
4953 (uri (pypi-uri "css-parser" version))
4954 (sha256
4955 (base32 "0qs375slcwqd7slizh6hzkwxx7cdj36v8kwn0qrfji1kscm9f7mz"))))
4956 (home-page "https://github.com/ebook-utils/css-parser")
4957 (synopsis "Fork of cssutils modified for parsing ebooks")
4958 (description
4959 "Css-parser is a Python package for parsing and building CSS
4960Cascading Style Sheets. Currently it provides a DOM only and no rendering
4961options.
4962
4963It's a fork of cssutils 1.0.2, updated and modified for parsing ebooks, due to
4964cssutils not receiving updates as of 1.0.2.")
4965 (license license:lgpl3+)))
4966
4967(define-public python-cssselect
4968 (package
4969 (name "python-cssselect")
4970 (version "1.2.0")
4971 (source (origin
4972 ;; The PyPI release does not contain tests.
4973 (method git-fetch)
4974 (uri (git-reference
4975 (url "https://github.com/scrapy/cssselect")
4976 (commit (string-append "v" version))))
4977 (file-name (git-file-name name version))
4978 (sha256
4979 (base32
4980 "1x4nrvb1p1byi1whmspik7lbh303akdlh762dayfxam3hycsh5kk"))))
4981 (build-system pyproject-build-system)
4982 (native-inputs
4983 (list python-lxml python-pytest python-setuptools python-wheel))
4984 (home-page "https://github.com/scrapy/cssselect")
4985 (synopsis "CSS3 selector parser and translator to XPath 1.0")
4986 (description
4987 "Cssselect ia a Python module that parses CSS3 Selectors and translates
4988them to XPath 1.0 expressions. Such expressions can be used in lxml or
4989another XPath engine to find the matching elements in an XML or HTML document.")
4990 (license license:bsd-3)))
4991
4992(define-public python-databricks-cli
4993 (package
4994 (name "python-databricks-cli")
4995 (version "0.18.0")
4996 (home-page "https://github.com/databricks/databricks-cli")
4997 (source (origin
4998 (method git-fetch)
4999 (uri (git-reference (url home-page) (commit version)))
5000 (file-name (git-file-name name version))
5001 (sha256
5002 (base32
5003 "1avag4kwqk2f24r5i0vcmhm6s1gsw6maykhlyj2ixz0qc05pjzvl"))))
5004 (build-system pyproject-build-system)
5005 (arguments
5006 (list #:phases #~(modify-phases %standard-phases
5007 (replace 'check
5008 (lambda _
5009 (invoke "pytest" "tests" "-vv"))))))
5010 (native-inputs
5011 ;; For tests.
5012 (list python-decorator
5013 python-mock
5014 python-pytest
5015 python-requests-mock
5016 python-setuptools
5017 python-wheel))
5018 (propagated-inputs
5019 (list python-click
5020 python-oauthlib
5021 python-pyjwt
5022 python-requests
5023 python-six
5024 python-tabulate))
5025 (synopsis "Command line interface for Databricks")
5026 (description
5027 "The Databricks Command Line Interface is a tool which provides an easy
5028to use interface to the Databricks platform. The CLI is built on top of the
5029Databricks REST APIs.")
5030 (license license:asl2.0)))
5031
5032(define-public python-openid-cla
5033 ;; XXX: Last updated in 2015.
5034 (package
5035 (name "python-openid-cla")
5036 (version "1.2")
5037 (source
5038 (origin
5039 (method url-fetch)
5040 (uri (pypi-uri "python-openid-cla" version))
5041 (sha256
5042 (base32
5043 "102hy2qisvjxp5s0v9lvwqi4f2dk0dhns40vjgn008yxc7k0h3cr"))))
5044 (build-system pyproject-build-system)
5045 (arguments '(#:tests? #f)) ; No tests.
5046 (native-inputs (list python-setuptools python-wheel))
5047 (propagated-inputs (list python-openid python-six))
5048 (home-page "https://github.com/puiterwijk/python-openid-cla/")
5049 (synopsis "Implementation of the OpenID CLA extension for python-openid")
5050 (description "@code{openid-cla} is an implementation of the OpenID
5051contributor license agreement extension for python-openid.")
5052 (license license:bsd-3)))
5053
5054(define-public python-openid-teams
5055 ;; XXX: Last updated in 2018.
5056 (package
5057 (name "python-openid-teams")
5058 (version "1.1")
5059 (source
5060 (origin
5061 (method url-fetch)
5062 (uri (pypi-uri "python-openid-teams" version))
5063 (sha256
5064 (base32
5065 "05zrh78alav24rxkbqlpbad6d3x2nljk6z6j7kflxf3vdqa7w969"))))
5066 (build-system pyproject-build-system)
5067 (arguments '(#:tests? #f)) ; No tests.
5068 (native-inputs (list python-setuptools python-wheel))
5069 (propagated-inputs (list python-openid python-six))
5070 (home-page "https://github.com/puiterwijk/python-openid-teams/")
5071 (synopsis "Implementation of the OpenID teams extension for python-openid")
5072 (description
5073 "@code{openid-teams} is an implementation of the OpenID
5074teams extension for python-openid.")
5075 (license license:bsd-3)))
5076
5077(define-public python-priority
5078 (package
5079 (name "python-priority")
5080 (version "2.0.0")
5081 (source
5082 (origin
5083 (method url-fetch)
5084 (uri (pypi-uri "priority" version))
5085 (sha256
5086 (base32 "1h0qpa949bxx7za95v1apwnngkrngi695cwx8wchn3cd3d7xarf9"))))
5087 (build-system pyproject-build-system)
5088 (native-inputs
5089 (list python-pytest python-setuptools python-wheel))
5090 (home-page "https://python-hyper.org/projects/priority/en/latest/")
5091 (synopsis "Pure-Python implementation of the HTTP/2 priority tree")
5092 (description
5093 "Priority is a pure-Python implementation of the priority logic for HTTP/2,
5094set out in RFC 7540 Section 5.3 (Stream Priority).")
5095 (license license:expat)))
5096
5097(define-public python-weblate-language-data
5098 (package
5099 (name "python-weblate-language-data")
5100 (version "2025.8")
5101 (source
5102 (origin
5103 (method url-fetch)
5104 (uri (pypi-uri "weblate_language_data" version))
5105 (sha256
5106 (base32 "0byj1xl6xldam790b6wg62dk1b4i6qdlsp4lqzlv65wnp2klvrkf"))))
5107 (build-system pyproject-build-system)
5108 (arguments (list #:tests? #f)) ;not tests, just data files
5109 (native-inputs
5110 (list python-setuptools))
5111 (propagated-inputs
5112 (list python-translate-toolkit))
5113 (home-page "https://github.com/WeblateOrg/language-data")
5114 (synopsis "Language definitions for Weblate")
5115 (description
5116 "This package provides language definitions used by
5117@url{https://weblate.org/, Weblate}i.")
5118 (license license:expat)))
5119
5120(define-public python-wikidata
5121 (package
5122 (name "python-wikidata")
5123 (version "0.8.1")
5124 (source
5125 (origin
5126 (method git-fetch)
5127 (uri (git-reference
5128 (url "https://github.com/dahlia/wikidata")
5129 (commit version)))
5130 (file-name (git-file-name name version))
5131 (sha256
5132 (base32 "06zg74h249phszn1znfcjdz6c3lz350fiabdzn7iqb2xg4xh69a5"))))
5133 (build-system pyproject-build-system)
5134 (native-inputs
5135 (list python-pytest python-setuptools))
5136 (home-page "https://github.com/dahlia/wikidata")
5137 (synopsis "Wikidata client library")
5138 (description
5139 "This package provides a Python interface to @url{https://www.wikidata.org/,
5140Wikidata}.")
5141 (license license:gpl3+)))
5142
5143(define-public python-wsproto
5144 (package
5145 (name "python-wsproto")
5146 (version "1.2.0")
5147 (source
5148 (origin
5149 (method url-fetch)
5150 (uri (pypi-uri "wsproto" version))
5151 (sha256
5152 (base32 "0rahm1j9danv1l6i6as80acwv16ycihxkhrvwjiqh9drxhk5ymmd"))))
5153 (build-system pyproject-build-system)
5154 (native-inputs
5155 (list python-pytest python-setuptools python-wheel))
5156 (propagated-inputs
5157 (list python-h11))
5158 (home-page "https://github.com/python-hyper/wsproto/")
5159 (synopsis "WebSockets state-machine based protocol implementation")
5160 (description
5161 "@code{wsproto} is a pure-Python implementation of a WebSocket protocol
5162stack. It's written from the ground up to be embeddable in whatever program you
5163choose to use, ensuring that you can communicate via WebSockets, as defined in
5164RFC6455, regardless of your programming paradigm.")
5165 (license license:expat)))
5166
5167(define-public hypercorn
5168 (package
5169 (name "hypercorn")
5170 (version "0.17.3")
5171 (source
5172 (origin
5173 (method git-fetch) ;PyPI does not have tests
5174 (uri (git-reference
5175 (url "https://github.com/pgjones/hypercorn")
5176 (commit version)))
5177 (file-name (git-file-name name version))
5178 (sha256
5179 (base32 "13v6cy4frvnddv9zak06a4lmwxp121hjyfrlapxfmb7m3i8qrm02"))))
5180 (build-system pyproject-build-system)
5181 ;; Propagate because Hypercorn also exposes functionality over a module.
5182 (propagated-inputs (list python-exceptiongroup
5183 python-h11
5184 python-taskgroup
5185 python-h2
5186 python-priority
5187 python-tomli
5188 python-wsproto))
5189 (native-inputs (list nss-certs-for-test
5190 python-httpx
5191 python-poetry-core
5192 python-pytest
5193 python-pytest-asyncio
5194 python-pytest-cov
5195 python-pytest-trio
5196 python-trio))
5197 (home-page "https://gitlab.com/pgjones/hypercorn/")
5198 (synopsis "ASGI Server based on Hyper libraries")
5199 (description
5200 "Hypercorn is an ASGI web server based on the sans-io hyper, h11, h2, and
5201wsproto libraries and inspired by Gunicorn. It supports HTTP/1, HTTP/2,
5202WebSockets (over HTTP/1 and HTTP/2), ASGI/2, and ASGI/3 specifications. It
5203can utilise asyncio, uvloop, or trio worker types.")
5204 (license license:expat)))
5205
5206(define-deprecated-package python-hypercorn
5207 hypercorn)
5208
5209(define-public python-querystring-parser
5210 (package
5211 (name "python-querystring-parser")
5212 (version "1.2.4")
5213 (source (origin
5214 (method url-fetch)
5215 (uri (pypi-uri "querystring_parser" version))
5216 (sha256
5217 (base32
5218 "0qlar8a0wa003hm2z6wcpb625r6vjj0a70rsni9h8lz0zwfcwkv4"))))
5219 (build-system python-build-system)
5220 (arguments
5221 `(#:phases (modify-phases %standard-phases
5222 (replace 'check
5223 (lambda _
5224 ;; XXX FIXME: This test is broken with Python 3.7:
5225 ;; https://github.com/bernii/querystring-parser/issues/35
5226 (substitute* "querystring_parser/tests.py"
5227 (("self\\.assertEqual\\(self\\.knownValuesNormalized, result\\)")
5228 "True"))
5229 (invoke "python" "querystring_parser/tests.py"))))))
5230 (propagated-inputs
5231 (list python-six))
5232 (home-page "https://github.com/bernii/querystring-parser")
5233 (synopsis "QueryString parser that correctly handles nested dictionaries")
5234 (description
5235 "This package provides a query string parser for Python and Django
5236projects that correctly creates nested dictionaries from sent form/querystring
5237data.")
5238 (license license:expat)))
5239
5240(define-public python-tornado
5241 (package
5242 ;; TODO: Try to refresh and check all dependents.
5243 (name "python-tornado")
5244 (version "5.1.1")
5245 (source
5246 (origin
5247 (method url-fetch)
5248 (uri (pypi-uri "tornado" version))
5249 (sha256
5250 (base32
5251 "02clqk2116jbnq8lnaqmdw3p52nqrd9ib59r4xz2ll43fpcmhlaf"))))
5252 (build-system pyproject-build-system)
5253 (arguments
5254 (list
5255 #:phases
5256 '(modify-phases %standard-phases
5257 (add-after 'unpack 'fix-collections
5258 (lambda _
5259 (substitute* "tornado/httputil.py"
5260 (("collections.MutableMapping")
5261 "collections.abc.MutableMapping"))))
5262 (replace 'check
5263 (lambda* (#:key tests? #:allow-other-keys)
5264 (when tests?
5265 (substitute* "tornado/test/runtests.py"
5266 (("\"error\", category=DeprecationWarning")
5267 "\"ignore\", category=DeprecationWarning")
5268 ;; Disable tests that use SSL.
5269 (("'tornado.test.simple_httpclient_test',") "")
5270 (("'tornado.test.iostream_test',") "")
5271 (("'tornado.test.httpserver_test',") "")
5272 ;; Some timeouts are triggered in these two modules
5273 (("'tornado.test.queues_test',") "")
5274 (("'tornado.test.locks_test',") ""))
5275 ;; Skip all network tests
5276 (setenv "NO_NETWORK" "1")
5277 ;; Skip timing-relevant tests
5278 (setenv "TRAVIS" "1")
5279 (invoke "python" "-m" "tornado.test.runtests"
5280 "--verbose=yes")))))))
5281 (native-inputs
5282 (list python-certifi
5283 python-setuptools))
5284 (home-page "https://www.tornadoweb.org/")
5285 (synopsis "Python web framework and asynchronous networking library")
5286 (description
5287 "Tornado is a Python web framework and asynchronous networking library,
5288originally developed at FriendFeed. By using non-blocking network I/O,
5289Tornado can scale to tens of thousands of open connections, making it ideal
5290for long polling, WebSockets, and other applications that require a long-lived
5291connection to each user.")
5292 (license license:asl2.0)))
5293
5294(define-public python-tornado-6
5295 (package
5296 (name "python-tornado")
5297 (version "6.4.2")
5298 (source
5299 (origin
5300 (method url-fetch)
5301 (uri (pypi-uri "tornado" version))
5302 (sha256
5303 (base32 "02v2mlvr58xg0l0gh08nswl53z73wkf23sziggypk63ffjsdbflj"))))
5304 (build-system pyproject-build-system)
5305 (arguments
5306 (list
5307 #:test-flags
5308 ;; AttributeError: 'TestIOStreamWebMixin' object has no attribute 'io_loop'
5309 #~(list "--ignore=tornado/test/iostream_test.py")))
5310 (native-inputs
5311 (list python-certifi
5312 python-pytest
5313 python-setuptools
5314 python-wheel))
5315 (home-page "https://www.tornadoweb.org/")
5316 (synopsis "Python web framework and asynchronous networking library")
5317 (description
5318 "Tornado is a Python web framework and asynchronous networking library,
5319originally developed at FriendFeed. By using non-blocking network I/O,
5320Tornado can scale to tens of thousands of open connections, making it ideal
5321for long polling, WebSockets, and other applications that require a long-lived
5322connection to each user.")
5323 (license license:asl2.0)))
5324
5325(define-public python-tornado-http-auth
5326 (package
5327 (name "python-tornado-http-auth")
5328 (version "1.1.1")
5329 (source
5330 (origin
5331 (method url-fetch)
5332 (uri (pypi-uri "tornado-http-auth" version))
5333 (sha256
5334 (base32 "0hyc5f0a09i5yb99pk4bxpg6w9ichbrb5cv7hc9hff7rxd8w0v0x"))))
5335 (build-system python-build-system)
5336 (propagated-inputs
5337 (list python-tornado))
5338 (home-page "https://github.com/gvalkov/tornado-http-auth")
5339 (synopsis "Digest and basic authentication module for Tornado")
5340 (description
5341 "Provides support for adding authentication to services using the Tornado
5342web framework, either via the basic or digest authentication schemes.")
5343 (license license:asl2.0)))
5344
5345(define-public python-wsgi-intercept
5346 (package
5347 (name "python-wsgi-intercept")
5348 (version "1.13.1")
5349 (source (origin
5350 (method url-fetch)
5351 (uri (pypi-uri "wsgi_intercept" version))
5352 (sha256
5353 (base32
5354 "1h94dj7h7n7zdj3ll4imqjhq5vk21yidk2niwnmpw7xik9inrgbr"))))
5355 (build-system pyproject-build-system)
5356 (arguments
5357 (list
5358 ;; XXX: tests required internet access
5359 #:tests? #f))
5360 (propagated-inputs
5361 (list python-six))
5362 (native-inputs
5363 (list python-httplib2
5364 python-pytest
5365 python-requests
5366 python-setuptools
5367 python-urllib3
5368 python-wheel))
5369 (synopsis "Puts a WSGI application in place of a real URI for testing")
5370 (description "Wsgi_intercept installs a WSGI application in place of a real
5371URI for testing. Testing a WSGI application normally involves starting a
5372server at a local host and port, then pointing your test code to that address.
5373Instead, this library lets you intercept calls to any specific host/port
5374combination and redirect them into a WSGI application importable by your test
5375program. Thus, you can avoid spawning multiple processes or threads to test
5376your Web app.")
5377 (home-page "https://github.com/cdent/wsgi-intercept")
5378 (license license:expat)))
5379
5380(define-public python-webob
5381 (package
5382 (name "python-webob")
5383 (version "1.8.9")
5384 (source
5385 (origin
5386 (method url-fetch)
5387 (uri (pypi-uri "webob" version))
5388 (sha256
5389 (base32
5390 "12b5sl10yzzzz3g11kij3rdzk9y6583ywggc6h9nsxmnxpi7hq5d"))))
5391 (build-system pyproject-build-system)
5392 ;; tests: 2380 passed, 9 skipped, 1 xfailed, 12 warnings
5393 (native-inputs
5394 (list python-pytest
5395 python-setuptools))
5396 (home-page "https://webob.org/")
5397 (synopsis "WSGI request and response object")
5398 (description
5399 "WebOb provides wrappers around the WSGI request environment, and an
5400object to help create WSGI responses.")
5401 (license license:expat)))
5402
5403(define-public python-zc-lockfile
5404 (package
5405 (name "python-zc-lockfile")
5406 (version "3.0.post1")
5407 (source
5408 (origin
5409 (method url-fetch)
5410 (uri (pypi-uri "zc.lockfile" version))
5411 (sha256
5412 (base32 "1v41irj7azaag3f14xyviv3l8mvap74v5p3q274k68vakrnyxcmd"))))
5413 (build-system python-build-system)
5414 (arguments
5415 '(#:phases (modify-phases %standard-phases
5416 (replace 'check
5417 (lambda* (#:key tests? #:allow-other-keys)
5418 (if tests?
5419 (invoke "zope-testrunner" "--test-path=src")
5420 (format #t "test suite not run~%")))))))
5421 (native-inputs (list python-zope-testing python-zope-testrunner))
5422 (home-page "https://github.com/zopefoundation/zc.lockfile")
5423 (synopsis "Interprocess locks using lock files")
5424 (description
5425 "This package provides an implementation of interprocess locks using lock
5426files. These locks can also be used to mediate access to other files.")
5427 (license license:zpl2.1)))
5428
5429(define-public python-zconfig
5430 (package
5431 (name "python-zconfig")
5432 (version "4.0")
5433 (source
5434 (origin
5435 (method url-fetch)
5436 (uri (pypi-uri "ZConfig" version))
5437 (sha256
5438 (base32 "0mh13p38vq7ip4zkvaplzr8w0mqrmmqiyb5y663d165slvxl5mpq"))))
5439 (build-system python-build-system)
5440 (arguments
5441 '(#:phases (modify-phases %standard-phases
5442 (replace 'check
5443 (lambda* (#:key tests? #:allow-other-keys)
5444 (if tests?
5445 (begin
5446 ;; This test assumes we still have setup.py in the
5447 ;; directory from which we import zconfig, which
5448 ;; does not work after installing the package.
5449 (delete-file-recursively
5450 "src/ZConfig/tests/test_readme.py")
5451 (invoke "zope-testrunner" "-vv" "--test-path=src"
5452 "--all"))
5453 (format #t "test suite not run~%")))))))
5454 (native-inputs (list python-docutils python-manuel python-zope-exceptions
5455 python-zope-testrunner))
5456 (home-page "https://github.com/zopefoundation/ZConfig/")
5457 (synopsis "Structured configuration library intended for general use")
5458 (description
5459 "@code{zconfig} is a configuration library intended for general
5460use. It supports a hierarchical schema-driven configuration model that allows
5461a schema to specify data conversion routines written in Python. Its model is
5462very different from the model supported by the @code{configparser} module
5463found in Python's standard library, and is more suitable to
5464configuration-intensive applications.")
5465 (license license:zpl2.1)))
5466
5467(define-public python-zodb
5468 (package
5469 (name "python-zodb")
5470 (version "6.0.1")
5471 (source
5472 (origin
5473 (method url-fetch)
5474 (uri (pypi-uri "zodb" version))
5475 (sha256
5476 (base32 "02cmvf8j2nin5z26wvy2vq2k9mj12hqrr4276lj3w4jj32p0zxw9"))))
5477 (build-system pyproject-build-system)
5478 (arguments
5479 (list
5480 #:phases
5481 #~(modify-phases %standard-phases
5482 (replace 'check
5483 (lambda* (#:key tests? #:allow-other-keys)
5484 (if tests?
5485 (begin
5486 ;; This test does not work after installing the
5487 ;; package, since it expects the ZODB source code
5488 ;; to reside in the src/ directory.
5489 (delete-file-recursively
5490 "src/ZODB/tests/testdocumentation.py")
5491 (invoke "zope-testrunner" "-vv" "--test-path=src"
5492 "--all"))
5493 (format #t "test suite not run~%")))))))
5494 (native-inputs
5495 (list python-manuel
5496 python-wheel
5497 python-zope-testing
5498 python-zope-testrunner))
5499 (propagated-inputs
5500 (list python-btrees
5501 python-persistent
5502 python-transaction
5503 python-zc-lockfile
5504 python-zconfig
5505 python-zodbpickle
5506 python-zope-interface))
5507 (home-page "http://zodb-docs.readthedocs.io")
5508 (synopsis "Object-oriented database for Python")
5509 (description
5510 "@code{ZODB} provides an object-oriented and @acronym{ACID,
5511Atomicity Consistency Isolation Durability} compliant database for Python with
5512a high degree of transparency. @code{ZODB} is an object-oriented database,
5513not an object-relational mapping. This comes with several advantaged:
5514
5515@itemize
5516@item no separate language for database operations
5517@item very little impact on your code to make objects persistent
5518@item no database mapper that partially hides the database.
5519@item almost no seam between code and database.
5520@end itemize")
5521 (license license:zpl2.1)))
5522
5523(define-public python-zodbpickle
5524 (package
5525 (name "python-zodbpickle")
5526 (version "3.2")
5527 (source
5528 (origin
5529 (method url-fetch)
5530 (uri (pypi-uri "zodbpickle" version))
5531 (sha256
5532 (base32 "035bjrksl4h92mvjkx6id4gjcpc1k4mbci8ryjl6l9mki7ihx77b"))))
5533 (build-system pyproject-build-system)
5534 (arguments
5535 '(#:phases (modify-phases %standard-phases
5536 (replace 'check
5537 (lambda* (#:key tests? #:allow-other-keys)
5538 (if tests?
5539 (invoke "zope-testrunner" "-vv" "--test-path=src"
5540 "--all")
5541 (format #t "test suite not run~%")))))))
5542 (native-inputs (list python-zope-testrunner python-setuptools python-wheel))
5543 (home-page "https://github.com/zopefoundation/zodbpickle")
5544 (synopsis "Uniform pickling interface for @code{zodb}")
5545 (description
5546 "This package is a fork of the @code{pickle} module (and the
5547supporting C extension) from both Python 3.2 and Python 3.3. The fork adds
5548support for the @code{noload} operations used by @code{zodb}.")
5549 (license (list license:psfl license:zpl2.1))))
5550
5551(define-public python-zope-dottedname
5552 (package
5553 (name "python-zope-dottedname")
5554 (version "7.0")
5555 (source
5556 (origin
5557 (method git-fetch)
5558 (uri (git-reference
5559 (url "https://github.com/zopefoundation/zope.dottedname")
5560 (commit version)))
5561 (file-name (git-file-name name version))
5562 (sha256
5563 (base32 "0h7a637zsl1a3f0rpb2nw41mzxv0pqyj8ahn6h60n2c1px912rbd"))))
5564 (build-system pyproject-build-system)
5565 (arguments
5566 (list #:test-backend #~'custom
5567 #:test-flags #~(list "src/zope/dottedname/tests.py")))
5568 (native-inputs (list python-setuptools))
5569 (home-page "https://zopedottedname.readthedocs.io")
5570 (synopsis "Resolver for Python dotted names")
5571 (description
5572 "This package provides a @code{resolve()} function that resolves strings
5573containing dotted names into the appropriate Python object.")
5574 (license license:zpl2.1)))
5575
5576(define-public python-zope-event
5577 (package
5578 (name "python-zope-event")
5579 (version "6.0")
5580 (source
5581 (origin
5582 (method git-fetch)
5583 (uri (git-reference
5584 (url "https://github.com/zopefoundation/zope.event")
5585 (commit version)))
5586 (file-name (git-file-name name version))
5587 (sha256
5588 (base32 "0la3q47c59aq50s036q468bhnmzgs71f1cygv89w6qkk1hkn35ym"))))
5589 (build-system pyproject-build-system)
5590 (arguments
5591 (list
5592 #:test-flags
5593 #~(list "src/zope/event/tests.py")))
5594 (native-inputs (list python-pytest python-setuptools))
5595 (home-page "https://zopeevent.readthedocs.io/en/latest/")
5596 (synopsis "Event publishing system for Python")
5597 (description
5598 "Zope.event provides an event publishing API, intended for use by
5599applications which are unaware of any subscribers to their events. It is a
5600simple event-dispatching system on which more sophisticated event dispatching
5601systems can be built.")
5602 (license license:zpl2.1)))
5603
5604(define-public python-zope-interface
5605 (package
5606 (name "python-zope-interface")
5607 (version "7.2")
5608 (source
5609 (origin
5610 (method git-fetch)
5611 (uri (git-reference
5612 (url "https://github.com/zopefoundation/zope.interface")
5613 (commit version)))
5614 (file-name (git-file-name name version))
5615 (sha256
5616 (base32 "01snm1lbqhx3ird4m76nciaqasxvf8dd6817zm35v684g5hbzd2s"))))
5617 (build-system pyproject-build-system)
5618 (arguments
5619 ;; XXX: test suite can't find python-zope-testing
5620 (list #:tests? #f))
5621 (native-inputs (list python-setuptools))
5622 (home-page "https://zopeinterface.readthedocs.io")
5623 (synopsis "\"Design by contract\" methodology in Python")
5624 (description
5625 "Zope.interface provides an implementation of \"object interfaces\" for
5626Python. Interfaces are a mechanism for labeling objects as conforming to a
5627given API or contract.")
5628 (license license:zpl2.1)))
5629
5630(define-public python-zope-exceptions
5631 (package
5632 (name "python-zope-exceptions")
5633 (version "6.0")
5634 (source
5635 (origin
5636 (method git-fetch)
5637 (uri (git-reference
5638 (url "https://github.com/zopefoundation/zope.exceptions")
5639 (commit version)))
5640 (file-name (git-file-name name version))
5641 (sha256
5642 (base32 "0fmsw2j8islaiv6zf2mxh2s43y7virqny6s8gk8v2zkcxpy95cic"))))
5643 (build-system pyproject-build-system)
5644 (arguments
5645 (list
5646 #:phases
5647 #~(modify-phases %standard-phases
5648 (replace 'check
5649 (lambda* (#:key tests? #:allow-other-keys)
5650 (if tests?
5651 (invoke "zope-testrunner" "--test-path=src")
5652 (format #t "test suite not run~%")))))))
5653 (native-inputs (list python-setuptools python-zope-testrunner-bootstrap))
5654 (propagated-inputs (list python-zope-interface))
5655 (home-page "https://github.com/zopefoundation/zope.exceptions")
5656 (synopsis "Zope exceptions")
5657 (description
5658 "Zope.exceptions provides general-purpose exception types that have uses
5659outside of the Zope framework.")
5660 (license license:zpl2.1)))
5661
5662(define (python-zope-bootstrap-package orig)
5663 (package
5664 (inherit orig)
5665 (name (string-append (package-name orig) "-bootstrap"))
5666 (arguments
5667 (if (null? (package-arguments orig))
5668 (list
5669 #:tests? #f
5670 #:phases #~(modify-phases %standard-phases
5671 (delete 'sanity-check)))
5672 (substitute-keyword-arguments (package-arguments orig)
5673 ((#:tests? _ #f) #f)
5674 ((#:phases phases '%standard-phases)
5675 #~(modify-phases #$phases
5676 (delete 'sanity-check))))))
5677 (propagated-inputs `())
5678 (native-inputs (list python-setuptools))
5679 (properties `((hidden? . #t)))))
5680
5681(define-public python-zope-exceptions-bootstrap
5682 (python-zope-bootstrap-package python-zope-exceptions))
5683
5684(define-public python-zope-testing
5685 (package
5686 (name "python-zope-testing")
5687 (version "6.0")
5688 (source
5689 (origin
5690 (method git-fetch)
5691 (uri (git-reference
5692 (url "https://github.com/zopefoundation/zope.testing")
5693 (commit version)))
5694 (file-name (git-file-name name version))
5695 (sha256
5696 (base32 "0zqipsgv7qj7f8hrd3x6xpqwszdiac8vpjdm8ak5kljl5napw7d7"))))
5697 (build-system pyproject-build-system)
5698 (arguments
5699 (list
5700 #:phases
5701 #~(modify-phases %standard-phases
5702 (replace 'check
5703 (lambda* (#:key tests? #:allow-other-keys)
5704 (if tests?
5705 (invoke "zope-testrunner" "--test-path=src")
5706 (format #t "test suite not run~%")))))))
5707 (native-inputs (list python-setuptools
5708 python-zope-interface
5709 python-zope-testrunner-bootstrap))
5710 (home-page "https://zopetesting.readthedocs.io/")
5711 (synopsis "Zope testing helpers")
5712 (description
5713 "Zope.testing provides a number of testing utilities for HTML forms, HTTP
5714servers, regular expressions, and more.")
5715 (license license:zpl2.1)))
5716
5717(define-public python-zope-testrunner
5718 (package
5719 (name "python-zope-testrunner")
5720 (version "7.4")
5721 (source
5722 (origin
5723 (method git-fetch)
5724 (uri (git-reference
5725 (url "https://github.com/zopefoundation/zope.testrunner")
5726 (commit version)))
5727 (file-name (git-file-name name version))
5728 (sha256
5729 (base32 "0gd5rnzw6vzbx766jxqr4zc6qx7gk75r2c0nqqvhkb12hzk5ca2g"))))
5730 (build-system pyproject-build-system)
5731 (arguments
5732 (list
5733 #:phases
5734 #~(modify-phases %standard-phases
5735 (add-after 'unpack 'remove-problematic-test
5736 (lambda _
5737 ;; This test contains invalid syntax, which breaks bytecode
5738 ;; compilation. For simplicity just remove it.
5739 (delete-file
5740 "src/zope/testrunner/tests/testrunner-ex/sample2/badsyntax.py")))
5741 (replace 'check
5742 (lambda* (#:key tests? #:allow-other-keys)
5743 (if tests?
5744 (invoke "zope-testrunner" "--test-path=src")
5745 (format #t "test suite not run~%")))))))
5746 (native-inputs (list python-setuptools python-zope-testing))
5747 (propagated-inputs (list python-zope-exceptions python-zope-interface))
5748 (home-page "https://zopetestrunner.readthedocs.io")
5749 (synopsis "Zope testrunner script")
5750 (description "This package provides a script for running Python tests.")
5751 (license license:zpl2.1)))
5752
5753(define-public python-zope-testrunner-bootstrap
5754 (package
5755 (inherit (python-zope-bootstrap-package python-zope-testrunner))
5756 (propagated-inputs
5757 (list python-six python-zope-exceptions-bootstrap))
5758 (properties `((hidden? . #t)))))
5759
5760(define-public python-zope-i18nmessageid
5761 (package
5762 (name "python-zope-i18nmessageid")
5763 (version "7.0")
5764 (source
5765 (origin
5766 (method git-fetch)
5767 (uri (git-reference
5768 (url "https://github.com/zopefoundation/zope.i18nmessageid")
5769 (commit version)))
5770 (file-name (git-file-name name version))
5771 (sha256
5772 (base32 "192ixj8r9n467avbxrmhakmqiaflc1vw37k08z096ajcjgbfrm5d"))))
5773 (build-system pyproject-build-system)
5774 (arguments
5775 (list
5776 #:phases
5777 #~(modify-phases %standard-phases
5778 (replace 'check
5779 (lambda* (#:key tests? #:allow-other-keys)
5780 (if tests?
5781 (invoke "zope-testrunner" "--test-path=src")
5782 (format #t "test suite not run~%")))))))
5783 (native-inputs (list python-setuptools python-zope-testrunner))
5784 (home-page "https://zopei18nmessageid.readthedocs.io")
5785 (synopsis "Message identifiers for internationalization")
5786 (description "Zope.i18nmessageid provides facilities for declaring
5787internationalized messages within program source text.")
5788 (license license:zpl2.1)))
5789
5790(define-public python-zope-schema
5791 (package
5792 (name "python-zope-schema")
5793 (version "7.0.1")
5794 (source
5795 (origin
5796 (method git-fetch)
5797 (uri (git-reference
5798 (url "https://github.com/zopefoundation/zope.schema")
5799 (commit version)))
5800 (file-name (git-file-name name version))
5801 (sha256
5802 (base32 "1hj6j0gqgvv9a5pyaz54wbn8n7wf9lyg4njb2cfs980z0d5faj39"))))
5803 (build-system pyproject-build-system)
5804 (arguments
5805 (list
5806 #:phases
5807 #~(modify-phases %standard-phases
5808 (replace 'check
5809 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
5810 (add-installed-pythonpath inputs outputs)
5811 (if tests?
5812 (invoke "zope-testrunner" "--test-path=src")
5813 (format #t "test suite not run.~%")))))))
5814 (propagated-inputs (list python-zope-event python-zope-interface))
5815 (native-inputs (list python-zope-i18nmessageid python-zope-testing
5816 python-zope-testrunner python-setuptools))
5817 (home-page "https://zopeschema.readthedocs.io")
5818 (synopsis "Zope data schemas")
5819 (description "Zope.scheme provides extensions to zope.interface for
5820defining data schemas.")
5821 (license license:zpl2.1)))
5822
5823(define-public python-zope-sqlalchemy
5824 (package
5825 (name "python-zope-sqlalchemy")
5826 (version "1.6")
5827 (source
5828 (origin
5829 (method git-fetch)
5830 (uri (git-reference
5831 (url "https://github.com/zopefoundation/zope.sqlalchemy")
5832 (commit version)))
5833 (file-name (git-file-name name version))
5834 (sha256
5835 (base32 "1z4gw4i95dyqxsvrahk4fav008045n8kyxpn3fa887snmpvcjhng"))))
5836 (build-system pyproject-build-system)
5837 (arguments
5838 (list
5839 #:phases
5840 #~(modify-phases %standard-phases
5841 (replace 'check
5842 (lambda* (#:key tests? #:allow-other-keys)
5843 (if tests?
5844 (invoke "zope-testrunner" "--test-path=src")
5845 (format #t "test suite not run~%")))))))
5846 (propagated-inputs (list python-sqlalchemy python-transaction
5847 python-zope-interface))
5848 (native-inputs (list python-zope-testing python-zope-testrunner
5849 python-setuptools))
5850 (home-page "https://github.com/zopefoundation/zope.sqlalchemy")
5851 (synopsis "Minimal SQLAlchemy transaction integration for Zope")
5852 (description
5853 "The aim of this package is to unify the plethora of existing packages
5854integrating SQLAlchemy with Zope's transaction management. As such,it only
5855provides a data manager and makes no attempt to define a @i{zopeish} way to
5856configure engines.")
5857 (license license:zpl2.1)))
5858
5859(define-public python-zope-configuration
5860 (package
5861 (name "python-zope-configuration")
5862 (version "7.0")
5863 (source
5864 (origin
5865 (method git-fetch)
5866 (uri (git-reference
5867 (url "https://github.com/zopefoundation/zope.configuration")
5868 (commit version)))
5869 (file-name (git-file-name name version))
5870 (sha256
5871 (base32 "11lr6z3jpz9835a1if89g3x7k31sviq2d0xvvic5xi4c980dbkhv"))))
5872 (build-system pyproject-build-system)
5873 (arguments
5874 (list
5875 #:phases
5876 #~(modify-phases %standard-phases
5877 (replace 'check
5878 (lambda* (#:key tests? #:allow-other-keys)
5879 (if tests?
5880 (invoke "zope-testrunner" "--test-path=src")
5881 (format #t "test suite not run~%")))))))
5882 (native-inputs (list python-manuel python-setuptools python-zope-testing
5883 python-zope-testrunner))
5884 (propagated-inputs (list python-zope-i18nmessageid python-zope-interface
5885 python-zope-schema))
5886 (home-page "https://zopeconfiguration.readthedocs.io")
5887 (synopsis "Zope Configuration Markup Language")
5888 (description "Zope.configuration implements ZCML, the Zope Configuration
5889Markup Language.")
5890 (license license:zpl2.1)))
5891
5892(define-public python-zope-configuration-bootstrap
5893 (python-zope-bootstrap-package python-zope-configuration))
5894
5895(define-public python-zope-copy
5896 (package
5897 (name "python-zope-copy")
5898 (version "6.0")
5899 (source
5900 (origin
5901 (method git-fetch)
5902 (uri (git-reference
5903 (url "https://github.com/zopefoundation/zope.copy")
5904 (commit version)))
5905 (file-name (git-file-name name version))
5906 (sha256
5907 (base32 "1ym82p9scpfi3rflxnlv55v0a7hra3rq4rrlw759maq05i8qp1w5"))))
5908 (build-system pyproject-build-system)
5909 (arguments
5910 (list
5911 #:phases
5912 #~(modify-phases %standard-phases
5913 (replace 'check
5914 (lambda* (#:key tests? #:allow-other-keys)
5915 (if tests?
5916 (invoke "zope-testrunner" "--test-path=src")
5917 (format #t "test suite not run~%")))))))
5918 (propagated-inputs (list python-zope-interface))
5919 (native-inputs
5920 (list python-zodbpickle
5921 python-zope-component-bootstrap
5922 python-zope-location-bootstrap
5923 python-zope-proxy
5924 python-zope-schema
5925 python-zope-testing
5926 python-zope-testrunner
5927 python-setuptools))
5928 (home-page "https://zopecopy.readthedocs.io")
5929 (synopsis "Pluggable object copying mechanism")
5930 (description
5931 "This package provides a pluggable mechanism for copying persistent objects.")
5932 (license license:zpl2.1)))
5933
5934(define-public python-zope-proxy
5935 (package
5936 (name "python-zope-proxy")
5937 (version "7.0")
5938 (source
5939 (origin
5940 (method git-fetch)
5941 (uri (git-reference
5942 (url "https://github.com/zopefoundation/zope.proxy")
5943 (commit version)))
5944 (file-name (git-file-name name version))
5945 (sha256
5946 (base32 "00r9f4n0cl3fyc5gyf5l43zh95cmzx1gz6wr04k17d7wm2gmivyn"))))
5947 (build-system pyproject-build-system)
5948 (arguments
5949 (list
5950 #:phases
5951 #~(modify-phases %standard-phases
5952 (replace 'check
5953 (lambda* (#:key tests? #:allow-other-keys)
5954 (if tests?
5955 (invoke "zope-testrunner" "--test-path=src")
5956 (format #t "test suite not run~%")))))))
5957 (native-inputs
5958 (list python-zope-location-bootstrap
5959 python-zope-security-bootstrap
5960 python-zope-testrunner
5961 python-setuptools))
5962 (propagated-inputs (list python-zope-interface))
5963 (home-page "https://zopeproxy.readthedocs.io")
5964 (synopsis "Generic, transparent proxies")
5965 (description
5966 "Zope.proxy provides generic, transparent proxies for Python. Proxies are
5967special objects which serve as mostly-transparent wrappers around another
5968object, intervening in the apparent behavior of the wrapped object only when
5969necessary to apply the policy (e.g., access checking, location brokering,
5970etc.) for which the proxy is responsible.")
5971 (license license:zpl2.1)))
5972
5973(define-public python-zope-proxy-bootstrap
5974 (python-zope-bootstrap-package python-zope-proxy))
5975
5976(define-public python-zope-hookable
5977 (package
5978 (name "python-zope-hookable")
5979 (version "7.0")
5980 (source
5981 (origin
5982 (method git-fetch)
5983 (uri (git-reference
5984 (url "https://github.com/zopefoundation/zope.hookable")
5985 (commit version)))
5986 (file-name (git-file-name name version))
5987 (sha256
5988 (base32 "1l94xzzpyslpgv2ghvl5qzpfcsq02kp04fmvl95d6jcmivmmr4m8"))))
5989 (build-system pyproject-build-system)
5990 (arguments
5991 (list
5992 #:phases
5993 #~(modify-phases %standard-phases
5994 (replace 'check
5995 (lambda* (#:key tests? #:allow-other-keys)
5996 (if tests?
5997 (invoke "zope-testrunner" "--test-path=src")
5998 (format #t "test suite not run~%")))))))
5999 (native-inputs (list python-zope-testing python-zope-testrunner
6000 python-setuptools))
6001 (home-page "https://zopehookable.readthedocs.io")
6002 (synopsis "Zope hookable")
6003 (description
6004 "This package supports the efficient creation of hookable objects, which
6005are callable objects that are meant to be optionally replaced. The idea is
6006that you create a function that does some default thing and make i hookable.
6007Later, someone can modify what it does by calling its sethook method and
6008changing its implementation. All users of the function, including those that
6009imported it, will see the change.")
6010 (license license:zpl2.1)))
6011
6012(define-public python-zope-location
6013 (package
6014 (name "python-zope-location")
6015 (version "6.0")
6016 (source
6017 (origin
6018 (method git-fetch)
6019 (uri (git-reference
6020 (url "https://github.com/zopefoundation/zope.location")
6021 (commit version)))
6022 (file-name (git-file-name name version))
6023 (sha256
6024 (base32 "1jfsmbxj6hz7kmk5b0351b63ssm7qfkgqmz9v7xb7wwlmxsxkcdk"))))
6025 (build-system pyproject-build-system)
6026 (arguments
6027 (list
6028 #:phases
6029 #~(modify-phases %standard-phases
6030 (replace 'check
6031 (lambda* (#:key tests? #:allow-other-keys)
6032 (if tests?
6033 (invoke "zope-testrunner" "--test-path=src")
6034 (format #t "test suite not run~%")))))))
6035 (native-inputs (list python-zope-testrunner python-setuptools))
6036 (propagated-inputs (list python-zope-interface python-zope-proxy
6037 python-zope-schema))
6038 (home-page "https://zopelocation.readthedocs.io")
6039 (synopsis "Zope location library")
6040 (description
6041 "Zope.location implements the concept of \"locations\" in Zope3, which
6042are are special objects that have a structural location.")
6043 (license license:zpl2.1)))
6044
6045(define-public python-zope-location-bootstrap
6046 (python-zope-bootstrap-package python-zope-location))
6047
6048(define-public python-zope-security
6049 (package
6050 (name "python-zope-security")
6051 (version "7.3")
6052 (source
6053 (origin
6054 (method git-fetch)
6055 (uri (git-reference
6056 (url "https://github.com/zopefoundation/zope.security")
6057 (commit version)))
6058 (file-name (git-file-name name version))
6059 (sha256
6060 (base32 "06x6qcls2mdl05xnsyy5h70mbgij8xb6ksxbawzrc23cq04nkvx7"))))
6061 (build-system pyproject-build-system)
6062 (arguments
6063 (list
6064 #:phases
6065 #~(modify-phases %standard-phases
6066 (replace 'check
6067 (lambda* (#:key tests? #:allow-other-keys)
6068 (if tests?
6069 (invoke "zope-testrunner" "--test-path=src")
6070 (format #t "test suite not run~%")))))))
6071 (propagated-inputs
6072 (list python-zope-component
6073 python-zope-i18nmessageid
6074 python-zope-interface
6075 python-zope-location
6076 python-zope-proxy
6077 python-zope-schema))
6078 (native-inputs
6079 (list python-btrees
6080 python-zope-component-bootstrap
6081 python-zope-configuration-bootstrap
6082 python-zope-location-bootstrap
6083 python-zope-testing
6084 python-zope-testrunner
6085 python-setuptools))
6086 (home-page "https://zopesecurity.readthedocs.io")
6087 (synopsis "Zope security framework")
6088 (description "Zope.security provides a generic mechanism to implement
6089security policies on Python objects.")
6090 (license license:zpl2.1)))
6091
6092(define-public python-zope-security-bootstrap
6093 (package
6094 (inherit (python-zope-bootstrap-package python-zope-security))
6095 (propagated-inputs
6096 (list python-zope-i18nmessageid
6097 python-zope-interface
6098 python-zope-proxy-bootstrap
6099 python-zope-schema))))
6100
6101(define-public python-zope-component
6102 (package
6103 (name "python-zope-component")
6104 (version "7.0")
6105 (source
6106 (origin
6107 (method git-fetch)
6108 (uri (git-reference
6109 (url "https://github.com/zopefoundation/zope.component")
6110 (commit version)))
6111 (file-name (git-file-name name version))
6112 (sha256
6113 (base32 "1jygzhcg9rppsrd8cwvm0944naq1ldjf0vcpgsz0glwcdnr7cyfw"))))
6114 (build-system pyproject-build-system)
6115 (arguments
6116 (list
6117 #:phases
6118 #~(modify-phases %standard-phases
6119 (replace 'check
6120 (lambda* (#:key tests? #:allow-other-keys)
6121 (if tests?
6122 (invoke "zope-testrunner" "--test-path=src")
6123 (format #t "test suite not run~%")))))))
6124 (native-inputs
6125 (list python-persistent
6126 python-zope-configuration-bootstrap
6127 python-zope-i18nmessageid
6128 python-zope-location-bootstrap
6129 python-zope-proxy-bootstrap
6130 python-zope-security-bootstrap
6131 python-zope-testing
6132 python-zope-testrunner
6133 python-setuptools))
6134 (propagated-inputs
6135 (list python-zope-deferredimport python-zope-deprecation
6136 python-zope-event python-zope-hookable python-zope-interface))
6137 (home-page "https://zopecomponent.readthedocs.io")
6138 (synopsis "Zope Component Architecture")
6139 (description
6140 "Zope.component represents the core of the Zope Component Architecture.
6141Together with the zope.interface package, it provides facilities for defining,
6142registering and looking up components.")
6143 (license license:zpl2.1)))
6144
6145(define-public python-zope-component-bootstrap
6146 (python-zope-bootstrap-package python-zope-component))
6147
6148(define-public python-zope-deferredimport
6149 (package
6150 (name "python-zope-deferredimport")
6151 (version "6.0")
6152 (source
6153 (origin
6154 (method git-fetch)
6155 (uri (git-reference
6156 (url "https://github.com/zopefoundation/zope.deferredimport")
6157 (commit version)))
6158 (file-name (git-file-name name version))
6159 (sha256
6160 (base32 "08j728nn1la570nny1xz1xvxcm9hf2mcc3im1bzcxxrrxh4kw3zd"))))
6161 (build-system pyproject-build-system)
6162 (arguments
6163 (list
6164 #:phases
6165 #~(modify-phases %standard-phases
6166 (replace 'check
6167 (lambda* (#:key tests? #:allow-other-keys)
6168 (if tests?
6169 (invoke "zope-testrunner" "--test-path=src")
6170 (format #t "test suite not run~%")))))))
6171 (propagated-inputs (list python-zope-proxy))
6172 (native-inputs (list python-zope-testrunner python-setuptools))
6173 (home-page "https://zopedeferredimport.readthedocs.io")
6174 (synopsis "Defer imports until used by code")
6175 (description
6176 "Often, especially for package modules, you want to import names for
6177convenience, but not actually perform the imports until necessary. The
6178@code{zope.deferredimport} package provided facilities for defining names in
6179modules that will be imported from somewhere else when used. You can also cause
6180deprecation warnings to be issued when a variable is used.")
6181 (license license:zpl2.1)))
6182
6183(define-public python-ndg-httpsclient
6184 (package
6185 (name "python-ndg-httpsclient")
6186 (version "0.5.1")
6187 (source (origin
6188 (method url-fetch)
6189 (uri (pypi-uri "ndg_httpsclient" version))
6190 (sha256
6191 (base32
6192 "0412b7i1s4vj7lz9r72nmb28h9syd4q2x89bdirkkc3a6z8awbyp"))))
6193 (build-system python-build-system)
6194 (arguments
6195 '(;; The tests appear to require networking.
6196 #:tests? #f))
6197 (propagated-inputs
6198 (list python-pyasn1 python-pyopenssl))
6199 (synopsis "HTTPS support for Python's httplib and urllib2")
6200 (description "This is a HTTPS client implementation for httplib and urllib2
6201based on PyOpenSSL. PyOpenSSL provides a more fully-featured SSL implementation
6202over the default provided with Python and, importantly, enables full
6203verification of the SSL peer.")
6204 (home-page "https://github.com/cedadev/ndg_httpsclient/")
6205 (license license:bsd-3)))
6206
6207(define-public python-netaddr
6208 (package
6209 (name "python-netaddr")
6210 (version "1.3.0")
6211 (source
6212 (origin
6213 (method url-fetch)
6214 (uri (pypi-uri "netaddr" version))
6215 (sha256
6216 (base32 "12p4ysgawhgkka0sz1dkwgwc2za80dxdp9wvfxivfldmjnc3sg2w"))))
6217 (build-system pyproject-build-system)
6218 (native-inputs (list python-poetry-core
6219 python-pytest
6220 python-setuptools
6221 python-wheel))
6222 (home-page "https://netaddr.readthedocs.io")
6223 (synopsis "Pythonic manipulation of network addresses")
6224 (description
6225 "A Python library for representing and manipulating IPv4, IPv6, CIDR, EUI
6226and MAC network addresses.")
6227 (license license:bsd-3)))
6228
6229(define-public python-nh3
6230 (package
6231 (name "python-nh3")
6232 (version "0.2.20")
6233 (source
6234 (origin
6235 (method url-fetch)
6236 (uri (pypi-uri "nh3" version))
6237 (sha256
6238 (base32 "1mcf3y5294glji9lhzh57wymw4srbvzdg0kcakm0p2pqgwnw81cp"))))
6239 (build-system pyproject-build-system)
6240 (arguments
6241 (list
6242 #:imported-modules `(,@%cargo-build-system-modules
6243 ,@%pyproject-build-system-modules)
6244 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
6245 (guix build pyproject-build-system)
6246 (guix build utils))
6247 #:phases
6248 #~(modify-phases %standard-phases
6249 (add-after 'unpack 'prepare-cargo-build-system
6250 (lambda args
6251 (for-each
6252 (lambda (phase)
6253 (format #t "Running cargo phase: ~a~%" phase)
6254 (apply (assoc-ref cargo:%standard-phases phase)
6255 #:cargo-target #$(cargo-triplet)
6256 args))
6257 '(unpack-rust-crates
6258 configure
6259 check-for-pregenerated-files
6260 patch-cargo-checksums)))))))
6261 (native-inputs
6262 (append
6263 (list maturin python-pytest rust `(,rust "cargo"))
6264 (or (and=> (%current-target-system)
6265 (compose list make-rust-sysroot))
6266 '())))
6267 (inputs (cargo-inputs 'python-nh3))
6268 (home-page "https://nh3.readthedocs.io")
6269 (synopsis "Python bindings to Ammonia HTML sanitization library")
6270 (description "This package provides Python bindings to Ammonia HTML
6271sanitizer Rust crate.")
6272 (license license:expat)))
6273
6274(define-public python-noiseprotocol
6275 (package
6276 (name "python-noiseprotocol")
6277 (version "0.3.1")
6278 (source
6279 (origin
6280 (method git-fetch)
6281 (uri (git-reference
6282 (url "https://github.com/plizonczyk/noiseprotocol")
6283 (commit (string-append "v" version))))
6284 (file-name (git-file-name name version))
6285 (sha256
6286 (base32 "1mk0rqpjifdv3v1cjwkdnjbrfmzzjm9f3qqs1r8vii4j2wvhm6am"))))
6287 (build-system pyproject-build-system)
6288 (propagated-inputs (list python-cryptography))
6289 (native-inputs (list python-setuptools python-pytest))
6290 (home-page "https://github.com/plizonczyk/noiseprotocol")
6291 (synopsis "Implementation of Noise Protocol Framework")
6292 (description
6293 "This package provides an implementation of Noise Protocol Framework.")
6294 (license license:expat)))
6295
6296(define-public python-webrtcvad-wheels
6297 (package
6298 (name "python-webrtcvad-wheels")
6299 (version "2.0.14")
6300 (source
6301 (origin
6302 (method git-fetch)
6303 (uri (git-reference
6304 (url "https://github.com/daanzu/py-webrtcvad-wheels")
6305 (commit (string-append "v" version))))
6306 (file-name (git-file-name name version))
6307 (sha256
6308 (base32 "0sqgg8jmg2j14f4h96h0rs42kr460v65lhanps6lhdvj5zp81cbh"))))
6309 (build-system pyproject-build-system)
6310 (native-inputs (list python-psutil python-pytest python-setuptools))
6311 (home-page "https://github.com/daanzu/py-webrtcvad-wheels")
6312 (synopsis "Python interface to the WebRTC Voice Activity Detector (VAD)")
6313 (description
6314 "This package provides a Python interface to the Google
6315@url{https://webrtc.org/, WebRTC} @acronym{VAD, Voice Activity Detector}.")
6316 (license license:expat)))
6317
6318(define-public python-websocket-client
6319 (package
6320 (name "python-websocket-client")
6321 (version "1.8.0")
6322 (source
6323 (origin
6324 (method url-fetch)
6325 (uri (pypi-uri "websocket_client" version))
6326 (sha256
6327 (base32 "1nn3qi5g59j55wfy2z02j6lq2cm281fq0wi406b2yqys8jgxyf9j"))))
6328 (build-system pyproject-build-system)
6329 (arguments
6330 (list
6331 #:test-flags
6332 ;; This test requires networking.
6333 '(list "-k" "not testConnect")))
6334 (native-inputs
6335 (list python-pysocks
6336 python-pytest
6337 python-setuptools
6338 python-websockets
6339 python-wheel))
6340 (home-page "https://github.com/websocket-client/websocket-client")
6341 (synopsis "WebSocket client for Python")
6342 (description "The Websocket-client module provides the low level APIs for
6343WebSocket usage in Python programs.")
6344 (license license:lgpl2.1+)))
6345
6346(define-public python-websocket-client-0.59
6347 (package
6348 (inherit python-websocket-client)
6349 (version "0.59.0")
6350 (source
6351 (origin
6352 (method url-fetch)
6353 (uri (pypi-uri "websocket-client" version))
6354 (sha256
6355 (base32 "0p0cz2mdissq7iw1n7jrmsfir0jfmgs1dvnpnrx477ffx9hbsxnk"))))
6356 (native-inputs
6357 (modify-inputs (package-native-inputs python-websocket-client)
6358 (append python-six)))))
6359
6360(define-public python-purl
6361 (package
6362 (name "python-purl")
6363 (version "1.5")
6364 (source
6365 (origin
6366 (method url-fetch)
6367 (uri (pypi-uri "purl" version))
6368 (sha256
6369 (base32
6370 "15ibnz1xrh5msmn04j0nr00sz4n7jwx6cwd6zlx99kkz3vpin53m"))))
6371 (build-system python-build-system)
6372 (propagated-inputs (list python-six))
6373 (home-page
6374 "https://github.com/codeinthehole/purl")
6375 (synopsis
6376 "Python package for URL manipulation")
6377 (description
6378 "Purl is a Python package for handling URLs.")
6379 (license license:expat)))
6380
6381(define-public python-apiron
6382 (package
6383 (name "python-apiron")
6384 (version "5.1.0")
6385 (source
6386 (origin
6387 (method url-fetch)
6388 (uri (pypi-uri "apiron" version))
6389 (sha256
6390 (base32 "1qwbqn47sf0aqznj1snbv37v8ijx476qqkjf5l9pac7xjkxsr8qk"))))
6391 (build-system pyproject-build-system)
6392 (arguments
6393 (list #:test-flags '(list "-k" "not test_call")))
6394 (propagated-inputs
6395 (list python-requests))
6396 (native-inputs
6397 (list python-pytest python-pytest-cov
6398 python-setuptools python-wheel))
6399 (home-page "https://github.com/ithaka/apiron")
6400 (synopsis "Python wrapper for interacting with RESTful APIs")
6401 (description
6402 "@code{apiron} provides a declarative, structured configuration of
6403services and endpoints with a unified interface for interacting with RESTful
6404APIs.")
6405 (license license:expat)))
6406
6407(define-public python-beren
6408 (package
6409 (name "python-beren")
6410 (version "0.7.0")
6411 (source
6412 (origin
6413 (method git-fetch)
6414 (uri (git-reference
6415 (url "https://github.com/teffalump/beren")
6416 (commit (string-append "v" version))))
6417 (file-name (git-file-name name version))
6418 (sha256
6419 (base32 "19nnvbjx2wypslqklqi0j9fiwypk1a5qwfw1jcabjw03awm1yyrx"))))
6420 (build-system pyproject-build-system)
6421 (arguments
6422 ;; The test tries to open a connection to a remote server.
6423 `(#:tests? #f))
6424 (native-inputs (list python-setuptools))
6425 (propagated-inputs (list python-apiron))
6426 (home-page "https://github.com/teffalump/beren")
6427 (synopsis "REST client for Orthanc DICOM servers")
6428 (description
6429 "@code{beren} provides a REST client for Orthanc, a DICOM server.")
6430 (license license:gpl3+)))
6431
6432(define-public python-requests
6433 (package
6434 (name "python-requests")
6435 (version "2.32.5")
6436 (source (origin
6437 (method url-fetch)
6438 (uri (pypi-uri "requests" version))
6439 (sha256
6440 (base32
6441 "1kypqz701x9s7j4shm1pdnzy4pzx9lmvhwgan0yqa071asn0pfnv"))))
6442 (build-system pyproject-build-system)
6443 (arguments
6444 (list #:test-flags
6445 ;; These require internet access
6446 '(list "--ignore=tests/test_requests.py"
6447 "-k" (string-append "not test_use_proxy_from_environment"
6448 " and not requests.sessions.Session"
6449 " and not requests.models.PreparedRequest"
6450 " and not requests.api.request")
6451 "tests/")))
6452 (propagated-inputs
6453 (list python-certifi
6454 python-charset-normalizer
6455 python-idna
6456 python-urllib3))
6457 (native-inputs
6458 (list python-pytest
6459 python-pytest-mock
6460 python-setuptools))
6461 (home-page "https://requests.readthedocs.io/")
6462 (synopsis "Python HTTP library")
6463 (description
6464 "Requests is a Python HTTP client library. It aims to be easier to use
6465than Python’s urllib2 library.")
6466 (license license:asl2.0)))
6467
6468(define-deprecated/public-alias python-requests-next
6469 python-requests) ;may be removed after 2025-12-01
6470
6471(define-public python-requests-kerberos
6472 (package
6473 (name "python-requests-kerberos")
6474 (version "0.14.0")
6475 ;; No tests in the PyPI tarball.
6476 (source
6477 (origin
6478 (method git-fetch)
6479 (uri (git-reference
6480 (url "https://github.com/requests/requests-kerberos")
6481 (commit (string-append "v" version))))
6482 (file-name (git-file-name name version))
6483 (sha256
6484 (base32 "0s30pcnlir3j2jmf7yh065f294cf3x0x5i3ldskn8mm0a3657mv3"))))
6485 (build-system pyproject-build-system)
6486 (propagated-inputs (list python-cryptography
6487 python-pyspnego
6488 python-requests))
6489 (native-inputs (list python-pytest python-pytest-mock python-setuptools
6490 python-wheel))
6491 (home-page "https://github.com/requests/requests-kerberos")
6492 (synopsis "Kerberos authentication handler for python-requests")
6493 (description "This package provides a Kerberos authentication handler for
6494python-requests.")
6495 (license license:isc)))
6496
6497(define-public python-requests-unixsocket2
6498 (package
6499 (name "python-requests-unixsocket2")
6500 (version "1.0.1")
6501 (source
6502 (origin
6503 (method git-fetch)
6504 (uri (git-reference
6505 (url "https://gitlab.com/thelabnyc/requests-unixsocket2")
6506 (commit (string-append "v" version))))
6507 (sha256
6508 (base32 "0wb8ckagal9d6lfyl3pf9m45xn1krq6vg8kzciwv12chq9wwh0ra"))))
6509 (build-system pyproject-build-system)
6510 (native-inputs
6511 (list nss-certs-for-test
6512 python-hatchling
6513 python-pytest
6514 python-waitress))
6515 (propagated-inputs
6516 (list python-requests
6517 python-urllib3))
6518 (home-page "https://gitlab.com/thelabnyc/requests-unixsocket2")
6519 (synopsis "Talk HTTP via a UNIX domain socket")
6520 (description
6521 "This Python package lets you use the @code{requests} library to talk
6522HTTP via a UNIX domain socket.")
6523 (license license:asl2.0)))
6524
6525(define-deprecated-package python-requests-unixsocket
6526 python-requests-unixsocket2)
6527
6528(define-public python-requests-ntlm
6529 (package
6530 (name "python-requests-ntlm")
6531 (version "1.3.0")
6532 (source
6533 (origin
6534 (method git-fetch)
6535 (uri (git-reference
6536 (url "https://github.com/requests/requests-ntlm")
6537 (commit (string-append "v" version))))
6538 (file-name (git-file-name name version))
6539 (sha256
6540 (base32 "0snsk66zdihdlyfjz2zgpyfgdyjg814m3cc4g3my09hdnb5xvagv"))))
6541 (build-system pyproject-build-system)
6542 (arguments
6543 (list
6544 #:test-flags
6545 ;; XXX: Connection refused.
6546 #~(list "-k" (string-join
6547 (list "not test_ntlm_http_with_cbt"
6548 "test_ntlm_http_without_cbt"
6549 "test_ntlm_https_with_cbt"
6550 "test_ntlm_https_without_cbt")
6551 " and not "))
6552 #:phases
6553 #~(modify-phases %standard-phases
6554 (add-before 'check 'spawn-test-server
6555 (lambda _
6556 ;; Taken from .github/workflows/ci.yml.
6557 (spawn "python"
6558 (list "python" "-m" "tests.test_server")))))))
6559 (propagated-inputs
6560 (list python-cryptography python-pyspnego python-requests))
6561 (native-inputs (list python-flask python-pytest python-setuptools))
6562 (home-page "https://github.com/requests/requests-ntlm")
6563 (synopsis "NTLM authentication support for Requests")
6564 (description
6565 "This package allows for HTTP NTLM authentication using the requests
6566library.")
6567 (license license:isc)))
6568
6569(define-public python-requests-mock
6570 (package
6571 (name "python-requests-mock")
6572 (version "1.12.1")
6573 (source
6574 (origin
6575 (method url-fetch)
6576 (uri (pypi-uri "requests-mock" version))
6577 (sha256
6578 (base32 "008l6xysgs6ax56lairg1li5i4bb04i2z19w5bl5claj7crjxqg9"))))
6579 (build-system pyproject-build-system)
6580 (native-inputs
6581 (list python-purl
6582 python-pytest
6583 python-requests-futures
6584 python-setuptools
6585 python-setuptools-scm
6586 python-testtools))
6587 (propagated-inputs
6588 (list python-requests))
6589 (home-page "https://requests-mock.readthedocs.org/")
6590 (synopsis "Mock out responses from the requests package")
6591 (description
6592 "This module provides a building block to stub out the HTTP requests
6593portions of your testing code.")
6594 (license license:asl2.0)))
6595
6596(define-public python-requests-toolbelt
6597 (package
6598 (name "python-requests-toolbelt")
6599 (version "1.0.0")
6600 (source
6601 (origin
6602 (method url-fetch)
6603 (uri (pypi-uri "requests-toolbelt" version))
6604 (sha256
6605 (base32 "1ijvip427ki177ycrblcn1mfgsq7ixzpvqqfvidjn0a7s2is10bn"))))
6606 (build-system pyproject-build-system)
6607 (arguments
6608 (list
6609 #:test-flags
6610 ;; Requiring networking or fail due not valid certs: AttributeError:
6611 ;; 'MockHTTPResponse' object has no attribute 'close'
6612 #~(list "-k" (string-append "not test_dump_all"
6613 " and not test_dump_response"
6614 " and not test_prepared_request_override_base"
6615 " and not test_prepared_request_with_base"
6616 " and not test_request_override_base"
6617 " and not test_request_with_base"))))
6618 (native-inputs
6619 (list python-betamax
6620 python-mock
6621 python-pyopenssl
6622 python-pytest
6623 python-setuptools
6624 python-trustme
6625 python-wheel))
6626 (propagated-inputs
6627 (list python-requests))
6628 (synopsis "Extensions to python-requests")
6629 (description "This is a toolbelt of useful classes and functions to be used
6630with python-requests.")
6631 (home-page "https://github.com/requests/toolbelt/")
6632 (license license:asl2.0)))
6633
6634(define-public python-requests-ftp
6635 (package
6636 (name "python-requests-ftp")
6637 (version "0.3.1")
6638 (source
6639 (origin
6640 (method url-fetch)
6641 (uri (pypi-uri "requests-ftp" version))
6642 (sha256
6643 (base32
6644 "0yh5v21v36dsjsgv4y9dx4mmz35741l5jf6pbq9w19d8rfsww13m"))))
6645 (build-system python-build-system)
6646 (propagated-inputs
6647 (list python-requests))
6648 (home-page
6649 "https://github.com/Lukasa/requests-ftp")
6650 (synopsis "FTP Transport Adapter for Requests")
6651 (description
6652 "Requests-FTP is an implementation of a simple FTP transport
6653adapter for use with the Requests library.")
6654 (license license:asl2.0)))
6655
6656(define-public python-aioftp
6657 (package
6658 (name "python-aioftp")
6659 (version "0.22.3")
6660 (source (origin
6661 (method url-fetch)
6662 (uri (pypi-uri "aioftp" version))
6663 (sha256
6664 (base32
6665 "0w621mg956m9rn7v39jpwi4gpnpl90pprwl29cp640dahqqv38ms"))))
6666 (build-system pyproject-build-system)
6667 (native-inputs
6668 (list python-async-timeout
6669 python-pytest
6670 python-pytest-asyncio
6671 python-pytest-cov
6672 python-setuptools
6673 python-trustme
6674 python-wheel))
6675 (propagated-inputs (list python-siosocks))
6676 (home-page "https://aioftp.readthedocs.io/")
6677 (synopsis "FTP client/server for asyncio in Python")
6678 (description
6679 "FTP client and server for asyncio (Python 3) Library implementing FTP
6680protocol, both client and server for Python asyncio module.
6681
6682 Supported commands as client: USER, PASS, ACCT, PWD, CWD, CDUP, MKD, RMD,
6683 MLSD, MLST, RNFR, RNTO, DELE, STOR, APPE, RETR, TYPE, PASV, ABOR, QUIT,
6684 REST, LIST (as fallback).
6685
6686 Supported commands as server: USER, PASS, QUIT, PWD, CWD, CDUP, MKD, RMD,
6687 MLSD, LIST (non-standard), MLST, RNFR, RNTO, DELE, STOR, RETR,
6688 TYPE (\"I\" and \"A\"), PASV, ABOR, APPE, REST.")
6689 (license license:asl2.0)))
6690
6691(define-public python-mohawk
6692 (let ((commit "b7899166880e890f01cf2531b5686094ba08df8f")
6693 (revision "0"))
6694 (package
6695 (name "python-mohawk")
6696 (version (git-version "1.1.0" revision commit))
6697 (source
6698 (origin
6699 (method git-fetch)
6700 (uri (git-reference
6701 (url "https://github.com/kumar303/mohawk")
6702 (commit commit)))
6703 (file-name (git-file-name name version))
6704 (sha256
6705 (base32 "00y9fimcj851rk2770wqk61fac9pnxfnzca4fvsci57zw18i50m6"))
6706 (patches
6707 (search-patches "python-mohawk-pytest.patch"))))
6708 (build-system pyproject-build-system)
6709 (arguments
6710 (list #:test-flags #~(list "mohawk/tests.py")))
6711 (native-inputs (list python-pytest python-setuptools))
6712 (propagated-inputs (list python-six)) ;TODO: remove python-mohawk when
6713 ;python-six is removed?
6714 (home-page "https://github.com/kumar303/mohawk")
6715 (synopsis "Library for Hawk HTTP authorization")
6716 (description
6717 "Mohawk is an alternate Python implementation of the Hawk HTTP
6718authorization scheme.")
6719 (license license:bsd-3))))
6720
6721(define-public python-msal
6722 (package
6723 (name "python-msal")
6724 (version "1.31.1")
6725 (home-page
6726 "https://github.com/AzureAD/microsoft-authentication-library-for-python")
6727 (source (origin
6728 (method git-fetch)
6729 ;; Pypi does not have tests.
6730 (uri (git-reference (url home-page) (commit version)))
6731 (file-name (git-file-name name version))
6732 (sha256
6733 (base32
6734 "18dg1j2az5ywk6klfd3kp36fxa4cmmf9yvma4li0a2nz2jgc1gdd"))))
6735 (build-system python-build-system)
6736 (arguments
6737 ;; Tests (all?) rely on network access and only some can be disabled by
6738 ;; setting the environment variable TRAVIS_TAG.
6739 (list #:tests? #f))
6740 (native-inputs (list python-mock))
6741 (propagated-inputs (list python-cryptography python-pyjwt python-requests))
6742 (synopsis "Microsoft Authentication Library (MSAL) for Python")
6743 (description
6744 "The Microsoft Authentication Library for Python enables applications to
6745integrate with the Microsoft identity platform. It allows you to sign in
6746users or apps with Microsoft identities (Azure AD, Microsoft Accounts and
6747Azure AD B2C accounts) and obtain tokens to call Microsoft APIs such as
6748Microsoft Graph or your own APIs registered with the Microsoft identity
6749platform. It is built using industry standard OAuth2 and OpenID Connect
6750protocols.")
6751 (license license:expat)))
6752
6753(define-public oauth2ms
6754 (let ((commit "a1ef0cabfdea57e9309095954b90134604e21c08")
6755 (revision "0"))
6756 (package
6757 (name "oauth2ms")
6758 (version (git-version "0.0.0" revision commit))
6759 (source (origin
6760 (method git-fetch)
6761 (uri (git-reference
6762 (url "https://github.com/harishkrupo/oauth2ms")
6763 (commit commit)))
6764 (file-name (git-file-name name version))
6765 (sha256
6766 (base32
6767 "0dqi6n4npdrvb42r672n4sl1jl8z5lsk554fwiiihpj0faa9dx64"))))
6768 (build-system copy-build-system)
6769 (arguments
6770 (list #:install-plan #~`(("oauth2ms" "bin/oauth2ms")
6771 ("." #$(string-append "share/doc/" name "-"
6772 version "/")
6773 #:include-regexp ("\\.org$")))
6774 #:phases #~(modify-phases %standard-phases
6775 (add-after 'install 'wrap-pythonpath
6776 (lambda* (#:key inputs outputs #:allow-other-keys)
6777 (let ((path (getenv "GUIX_PYTHONPATH")))
6778 (wrap-program (string-append #$output
6779 "/bin/oauth2ms")
6780 `("GUIX_PYTHONPATH" ":" prefix
6781 (,path)))))))))
6782 (inputs (list bash-minimal python python-gnupg python-msal python-pyxdg))
6783 (home-page "https://github.com/harishkrupo/oauth2ms")
6784 (synopsis "XOAUTH2 compatible Microsoft Office 365 token fetcher")
6785 (description
6786 "Oauth2ms can be used to fetch OAuth 2.0 tokens from the Microsoft Identity
6787endpoint. Additionally, it can encode the token in the XOAUTH2 format to be
6788used as authentication in IMAP mail servers.")
6789 (license license:asl2.0))))
6790
6791(define-public python-oauthlib
6792 (package
6793 (name "python-oauthlib")
6794 (version "3.1.0")
6795 (source (origin
6796 (method url-fetch)
6797 (uri (pypi-uri "oauthlib" version))
6798 (sha256
6799 (base32
6800 "12gqnabwck30gdlpwm6af3s28qm9p2yc7b1w8s4fk9ncbz1irr5y"))))
6801 (build-system python-build-system)
6802 (arguments
6803 `(#:phases (modify-phases %standard-phases
6804 (replace 'check
6805 (lambda _
6806 (invoke "pytest" "-vv"))))))
6807 (native-inputs
6808 (list python-pytest python-pytest-cov python-mock))
6809 (propagated-inputs
6810 (list python-cryptography python-pyjwt python-blinker))
6811 (home-page "https://github.com/oauthlib/oauthlib")
6812 (synopsis "OAuth implementation for Python")
6813 (description
6814 "Oauthlib is a generic, spec-compliant, thorough implementation of the
6815OAuth request-signing logic.")
6816 (license license:bsd-3)))
6817
6818(define-public python-rauth
6819 (package
6820 (name "python-rauth")
6821 (version "0.7.3")
6822 (source
6823 (origin
6824 (method url-fetch)
6825 (uri (pypi-uri "rauth" version))
6826 (sha256
6827 (base32
6828 "02kv8w8l98ky223avyq7vw7x1f2ya9chrm59r77ylq45qb0xnk2j"))))
6829 (build-system python-build-system)
6830 (arguments
6831 `(#:test-target "check"))
6832 (propagated-inputs
6833 (list python-requests))
6834 (home-page "https://github.com/litl/rauth")
6835 (synopsis "Python library for OAuth 1.0/a, 2.0, and Ofly")
6836 (description
6837 "Rauth is a Python library for OAuth 1.0/a, 2.0, and Ofly. It also
6838provides service wrappers for convenient connection initialization and
6839authenticated session objects providing things like keep-alive.")
6840 (license license:expat)))
6841
6842(define-public python-unalix
6843 (package
6844 (name "python-unalix")
6845 (version "0.9")
6846 (source
6847 (origin
6848 ;; There's only a wheel on PyPI.
6849 (method git-fetch)
6850 (uri (git-reference
6851 (url "https://github.com/AmanoTeam/Unalix")
6852 (commit (string-append "v" version))))
6853 (file-name (git-file-name name version))
6854 (sha256
6855 (base32 "0h8wc1axv26h753a8brc6dccqndx005c2bhr09gwg5c1hj9zsfml"))))
6856 (build-system python-build-system)
6857 (native-inputs (list python-pytest))
6858 (arguments
6859 '(#:phases
6860 (modify-phases %standard-phases
6861 (replace 'check
6862 (lambda* (#:key tests? #:allow-other-keys)
6863 (when tests?
6864 (invoke "pytest")))))))
6865 (home-page "https://pypi.org/project/Unalix/")
6866 (synopsis "Python library for removing tracking fields from URLs")
6867 (description "Unalix is a library written in Python implementing the
6868specification used by the @url{https://github.com/ClearURLs/Addon, ClearURLs}
6869addon for removing tracking fields from URLs.")
6870 (license license:lgpl3+)))
6871
6872(define-public python-urllib3
6873 (package
6874 (name "python-urllib3")
6875 (version "2.5.0")
6876 (source
6877 (origin
6878 (method url-fetch)
6879 (uri (pypi-uri "urllib3" version))
6880 (sha256
6881 (base32
6882 "0q17z6zlpyjv9ax5c3d30qwp9fwhz2sc4gbb7yyd86g4qwrpgi1z"))))
6883 (build-system pyproject-build-system)
6884 (arguments `(#:tests? #f))
6885 (native-inputs
6886 (list python-hatch-vcs
6887 python-hatchling
6888 python-setuptools-scm))
6889 (propagated-inputs
6890 (append
6891 ;; These 5 inputs are used to build urrlib3[secure]
6892 (list python-certifi)
6893 (if (member (%current-system)
6894 (package-transitive-supported-systems python-cryptography))
6895 (list python-cryptography)
6896 '())
6897 (list python-idna)
6898 (if (member (%current-system)
6899 (package-transitive-supported-systems python-pyopenssl))
6900 (list python-pyopenssl)
6901 '())
6902 (list python-pysocks)))
6903 (home-page "https://urllib3.readthedocs.io/")
6904 (synopsis "HTTP library with thread-safe connection pooling")
6905 (description
6906 "Urllib3 supports features left out of urllib and urllib2 libraries. It
6907can reuse the same socket connection for multiple requests, it can POST files,
6908supports url redirection and retries, and also gzip and deflate decoding.")
6909 (license license:expat)))
6910
6911(define-deprecated/public-alias python-urllib3-next
6912 python-urllib3) ;may be removed after 2025-12-01
6913
6914(define-public python-urllib3-1.25
6915 (package
6916 (inherit python-urllib3)
6917 (version "1.25.19")
6918 (source
6919 (origin
6920 (method url-fetch)
6921 (uri (pypi-uri "urllib3" version))
6922 (sha256
6923 (base32
6924 "09rmjqm5syhhc8fx3v06h3yv6cqy0b1081jg8wm5grpwpr72j61h"))))
6925 (native-inputs
6926 (list python-setuptools
6927 python-wheel))))
6928
6929(define-public python-urllib3-1.26
6930 (package
6931 (inherit python-urllib3)
6932 (version "1.26.17")
6933 (source
6934 (origin
6935 (method url-fetch)
6936 (uri (pypi-uri "urllib3" version))
6937 (sha256
6938 (base32
6939 "08fzhaf77kbjj5abpl9xag6fpfxkdp1k5s7sqd3ayacdq91a5mi4"))))
6940 (native-inputs
6941 (list python-setuptools
6942 python-wheel))))
6943
6944(define-public python-awscrt
6945 (package
6946 (name "python-awscrt")
6947 (version "0.26.1")
6948 (source
6949 (origin
6950 (method url-fetch)
6951 (uri (pypi-uri "awscrt" version))
6952 (sha256
6953 (base32 "0plkc0i0gc6z8fqnyy8kbg43sv3jnv8shcavcz0wb134riykmmm8"))))
6954 (build-system pyproject-build-system)
6955 (arguments
6956 (list
6957 #:test-backend #~'unittest
6958 #:test-flags #~(list "discover" "--verbose")
6959 #:phases
6960 #~(modify-phases %standard-phases
6961 (add-after 'unpack 'disable-broken-tests
6962 (lambda _
6963 ;; Disable broken tests. These tests fail because the
6964 ;; certificate bundle at the default location does not exist.
6965 (substitute* "test/test_auth.py"
6966 (("def test_default_provider")
6967 "def _test_default_provider"))
6968 (substitute* "test/test_http_client.py"
6969 (("def test_h2_client")
6970 "def _test_h2_client"))
6971 (substitute* "test/test_s3.py"
6972 (("def test_sanity")
6973 "def _test_sanity")
6974 (("def test_sanity_secure")
6975 "def _test_sanity_secure")
6976 (("def test_wait_shutdown")
6977 "def _test_wait_shutdown"))))
6978 (add-after 'unpack 'override-cert-bundle-location
6979 (lambda* (#:key inputs #:allow-other-keys)
6980 (let ((bundle (search-input-file inputs
6981 "/etc/ssl/certs/ca-certificates.crt")))
6982 (setenv "SSL_CERT_FILE" bundle)
6983 (substitute* "awscrt/io.py"
6984 (("( +)opt = TlsContextOptions\\(\\)" m indent)
6985 (string-append m "\n"
6986 indent "import os\n"
6987 indent "\
6988opt.override_default_trust_store_from_path(None, os.getenv('SSL_CERT_FILE')) if os.getenv('SSL_CERT_FILE') else None\n")))
6989 (substitute* "test/appexit_http.py"
6990 (("( +)tls_ctx_opt = awscrt.io.TlsContextOptions.*" m indent)
6991 (string-append m indent
6992 "tls_ctx_opt.override_default_trust_store_from_path(None, '"
6993 bundle "')\n")))
6994 (substitute* "test/test_io.py"
6995 (("( +)opt = TlsContextOptions\\(\\).*" m indent)
6996 (string-append m indent
6997 "opt.override_default_trust_store_from_path(None, '"
6998 bundle "')\n"))))))
6999 (add-after 'unpack 'use-system-libraries
7000 (lambda _
7001 (setenv "AWS_CRT_BUILD_USE_SYSTEM_LIBCRYPTO" "1"))))))
7002 (inputs (list openssl))
7003 (native-inputs (list cmake-minimal
7004 nss-certs-for-test
7005 python-boto3
7006 python-setuptools
7007 python-websockets))
7008 (home-page "https://github.com/awslabs/aws-crt-python")
7009 (synopsis "Common runtime for AWS Python projects")
7010 (description
7011 "This package provides a common runtime for AWS Python projects.")
7012 (license license:asl2.0)))
7013
7014(define-public awscli
7015 (package
7016 ;; Note: updating awscli typically requires updating botocore as well.
7017 (name "awscli")
7018 (version "1.42.61")
7019 (source
7020 (origin
7021 (method git-fetch)
7022 (uri (git-reference
7023 (url "https://github.com/aws/aws-cli")
7024 (commit version)))
7025 (file-name (git-file-name name version))
7026 (sha256
7027 (base32 "1fbqh4w7jj5abn87nbhyir25hdviirj0lblcdsqqkadcjh67877h"))))
7028 (build-system pyproject-build-system)
7029 (arguments
7030 (list
7031 ;; tests: 2692 passed, 40 warnings
7032 #:test-flags
7033 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
7034 ;; Compete test suite is huge and compute hungry, run just unit
7035 ;; tests.
7036 "--ignore=tests/dependencies"
7037 "--ignore=tests/functional"
7038 "--ignore=tests/integration"
7039 ;; TypeError: 'Mock' object is not subscriptable.
7040 "-k" "not test_no_groff_or_mandoc_exists")
7041 #:phases
7042 #~(modify-phases %standard-phases
7043 (add-after 'unpack 'fix-reference-to-groff
7044 (lambda _
7045 ;; XXX: Consider to use wrap-program instead, it tries to parse
7046 ;; the PATH.
7047 (substitute* "awscli/help.py"
7048 (("if self._exists_on_path\\('groff'\\):") "if 'groff':")
7049 (("raise ExecutableNotFoundError\\('groff'\\)") "")
7050 (("cmdline = \\['groff'")
7051 (format #f "cmdline = ['~a/bin/groff'"
7052 #$(this-package-input "groff-minimal"))))))
7053 (add-before 'check 'set-environment
7054 (lambda _
7055 ;; PermissionError: [Errno 13] Permission denied:
7056 ;; '/homeless-shelter'
7057 (setenv "HOME" "/tmp"))))))
7058 (native-inputs
7059 (list python-pytest
7060 python-pytest-xdist
7061 python-setuptools
7062 python-wheel))
7063 (inputs
7064 (list groff-minimal
7065 python-botocore
7066 python-colorama
7067 python-docutils-0.19
7068 python-pyyaml
7069 python-rsa-for-awscli-1
7070 python-s3transfer))
7071 (home-page "https://aws.amazon.com/cli/")
7072 (synopsis "Command line client for AWS")
7073 (description
7074 "AWS CLI provides a unified command line interface to the Amazon Web
7075Services (AWS) API.")
7076 (license license:asl2.0)))
7077
7078(define-public awscli-2
7079 (package
7080 (inherit awscli)
7081 ;; Note: updating awscli-2 typically requires updating python-awscrt.
7082 (name "awscli")
7083 ;; Upstream practices a very rapid (1h-1d) release cycles try to select
7084 ;; any fresh one compatible with current state of dependencies in Guix.
7085 (version "2.28.0")
7086 (source
7087 (origin
7088 (method git-fetch)
7089 (uri (git-reference
7090 (url "https://github.com/aws/aws-cli")
7091 (commit version)))
7092 (file-name (git-file-name name version))
7093 (sha256
7094 (base32
7095 "1a1jzvdm434x46yh7ir11lw0nzc64ns4qvxhp5wfra3rh5ykf36j"))))
7096 (build-system pyproject-build-system)
7097 (arguments
7098 (list
7099 ;; When updating and checking locally be very patient as build phase may
7100 ;; hang for 6-8 minutes but eventually passes through.
7101 ;;
7102 ;; tests: 4189 passed, 1 skipped, 2 warnings
7103 #:test-flags
7104 '(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
7105 ;; Full test suite contains more than 70k tests; ignore network
7106 ;; dependent, slow and compute intense tests, keep just unit
7107 ;; tests.
7108 "--ignore=tests/backends"
7109 "--ignore=tests/dependencies"
7110 "--ignore=tests/functional"
7111 "--ignore=tests/integration"
7112 "--ignore=tests/unit/botocore"
7113 ;; Flaky, something to do with PATH disappearing from os.environ?
7114 ;; Passes when run on its own, so maybe something else is
7115 ;; modifying this during the test run.
7116 "--ignore=tests/unit/customizations/emr/test_emr_utils.py"
7117 ;; TypeError: 'Mock' object is not subscriptable
7118 "-k" "not test_no_groff_or_mandoc_exists")
7119 #:phases
7120 #~(modify-phases %standard-phases
7121 (add-after 'unpack 'ignore-deprecations
7122 (lambda _
7123 (substitute* "pyproject.toml"
7124 (("\"error::") "\"ignore::"))))
7125 (add-after 'unpack 'fix-reference-to-groff
7126 (lambda* (#:key inputs #:allow-other-keys)
7127 (substitute* "awscli/help.py"
7128 (("if self._exists_on_path\\('groff'\\):") "if True:")
7129 (("cmdline = \\['groff'")
7130 (string-append "cmdline = ['"
7131 (search-input-file inputs "bin/groff")
7132 "'")))))
7133 (add-before 'check 'pre-check
7134 (lambda _ (setenv "HOME" "/tmp"))))))
7135 (inputs
7136 (list groff
7137 ;; less
7138 nss-certs-for-test
7139 python-awscrt
7140 python-colorama
7141 python-dateutil
7142 python-distro
7143 python-docutils
7144 python-jmespath
7145 python-prompt-toolkit
7146 python-ruamel.yaml
7147 python-ruamel.yaml.clib
7148 python-urllib3))
7149 (native-inputs
7150 (list python-flit-core
7151 python-pytest
7152 python-pytest-xdist))))
7153
7154;; This is not an official release of awscli version 2, so it should not be
7155;; named awscli.
7156(define-public awscliv2
7157 (package
7158 (inherit awscli)
7159 (name "awscliv2")
7160 (version "2.3.1")
7161 (source
7162 (origin
7163 (method url-fetch)
7164 (uri (pypi-uri name version))
7165 (sha256
7166 (base32
7167 "1bpp6kmb75qdhgzsx69ki04345bfkzwnmg84y5x6nyfpph2g3fsz"))))
7168 (arguments
7169 ;; FIXME: The 'pypi' release does not contain tests.
7170 '(#:tests? #f))
7171 (inputs
7172 (list python-importlib-resources
7173 python-executor))
7174 (native-inputs
7175 (list python-poetry-core
7176 python-pytest))))
7177
7178
7179(define-public python-wsgiproxy2
7180 (package
7181 (name "python-wsgiproxy2")
7182 (version "0.4.6")
7183 (source
7184 (origin
7185 (method url-fetch)
7186 (uri (pypi-uri "WSGIProxy2" version ".tar.gz"))
7187 (sha256
7188 (base32 "16jch5nic0hia28lps3c678s9s9mjdq8n87igxncjg0rpi5adqnf"))))
7189 (build-system python-build-system)
7190 (native-inputs
7191 (list python-webtest))
7192 (propagated-inputs
7193 (list python-requests python-six python-urllib3 python-webob))
7194 (home-page "https://github.com/gawel/WSGIProxy2/")
7195 (synopsis "WSGI Proxy with various http client backends")
7196 (description "WSGI turns HTTP requests into WSGI function calls.
7197WSGIProxy turns WSGI function calls into HTTP requests.
7198It also includes code to sign requests and pass private data,
7199and to spawn subprocesses to handle requests.")
7200 (license license:expat)))
7201
7202(define-public python-pastedeploy
7203 (package
7204 (name "python-pastedeploy")
7205 (version "2.1.1")
7206 (source
7207 (origin
7208 (method url-fetch)
7209 (uri (pypi-uri "PasteDeploy" version))
7210 (sha256
7211 (base32 "05s88qdjdwd9d9qs13fap7nqgxs7qs5qfzzjbrc5va13k2mxdskd"))))
7212 (build-system python-build-system)
7213 (arguments
7214 '(#:test-target "pytest"))
7215 (native-inputs
7216 (list python-pytest python-pytest-runner))
7217 (home-page "https://pylonsproject.org/")
7218 (synopsis
7219 "Load, configure, and compose WSGI applications and servers")
7220 (description
7221 "This tool provides code to load WSGI applications and servers from URIs;
7222these URIs can refer to Python Eggs for INI-style configuration files. Paste
7223Script provides commands to serve applications based on this configuration
7224file.")
7225 (license license:expat)))
7226
7227(define-public python-webtest
7228 (package
7229 (name "python-webtest")
7230 (version "3.0.6")
7231 (source
7232 (origin
7233 (method url-fetch)
7234 (uri (pypi-uri "webtest" version))
7235 (sha256
7236 (base32 "0jwl8i9xvm5xim1h2jrwfbqac1g3fpiazfdwfp2md3s4899gsmj2"))))
7237 (build-system pyproject-build-system)
7238 (arguments
7239 ;; Tests require python-pyquery, which creates a circular dependency.
7240 `(#:tests? #f))
7241 (native-inputs
7242 (list python-setuptools))
7243 (propagated-inputs
7244 (list python-beautifulsoup4
7245 python-waitress
7246 python-webob))
7247 (home-page "https://docs.pylonsproject.org/projects/webtest/")
7248 (synopsis "Helper to test WSGI applications")
7249 (description
7250 "Webtest allows you to test your Python web applications without
7251starting an HTTP server. It supports anything that supports the minimum of
7252WSGI.")
7253 (license license:expat)))
7254
7255(define-public python-flask
7256 (package
7257 (name "python-flask")
7258 (version "3.1.0")
7259 (source
7260 (origin
7261 (method url-fetch)
7262 (uri (pypi-uri "flask" version))
7263 (sha256
7264 (base32 "1b1nb250jxrjplbs21wnwq69250vs3iz2pdhs7cwi5y8hi8kr1sz"))))
7265 (build-system pyproject-build-system)
7266 (native-inputs
7267 (list python-flit-core
7268 python-pytest))
7269 (propagated-inputs
7270 (list python-asgiref ;async extra
7271 python-click
7272 python-blinker
7273 python-importlib-metadata
7274 python-itsdangerous
7275 python-jinja2
7276 python-werkzeug))
7277 (home-page "https://palletsprojects.com/p/flask/")
7278 (synopsis "Microframework based on Werkzeug, Jinja2 and good intentions")
7279 (description "Flask is a micro web framework based on the Werkzeug toolkit
7280and Jinja2 template engine. It is called a micro framework because it does not
7281presume or force a developer to use a particular tool or library.")
7282 (license license:bsd-3)))
7283
7284(define-public python-flask-compress
7285 (package
7286 (name "python-flask-compress")
7287 (version "1.18")
7288 (source (origin
7289 (method url-fetch)
7290 (uri (pypi-uri "flask_compress" version))
7291 (sha256
7292 (base32
7293 "0fj1r0ixsjls7z3a2zzamxppjz4qcf8q4jcmn74gsk9kisyy3fpx"))))
7294 (build-system pyproject-build-system)
7295 (native-inputs
7296 (list python-flask-caching
7297 python-pytest
7298 python-setuptools
7299 python-setuptools-scm))
7300 (propagated-inputs
7301 (list python-brotli
7302 python-flask
7303 python-pyzstd))
7304 (home-page "https://github.com/colour-science/flask-compress")
7305 (synopsis "Compress responses in a Flask app")
7306 (description
7307 "This package lets you compress Flask application responses and static
7308files with gzip, deflate or brotli. Flask-Compress both adds the various
7309headers required for a compressed response and compresses the response data.")
7310 (license license:expat)))
7311
7312(define-public python-flask-seasurf
7313 (package
7314 (name "python-flask-seasurf")
7315 (version "2.0.0")
7316 (source (origin
7317 (method url-fetch)
7318 (uri (pypi-uri "Flask-SeaSurf" version))
7319 (sha256
7320 (base32
7321 "0g5dsm2ikv8q4qcrb2446pbs972l5wkxyfmxsriqdsl02nz06h4f"))))
7322 (build-system pyproject-build-system)
7323 (arguments
7324 (list #:tests? #false)) ;there are none
7325 (propagated-inputs (list python-flask))
7326 (native-inputs (list python-setuptools python-wheel))
7327 (home-page "https://github.com/maxcountryman/flask-seasurf/")
7328 (synopsis "CSRF extension for Flask")
7329 (description "SeaSurf is a Flask extension for preventing cross-site
7330request forgery (CSRF). CSRF attacks are problematic because the mechanism
7331they use is relatively easy to exploit. This extension attempts to aid you in
7332securing your application from such attacks. This extension is based on the
7333Django middleware.")
7334 (license license:bsd-3)))
7335
7336(define-public python-flask-wtf
7337 (package
7338 (name "python-flask-wtf")
7339 (version "1.2.2")
7340 (source
7341 (origin
7342 (method url-fetch)
7343 (uri (pypi-uri "Flask-WTF" version))
7344 (sha256
7345 (base32
7346 "0sv6hjva1fdizb7sr46230pplx8qz8rnb4bxrfy71xbc8cgfxlkr"))))
7347 (build-system pyproject-build-system)
7348 (propagated-inputs
7349 (list python-flask python-flask python-itsdangerous python-wtforms))
7350 (native-inputs
7351 (list python-hatchling python-pytest))
7352 (home-page "https://github.com/lepture/flask-wtf")
7353 (synopsis "Simple integration of Flask and WTForms")
7354 (description "Flask-WTF integrates Flask and WTForms, including CSRF, file
7355upload, and reCAPTCHA.")
7356 (license license:bsd-3)))
7357
7358(define-public python-flask-multistatic
7359 (package
7360 (name "python-flask-multistatic")
7361 (version "1.0")
7362 (source
7363 (origin
7364 (method url-fetch)
7365 (uri (pypi-uri "flask-multistatic" version))
7366 (sha256
7367 (base32
7368 "0p4v50rwv64wcd0zlq7rzl4waprwr4hj19s3cgf1isywa7jcisgm"))))
7369 (build-system python-build-system)
7370 (propagated-inputs
7371 (list python-flask))
7372 (home-page "https://pagure.io/flask-multistatic")
7373 (synopsis "Flask plugin to allow overriding static files")
7374 (description "@code{flask-multistatic} is a flask plugin that adds support
7375for overriding static files.")
7376 (license license:gpl3+)))
7377
7378(define-public python-responses
7379 (package
7380 (name "python-responses")
7381 (version "0.25.3")
7382 (source (origin
7383 (method url-fetch)
7384 (uri (pypi-uri "responses" version))
7385 (sha256
7386 (base32
7387 "1fld6lsa143md4lxccwxq9iyqm9d8a05i9sp7lqjibnrmd3r4yv1"))))
7388 (build-system pyproject-build-system)
7389 (native-inputs
7390 (list python-pytest
7391 python-pytest-asyncio
7392 python-pytest-httpserver
7393 python-setuptools
7394 python-tomli
7395 python-tomli-w
7396 python-wheel))
7397 (propagated-inputs
7398 (list python-requests
7399 python-pyyaml
7400 python-urllib3))
7401 (home-page "https://github.com/getsentry/responses")
7402 (synopsis "Utility for mocking out the `requests` Python library")
7403 (description "A utility library for mocking out the `requests` Python
7404library.")
7405 (license license:asl2.0)))
7406
7407(define-public python-grequests
7408 (let ((commit "60f70e99e942a2df378b4e4f6202dcf862754c2d")
7409 (revision "0"))
7410 (package
7411 (name "python-grequests")
7412 (version (git-version "0.7.0" revision commit))
7413 (source
7414 (origin
7415 (method git-fetch)
7416 (uri (git-reference
7417 (url "https://github.com/kennethreitz/grequests")
7418 (commit commit)))
7419 (file-name (git-file-name name version))
7420 (sha256
7421 (base32 "0132yv1rr4pmrmwasrnasqbnd80pi6rgy52608731p7lidkmxz9a"))))
7422 (build-system pyproject-build-system)
7423 (arguments
7424 (list
7425 ;; XXX: Most failing tests seem to be caused by network access,
7426 ;; but there is no easy/flag way to disable tests selectively.
7427 #:tests? #f
7428 #:test-backend #~'unittest
7429 #:test-flags #~(list "tests.py")))
7430 (propagated-inputs (list python-gevent python-requests))
7431 (native-inputs (list python-setuptools))
7432 (home-page "https://github.com/kennethreitz/grequests")
7433 (synopsis "Python library for asynchronous HTTP requests")
7434 (description
7435 "GRequests is a Python library that allows you to use @code{Requests}
7436with @code{Gevent} to make asynchronous HTTP Requests easily.")
7437 (license license:bsd-2))))
7438
7439(define-public python-gwebsockets
7440 (package
7441 (name "python-gwebsockets")
7442 (version "0.7")
7443 (source (origin
7444 (method url-fetch)
7445 (uri (pypi-uri "gwebsockets" version))
7446 (sha256
7447 (base32
7448 "0kgq7wssz0mrhxdafkfc9prj0qjv9z0lyivyqvjvjnnypg54di7m"))))
7449 (build-system python-build-system)
7450 (propagated-inputs
7451 (list python-pygobject))
7452 (home-page "https://github.com/sugarlabs/gwebsockets")
7453 (synopsis "GLib based websockets server")
7454 (description "This package provides a websocket server written in Python.
7455It uses GIO for network communication and hence it easily integrates with the
7456GLib mainloop.")
7457 (license license:asl2.0)))
7458
7459(define-public python-dpkt
7460 (package
7461 (name "python-dpkt")
7462 (version "1.9.4")
7463 (source
7464 (origin
7465 (method url-fetch)
7466 (uri (pypi-uri "dpkt" version))
7467 (sha256
7468 (base32
7469 "1d28r8pmhzjjd6hrn1xcddinfhwv8lcl1s59ygmqa8kfmz5pkrgl"))))
7470 (build-system python-build-system)
7471 (home-page "https://github.com/kbandla/dpkt")
7472 (synopsis "Packet generator and parser for TCP/IP protocols")
7473 (description "The dpkt module is a fast, simple packet generator and parser
7474for the basic TCP/IP protocols.")
7475 (license license:bsd-3)))
7476
7477(define-public python-geventhttpclient
7478 (package
7479 (name "python-geventhttpclient")
7480 (version "2.3.3")
7481 (source (origin
7482 (method git-fetch)
7483 (uri (git-reference
7484 (url "https://github.com/geventhttpclient/geventhttpclient")
7485 (commit version)
7486 (recursive? #true)))
7487 (file-name (git-file-name name version))
7488 (sha256
7489 (base32
7490 "1ya0i0fbx054mfx5d1k75fcf64xzp7vva8lkwwzan41xbnc56nyj"))))
7491 (build-system pyproject-build-system)
7492 (arguments
7493 (list
7494 #:test-flags
7495 ;; Disable network tests.
7496 '(list "-k"
7497 (string-append "not test_client_simple"
7498 " and not test_client_ssl"
7499 " and not test_client_with_default_headers"
7500 " and not test_client_without_leading_slash"
7501 " and not test_download"
7502 " and not test_fail_invalid_ca_certificate"
7503 " and not test_httpbin_multipart"
7504 " and not test_multi_queries_greenlet_safe"
7505 " and not test_no_form_encode_header"
7506 " and not test_no_form_encoded_header"
7507 " and not test_request_with_headers"
7508 " and not test_response_context_manager"
7509 " and not test_urllib_request"))))
7510 (native-inputs (list nss-certs-for-test
7511 python-dpkt python-pytest python-requests
7512 python-setuptools python-wheel))
7513 (propagated-inputs (list python-brotli python-certifi python-gevent
7514 python-urllib3))
7515 (home-page "https://github.com/geventhttpclient/geventhttpclient")
7516 (synopsis "HTTP client library for gevent")
7517 (description "@code{python-geventhttpclient} is a high performance,
7518concurrent HTTP client library for python using @code{gevent}.")
7519 (license license:expat)))
7520
7521(define-public python-gevent-websocket
7522 (package
7523 (name "python-gevent-websocket")
7524 (version "0.10.1")
7525 (source
7526 (origin
7527 (method url-fetch)
7528 (uri (pypi-uri "gevent-websocket" version))
7529 (sha256
7530 (base32 "1c2zv2rahp1gil3cj66hfsqgy0n35hz9fny3ywhr2319d0lz7bky"))))
7531 (build-system pyproject-build-system)
7532 (arguments
7533 (list #:tests? #f)) ; no tests in PyPI or git
7534 (native-inputs
7535 (list python-setuptools
7536 python-wheel))
7537 (propagated-inputs
7538 (list python-gevent))
7539 (home-page "https://gitlab.com/noppo/gevent-websocket")
7540 (synopsis "Websocket handler for the gevent pywsgi server")
7541 (description
7542 "Websocket handler for the gevent pywsgi server, a Python network
7543library.
7544
7545Features include:
7546@itemize
7547@item integration on both socket level or using an abstract interface
7548@item RPC and PubSub framework using @acronym{WebSocket Application Messaging
7549Protocol, WAMP}
7550@item easily extendible using a simple WebSocket protocol plugin API
7551@end itemize")
7552 (license license:asl2.0)))
7553
7554(define-public python-requests-oauthlib
7555 (package
7556 (name "python-requests-oauthlib")
7557 (version "1.2.0")
7558 (source
7559 (origin
7560 (method url-fetch)
7561 (uri (pypi-uri "requests-oauthlib" version))
7562 (sha256
7563 (base32
7564 "0mrglgcvq7k48pf27s4gifdk0za8xmgpf55jy15yjj471qrk6rdx"))))
7565 (build-system python-build-system)
7566 (arguments
7567 `(#:phases
7568 (modify-phases %standard-phases
7569 ;; removes tests that require network access
7570 (add-before 'check 'pre-check
7571 (lambda _
7572 (delete-file "tests/test_core.py")
7573 #t)))))
7574 (native-inputs
7575 (list python-pyjwt python-requests-mock python-mock))
7576 (propagated-inputs
7577 (list python-oauthlib python-requests))
7578 (home-page
7579 "https://github.com/requests/requests-oauthlib")
7580 (synopsis
7581 "OAuthlib authentication support for Requests")
7582 (description
7583 "Requests-OAuthlib uses the Python Requests and OAuthlib libraries to
7584provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
7585 (license license:isc)))
7586
7587(define-public python-url
7588 (package
7589 (name "python-url")
7590 (version "0.2.0")
7591 (source (origin
7592 (method url-fetch)
7593 (uri (pypi-uri "url" version))
7594 (sha256
7595 (base32
7596 "0v879yadcz9qxfl41ak6wkga1kimp9cflla9ddz03hjjvgkqy5ki"))))
7597 (build-system python-build-system)
7598 (propagated-inputs
7599 (list python-publicsuffix))
7600 (native-inputs
7601 (list python-coverage python-nose))
7602 (arguments
7603 `(#:tests? #f)) ; FIXME: tests fail with "ImportError: No module named 'tests'"
7604 (home-page "https://github.com/seomoz/url-py")
7605 (synopsis "URL Parsing")
7606 (description "Library for parsing urls.")
7607 (license license:expat)))
7608
7609(define-public python-cachecontrol
7610 (package
7611 (name "python-cachecontrol")
7612 (version "0.14.1")
7613 (source
7614 (origin
7615 (method git-fetch)
7616 ;; Pypi does not have tests.
7617 (uri (git-reference
7618 (url "https://github.com/ionrock/cachecontrol")
7619 (commit (string-append "v" version))))
7620 (file-name (git-file-name name version))
7621 (sha256
7622 (base32
7623 "07ifs4dhahhsgj4vxgfl5ymnmb4my5l2wb8jiinn6fncszcfmr59"))))
7624 (build-system pyproject-build-system)
7625 (arguments
7626 ;; Versions > 0.11.6 depend on CherryPy for testing.
7627 ;; It's too much work to package CherryPy for now.
7628 `(#:tests? #f))
7629 (propagated-inputs
7630 (list python-filelock python-lockfile python-msgpack python-requests))
7631 (native-inputs
7632 (list python-flit-core))
7633 (home-page "https://github.com/ionrock/cachecontrol")
7634 (synopsis "The httplib2 caching algorithms for use with requests")
7635 (description "CacheControl is a port of the caching algorithms in
7636@code{httplib2} for use with @code{requests} session objects.")
7637 (license license:asl2.0)))
7638
7639(define-public python-betamax
7640 (package
7641 (name "python-betamax")
7642 (version "0.9.0")
7643 (source
7644 (origin
7645 (method url-fetch)
7646 (uri (pypi-uri "betamax" version))
7647 (sha256
7648 (base32
7649 "152zil1j4gl1whnldi08zwjr4z2bnlbd061kr3ipjs5wg4b6wcc2"))))
7650 (build-system pyproject-build-system)
7651 (arguments
7652 (list
7653 #:test-flags
7654 #~(list "-k" (string-join
7655 ;; Tests require network access to http://httpbin.org/get.
7656 (list "not test_creates_new_cassettes"
7657 "test_placeholders_work"
7658 "test_post_start_hook"
7659 "test_pre_stop_hook"
7660 "test_preplayback_hook"
7661 "test_prerecord_hook"
7662 "test_prerecord_ignoring_hook"
7663 "test_records_new_events_with_existing_cassette"
7664 "test_records_new_interaction"
7665 "test_records_new_interactions"
7666 "test_replaces_old_interactions"
7667 "test_replays_response_from_cassette"
7668 "test_requests_with_json_body"
7669 "test_saves_content_as_gzip"
7670 "test_unicode_is_saved_properly")
7671 " and not "))))
7672 (native-inputs
7673 (list nss-certs-for-test
7674 python-pytest
7675 python-setuptools))
7676 (propagated-inputs
7677 (list python-requests))
7678 (home-page "https://github.com/sigmavirus24/betamax")
7679 (synopsis "Record HTTP interactions with python-requests")
7680 (description
7681 "Betamax will record your test suite's HTTP interactions and replay them
7682during future tests. It is designed to work with python-requests.")
7683 (license license:expat)))
7684
7685(define-public python-betamax-matchers
7686 (package
7687 (name "python-betamax-matchers")
7688 (version "0.4.0")
7689 (source
7690 (origin
7691 (method url-fetch)
7692 (uri (pypi-uri "betamax-matchers" version))
7693 (sha256
7694 (base32
7695 "07qpwjyq2i2aqhz5iwghnj4pqr2ys5n45v1vmpcfx9r5mhwrsq43"))))
7696 (build-system python-build-system)
7697 (propagated-inputs
7698 (list python-betamax python-requests-toolbelt))
7699 (home-page "https://github.com/sigmavirus24/betamax_matchers")
7700 (synopsis "VCR imitation for python-requests")
7701 (description "@code{betamax-matchers} provides a set of Matchers for
7702Betamax.")
7703 (license license:asl2.0)))
7704
7705(define-public python-betamax-serializers
7706 (package
7707 (name "python-betamax-serializers")
7708 (version "0.2.1")
7709 (source
7710 (origin
7711 (method url-fetch)
7712 (uri (pypi-uri "betamax-serializers" version))
7713 (sha256
7714 (base32 "0ja9isbjmzzhxdj69s0kdsvw8nkp073w6an6a4liy5vk3fdl2p1l"))))
7715 (build-system python-build-system)
7716 (propagated-inputs
7717 (list python-betamax python-pyyaml))
7718 (synopsis "Set of third-party serializers for Betamax")
7719 (description "Betamax-Serializers are an experimental set of Serializers for
7720Betamax that may possibly end up in the main package.")
7721 (home-page "https://gitlab.com/betamax/serializers")
7722 (license license:asl2.0)))
7723
7724(define-public python-s3fs
7725 (package
7726 (name "python-s3fs")
7727 (version "2025.9.0")
7728 (source
7729 (origin
7730 (method url-fetch)
7731 (uri (pypi-uri "s3fs" version))
7732 (sha256
7733 (base32 "0c5w09ryyfwlrqbhxgn1yl2kl1ksmz2481vjs1l4k9lyy5z2ai3d"))))
7734 (build-system pyproject-build-system)
7735 ;; TODO: Many tests fail with "No such file or directory" raised by the
7736 ;; HTTP client.
7737 (arguments (list #:tests? #false))
7738 (native-inputs
7739 (list python-setuptools))
7740 (propagated-inputs
7741 (list python-aiobotocore
7742 python-aiohttp
7743 python-fsspec))
7744 (home-page "https://github.com/fsspec/s3fs/")
7745 (synopsis "Convenient filesystem interface over S3")
7746 (description "This package provides a convenient filesystem interface over
7747S3.")
7748 (license license:bsd-3)))
7749
7750(define-public python-s3transfer
7751 (package
7752 (name "python-s3transfer")
7753 (version "0.14.0")
7754 (source
7755 (origin
7756 (method url-fetch)
7757 (uri (pypi-uri "s3transfer" version))
7758 (sha256
7759 (base32 "09a17scf96zfdw2chb22yyvmnj4anfijgkncfi89id68wxj25wgg"))))
7760 (build-system pyproject-build-system)
7761 (arguments
7762 (list
7763 #:test-flags
7764 #~(list "--numprocesses" (number->string (parallel-job-count))
7765 ;; Tests require networking.
7766 "--ignore" "tests/integration")))
7767 (native-inputs
7768 (list python-pytest
7769 python-pytest-xdist
7770 python-setuptools))
7771 (propagated-inputs
7772 (list python-botocore))
7773 (home-page "https://github.com/boto/s3transfer")
7774 (synopsis "Amazon S3 Transfer Manager")
7775 (description
7776 "S3transfer is a Python library for managing Amazon S3 transfers.")
7777 (license license:asl2.0)))
7778
7779(define-public python-flask-restful
7780 (package
7781 (name "python-flask-restful")
7782 (version "0.3.10")
7783 (source
7784 (origin
7785 (method url-fetch)
7786 (uri (pypi-uri "Flask-RESTful" version))
7787 (sha256
7788 (base32
7789 "0dzckjjz3aw8nmisr5g9mnv02s2nqlhblykr9ydqzpr703pz4jpy"))))
7790 (build-system pyproject-build-system)
7791 (arguments
7792 ;; See <https://github.com/flask-restful/flask-restful/issues/980>.
7793 (list #:tests? #f))
7794 (propagated-inputs
7795 (list python-aniso8601 python-flask python-pytz))
7796 (native-inputs
7797 (list python-blinker
7798 python-mock
7799 python-pytest
7800 python-setuptools
7801 python-wheel))
7802 (home-page "https://github.com/flask-restful/flask-restful/")
7803 (synopsis "Flask module for creating REST APIs")
7804 (description
7805 "This package contains a Flask module for creating REST APIs.")
7806 (license license:bsd-3)))
7807
7808(define-public python-flask-sqlalchemy
7809 (package
7810 (name "python-flask-sqlalchemy")
7811 (version "3.1.1")
7812 (source (origin
7813 (method url-fetch)
7814 (uri (pypi-uri "flask_sqlalchemy" version))
7815 (sha256
7816 (base32
7817 "04l3dfivznlpvk9p9f20zdbyxl869k42z2w7glddlbc0h6w8pdp4"))))
7818 (build-system pyproject-build-system)
7819 (arguments
7820 (list
7821 #:test-flags
7822 #~(list "-k" (string-append "not test_explicit_table[db2]"
7823 " and not test_explicit_table[db4]"))))
7824 (native-inputs
7825 (list python-flit-core
7826 python-pytest))
7827 (propagated-inputs
7828 (list python-flask
7829 python-sqlalchemy-2))
7830 (home-page "https://github.com/mitsuhiko/flask-sqlalchemy")
7831 (synopsis "Module adding SQLAlchemy support to your Flask application")
7832 (description
7833 "This package adds SQLAlchemy support to your Flask application.")
7834 (license license:bsd-3)))
7835
7836(define-public python-flask-restful-swagger
7837 (package
7838 (name "python-flask-restful-swagger")
7839 (version "0.20.1")
7840 (source
7841 (origin
7842 (method url-fetch)
7843 (uri (pypi-uri "flask-restful-swagger" version))
7844 (sha256
7845 (base32
7846 "1p66f98b5zpypnnz56pxpbirchqj6aniw6qyrp8h572l0dn9xlvq"))))
7847 (build-system python-build-system)
7848 (arguments '(#:tests? #f)) ;no tests
7849 (propagated-inputs
7850 (list python-flask-restful python-six))
7851 (home-page "https://github.com/rantav/flask-restful-swagger")
7852 (synopsis "Extract Swagger specs from Flask-Restful projects")
7853 (description "This package lets you extract Swagger API documentation
7854specs from your Flask-Restful projects.")
7855 (license license:expat)))
7856
7857(define-public python-htmlmin
7858 (package
7859 (name "python-htmlmin")
7860 (version "0.1.12")
7861 (source
7862 (origin
7863 (method url-fetch)
7864 (uri (pypi-uri "htmlmin" version))
7865 (sha256
7866 (base32
7867 "0y51xhabw6x8jk8k93xl8vznshpz3jb6l28075r5sjip613fzhah"))))
7868 (arguments
7869 `(#:tests? #f)) ; no tests
7870 (build-system python-build-system)
7871 (home-page "https://htmlmin.readthedocs.org/en/latest/")
7872 (synopsis "HTML minifier")
7873 (description "@code{htmlmin} is an HTML minifier that just works.
7874It comes with safe defaults and easily configurable options.")
7875 (license license:bsd-3)))
7876
7877(define-public python-flask-htmlmin
7878 (package
7879 (name "python-flask-htmlmin")
7880 (version "1.2")
7881 (source
7882 (origin
7883 (method url-fetch)
7884 (uri (pypi-uri "Flask-HTMLmin" version))
7885 (sha256
7886 (base32
7887 "1n6zlq72kakkw0z2jpq6nh74lfsmxybm4g053pwhc14fbr809348"))))
7888 (propagated-inputs
7889 (list python-flask python-htmlmin))
7890 (build-system python-build-system)
7891 (home-page "https://github.com/hamidfzm/Flask-HTMLmin")
7892 (synopsis "HTML response minifier for Flask")
7893 (description
7894 "Minify @code{text/html} MIME type responses when using @code{Flask}.")
7895 (license license:bsd-3)))
7896
7897(define-public python-jsmin
7898 (package
7899 (name "python-jsmin")
7900 (version "3.0.1")
7901 (source
7902 (origin
7903 (method url-fetch)
7904 (uri (pypi-uri "jsmin" version))
7905 (sha256
7906 (base32
7907 "1z1brjsvni0260bypldkl8a05sgp0qk18x560zl44igr3q99m5f0"))))
7908 (build-system python-build-system)
7909 (home-page "https://github.com/tikitu/jsmin/")
7910 (synopsis "Python JavaScript minifier")
7911 (description
7912 "@code{jsmin} is a JavaScript minifier, usable from both Python code and
7913on the command line.")
7914 (license license:expat)))
7915
7916(define-public python-flask-login
7917 (package
7918 (name "python-flask-login")
7919 (version "0.6.3")
7920 (source
7921 (origin
7922 (method git-fetch)
7923 (uri (git-reference
7924 (url "https://github.com/maxcountryman/flask-login")
7925 (commit version)))
7926 (file-name (git-file-name name version))
7927 (sha256
7928 (base32 "0wk3dni5qssmbn8ii3hsh89qa3kwr97i92k27bzgsgxvvsfwwzja"))))
7929 (build-system pyproject-build-system)
7930 (propagated-inputs
7931 (list python-flask))
7932 (native-inputs
7933 ;; For tests.
7934 (list python-blinker
7935 python-mock
7936 python-pytest
7937 python-semantic-version
7938 python-setuptools
7939 python-werkzeug
7940 python-wheel))
7941 (home-page "https://github.com/maxcountryman/flask-login")
7942 (synopsis "User session management for Flask")
7943 (description
7944 "@code{Flask-Login} provides user session management for Flask. It
7945handles the common tasks of logging in, logging out, and remembering your
7946users' sessions over extended periods of time.")
7947 (license license:expat)))
7948
7949(define-public python-oauth2client
7950 (package
7951 (name "python-oauth2client")
7952 (version "4.0.0")
7953 (source
7954 (origin
7955 (method url-fetch)
7956 (uri (pypi-uri "oauth2client" version))
7957 (sha256
7958 (base32
7959 "1irqqap2zibysf8dba8sklfqikia579srd0phm5n754ni0h59gl0"))))
7960 (build-system python-build-system)
7961 (arguments
7962 `(#:tests? #f))
7963 (propagated-inputs
7964 (list python-httplib2
7965 python-pyasn1
7966 python-pyasn1-modules
7967 python-pyparsing
7968 python-rsa
7969 python-six))
7970 (home-page "https://github.com/google/oauth2client/")
7971 (synopsis "OAuth 2.0 client library")
7972 (description "@code{python-oauth2client} provides an OAuth 2.0 client
7973library for Python")
7974 (license license:asl2.0)))
7975
7976(define-public python-authlib
7977 (package
7978 (name "python-authlib")
7979 (version "1.5.1")
7980 (source
7981 (origin
7982 (method url-fetch)
7983 (uri (pypi-uri "authlib" version))
7984 (sha256
7985 (base32 "0blpvz2v2r8yvsgm1yr3n61mhwxvh1b0kyf2rp0i4wv6n3n8bg2w"))))
7986 (build-system pyproject-build-system)
7987 ;; No tests target.
7988 (arguments (list #:tests? #false))
7989 (propagated-inputs
7990 (list python-cryptography
7991 python-django
7992 python-flask
7993 python-httpx
7994 python-requests
7995 python-sqlalchemy-2
7996 python-starlette
7997 python-werkzeug))
7998 (native-inputs (list python-pytest python-setuptools python-wheel))
7999 (home-page "https://pypi.org/project/Authlib/1")
8000 (synopsis "Build OAuth and OpenID Connect servers and clients")
8001 (description
8002 "This is a Python library for building OAuth and OpenID Connect servers
8003and clients.")
8004 (license license:bsd-3)))
8005
8006(define-public python-flask-oidc
8007 (package
8008 (name "python-flask-oidc")
8009 (version "2.3.1")
8010 (source
8011 (origin
8012 (method url-fetch)
8013 (uri (pypi-uri "flask_oidc" version))
8014 (sha256
8015 (base32
8016 "1200xhqiqlqfmrq54v2p6cf3nny86njjw8r7sk5j59hlk9a683zk"))))
8017 (build-system pyproject-build-system)
8018 (propagated-inputs
8019 (list python-authlib
8020 python-blinker
8021 python-flask
8022 python-requests
8023 python-responses))
8024 (native-inputs
8025 (list python-pytest python-poetry-core))
8026 (home-page "https://github.com/puiterwijk/flask-oidc")
8027 (synopsis "OpenID Connect extension for Flask")
8028 (description "@code{python-flask-oidc} provides an OpenID Connect extension
8029for Flask.")
8030 (license license:bsd-2)))
8031
8032(define-public python-webassets
8033 (package
8034 (name "python-webassets")
8035 (version "3.0.0")
8036 (source
8037 (origin
8038 (method git-fetch)
8039 (uri (git-reference
8040 (url "https://github.com/miracle2k/webassets")
8041 (commit version)))
8042 (file-name (git-file-name name version))
8043 (sha256
8044 (base32 "11hxvdqw86q6r665iryjzwx21ys8jh2c63mw016ldr6j49l0zyyh"))))
8045 (build-system pyproject-build-system)
8046 (propagated-inputs (list python-pyyaml python-zope-dottedname))
8047 (native-inputs (list python-hatchling python-pytest))
8048 (home-page "https://github.com/miracle2k/webassets")
8049 (synopsis "Media asset management")
8050 (description
8051 "This package provides utilities to merge, minify and compress Javascript
8052and CSS files,supporting a variety of different filters, including YUI, jsmin,
8053jspacker or CSS tidy. It also supports URL rewriting in CSS files.")
8054 (license license:bsd-2)))
8055
8056(define-public python-cssmin
8057 (package
8058 (name "python-cssmin")
8059 (version "0.2.0")
8060 (source
8061 (origin
8062 (method url-fetch)
8063 (uri (pypi-uri "cssmin" version))
8064 (sha256
8065 (base32
8066 "1dk723nfm2yf8cp4pj785giqlwv42l0kj8rk40kczvq1hk6g04p0"))))
8067 (build-system python-build-system)
8068 (home-page "https://github.com/zacharyvoase/cssmin")
8069 (synopsis "Python port of the YUI CSS Compressor")
8070 (description "Python port of the YUI CSS Compressor.")
8071 (license (list license:expat license:bsd-3))))
8072
8073(define-public python-elastic-transport
8074 (package
8075 (name "python-elastic-transport")
8076 (version "9.1.0")
8077 (source
8078 (origin
8079 (method url-fetch)
8080 (uri (pypi-uri "elastic_transport" version))
8081 (sha256
8082 (base32 "0g879z8rqrfbwkxsm6xcycjha1swl7gdgs6m0y0j1zmh4m5f940m"))))
8083 (build-system pyproject-build-system)
8084 (arguments
8085 (list
8086 #:test-flags
8087 ;; Deselect failing tests (mostly due to network not reachable)
8088 #~(list "-k"
8089 (string-append
8090 "not .badssl.com"
8091 " and not test_assert_fingerprint_in_cert_chain_failure"))
8092 #:phases
8093 #~(modify-phases %standard-phases
8094 (add-after 'unpack 'fix-pytest-config
8095 (lambda _
8096 ;; Drop test coverage requirements.
8097 (substitute* "setup.cfg"
8098 (("--cov(-[^ ]*)?=[^ ]*") "\n")))))))
8099 (propagated-inputs (list python-certifi python-urllib3))
8100 (native-inputs (list nss-certs-for-test
8101 python-aiohttp
8102 ;; python-furo
8103 python-httpx
8104 python-opentelemetry-api
8105 python-opentelemetry-sdk
8106 python-orjson
8107 python-pytest
8108 python-pytest-asyncio
8109 ;; python-pytest-cov
8110 python-pytest-httpbin
8111 python-pytest-httpserver
8112 python-pytest-mock
8113 python-requests
8114 python-respx ;test
8115 python-setuptools
8116 ;; python-sphinx
8117 ;; python-sphinx-autodoc-typehints
8118 python-trustme
8119 python-wheel))
8120 (home-page "https://github.com/elastic/elastic-transport-python")
8121 (synopsis "Common library for Python Elastic client libraries")
8122 (description
8123 "This library was lifted from @code{elasticsearch-py} and then transformed to
8124be used across all Elastic services rather than only Elasticsearch. It
8125provides transport classes and utilities shared among Python Elastic client
8126libraries.")
8127 ;; Apache-2.0 in setup.py and LICENSE file.
8128 (license license:asl2.0)))
8129
8130(define-public python-elasticsearch
8131 (package
8132 (name "python-elasticsearch")
8133 (version "9.1.1")
8134 (source
8135 (origin
8136 (method git-fetch) ; no tests in PyPI release
8137 (uri (git-reference
8138 (url "https://github.com/elastic/elasticsearch-py")
8139 (commit (string-append "v" version))))
8140 (file-name (git-file-name name version))
8141 (sha256
8142 (base32 "015x73y84nyigcyg00lh32p2pfrqf834fr7clfnzymgzrrxa73jf"))))
8143 (build-system pyproject-build-system)
8144 (native-inputs
8145 (list nss-certs-for-test
8146 python-aiohttp
8147 python-dateutil
8148 python-mock
8149 python-orjson
8150 python-pytest
8151 python-pytest-asyncio
8152 python-pytest-cov
8153 python-pytz
8154 python-pyyaml
8155 python-requests
8156 python-hatchling))
8157 (propagated-inputs
8158 (list python-certifi
8159 python-elastic-transport))
8160 (home-page "https://github.com/elastic/elasticsearch-py")
8161 (synopsis "Low-level client for Elasticsearch")
8162 (description "Official low-level client for Elasticsearch. Its goal is to
8163provide common ground for all Elasticsearch-related code in Python; because of
8164this it tries to be opinion-free and very extendable.")
8165 ;; Apache-2.0 in setup.py and LICENSE file.
8166 (license license:asl2.0)))
8167
8168(define-public python-engineio
8169 (package
8170 (name "python-engineio")
8171 (version "4.12.2")
8172 (source
8173 (origin
8174 (method url-fetch)
8175 (uri (pypi-uri "python_engineio" version))
8176 (sha256
8177 (base32
8178 "1ynyf3n29biwkm6nwzzwzhr4m19lsir1x5azxq2nl7xyw7zi5rz7"))))
8179 (build-system pyproject-build-system)
8180 (arguments
8181 (list
8182 #:test-flags
8183 #~(list "-k"
8184 "not test_static_file_routing and not test_static_files")))
8185 (native-inputs
8186 (list python-pytest
8187 python-pytest-asyncio
8188 python-setuptools
8189 python-tornado))
8190 (propagated-inputs
8191 (list python-aiohttp
8192 python-requests
8193 python-simple-websocket
8194 python-websocket-client))
8195 (home-page "https://github.com/miguelgrinberg/python-engineio/")
8196 (synopsis "Engine.IO server")
8197 (description "This package provides a Python implementation of the
8198@code{Engine.IO} realtime client and server.")
8199 (license license:expat)))
8200
8201(define-public python-ephemeral-port-reserve
8202 (package
8203 (name "python-ephemeral-port-reserve")
8204 (version "1.1.4")
8205 (source
8206 (origin
8207 (method git-fetch) ;no tests in PyPI archvie
8208 (uri (git-reference
8209 (url "https://github.com/Yelp/ephemeral-port-reserve")
8210 (commit (string-append "v" version))))
8211 (file-name (git-file-name name version))
8212 (sha256
8213 (base32 "1ifmf5zcw7mhbm73awmf5jwc4rw8lhk81mn4zp797lwkysjm38s7"))))
8214 (build-system pyproject-build-system)
8215 (native-inputs
8216 (list python-pytest
8217 python-setuptools
8218 python-wheel))
8219 (home-page "https://github.com/Yelp/ephemeral-port-reserve/")
8220 (synopsis "Find an unused port, reliably")
8221 (description
8222 "Bind to an ephemeral port, force it into the TIME_WAIT state, and unbind
8223it.")
8224 (license license:expat)))
8225
8226(define-public python-flask-migrate
8227 (package
8228 (name "python-flask-migrate")
8229 (version "4.1.0")
8230 (home-page "https://github.com/miguelgrinberg/flask-migrate/")
8231 (source (origin
8232 (method git-fetch)
8233 (uri (git-reference (url home-page)
8234 (commit (string-append "v" version))))
8235 (file-name (git-file-name name version))
8236 (sha256
8237 (base32
8238 "09qw1hhyssa5gahm199x67d55c55m3k9m23xp2bdacwsiv8jw57g"))))
8239 (build-system pyproject-build-system)
8240 (propagated-inputs
8241 (list python-flask python-alembic python-flask-sqlalchemy))
8242 (native-inputs
8243 (list python-pytest python-setuptools python-wheel))
8244 (synopsis "SQLAlchemy database migrations for Flask programs using
8245Alembic")
8246 (description "This package contains SQLAlchemy database migration tools
8247for Flask programs that are using @code{python-alembic}.")
8248 (license license:expat)))
8249
8250(define-public python-genshi
8251 (package
8252 (name "python-genshi")
8253 (version "0.7.7")
8254 (source
8255 (origin
8256 (method git-fetch)
8257 (uri (git-reference
8258 (url "https://github.com/edgewall/genshi")
8259 (commit version)))
8260 (file-name (git-file-name name version))
8261 (sha256
8262 (base32 "06q14mn5n56rdnqvsbbjixygilblgg85fzw029n96qf6f1rvldiq"))))
8263 (propagated-inputs
8264 (list python-six))
8265 (build-system python-build-system)
8266 (home-page "https://genshi.edgewall.org/")
8267 (synopsis "Toolkit for generation of output for the web")
8268 (description "Genshi is a Python library that provides an integrated set
8269of components for parsing, generating, and processing HTML, XML or other
8270textual content for output generation on the web.")
8271 (license license:bsd-3)))
8272
8273(define-public python-flask-principal
8274 (package
8275 (name "python-flask-principal")
8276 (version "0.4.0")
8277 (source
8278 (origin
8279 (method url-fetch)
8280 (uri (pypi-uri "Flask-Principal" version))
8281 (sha256
8282 (base32
8283 "0lwlr5smz8vfm5h9a9i7da3q1c24xqc6vm9jdywdpgxfbi5i7mpm"))))
8284 (build-system python-build-system)
8285 (propagated-inputs
8286 (list python-blinker))
8287 (native-inputs
8288 (list python-flask python-nose))
8289 (home-page "https://pythonhosted.org/Flask-Principal/")
8290 (synopsis "Identity management for Flask")
8291 (description "@code{flask_principal} is a identity management library for
8292Flask. It supports managing both authentication and authorization data in a
8293thread-local variable.")
8294 (license license:expat)))
8295
8296(define-public python-flask-httpauth
8297 (package
8298 (name "python-flask-httpauth")
8299 (version "4.8.0")
8300 (source
8301 (origin
8302 (method url-fetch)
8303 (uri (pypi-uri "Flask-HTTPAuth" version))
8304 (sha256
8305 (base32
8306 "0yh9fn6pak64has89pcy03f1cn198vkil872y5jjr53kph2qlmk6"))))
8307 (build-system pyproject-build-system)
8308 (propagated-inputs (list python-flask))
8309 (native-inputs
8310 (list nss-certs-for-test
8311 python-pytest
8312 python-setuptools
8313 python-wheel))
8314 (home-page "https://github.com/miguelgrinberg/flask-httpauth/")
8315 (synopsis "Basic and Digest HTTP authentication for Flask routes")
8316 (description "@code{flask_httpauth} provides Basic and Digest HTTP
8317authentication for Flask routes.")
8318 (license license:expat)))
8319
8320(define-public python-uritemplate
8321 (package
8322 (name "python-uritemplate")
8323 (version "4.1.1")
8324 (source
8325 (origin
8326 (method url-fetch)
8327 (uri (pypi-uri "uritemplate" version))
8328 (sha256
8329 (base32
8330 "1w14a775d92mx9pdhb5zimifpfr2lfcn0vfdpjagcy9vbkyfsij3"))))
8331 (build-system python-build-system)
8332 (home-page "https://uritemplate.readthedocs.org")
8333 (synopsis "Library to deal with URI Templates")
8334 (description "@code{uritemplate} provides Python library to deal with URI
8335Templates.")
8336 ;; The software is made available under the terms of *either* of the
8337 ;; licenses found in LICENSE.APACHE or LICENSE.BSD. Contributions
8338 ;; are made under *both* licenses (excerpt from the LICENSE file).
8339 (license (list license:bsd-2 license:asl2.0))))
8340
8341(define-public python-uritemplate-3
8342 (package
8343 (inherit python-uritemplate)
8344 (name "python-uritemplate")
8345 (version "3.0.1")
8346 (source (origin
8347 (method url-fetch)
8348 (uri (pypi-uri "uritemplate" version))
8349 (sha256
8350 (base32 "1bkwmgr0ia9gcn4bszs2xlvml79f0bi2s4a87xg22ky9rq8avy2s"))))))
8351
8352(define-public python-publicsuffix
8353 (package
8354 (name "python-publicsuffix")
8355 (version "1.1.0")
8356 (source (origin
8357 (method url-fetch)
8358 (uri (pypi-uri "publicsuffix" version))
8359 (sha256
8360 (base32
8361 "1adx520249z2cy7ykwjr1k190mn2888wqn9jf8qm27ly4qymjxxf"))))
8362 (build-system python-build-system)
8363 (arguments
8364 `(#:tests? #f)) ; tests use the internet
8365 (home-page "https://www.tablix.org/~avian/git/publicsuffix.git")
8366 (synopsis "Get suffix for a domain name")
8367 (description "Get a public suffix for a domain name using the Public Suffix
8368List.")
8369 (license license:expat)))
8370
8371(define-public python-publicsuffix2
8372 (package
8373 (name "python-publicsuffix2")
8374 (version "2.20191221")
8375 (source
8376 (origin
8377 (method url-fetch)
8378 (uri (pypi-uri "publicsuffix2" version))
8379 (sha256
8380 (base32 "0yzysvfj1najr1mb4pcqrbmjir3xpb69rlffln95a3cdm8qwry00"))))
8381 (build-system python-build-system)
8382 (arguments
8383 '(#:phases
8384 (modify-phases %standard-phases
8385 (add-after 'unpack 'ignore-maintainer-inputs
8386 (lambda _
8387 ;; Comment out a demand for python-requests, which is used only by
8388 ;; the unused ‘update_psl’ helper command.
8389 (substitute* "setup.py"
8390 (("'requests " match)
8391 (format #f "# ~a" match)))
8392 #t)))
8393 #:tests? #f)) ; the test suite requires network access
8394 (home-page "https://github.com/pombredanne/python-publicsuffix2")
8395 (synopsis "Get a public suffix for a domain name using the Public Suffix List")
8396 (description "Get a public suffix for a domain name using the Public Suffix
8397List. Forked from and using the same API as the publicsuffix package.")
8398 (license (list license:expat license:mpl2.0))))
8399
8400(define-public python-werkzeug
8401 (package
8402 (name "python-werkzeug")
8403 (version "3.1.3")
8404 (source
8405 (origin
8406 (method url-fetch)
8407 (uri (pypi-uri "werkzeug" version))
8408 (sha256
8409 (base32
8410 "0ij7si3aa3ykac7k7fz481h4majqqwn2iqwhjxkji4y18plkqwk0"))))
8411 (build-system pyproject-build-system)
8412 (arguments
8413 (list
8414 #:test-flags
8415 ;; Test requiring networking setup.
8416 #~(list "--ignore=tests/test_serving.py"
8417 "--deselect=tests/test_debug.py::test_basic"
8418 "--deselect=tests/test_exceptions.py::test_response_body"
8419 "--deselect=tests/middleware/test_http_proxy.py::test_http_proxy")))
8420 (native-inputs
8421 (list python-flit-core
8422 python-pytest
8423 python-watchdog
8424 python-ephemeral-port-reserve
8425 python-pytest-timeout
8426 python-pytest-xprocess))
8427 (propagated-inputs
8428 (list python-markupsafe
8429 python-requests))
8430 (home-page "https://palletsprojects.com/p/werkzeug/")
8431 (synopsis "Utilities for WSGI applications")
8432 (description "One of the most advanced WSGI utility modules. It includes a
8433powerful debugger, full-featured request and response objects, HTTP utilities to
8434handle entity tags, cache control headers, HTTP dates, cookie handling, file
8435uploads, a powerful URL routing system and a bunch of community-contributed
8436addon modules.")
8437 (license license:x11)))
8438
8439(define-public python-werkzeug-1.0
8440 (package
8441 (inherit python-werkzeug)
8442 (version "1.0.1")
8443 (source (origin
8444 (method url-fetch)
8445 (uri (pypi-uri "Werkzeug" version))
8446 (sha256
8447 (base32
8448 "0z74sa1xw5h20yin9faj0vvdbq713cgbj84klc72jr9nmpjv303c"))
8449 (patches (search-patches "python-werkzeug-tests.patch"))))
8450 (arguments
8451 (list
8452 #:phases
8453 '(modify-phases %standard-phases
8454 (add-after 'unpack 'ignore-warnings
8455 (lambda _
8456 (substitute* "setup.cfg"
8457 ((" error.*") "")))))))
8458 (propagated-inputs
8459 (list python-requests))
8460 (native-inputs
8461 (list python-pytest python-pytest-timeout python-setuptools
8462 python-wheel))))
8463
8464(define-public python-bottle
8465 (package
8466 (name "python-bottle")
8467 (version "0.13.4")
8468 (source
8469 (origin
8470 (method url-fetch)
8471 (uri (pypi-uri "bottle" version))
8472 (sha256
8473 (base32 "0irz5i3h73pqz0ssgp3yk12zx33q7lrlh8p0in9jgchjgqr7hzkq"))))
8474 (build-system pyproject-build-system)
8475 (native-inputs (list python-pytest python-setuptools))
8476 (home-page "https://bottlepy.org/")
8477 (synopsis "WSGI framework for small web-applications")
8478 (description "@code{python-bottle} is a WSGI framework for small web-applications.")
8479 (license license:expat)))
8480
8481(define-public python-wtforms
8482 (package
8483 (name "python-wtforms")
8484 (version "3.1.2")
8485 (source
8486 (origin
8487 (method url-fetch)
8488 (uri (pypi-uri "wtforms" version))
8489 (sha256
8490 (base32 "1fblnkzvs6339glwx8bskdjy7nhn2ap90y9g6b399713sy063mzq"))))
8491 (build-system pyproject-build-system)
8492 (native-inputs (list python-hatchling python-pytest))
8493 (propagated-inputs (list python-babel python-email-validator
8494 python-markupsafe))
8495 (home-page "https://wtforms.readthedocs.io/")
8496 (synopsis
8497 "Form validation and rendering library for Python web development")
8498 (description
8499 "WTForms is a flexible forms validation and rendering library
8500for Python web development. It is very similar to the web form API
8501available in Django, but is a standalone package.")
8502 (license license:bsd-3)))
8503
8504(define-public python-wtforms-sqlalchemy
8505 (package
8506 (name "python-wtforms-sqlalchemy")
8507 (version "0.4.1")
8508 (source
8509 (origin
8510 (method url-fetch)
8511 (uri (pypi-uri "WTForms-SQLAlchemy" version))
8512 (sha256
8513 (base32 "1nx4x0ifanlbrzh3f9ns8ihnchlkzf54ilvqmgcgcz2j72vm43rp"))))
8514 (build-system pyproject-build-system)
8515 (native-inputs (list python-pytest python-setuptools python-wheel))
8516 (propagated-inputs (list python-sqlalchemy python-wtforms))
8517 (home-page "https://github.com/wtforms/wtforms-sqlalchemy/")
8518 (synopsis "SQLAlchemy tools for WTForms")
8519 (description
8520 "WTForms-SQLAlchemy is a fork of the @code{wtforms.ext.sqlalchemy}
8521package from WTForms. The package has been renamed to
8522@code{wtforms_sqlalchemy} but otherwise should function the same as
8523@code{wtforms.ext.sqlalchemy} did.")
8524 (license license:bsd-3)))
8525
8526(define-public python-urlgrabber
8527 (package
8528 (name "python-urlgrabber")
8529 (version "4.1.0")
8530 (source
8531 (origin
8532 (method url-fetch)
8533 (uri (pypi-uri "urlgrabber" version))
8534 (sha256
8535 (base32 "0fg16zlw49cw7pjq9dhpc5vd35d5zz1mlki55m464qxfmfpzhnh7"))))
8536 (build-system python-build-system)
8537 (arguments
8538 `(#:phases
8539 (modify-phases %standard-phases
8540 (replace 'check
8541 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
8542 (when tests?
8543 (add-installed-pythonpath inputs outputs)
8544 (invoke "python" "test/runtests.py")))))))
8545 (propagated-inputs
8546 (list python-pycurl python-setuptools python-six))
8547 (home-page "http://urlgrabber.baseurl.org/") ; no HTTPS
8548 (synopsis "High-level cross protocol url-grabber")
8549 (description
8550 "@code{urlgrabber} is a library that unifies access to files available on
8551the web, FTP or locally. It supports HTTP, FTP and file:// protocols, it
8552supports features like HTTP keep-alive, reget, throttling and more.")
8553 (license license:lgpl2.1+)))
8554
8555(define-public python-pycares
8556 (package
8557 (name "python-pycares")
8558 (version "4.3.0")
8559 (source
8560 (origin
8561 (method url-fetch)
8562 (uri (pypi-uri "pycares" version))
8563 (sha256
8564 (base32
8565 "0i8d0433wmm7wi8i2l2hjiyhmy35b9s888qrk6fqx5xcdmpnjhn5"))))
8566 (build-system python-build-system)
8567 (arguments `(#:tests? #f)) ;tests require internet access
8568 (propagated-inputs (list python-cffi))
8569 (home-page "https://github.com/saghul/pycares")
8570 (synopsis "Python interface for @code{c-ares}")
8571 (description "@code{pycares} is a Python module which provides an
8572interface to @code{c-ares}, a C library that performs DNS requests and
8573name resolutions asynchronously.")
8574 (license license:expat)))
8575
8576(define-public python-yarl
8577 (package
8578 (name "python-yarl")
8579 (version "1.18.3")
8580 (source
8581 (origin
8582 (method url-fetch)
8583 (uri (pypi-uri "yarl" version))
8584 (sha256
8585 (base32
8586 "1qfj6kvdxr8bzka4lp0bh0xfgr5mzx7zzvj2jb4vcxxzbk20265c"))))
8587 (build-system pyproject-build-system)
8588 (arguments
8589 (list
8590 #:test-flags '(list "--ignore-glob=tests/test_*_benchmarks.py")
8591 #:phases
8592 '(modify-phases %standard-phases
8593 (add-after 'unpack 'patch-build-system
8594 (lambda _
8595 ;; XXX: I don't know how to tell it to build the extensions in
8596 ;; place.
8597 (substitute* "packaging/pep517_backend/_backend.py"
8598 (("build_inplace=False") "build_inplace=True")))))))
8599 (native-inputs
8600 (list python-covdefaults
8601 python-cython
8602 python-expandvars
8603 python-pytest
8604 python-pytest-cov
8605 python-pytest-xdist
8606 python-setuptools
8607 python-tomli
8608 python-wheel))
8609 (propagated-inputs
8610 (list python-packaging python-idna python-multidict python-propcache))
8611 (home-page "https://github.com/aio-libs/yarl/")
8612 (synopsis "Yet another URL library")
8613 (description "@code{yarl} module provides handy @code{URL} class
8614for URL parsing and changing.")
8615 (license license:asl2.0)))
8616
8617(define-public python-canvasapi
8618 (package
8619 (name "python-canvasapi")
8620 (version "3.3.0")
8621 (source (origin
8622 (method git-fetch)
8623 (uri (git-reference
8624 (url "https://github.com/ucfopen/canvasapi")
8625 (commit (string-append "v" version))))
8626 (file-name (git-file-name name version))
8627 (sha256
8628 (base32
8629 "1gg6h2w4bajsis35p7l5r6bx54h5j2nq16r90wq8fbb0d3gz3f6q"))))
8630 (build-system pyproject-build-system)
8631 (propagated-inputs (list python-arrow python-pytz python-requests))
8632 (native-inputs (list python-pytest
8633 python-requests-mock
8634 python-setuptools
8635 python-urllib3-1.26
8636 python-wheel))
8637 (home-page "https://github.com/ucfopen/canvasapi")
8638 (synopsis "API wrapper for the Canvas LMS")
8639 (description
8640 "CanvasAPI is a Python library for accessing Instructure’s Canvas LMS API.
8641The library enables developers to programmatically manage Canvas courses,
8642users, gradebooks, and more.")
8643 (license license:expat)))
8644
8645(define-public python-google
8646 (package
8647 (name "python-google")
8648 (version "3.0.0")
8649 (source
8650 (origin
8651 (method url-fetch)
8652 (uri (pypi-uri "google" version))
8653 (sha256
8654 (base32 "1gncv3l11za0mpxvmpaf5n5j3jzp282rz62yml4ha4z55q930d8l"))))
8655 (build-system pyproject-build-system)
8656 (arguments (list #:tests? #f)) ;There are no tests.
8657 (native-inputs (list python-setuptools))
8658 (propagated-inputs (list python-beautifulsoup4))
8659 (home-page "https://breakingcode.wordpress.com/")
8660 (synopsis "Python bindings to the Google search engine")
8661 (description
8662 "This package provides Python bindings for using the Google search
8663engine. Its module is called @code{googlesearch}.")
8664 (license license:bsd-3)))
8665
8666(define-public python-google-api-client
8667 (package
8668 (name "python-google-api-client")
8669 (version "2.102.0")
8670 (source
8671 (origin
8672 (method url-fetch)
8673 (uri (pypi-uri "google-api-python-client" version))
8674 (sha256
8675 (base32
8676 "07b9afz3g3lk976i974h6ikvl7wzwm0a0ws0iynxvmd4favgjvwh"))))
8677 (build-system python-build-system)
8678 (arguments
8679 `(#:tests? #f)) ; tests require internet access
8680 (propagated-inputs
8681 (list python-google-api-core
8682 python-google-auth
8683 python-google-auth-httplib2
8684 python-httplib2
8685 python-pyparsing
8686 python-six
8687 python-uritemplate-3))
8688 (home-page "https://github.com/google/google-api-python-client")
8689 (synopsis "Core Python library for accessing Google APIs")
8690 (description "Python client library for Google's discovery based APIs")
8691 (license license:asl2.0)))
8692
8693(define-public python-google-auth-httplib2
8694 (package
8695 (name "python-google-auth-httplib2")
8696 (version "0.2.0")
8697 (source (origin
8698 (method url-fetch)
8699 (uri (pypi-uri "google-auth-httplib2" version))
8700 (sha256
8701 (base32 "018fckshilc6z2qpj1pclh8haanbq3lr85w6p4g4z5wgyjnppaiq"))))
8702 (build-system pyproject-build-system)
8703 (propagated-inputs
8704 (list python-google-auth python-httplib2))
8705 (native-inputs
8706 (list python-pytest
8707 python-pyparsing
8708 python-pytest-localserver
8709 python-flask
8710 python-setuptools))
8711 (home-page
8712 "https://github.com/GoogleCloudPlatform/google-auth-library-python-httplib2")
8713 (synopsis "Google Authentication Library: httplib2 transport")
8714 (description "This package provides a Google Authentication Library plugin
8715for httplib2 transport.")
8716 (license license:asl2.0)))
8717
8718(define-public python-google-auth-oauthlib
8719 (package
8720 (name "python-google-auth-oauthlib")
8721 (version "1.1.0")
8722 (source
8723 (origin
8724 (method url-fetch)
8725 (uri (pypi-uri "google-auth-oauthlib" version))
8726 (sha256
8727 (base32 "1yvsjd1vh440nsh9vpnig23sq4k1ia749x5g1dwm7r4110xqrsl3"))))
8728 (build-system python-build-system)
8729 (propagated-inputs (list python-google-auth python-requests-oauthlib))
8730 (native-inputs (list python-flask))
8731 (home-page
8732 "https://github.com/GoogleCloudPlatform/google-auth-library-python-oauthlib")
8733 (synopsis "Google Authentication Library: oauthlib")
8734 (description "This package provides a Google Authentication Library plugin
8735with oauthlib.")
8736 (license license:asl2.0)))
8737
8738(define-public whoogle-search
8739 (package
8740 (name "whoogle-search")
8741 (version "0.8.4")
8742 (source (origin
8743 (method url-fetch)
8744 (uri (pypi-uri "whoogle-search" version))
8745 (sha256
8746 (base32
8747 "0hsy4l98nzj6i1lf63wvqd0yharkaz44zsxh863ymy47rxnwimz7"))))
8748 (build-system pyproject-build-system)
8749 (arguments
8750 (list
8751 ;; The tests need network access
8752 #:tests? #f))
8753 (propagated-inputs
8754 (list python-beautifulsoup4
8755 python-brotli
8756 python-cryptography
8757 python-cssutils
8758 python-defusedxml
8759 python-flask
8760 python-dotenv
8761 python-requests
8762 python-stem
8763 python-validators
8764 python-waitress))
8765 (native-inputs (list python-setuptools python-wheel))
8766 (home-page "https://github.com/benbusby/whoogle-search")
8767 (synopsis "Self-hosted, ad-free, privacy-respecting metasearch engine")
8768 (description
8769 "Get Google results, but without any ads, javascript, AMP links,
8770cookies, or IP address tracking. Quick and simple to implement as a primary
8771search engine replacement on both desktop and mobile.")
8772 (license license:expat)))
8773
8774(define-public python-hawkauthlib
8775 (package
8776 (name "python-hawkauthlib")
8777 (version "2.0.0")
8778 (source
8779 (origin
8780 (method url-fetch)
8781 (uri (pypi-uri "hawkauthlib" version))
8782 (sha256
8783 (base32
8784 "03ai47s4h8nfnrf25shbfvkm1b9n1ccd4nmmj280sg1fayi69zgg"))))
8785 (build-system python-build-system)
8786 (propagated-inputs
8787 (list python-requests python-webob))
8788 (home-page "https://github.com/mozilla-services/hawkauthlib")
8789 (synopsis "Hawk Access Authentication protocol")
8790 (description
8791 "This is a low-level Python library for implementing Hawk Access Authentication,
8792a simple HTTP request-signing scheme.")
8793 (license license:mpl2.0)))
8794
8795(define-public python-pybrowserid
8796 (package
8797 (name "python-pybrowserid")
8798 (version "0.14.0")
8799 (source
8800 (origin
8801 (method url-fetch)
8802 (uri (pypi-uri "PyBrowserID" version))
8803 (sha256
8804 (base32
8805 "1qvi79kfb8x9kxkm5lw2mp42hm82cpps1xknmsb5ghkwx1lpc8kc"))))
8806 (build-system python-build-system)
8807 (propagated-inputs
8808 (list python-requests))
8809 (native-inputs
8810 (list python-mock))
8811 (home-page "https://github.com/mozilla/PyBrowserID")
8812 (synopsis "Python library for the BrowserID protocol")
8813 (description
8814 "This is a Python client library for the BrowserID protocol that
8815underlies Mozilla Persona.")
8816 (license license:mpl2.0)))
8817
8818(define-public python-pyfxa
8819 (package
8820 (name "python-pyfxa")
8821 (version "0.8.1")
8822 (source
8823 (origin
8824 (method git-fetch)
8825 (uri (git-reference
8826 (url "https://github.com/mozilla/PyFxA")
8827 (commit (string-append "v" version))))
8828 (file-name (git-file-name name version))
8829 (sha256
8830 (base32 "11iaw50x5ic9cqp3jwkvhk8mz00dhg8xhl1kkx45zrb8nnrfw2vs"))))
8831 (build-system pyproject-build-system)
8832 (arguments
8833 (list
8834 ;; These tests require network access
8835 #:test-flags #~(list "--ignore=fxa/tests/test_core.py")))
8836 (propagated-inputs
8837 (list python-cryptography
8838 python-pyjwt
8839 python-parameterized
8840 python-hawkauthlib
8841 python-requests))
8842 (native-inputs
8843 (list python-grequests
8844 python-hatchling
8845 python-mock
8846 python-pytest
8847 python-responses))
8848 (home-page "https://github.com/mozilla/PyFxA")
8849 (synopsis "Firefox Accounts client library for Python")
8850 (description
8851 "This is a Python library for interacting with the Firefox Accounts
8852ecosystem.")
8853 (license license:mpl2.0)))
8854
8855(define-public python-hyperlink
8856 (package
8857 (name "python-hyperlink")
8858 (version "21.0.0")
8859 (source
8860 (origin
8861 (method url-fetch)
8862 (uri (pypi-uri "hyperlink" version))
8863 (sha256
8864 (base32
8865 "0sx50lkivsfjxx9zr4yh7l9gll2l9kvl0v0w8w4wk2x5v9bzjyj2"))))
8866 (build-system pyproject-build-system)
8867 (arguments
8868 (list #:phases
8869 #~(modify-phases %standard-phases
8870 (add-before 'check 'pretend-to-be-CI
8871 (lambda _
8872 ;; Pretend to be a CI system to skip flaky tests.
8873 (setenv "CI" "true"))))))
8874 (native-inputs
8875 (list python-pytest python-setuptools python-wheel))
8876 (propagated-inputs
8877 (list python-idna))
8878 (home-page "https://github.com/python-hyper/hyperlink")
8879 (synopsis "Python module to create immutable URLs according to spec")
8880 (description "This package provides a Python module to create immutable, and
8881correct URLs for Python according to RFCs 3986 and 3987.")
8882 (license license:expat)))
8883
8884(define-public python-treq
8885 (package
8886 (name "python-treq")
8887 (version "24.9.1")
8888 (source
8889 (origin
8890 (method url-fetch)
8891 (uri (pypi-uri "treq" version))
8892 (sha256
8893 (base32
8894 "1a7yrq2m7hf77fia4fc0c6zanvwnykpgirdbs1cyvr7k0k27znhm"))))
8895 (build-system pyproject-build-system)
8896 (native-inputs
8897 (list python-httpbin
8898 python-pytest
8899 python-service-identity
8900 python-setuptools
8901 python-wheel))
8902 (propagated-inputs
8903 (list python-attrs
8904 python-hyperlink
8905 python-incremental
8906 python-requests
8907 python-twisted
8908 python-typing-extensions))
8909 (home-page "https://github.com/twisted/treq")
8910 (synopsis "Requests-like API built on top of twisted.web's Agent")
8911 (description "This package provides an HTTP library inspired by
8912@code{requests} but written on top of Twisted's @code{Agents}. It offers a
8913high level API for making HTTP requests when using Twisted.")
8914 (license license:expat)))
8915
8916(define-public python-autobahn
8917 (package
8918 (name "python-autobahn")
8919 (version "24.4.2")
8920 (source
8921 (origin
8922 (method url-fetch)
8923 (uri (pypi-uri "autobahn" version))
8924 (sha256
8925 (base32
8926 "1jcjxr16cy93v2kjwpvrcmg7cjbp5kyhbcpq25nhny6gn3qixmx2"))))
8927 (build-system pyproject-build-system)
8928 (arguments
8929 (list
8930 ;; The tests fail to run:
8931 ;; https://github.com/crossbario/autobahn-python/issues/1117
8932 #:tests? #f
8933 #:phases #~(modify-phases %standard-phases
8934 (add-after 'unpack 'relax-zope-interface
8935 (lambda _
8936 ;; python-zope-interface is a world rebuild package
8937 ;; and our one-digit lower minor version seems to be
8938 ;; fine.
8939 (substitute* "setup.py"
8940 (("zope.interface>=5.2.0")
8941 "zope.interface>=5.1.0"))))
8942 (add-after 'unpack 'strip-xbr
8943 (lambda _
8944 ;; Strip new XBR feature which isn't available in Guix.
8945 (setenv "AUTOBAHN_STRIP_XBR" "1"))))))
8946 (native-inputs (list python-setuptools python-wheel))
8947 (propagated-inputs (list python-cffi
8948 python-cryptography
8949 python-hyperlink
8950 python-twisted
8951 python-txaio))
8952 (home-page "https://github.com/crossbario/autobahn-python/")
8953 (synopsis "Web Application Messaging Protocol implementation")
8954 (description "This package provides an implementation of the @dfn{Web Application
8955Messaging Protocol} (WAMP). WAMP connects components in distributed
8956applications using Publish and Subscribe (PubSub) and routed Remote Procedure
8957Calls (rRPC). It is ideal for distributed, multi-client and server applications
8958such as IoT applications or multi-user database-driven business applications.")
8959 (license license:expat)))
8960
8961(define-public python-ws4py
8962 (package
8963 (name "python-ws4py")
8964 (version "0.6.0")
8965 (source
8966 (origin
8967 (method git-fetch)
8968 (uri (git-reference
8969 (url "https://github.com/Lawouach/WebSocket-for-Python")
8970 (commit version)))
8971 (file-name (git-file-name name version))
8972 (sha256
8973 (base32
8974 "00y6s8gk20936njqbxr8vjliviiz7r7pqrlwg7xi8zzs6903xvv6"))))
8975 (build-system pyproject-build-system)
8976 (arguments
8977 (list
8978 #:phases
8979 #~(modify-phases %standard-phases
8980 (add-after 'unpack 'remove-cherrypy-support
8981 (lambda _
8982 (delete-file "ws4py/server/cherrypyserver.py")
8983 (delete-file "test/test_cherrypy.py"))))))
8984 (native-inputs (list python-setuptools python-pytest))
8985 (propagated-inputs
8986 (list python-gevent python-tornado))
8987 (home-page "https://github.com/Lawouach/WebSocket-for-Python")
8988 (synopsis "WebSocket client and server library")
8989 (description
8990 "This package provides a WebSocket client and server library for Python.")
8991 (license license:bsd-3)))
8992
8993(define-public python-slowapi
8994 (package
8995 (name "python-slowapi")
8996 (version "0.1.9")
8997 (source
8998 (origin
8999 (method git-fetch)
9000 (uri (git-reference
9001 (url "https://github.com/laurents/slowapi")
9002 (commit (string-append "v" version))))
9003 (file-name (git-file-name name version))
9004 (sha256
9005 (base32 "1lc1n6lvh01dhhrc507qri9rz1w72l2riii03ixh7n7n1gwjpws7"))))
9006 (build-system pyproject-build-system)
9007 (arguments
9008 (list
9009 #:test-flags
9010 ;; These tests fail because the timestamp contains more decimal points
9011 ;; than expected, so a simple equality comparison fails.
9012 '(list "-k" (string-append "not test_headers_no_breach"
9013 " and not test_headers_breach"))))
9014 (propagated-inputs (list python-limits python-redis))
9015 (native-inputs
9016 (list python-fastapi
9017 python-hiro
9018 python-mock
9019 python-poetry-core
9020 python-pytest))
9021 (home-page "https://github.com/laurents/slowapi")
9022 (synopsis "Rate limiting extension for Starlette and Fastapi")
9023 (description
9024 "This package provides a rate limiting extension for Starlette and
9025Fastapi.")
9026 (license license:expat)))
9027
9028(define-public python-slugify
9029 (package
9030 (name "python-slugify")
9031 (version "5.0.2")
9032 (source
9033 (origin
9034 (method url-fetch)
9035 (uri (pypi-uri "python-slugify" version))
9036 (sha256
9037 (base32 "1aww2ncglyii4jkbfjxqhinivawf9zmwifcj32d69gpwp6h86czi"))))
9038 (propagated-inputs
9039 (list python-unidecode python-text-unidecode))
9040 (arguments
9041 `(#:phases
9042 (modify-phases %standard-phases
9043 (replace 'check
9044 (lambda* (#:key tests? #:allow-other-keys)
9045 (when tests?
9046 (invoke "python" "test.py")))))))
9047 (build-system python-build-system)
9048 (home-page "https://github.com/un33k/python-slugify")
9049 (synopsis "Python Slugify application that handles Unicode")
9050 (description "This package provides a @command{slufigy} command and
9051library to create slugs from unicode strings while keeping it DRY.")
9052 (license license:expat)))
9053
9054(define-public python-branca
9055 (package
9056 (name "python-branca")
9057 (version "0.7.2")
9058 (source
9059 (origin
9060 (method git-fetch) ; no tests in PyPI
9061 (uri (git-reference
9062 (url "https://github.com/python-visualization/branca")
9063 (commit (string-append "v" version))))
9064 (file-name (git-file-name name version))
9065 (sha256
9066 (base32 "1vs94nqa7r6iwm8mj3m29hg090gmgz4ywnayxh8qiz9ij8jv96wa"))))
9067 (build-system pyproject-build-system)
9068 (arguments
9069 ;; This file requires Selenium.
9070 (list #:test-flags #~(list "--ignore" "tests/test_iframe.py"
9071 ;; This test passes but is very slow.
9072 "-k" "not test_color_brewer_extendability")
9073 #:phases
9074 #~(modify-phases %standard-phases
9075 (add-before 'build 'pretend-version
9076 ;; The version string is usually derived via setuptools-scm,
9077 ;; but without the git metadata available, the version string
9078 ;; is set to '0.0.0'.
9079 (lambda _
9080 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION"
9081 #$(package-version this-package)))))))
9082 (propagated-inputs (list python-jinja2))
9083 (native-inputs
9084 (list python-numpy
9085 python-pytest
9086 python-setuptools
9087 python-setuptools-scm
9088 python-wheel))
9089 (home-page "https://github.com/python-visualization/branca")
9090 (synopsis "Generate complex HTML+JS pages with Python")
9091 (description "This library is a spinoff from @code{folium} that would host
9092the non-map-specific features. It can be used to generate HTML + JS.")
9093 (license license:expat)))
9094
9095(define-public python-tinycss2
9096 (package
9097 (name "python-tinycss2")
9098 (version "1.4.0")
9099 (source
9100 (origin
9101 (method git-fetch)
9102 (uri (git-reference
9103 (url "https://github.com/Kozea/tinycss2")
9104 (commit (string-append "v" version))
9105 (recursive? #true)))
9106 (file-name (git-file-name name version))
9107 (sha256
9108 (base32 "11m5vhpdz6zlzq2lqqklkhd0h4jxblpvcrdf9cc4s06nhr9acp0r"))))
9109 (build-system pyproject-build-system)
9110 (native-inputs
9111 (list python-flit
9112 python-pytest
9113 python-pytest-cov))
9114 (propagated-inputs
9115 (list python-webencodings))
9116 (home-page "https://tinycss2.readthedocs.io/")
9117 (synopsis "Low-level CSS parser for Python")
9118 (description "@code{tinycss2} can parse strings, return Python objects
9119representing tokens and blocks, and generate CSS strings corresponding to
9120these objects.
9121
9122Based on the CSS Syntax Level 3 specification, @code{tinycss2} knows the
9123grammar of CSS but doesn’t know specific rules, properties or values supported
9124in various CSS modules.")
9125 (license license:bsd-3)))
9126
9127(define-public python-cssselect2
9128 (package
9129 (name "python-cssselect2")
9130 (version "0.4.1")
9131 (source
9132 (origin
9133 (method url-fetch)
9134 (uri (pypi-uri "cssselect2" version))
9135 (sha256
9136 (base32 "1j2fcr217rsvkipsg6zjq03rl64rxnvb5hqqpx0dv58fhspvkywk"))))
9137 (build-system pyproject-build-system)
9138 (arguments
9139 `(#:phases
9140 (modify-phases %standard-phases
9141 (add-after 'unpack 'disable-linters
9142 ;; Their check fails; none of our business.
9143 (lambda _
9144 (substitute* '("setup.py" "pyproject.toml")
9145 (("'pytest-flake8',") "")
9146 (("'pytest-isort',") "")
9147 (("--flake8") "")
9148 (("--isort") "")))))))
9149 (propagated-inputs
9150 (list python-tinycss2))
9151 (native-inputs
9152 (list python-flit python-pytest-cov python-pytest-runner))
9153 (home-page "https://cssselect2.readthedocs.io/")
9154 (synopsis "CSS selectors for Python ElementTree")
9155 (description "@code{cssselect2} is a straightforward implementation of
9156CSS3 Selectors for markup documents (HTML, XML, etc.) that can be read by
9157ElementTree-like parsers (including cElementTree, lxml, html5lib, etc.).
9158
9159Unlike the Python package @code{cssselect}, it does not translate selectors to
9160XPath and therefore does not have all the correctness corner cases that are
9161hard or impossible to fix in cssselect.")
9162 (license license:bsd-3)))
9163
9164(define-public python-uvloop
9165 (package
9166 (name "python-uvloop")
9167 (version "0.21.0")
9168 (source
9169 (origin
9170 (method url-fetch)
9171 (uri (pypi-uri "uvloop" version))
9172 (sha256
9173 (base32 "1qq46ym3ymzfn4j6fnykfmr1f4qnb7x7p15dlw37hi38v87jpw9v"))
9174 (modules '((guix build utils)))
9175 (snippet
9176 '(begin (delete-file-recursively "vendor")
9177 (delete-file "uvloop/loop.c")))))
9178 (build-system pyproject-build-system)
9179 (arguments
9180 (list
9181 #:test-flags
9182 ;; The tests are prone to get stuck. Use pytest-timeout’s --timeout flag
9183 ;; to get a meaningful idea about where.
9184 #~(list "--timeout=300"
9185 "--timeout-method=thread"
9186 "-k" (string-join
9187 (list
9188 ;; Timeout, because SIGINT cannot be sent to child.
9189 "not test_signals_sigint_pycode_continue"
9190 "test_signals_sigint_pycode_stop"
9191 "test_signals_sigint_uvcode"
9192 "test_signals_sigint_uvcode_two_loop_runs"
9193 ;; This test is racy and prone to get stuck on
9194 ;; various platforms, possibly a aiohttp issue:
9195 ;; https://github.com/MagicStack/uvloop/issues/412
9196 "test_remote_shutdown_receives_trailing_data"
9197 ;; It looks like pytest is preventing
9198 ;; custom stdout/stderr redirection,
9199 ;; even with -s.
9200 "test_process_streams_redirect"
9201 ;; FileNotFoundError: [Errno 2] No such file or
9202 ;; directory
9203 "test_process_env_2"
9204 ;; socket.gaierror: [Errno -2] Name or service not known
9205 "test_getaddrinfo_21"
9206 #$@(if (target-riscv64?)
9207 `("test_renegotiation")
9208 `()))
9209 " and not "))
9210 #:phases
9211 #~(modify-phases %standard-phases
9212 (add-after 'unpack 'preparations
9213 (lambda _
9214 ;; Use packaged libuv.
9215 (substitute* "setup.py" (("self.use_system_libuv = False")
9216 "self.use_system_libuv = True"))
9217 ;; Replace hardcoded shell command.
9218 (substitute* "uvloop/loop.pyx"
9219 (("b'/bin/sh'") (string-append "b'" (which "sh") "'")))))
9220 #$@(if (target-riscv64?)
9221 `((add-after 'unpack 'adjust-test-timeouts
9222 (lambda _
9223 (substitute* '("tests/test_tcp.py"
9224 "tests/test_unix.py")
9225 (("SSL_HANDSHAKE_TIMEOUT = 15\\.0")
9226 "SSL_HANDSHAKE_TIMEOUT = 30.0")))))
9227 '())
9228 (add-before 'check 'pre-check
9229 (lambda* (#:key tests? #:allow-other-keys)
9230 (when tests?
9231 ;; Remove Python module, which conflicts with the installed
9232 ;; version, but lacks the built C module.
9233 (delete-file-recursively "uvloop")))))))
9234 (native-inputs
9235 (list python-aiohttp
9236 python-cython
9237 python-psutil
9238 python-pyopenssl
9239 python-pytest
9240 python-pytest-timeout
9241 python-setuptools
9242 python-wheel))
9243 (inputs
9244 (list libuv))
9245 (home-page "https://github.com/MagicStack/uvloop")
9246 (synopsis "Fast implementation of asyncio event loop on top of libuv")
9247 (description
9248 "@code{uvloop} is a fast, drop-in replacement of the built-in asyncio
9249event loop. It is implemented in Cython and uses libuv under the hood.")
9250 (license license:expat)))
9251
9252(define-public gunicorn
9253 (package
9254 (name "gunicorn")
9255 (version "22.0.0")
9256 (source
9257 (origin
9258 (method url-fetch)
9259 (uri (pypi-uri "gunicorn" version))
9260 (sha256
9261 (base32
9262 "0qzc3ghayc137hlwrqqwkkhaf8f5h9ja21qwy4rznxpz75i462sa"))))
9263 ;; CVE-2024-1135 is fixed in version 22.0.0.
9264 (properties `((lint-hidden-cve . ("CVE-2024-1135"))))
9265 (outputs '("out" "doc"))
9266 (build-system pyproject-build-system)
9267 (arguments
9268 `(#:test-flags
9269 ;; Disable the geventlet tests because eventlet uses dnspython, which
9270 ;; does not work in the build container due to lack of /etc/resolv.conf
9271 '("--ignore=tests/workers/test_geventlet.py")
9272 #:phases (modify-phases %standard-phases
9273 (add-after 'build 'build-doc
9274 (lambda _
9275 (invoke "make"
9276 "-C"
9277 "docs"
9278 "PAPER=a4"
9279 "html"
9280 "info")
9281 (delete-file "docs/build/texinfo/Makefile")
9282 (delete-file "docs/build/texinfo/Gunicorn.texi")))
9283 (add-after 'install 'install-doc
9284 (lambda* (#:key outputs #:allow-other-keys)
9285 (let* ((doc (string-append (assoc-ref outputs "doc")
9286 "/share/doc/"
9287 ,name "-"
9288 ,version))
9289 (html (string-append doc "/html"))
9290 (info (string-append doc "/info"))
9291 (examples (string-append doc "/examples")))
9292 (mkdir-p html)
9293 (mkdir-p info)
9294 (mkdir-p examples)
9295 (copy-recursively "docs/build/html" html)
9296 (copy-recursively "docs/build/texinfo" info)
9297 (copy-recursively "examples" examples)
9298 (for-each (lambda (file)
9299 (copy-file file
9300 (string-append doc "/" file)))
9301 '("README.rst" "NOTICE" "LICENSE" "THANKS")))))
9302 ;; XXX: The wrap phase includes native inputs on PYTHONPATH, (see
9303 ;; <https://bugs.gnu.org/25235>), leading to an inflated closure
9304 ;; size. Override it to only add the essential entries.
9305 (replace 'wrap
9306 (lambda* (#:key native-inputs inputs outputs
9307 #:allow-other-keys)
9308 (let* ((out (assoc-ref outputs "out"))
9309 (python (assoc-ref (or native-inputs inputs)
9310 "python"))
9311 (sitedir (string-append "/lib/python"
9312 (python-version python)
9313 "/site-packages")))
9314 (wrap-program (string-append out "/bin/gunicorn")
9315 `("PYTHONPATH" ":" prefix
9316 ,(map (lambda (output)
9317 (string-append output sitedir))
9318 (list python out))))))))))
9319 (inputs (list bash-minimal))
9320 (native-inputs (list binutils ;for ctypes.util.find_library()
9321 python-aiohttp
9322 python-gevent
9323 python-pytest
9324 python-pytest-cov
9325 python-sphinx
9326 texinfo))
9327 (propagated-inputs (list python-packaging python-setuptools python-wheel))
9328 (home-page "https://gunicorn.org/")
9329 (synopsis "Python WSGI HTTP Server for UNIX")
9330 (description
9331 "Gunicorn ‘Green Unicorn’ is a Python WSGI HTTP
9332Server for UNIX. It’s a pre-fork worker model ported from Ruby’s
9333Unicorn project. The Gunicorn server is broadly compatible with
9334various web frameworks, simply implemented, light on server resources,
9335and fairly speedy.")
9336 (license license:expat)))
9337
9338;; break cyclic dependency for python-aiohttp, which depends on gunicorn for
9339;; its tests
9340(define-public gunicorn-bootstrap
9341 (package
9342 (inherit gunicorn)
9343 (name "gunicorn")
9344 (arguments `(#:tests? #f))
9345 (properties '((hidden? . #t)))
9346 (native-inputs `())))
9347
9348(define-public python-httptools
9349 (package
9350 (name "python-httptools")
9351 (version "0.6.4")
9352 (source
9353 (origin
9354 ;; PyPI tarball comes with a vendored http-parser and no tests.
9355 (method git-fetch)
9356 (uri (git-reference
9357 (url "https://github.com/MagicStack/httptools")
9358 (commit (string-append "v" version))))
9359 (file-name (git-file-name name version))
9360 (sha256
9361 (base32 "05zsa77jlm2h9z0vfj6gdqklj3pbzbijhk5s9b3q7iaxl347hwzc"))
9362 (modules '((guix build utils)))
9363 (snippet
9364 #~(begin (delete-file-recursively "vendor")))))
9365 (build-system pyproject-build-system)
9366 (arguments
9367 (list
9368 #:test-flags
9369 ;; XXX: AssertionError: HttpParserError not raised.
9370 #~(list "-k" "not test_parser_response_leninent_headers_1")
9371 #:phases
9372 #~(modify-phases %standard-phases
9373 (add-after 'unpack 'configure-build-ext
9374 (lambda _
9375 (with-output-to-file "setup.cfg"
9376 (lambda ()
9377 (display "\
9378[build_ext]
9379use_system_llhttp = true
9380use_system_http_parser = true
9381cython_always = true"))))))))
9382 (native-inputs
9383 (list python-cython
9384 python-pytest
9385 python-setuptools))
9386 (inputs
9387 (list http-parser
9388 llhttp))
9389 (home-page "https://github.com/MagicStack/httptools")
9390 (synopsis "Collection of framework independent HTTP protocol utils")
9391 (description
9392 "@code{httptools} is a Python binding for the nodejs HTTP parser.")
9393 (license license:expat)))
9394
9395(define-public python-uvicorn
9396 (package
9397 (name "python-uvicorn")
9398 (version "0.34.0")
9399 (source
9400 (origin
9401 ;; PyPI tarball has no tests.
9402 (method git-fetch)
9403 (uri (git-reference
9404 (url "https://github.com/encode/uvicorn")
9405 (commit version)))
9406 (file-name (git-file-name name version))
9407 (sha256
9408 (base32 "05lkxnpzmr0kik81kdcvavjvvc4d1lgmw88mr4vbwsqk147wgqbc"))))
9409 (build-system pyproject-build-system)
9410 (arguments
9411 (list
9412 #:test-flags
9413 #~(list "-o" "asyncio_mode=auto"
9414 ;; For some reason tests stacked in infinity re-invocation loop:
9415 ;; AssertionError where is_alive =
9416 ;; <uvicorn.supervisors.multiprocess.Process object at
9417 ;; 0x7ffff39b6110>.is_alive.
9418 ;; Maybe this <https://github.com/encode/uvicorn/issues/2466>.
9419 "--ignore=tests/supervisors/test_multiprocess.py"
9420
9421 #$@(cond
9422 ((or (target-aarch64?)
9423 (target-riscv64?))
9424 '("-k not test_send_binary_data_to_server_bigger_than_default_on_websockets"))
9425 (#t '())))))
9426 (native-inputs
9427 (list nss-certs-for-test
9428 python-a2wsgi
9429 python-hatchling
9430 python-httpx-bootstrap
9431 python-pytest
9432 python-pytest-asyncio-0.26
9433 python-pytest-mock
9434 python-requests
9435 python-trustme
9436 python-wsproto))
9437 (propagated-inputs
9438 (list python-a2wsgi
9439 python-click
9440 python-dotenv
9441 python-h11
9442 python-httptools
9443 python-pyyaml
9444 python-uvloop
9445 python-watchfiles
9446 python-websockets))
9447 (home-page "https://github.com/encode/uvicorn")
9448 (synopsis "Fast ASGI server implementation")
9449 (description
9450 "@code{uvicorn} is a fast ASGI server implementation, using @code{uvloop}
9451and @code{httptools}. It currently supports HTTP/1.1 and WebSockets. Support
9452for HTTP/2 is planned.")
9453 (license license:bsd-3)))
9454
9455(define-public python-translation-finder
9456 (package
9457 (name "python-translation-finder")
9458 (version "2.22")
9459 (source
9460 (origin
9461 (method url-fetch)
9462 (uri (pypi-uri "translation_finder" version))
9463 (sha256
9464 (base32 "1hav99ccijvk2w8wpvba2pc7ba1z150vja2wvaimd069mc08pjd2"))))
9465 (build-system pyproject-build-system)
9466 (arguments
9467 (list
9468 #:test-flags
9469 ;; AssertionError: 31 != 30 : Mismatched count of results
9470 #~(list "--deselect=translation_finder/test_api.py::APITest::test_discover_file")))
9471 (native-inputs
9472 (list python-pytest
9473 python-setuptools))
9474 (propagated-inputs
9475 (list python-charset-normalizer
9476 python-ruamel.yaml
9477 python-weblate-language-data))
9478 (home-page "https://weblate.org/")
9479 (synopsis "Translation file finder for Weblate")
9480 (description "This package provides a function to find translation file in
9481the source code of a project. It supports many translation file formats and
9482is part of the Weblate translation platform.")
9483 (license license:gpl3+)))
9484
9485(define-public python-gitlab
9486 (package
9487 (name "python-gitlab")
9488 (version "3.2.0")
9489 (source (origin
9490 (method url-fetch)
9491 (uri (pypi-uri "python-gitlab" version))
9492 (sha256
9493 (base32
9494 "1gi4lp2g4k99zqcx2bgqx940bpmpbc1w9qkl5gy33hpy148yhvlg"))))
9495 (build-system python-build-system)
9496 (arguments
9497 `(#:tests? #f)) ;tests require network access
9498 (propagated-inputs (list python-requests python-requests-toolbelt))
9499 (home-page "https://github.com/python-gitlab/python-gitlab")
9500 (synopsis "Interact with GitLab API")
9501 (description "This package provides an extended library for interacting
9502with GitLab instances through their API.")
9503 (license license:lgpl3+)))
9504
9505(define-public python-path-and-address
9506 (package
9507 (name "python-path-and-address")
9508 (version "2.0.1")
9509 (source
9510 (origin
9511 ;; The source distributed on PyPI doesn't include tests.
9512 (method git-fetch)
9513 (uri (git-reference
9514 (url "https://github.com/joeyespo/path-and-address")
9515 (commit (string-append "v" version))))
9516 (file-name (git-file-name name version))
9517 (sha256
9518 (base32
9519 "0b0afpsaim06mv3lhbpm8fmawcraggc11jhzr6h72kdj1cqjk5h6"))))
9520 (build-system python-build-system)
9521 (arguments
9522 `(#:phases
9523 (modify-phases %standard-phases
9524 (replace 'check
9525 (lambda* (#:key inputs outputs #:allow-other-keys)
9526 (add-installed-pythonpath inputs outputs)
9527 (invoke "py.test"))))))
9528 (native-inputs
9529 (list python-pytest))
9530 (home-page "https://github.com/joeyespo/path-and-address")
9531 (synopsis "Functions for command-line server tools used by humans")
9532 (description "Path-and-address resolves ambiguities of command-line
9533interfaces, inferring which argument is the path, and which is the address.")
9534 (license license:expat)))
9535
9536;; XXX: This project missed maintainer upstream, see
9537;; <https://github.com/joeyespo/grip/issues/387>.
9538;; Consider to remove if it keeps failing to build.
9539(define-public grip
9540 (package
9541 (name "grip")
9542 (version "4.6.1")
9543 (source
9544 (origin
9545 (method git-fetch)
9546 (uri (git-reference
9547 (url "https://github.com/joeyespo/grip")
9548 (commit (string-append "v" version))))
9549 (file-name (git-file-name name version))
9550 (sha256
9551 (base32 "0vhimd99zw7s1fihwr6yfij6ywahv9gdrfcf5qljvzh75mvzcwh8"))))
9552 (build-system pyproject-build-system)
9553 (arguments
9554 (list
9555 #:test-flags
9556 ;; All tests fail requiring network access, ignore the whole file.
9557 #~(list "--ignore=tests/test_github.py")
9558 #:phases
9559 #~(modify-phases %standard-phases
9560 ;; This fixes the removal of `charset` attribute of requests from
9561 ;; Werkzeug 2.3.0.
9562 ;; Fixed in grip's commit <2784eb2c1515f1cdb1554d049d48b3bff0f42085>.
9563 (add-after 'unpack 'fix-response-encoding
9564 (lambda _
9565 (substitute* "grip/app.py"
9566 (("response.charset")
9567 "getattr(response, 'charset', 'utf-8')")))))))
9568 (native-inputs
9569 (list nss-certs-for-test
9570 python-pytest
9571 python-responses
9572 python-setuptools
9573 python-wheel))
9574 (propagated-inputs
9575 (list python-docopt
9576 python-flask
9577 python-markdown
9578 python-path-and-address
9579 python-pygments
9580 python-requests))
9581 (home-page "https://github.com/joeyespo/grip")
9582 (synopsis "Preview Markdown files using the GitHub API")
9583 (description
9584 "Grip is a command-line server application written in Python that uses
9585the GitHub Markdown API to render a local Markdown file. The styles and
9586rendering come directly from GitHub, so you'll know exactly how it will
9587appear. Changes you make to the file will be instantly reflected in the
9588browser without requiring a page refresh.")
9589 (license license:expat)))
9590
9591(define-public python-port-for
9592 (package
9593 (name "python-port-for")
9594 (version "0.7.4")
9595 (source
9596 (origin
9597 (method url-fetch)
9598 (uri (pypi-uri "port_for" version))
9599 (sha256
9600 (base32 "13826s2d4hzzmv69wws6a7ryhminclv2bqaw6cpl929gnbki6xzw"))))
9601 (build-system pyproject-build-system)
9602 (propagated-inputs
9603 (list python-urllib3))
9604 (native-inputs
9605 (list python-pytest python-setuptools python-wheel))
9606 (home-page "https://github.com/kmike/port-for/")
9607 (synopsis "TCP localhost port finder and association manager")
9608 (description
9609 "This package provides a utility that helps with local TCP ports
9610management. It can find an unused TCP localhost port and remember the
9611association.")
9612 (license license:expat)))
9613
9614(define-public python-livereload
9615 (package
9616 (name "python-livereload")
9617 (version "2.7.1")
9618 (source
9619 (origin
9620 (method git-fetch)
9621 (uri (git-reference
9622 (url "https://github.com/lepture/python-livereload")
9623 (commit (string-append "v" version))))
9624 (file-name (git-file-name name version))
9625 (sha256
9626 (base32 "19wkdd1grw6mcd4qi8iaw4jdr207h3m24951vgy69j7g904lynjq"))))
9627 (build-system pyproject-build-system)
9628 (arguments (list #:test-backend #~'unittest))
9629 (native-inputs (list python-django python-setuptools))
9630 (propagated-inputs (list python-tornado))
9631 (home-page "https://github.com/lepture/python-livereload")
9632 (synopsis "Python LiveReload")
9633 (description
9634 "Python LiveReload provides a command line utility, @command{livereload},
9635for starting a web server in a directory. It can trigger arbitrary commands
9636and serve updated contents upon changes to the directory.")
9637 (license license:bsd-3)))
9638
9639(define-public python-vf-1
9640 (package
9641 (name "python-vf-1")
9642 (version "0.0.11")
9643 (source
9644 (origin
9645 (method url-fetch)
9646 (uri (pypi-uri "VF-1" version))
9647 (sha256
9648 (base32
9649 "0xlqsaxsiayk1sd07kpz8abbcnab582y29a1y4882fq6j4gma5xi"))))
9650 (build-system python-build-system)
9651 (home-page "https://github.com/solderpunk/VF-1")
9652 (synopsis "Command line gopher client")
9653 (description "@code{VF-1} is a command line gopher client with
9654@acronym{TLS, Transport Layer Security} support.")
9655 (license license:bsd-2)))
9656
9657(define-public python-httpcore
9658 (package
9659 (name "python-httpcore")
9660 (version "1.0.9")
9661 (source
9662 (origin
9663 ;; PyPI tarball does not contain tests.
9664 (method git-fetch)
9665 (uri (git-reference
9666 (url "https://github.com/encode/httpcore")
9667 (commit version)))
9668 (file-name (git-file-name name version))
9669 (sha256
9670 (base32 "0yhm2n8qflpwjsjggyj757m0gw3n68al0my0ljybndwp933ipl32"))))
9671 (build-system pyproject-build-system)
9672 (native-inputs
9673 (list nss-certs-for-test
9674 python-hatch-fancy-pypi-readme
9675 python-hatchling
9676 python-pytest
9677 python-pytest-asyncio
9678 python-pytest-cov
9679 python-pytest-httpbin
9680 python-pytest-trio
9681 python-uvicorn
9682 python-trustme))
9683 (propagated-inputs
9684 (list python-anyio
9685 python-certifi
9686 python-h11
9687 python-h2
9688 python-sniffio
9689 python-socksio
9690 python-trio
9691 python-trio-typing))
9692 (home-page "https://github.com/encode/httpcore")
9693 (synopsis "Minimal, low-level HTTP client")
9694 (description
9695 "HTTP Core provides a minimal and low-level HTTP client, which does one
9696thing only: send HTTP requests.
9697
9698Some things HTTP Core does do:
9699
9700@itemize
9701@item Sending HTTP requests.
9702@item Provides both sync and async interfaces.
9703@item Supports HTTP/1.1 and HTTP/2.
9704@item Async backend support for asyncio and trio.
9705@item Automatic connection pooling.
9706@item HTTP(S) proxy support.
9707@end itemize")
9708 (license license:bsd-3)))
9709
9710;;; Variant used to break a cycle between python-httpx and python-uvicorn.
9711(define-public python-httpcore-bootstrap
9712 (hidden-package
9713 (package/inherit python-httpcore
9714 (name "python-httpcore-bootstrap")
9715 (arguments (list #:tests? #f))
9716 (native-inputs (list python-hatchling
9717 python-hatch-fancy-pypi-readme)))))
9718
9719(define-public python-httpx
9720 (package
9721 (name "python-httpx")
9722 (version "0.28.1")
9723 (source
9724 (origin
9725 ;; PyPI tarball does not contain tests.
9726 (method git-fetch)
9727 (uri (git-reference
9728 (url "https://github.com/encode/httpx")
9729 (commit version)))
9730 (file-name (git-file-name name version))
9731 (sha256
9732 (base32 "00d6rb21xwazwb0sj68zhra0qxxcwkd0vv7bg3k1jg94dmk2w7xl"))))
9733 (build-system pyproject-build-system)
9734 (arguments
9735 (list
9736 ;; 1401 passed, 1 skipped, 5 deselected
9737 #:test-flags
9738 #~(list "-o" "asyncio_mode=auto"
9739 ;; CLI tests are broken.
9740 "--ignore=tests/test_main.py"
9741 "-k" (string-join
9742 ;; These tests try to open an outgoing connection.
9743 (list "not test_async_proxy_close"
9744 "test_sync_proxy_clos"
9745 "test_write_timeout")
9746 " and not "))))
9747 (native-inputs
9748 (list nss-certs-for-test
9749 python-chardet
9750 python-cryptography
9751 python-hatch-fancy-pypi-readme
9752 python-hatchling
9753 python-pytest
9754 python-pytest-asyncio
9755 python-pytest-trio
9756 python-setuptools
9757 python-trio
9758 python-trustme
9759 python-uvicorn))
9760 (propagated-inputs
9761 (list python-anyio
9762 python-certifi
9763 python-httpcore
9764 python-idna
9765 ;; [brotli]
9766 python-brotli
9767 ;; [http2]
9768 python-h2
9769 ;; [socks]
9770 python-socksio
9771 ;; [zstd]
9772 python-zstandard
9773 ;; For trio, see:
9774 ;; <https://github.com/python-trio/trio/issues/2802>.
9775 python-sniffio))
9776 (home-page "https://www.python-httpx.org/")
9777 (synopsis "HTTP client for Python")
9778 (description
9779 "HTTPX is a fully featured HTTP client for Python 3, which provides sync
9780and async APIs, and support for both HTTP/1.1 and HTTP/2.
9781
9782HTTPX builds on the well-established usability of requests, and gives you:
9783
9784@itemize
9785@item A broadly requests-compatible API.
9786@item Standard synchronous interface, but with async support if you need it.
9787@item HTTP/1.1 and HTTP/2 support.
9788@item Ability to make requests directly to WSGI applications or ASGI applications.
9789@item Strict timeouts everywhere.
9790@item Fully type annotated.
9791@item 99% test coverage.
9792@end itemize
9793
9794Plus all the standard features of requests:
9795
9796@itemize
9797@item International Domains and URLs
9798@item Keep-Alive & Connection Pooling
9799@item Sessions with Cookie Persistence
9800@item Browser-style SSL Verification
9801@item Basic/Digest Authentication
9802@item Elegant Key/Value Cookies
9803@item Automatic Decompression
9804@item Automatic Content Decoding
9805@item Unicode Response Bodies
9806@item Multipart File Uploads
9807@item HTTP(S) Proxy Support
9808@item Connection Timeouts
9809@item Streaming Downloads
9810@item .netrc Support
9811@item Chunked Requests
9812@end itemize")
9813 (license license:bsd-3)))
9814
9815;;; Variant used to break a cycle with python-uvicorn.
9816(define-public python-httpx-bootstrap
9817 (hidden-package
9818 (package/inherit python-httpx
9819 (name "python-httpx-bootstrap")
9820 (arguments (list #:tests? #f))
9821 (native-inputs
9822 (list python-hatchling
9823 python-hatch-fancy-pypi-readme))
9824 (propagated-inputs
9825 (modify-inputs (package-propagated-inputs python-httpx)
9826 (replace "python-httpcore" python-httpcore-bootstrap))))))
9827
9828(define-public python-wsgiprox
9829 (package
9830 (name "python-wsgiprox")
9831 (version "1.5.2")
9832 (source
9833 (origin
9834 (method url-fetch)
9835 (uri (pypi-uri "wsgiprox" version))
9836 (sha256
9837 (base32
9838 "11fsm199pvwbmqx2lccznvws65aam1rqqv0w79gal8hispwgd5rs"))))
9839 (build-system python-build-system)
9840 (arguments
9841 ;; The test suite hangs (see:
9842 ;; https://github.com/webrecorder/wsgiprox/issues/6).
9843 `(#:tests? #f
9844 #:phases
9845 (modify-phases %standard-phases
9846 (add-after 'unpack 'fix-pytest-argument
9847 (lambda _
9848 ;; See: https://github.com/webrecorder/wsgiprox/issues/7.
9849 (substitute* "setup.py"
9850 (("--doctest-module")
9851 "--doctest-modules")))))))
9852 (propagated-inputs
9853 (list python-certauth python-gevent python-websocket-client))
9854 (native-inputs
9855 (list python-mock python-pytest-cov python-waitress))
9856 (home-page "https://github.com/webrecorder/wsgiprox")
9857 (synopsis "HTTP/S proxy with WebSockets over WSGI")
9858 (description "@code{wsgiprox} is a Python WSGI (Web Server Gateway
9859Interface) middle-ware for adding HTTP and HTTPS proxy support to a WSGI
9860application. The library accepts HTTP and HTTPS proxy connections, and routes
9861them to a designated prefix.")
9862 (license license:asl2.0)))
9863
9864(define-public python-warcio
9865 ;; The PyPI release is missing some test support files (see:
9866 ;; https://github.com/webrecorder/warcio/issues/132).
9867 (package
9868 (name "python-warcio")
9869 (version "1.7.5")
9870 (source
9871 (origin
9872 (method git-fetch)
9873 (uri (git-reference
9874 (url "https://github.com/webrecorder/warcio")
9875 (commit (string-append "v" version))))
9876 (file-name (git-file-name name version))
9877 (sha256
9878 (base32
9879 "0r3kijsm8wsbipi5pxsrqpg5nn4w8iaw5i8010b0ligmfxnxamlb"))))
9880 (build-system pyproject-build-system)
9881 (arguments
9882 (list
9883 #:test-flags ; These tests fail due to networking requirements.
9884 '(list "-k" (format #f "not ~a"
9885 (string-join
9886 '("test_post_chunked"
9887 "test_remote"
9888 "test_capture_http_proxy"
9889 "test_capture_https_proxy"
9890 "test_capture_https_proxy_same_session")
9891 " and not "))
9892 ; The following test requires the hookdns package.
9893 "--ignore=test/test_capture_http_proxy.py")))
9894 (native-inputs
9895 ;; These inputs are required for the test suite.
9896 (list python-httpbin
9897 python-pytest-cov
9898 python-requests
9899 python-setuptools
9900 python-wheel
9901 python-wsgiprox))
9902 (home-page "https://github.com/webrecorder/warcio")
9903 (synopsis "Streaming web archival archive (WARC) library")
9904 (description "warcio is a Python library to read and write the WARC format
9905commonly used in Web archives. It is designed for fast, low-level access to
9906web archival content, oriented around a stream of WARC records rather than
9907files.")
9908 (license license:asl2.0)))
9909
9910(define-public python-websockets
9911 (package
9912 (name "python-websockets")
9913 (version "13.1")
9914 (source
9915 (origin
9916 (method git-fetch)
9917 (uri (git-reference
9918 (url "https://github.com/aaugustin/websockets")
9919 (commit version)))
9920 (file-name (git-file-name name version))
9921 (sha256
9922 (base32
9923 "1dx3rf6fmg4ir9cfcn1fil446qz879cwrjq2rcz5zvl71xkw6hb3"))))
9924 (build-system pyproject-build-system)
9925 (arguments
9926 (list #:test-backend #~'unittest
9927 #:phases
9928 #~(modify-phases %standard-phases
9929 (add-before 'check 'extend-test-timeout
9930 (lambda _
9931 ;; Some architectures need an even longer timeout. Make it
9932 ;; long enough that it should never fail due to timeout.
9933 #$@(if (target-riscv64?)
9934 #~((setenv "WEBSOCKETS_TESTS_TIMEOUT_FACTOR" "100"))
9935 #~((setenv "WEBSOCKETS_TESTS_TIMEOUT_FACTOR" "10"))))))))
9936 (native-inputs
9937 (list python-setuptools
9938 python-wheel))
9939 (home-page "https://github.com/aaugustin/websockets")
9940 (synopsis
9941 "Python implementation of the WebSocket Protocol (RFC 6455 & 7692)")
9942 (description
9943 "@code{websockets} is a library for building WebSocket servers and clients
9944in Python with a focus on correctness and simplicity.
9945
9946Built on top of @code{asyncio}, Python's standard asynchronous I/O framework,
9947it provides an elegant coroutine-based API.")
9948 (license license:bsd-3)))
9949
9950(define-public selenium-manager
9951 (package
9952 (name "selenium-manager")
9953 (version "4.34.2")
9954 (source
9955 (origin
9956 (method git-fetch)
9957 (uri (git-reference
9958 (url "https://github.com/SeleniumHQ/selenium")
9959 (commit (string-append "selenium-" version "-python"))))
9960 (file-name (git-file-name name version))
9961 (sha256
9962 (base32 "14fg8r4rm9d7169rlm29l5yn08wgllmqk1zc6six3dlrzzf5mxil"))))
9963 (build-system cargo-build-system)
9964 (arguments
9965 (list
9966 ;; XXX: Almost all tests require either browsers or network access.
9967 #:tests? #f
9968 #:install-source? #f ; Most likely intended as a leaf.
9969 #:phases
9970 #~(modify-phases %standard-phases
9971 (add-after 'unpack 'chdir
9972 (lambda _
9973 (chdir "rust"))))))
9974 (native-inputs (list pkg-config))
9975 (inputs (cons* (list zstd "lib") xz
9976 (cargo-inputs 'selenium-manager)))
9977 (home-page "https://www.selenium.dev")
9978 (synopsis "CLI tool to manager the browser test infrastructure")
9979 (description
9980 "Selenium simplifies web browser automation. It specifically provides
9981infrastructure for the W3C WebDriver specification — a platform and
9982language-neutral coding interface compatible with all major web browsers.
9983
9984Selenium Manager is a CLI tool that automatically manages the browser/driver
9985infrastructure required by Selenium.")
9986 (license license:asl2.0)))
9987
9988(define-public python-selenium
9989 (package/inherit selenium-manager
9990 (name "python-selenium")
9991 (build-system pyproject-build-system)
9992 (arguments
9993 (list
9994 ;; XXX: Disable failing tests.
9995 #:test-flags
9996 #~(list "--ignore-glob=test/selenium/webdriver/*"
9997 ;; Probably requires those.
9998 "--ignore-glob=test/unit/selenium/webdriver/chrome/*"
9999 "--ignore-glob=test/unit/selenium/webdriver/firefox/*"
10000 ;; XXX: SSL certificates access.
10001 "--ignore=test/unit/selenium/webdriver/remote/remote_connection_tests.py"
10002 "-k" "not test_missing_cdp_devtools_version_falls_back")
10003 #:phases
10004 #~(modify-phases %standard-phases
10005 (add-after 'unpack 'chdir
10006 (lambda _
10007 (chdir "py")))
10008 (add-after 'chdir 'inject-selenium-manager-binary
10009 (lambda* (#:key inputs #:allow-other-keys)
10010 (substitute* "selenium/webdriver/common/selenium_manager.py"
10011 (("compiled_path = Path.*")
10012 (format #f "return Path(~s)~%"
10013 (search-input-file inputs "bin/selenium-manager"))))
10014 (substitute* "pyproject.toml"
10015 (("\\[\\[tool\\.setuptools-rust\\.bins\\]\\]")
10016 "")
10017 (("target = \"selenium\\.webdriver\\.common.*\"")
10018 ""))))
10019 (add-after 'chdir 'relax-requirements
10020 (lambda _
10021 (substitute* "pyproject.toml"
10022 (("\"(typing_extensions|trio)~=.*\"," _ target)
10023 (format #f "~s," target))))))))
10024 (propagated-inputs (list python-certifi
10025 python-trio
10026 python-trio-websocket
10027 python-typing-extensions
10028 python-urllib3
10029 python-websocket-client))
10030 (inputs (list selenium-manager))
10031 (native-inputs (list python-filetype
10032 python-pytest
10033 python-pytest-mock
10034 python-pytest-trio
10035 python-setuptools
10036 python-setuptools-rust))
10037 (synopsis "Python bindings for Selenium")
10038 (description
10039 "Selenium enables web browser automation. It specifically provides
10040infrastructure for the W3C WebDriver specification — a platform and
10041language-neutral coding interface compatible with all major web browsers.")))
10042
10043(define-public python-rapidjson
10044 (package
10045 (name "python-rapidjson")
10046 (version "1.10")
10047 (source
10048 (origin
10049 (method url-fetch)
10050 (uri (pypi-uri "python-rapidjson" version))
10051 (sha256
10052 (base32
10053 "0h1m9m4a5rlf5hw6ak7z3qbgdhmqarzxw9d140mcf7mrxpswpzmc"))
10054 (modules '((guix build utils)))
10055 (snippet
10056 '(delete-file-recursively "rapidjson"))))
10057 (build-system pyproject-build-system)
10058 (arguments
10059 (list
10060 #:test-flags '(list "tests")
10061 #:phases
10062 #~(modify-phases %standard-phases
10063 ;; We cannot seem to use #:configure-flags with the
10064 ;; pyproject-build-system to override rj_include_dir.
10065 (add-after 'unpack 'override-rapidjson-sources
10066 (lambda _
10067 (substitute* "setup.py"
10068 (("^rj_include_dir =.*")
10069 (string-append "rj_include_dir = '"
10070 #$(this-package-native-input "rapidjson")
10071 "/include/rapidjson" "'"))
10072 (("if not os.path.isdir.*") "if False:")))))))
10073 (native-inputs
10074 (list rapidjson python-pytest python-pytz python-setuptools python-wheel))
10075 (home-page "https://github.com/python-rapidjson/python-rapidjson")
10076 (synopsis "Python wrapper around rapidjson")
10077 (description "This package provides a python wrapper around rapidjson.")
10078 (license license:expat)))
10079
10080(define-public python-venusian
10081 (package
10082 (name "python-venusian")
10083 (version "3.0.0")
10084 (source
10085 (origin
10086 (method url-fetch)
10087 (uri (pypi-uri "venusian" version))
10088 (sha256
10089 (base32 "0f7f67dkgxxcjfhpdd5frb9pszkf04lyzzpn5069q0xi89r2p17n"))))
10090 (build-system python-build-system)
10091 (native-inputs
10092 `(("python-pytest" ,python-pytest)
10093 ("python-runner" ,python-pytest-runner)
10094 ("python-pytest-cov" ,python-pytest-cov)))
10095 (arguments '(#:test-target "pytest"))
10096 (home-page "https://docs.pylonsproject.org/projects/venusian")
10097 (synopsis "Library for deferring decorator actions")
10098 (description
10099 "Venusian is a library which allows framework authors to defer decorator
10100actions. Instead of taking actions when a function (or class) decorator is
10101executed at import time, you can defer the action usually taken by the
10102decorator until a separate scan phase.")
10103 (license license:repoze)))
10104
10105(define-public python-zope-deprecation
10106 (package
10107 (name "python-zope-deprecation")
10108 (version "4.4.0")
10109 (source (origin
10110 (method url-fetch)
10111 (uri (pypi-uri "zope.deprecation" version))
10112 (sha256
10113 (base32
10114 "1pz2cv7gv9y1r3m0bdv7ks1alagmrn5msm5spwdzkb2by0w36i8d"))))
10115 (build-system python-build-system)
10116 (native-inputs `())
10117 (propagated-inputs `())
10118 (home-page "https://zopedeprecation.readthedocs.io/")
10119 (synopsis "Function for marking deprecations")
10120 (description "The @code{zope.deprecation} module provides a function for
10121marking modules, classes, functions, methods and properties as deprecated,
10122displaying warnings when usaged in application code.")
10123 (license license:zpl2.1)))
10124
10125(define-public python-translationstring
10126 (package
10127 (name "python-translationstring")
10128 (version "1.3")
10129 (source (origin
10130 (method url-fetch)
10131 (uri (pypi-uri "translationstring" version))
10132 (sha256
10133 (base32
10134 "0bdpcnd9pv0131dl08h4zbcwmgc45lyvq3pa224xwan5b3x4rr2f"))))
10135 (build-system python-build-system)
10136 (home-page "https://docs.pylonsproject.org/projects/translationstring")
10137 (synopsis "Internationalization tooling for the Pylons project")
10138 (description "This package provides a library used by various Pylons
10139project packages for internationalization (i18n) duties related to
10140translation.")
10141 (license license:repoze)))
10142
10143(define-public python-plaster
10144 (package
10145 (name "python-plaster")
10146 (version "1.0")
10147 (source (origin
10148 (method url-fetch)
10149 (uri (pypi-uri "plaster" version))
10150 (sha256
10151 (base32
10152 "1hy8k0nv2mxq94y5aysk6hjk9ryb4bsd13g83m60hcyzxz3wflc3"))))
10153 (build-system python-build-system)
10154 (native-inputs
10155 (list python-pytest))
10156 (home-page "https://docs.pylonsproject.org/projects/plaster/en/latest/")
10157 (synopsis "Configuration loader for multiple config file formats")
10158 (description
10159 "Plaster is a loader interface around multiple config file formats. It
10160exists to define a common API for applications to use when they wish to load
10161configuration. The library itself does not aim to handle anything except a
10162basic API that applications may use to find and load configuration settings.
10163Any specific constraints should be implemented in a pluggable loader which can
10164be registered via an entrypoint.")
10165 (license license:repoze)))
10166
10167(define-public python-plaster-pastedeploy
10168 (package
10169 (name "python-plaster-pastedeploy")
10170 (version "0.7")
10171 (source (origin
10172 (method url-fetch)
10173 (uri (pypi-uri "plaster_pastedeploy" version))
10174 (sha256
10175 (base32
10176 "1zg7gcsvc1kzay1ry5p699rg2qavfsxqwl17mqxzr0gzw6j9679r"))))
10177 (build-system python-build-system)
10178 (native-inputs
10179 (list python-pytest))
10180 (propagated-inputs
10181 (list python-plaster python-pastedeploy))
10182 (home-page "https://github.com/Pylons/plaster_pastedeploy")
10183 (synopsis "Plugin for python-plaster adding PasteDeploy syntax")
10184 (description
10185 "This plugin for @code{python-plaster} adds support for PasteDeploy
10186syntax, it provides a plaster @code{Loader} object that can parse ini files
10187according to the standard set by PasteDeploy")
10188 (license license:expat)))
10189
10190(define-public python-hupper
10191 (package
10192 (name "python-hupper")
10193 (version "1.12.1")
10194 (source
10195 (origin
10196 (method url-fetch)
10197 (uri (pypi-uri "hupper" version))
10198 (sha256
10199 (base32 "1srj7sqxdgxr0nnhh9lw8jmp64chwgg8iwfm9b4g9v7l1wbm9gq6"))))
10200 (build-system pyproject-build-system)
10201 (arguments
10202 (list
10203 ;; RuntimeError: timeout waiting for change to
10204 ;; file=/tmp/guix-build-python-hupper-1.12.1.drv-0/tmpm9n4697p
10205 #:test-flags #~(list "--ignore=tests/test_it.py")))
10206 (native-inputs
10207 (list python-pytest
10208 python-pytest-cov
10209 python-setuptools
10210 python-wheel))
10211 (propagated-inputs
10212 (list python-watchdog))
10213 (home-page "https://readthedocs.org/projects/hupper")
10214 (synopsis "Integrated process monitor tracking changes to imported Python files")
10215 (description
10216 "Hupper is an integrated process monitor that will track changes to any
10217imported Python files in sys.modules as well as custom paths. When files are
10218changed the process is restarted.")
10219 (license license:expat)))
10220
10221(define-public python-pyowm
10222 (package
10223 (name "python-pyowm")
10224 (version "3.3.0")
10225 (source
10226 (origin
10227 (method git-fetch)
10228 (uri (git-reference
10229 (url "https://github.com/csparpa/pyowm")
10230 (commit version)))
10231 (file-name (git-file-name name version))
10232 (sha256
10233 (base32
10234 "1ha4pp96y3jk33qnyir5851cnj4dc06q6wqn1b0w54l3fsds28vi"))))
10235 (build-system pyproject-build-system)
10236 (arguments (list #:test-flags #~(list "tests/unit")))
10237 (native-inputs (list python-pytest python-setuptools python-wheel))
10238 (propagated-inputs
10239 (list python-geojson-for-pyowm
10240 python-pysocks
10241 python-requests))
10242 (home-page "https://github.com/csparpa/pyowm")
10243 (synopsis "Python wrapper around OpenWeatherMap web APIs")
10244 (description
10245 "This package provides a Python wrapper around OpenWeatherMap web APIs.")
10246 (license license:expat)))
10247
10248(define-public python-pyramid
10249 (package
10250 (name "python-pyramid")
10251 (version "2.0.2")
10252 (source (origin
10253 (method url-fetch)
10254 (uri (pypi-uri "pyramid" version))
10255 (sha256
10256 (base32
10257 "1phqdz068hl3zda263qkjp5am8fmvmpcxp3nrhsna8g472kkh89p"))))
10258 (build-system pyproject-build-system)
10259 (propagated-inputs
10260 (list python-hupper
10261 python-plaster
10262 python-plaster-pastedeploy
10263 python-setuptools
10264 python-translationstring
10265 python-venusian
10266 python-webob
10267 python-zope-component
10268 python-zope-deprecation
10269 python-zope-interface))
10270 (native-inputs (list python-pytest python-webtest python-wheel))
10271 (home-page "https://trypyramid.com/")
10272 (synopsis "Python web-framework suitable for small and large sites")
10273 (description
10274 "Pyramid makes it easy to write web applications. From minimal
10275request/response web apps to larger, grown applications.")
10276 (license license:repoze)))
10277
10278(define-public python-pyramid-chameleon
10279 ;; PyPI lacks a fresh release, use the latest commit assosiated with
10280 ;; unrleased version, see:
10281 ;; <https://github.com/Pylons/pyramid_chameleon/issues/27>
10282 (let ((commit "956c77ba37120c430e871c834d3cd4ed5ac8dccf")
10283 (revision "0"))
10284 (package
10285 (name "python-pyramid-chameleon")
10286 (version (git-version "0.4.dev0" revision commit))
10287 (source
10288 (origin
10289 (method git-fetch)
10290 (uri (git-reference
10291 (url "https://github.com/Pylons/pyramid_chameleon")
10292 (commit commit)))
10293 (file-name (git-file-name name version))
10294 (sha256
10295 (base32 "0rsb921xi7736h1xikc904bq2zzmrj1g8qgyimjw5wxdcd8927b1"))))
10296 (build-system pyproject-build-system)
10297 (native-inputs
10298 (list python-pytest
10299 python-setuptools))
10300 (propagated-inputs
10301 (list python-chameleon
10302 python-pyramid))
10303 (home-page "https://github.com/Pylons/pyramid_chameleon")
10304 (synopsis "Chameleon template compiler for pyramid")
10305 (description
10306 "These package provides bindings for the Chameleon templating system
10307 for the Pyramid web framework.")
10308 (license license:repoze))))
10309
10310(define-public python-pyramid-debugtoolbar
10311 (package
10312 (name "python-pyramid-debugtoolbar")
10313 (version "4.12.1")
10314 (source
10315 (origin
10316 (method url-fetch)
10317 (uri (pypi-uri "pyramid_debugtoolbar" version))
10318 (sha256
10319 (base32 "0gdlc7vcga4vzma53h5csnhh4gwfmv3w8v9y5fhwqpy8979qis3i"))))
10320 (build-system pyproject-build-system)
10321 (arguments
10322 (list
10323 #:test-flags
10324 ;; Large diff assertion not equal faileurs.
10325 #~(list #$@(map (lambda (test)
10326 (string-append "--deselect=tests"
10327 "/test_panels/test_sqla.py::" test))
10328 (list "TestSimpleSelect::test_panel"
10329 "TestTransactionCommit::test_panel"
10330 "TestTransactionRollback::test_panel")))))
10331 (native-inputs
10332 (list python-pytest
10333 python-setuptools
10334 python-webtest))
10335 (propagated-inputs
10336 (list python-pyramid
10337 python-pyramid-chameleon
10338 python-pyramid-jinja2
10339 python-pyramid-mako
10340 ;; python-selenium ; see: guix/guix#3478
10341 python-sqlalchemy
10342 python-waitress))
10343 (home-page "https://github.com/Pylons/pyramid_debugtoolbar")
10344 (synopsis "Pyramid debug toolbar")
10345 (description
10346 "This package provides an interactive HTML debugger for Pyramid application
10347development.")
10348 (license license:bsd-3)))
10349
10350(define-public python-pyramid-jinja2
10351 (package
10352 (name "python-pyramid-jinja2")
10353 (version "2.10.1")
10354 (source
10355 (origin
10356 (method url-fetch)
10357 (uri (pypi-uri "pyramid_jinja2" version))
10358 (sha256
10359 (base32 "0xqnqbqhx9bkrg2ic3blflsk8xc8kh7i2dm2kha9apqkbjrqql4c"))))
10360 (build-system pyproject-build-system)
10361 (arguments
10362 (list
10363 #:test-flags
10364 ;; Two tests failed with assertion not equal.
10365 #~(list "-k" "not test_it_relative_to_package and not test_options")
10366 #:phases
10367 #~(modify-phases %standard-phases
10368 (add-after 'unpack 'fix-pytest-config
10369 (lambda _
10370 (substitute* "setup.cfg"
10371 ((" --cov") "")))))))
10372 (native-inputs
10373 (list python-pytest
10374 python-setuptools
10375 python-webtest))
10376 (propagated-inputs
10377 (list python-jinja2
10378 python-markupsafe
10379 python-pyramid
10380 python-zope-deprecation))
10381 (home-page "https://github.com/Pylons/pyramid_jinja2")
10382 (synopsis "Jinja2 template bindings for the Pyramid web framework")
10383 (description "This package provides Jinja2 template bindings for the
10384Pyramid web framework.")
10385 (license license:repoze)))
10386
10387(define-public python-pyramid-mako
10388 ;; 1.1.0 was released in 2019, there a lot of compatability changes on
10389 ;; master, us the latest commit for now.
10390 (let ((commit "1a6f4c00c7134530d2975f34d904b64a41b28b21")
10391 (revision "0"))
10392 (package
10393 (name "python-pyramid-mako")
10394 (version (git-version "1.1.0" revision commit))
10395 (source
10396 (origin
10397 (method git-fetch)
10398 (uri (git-reference
10399 (url "https://github.com/Pylons/pyramid_mako")
10400 (commit commit)))
10401 (file-name (git-file-name name version))
10402 (sha256
10403 (base32 "0v0571z2gby4apsalkdk83gs0d5mw79d56518h3bwwxzbq32kkns"))))
10404 (build-system pyproject-build-system)
10405 (arguments
10406 (list
10407 #:phases
10408 #~(modify-phases %standard-phases
10409 (add-after 'unpack 'fix-pytest-config
10410 (lambda _
10411 (substitute* "pyproject.toml"
10412 ((" --cov --cov-report=term-missing") "")))))))
10413 (native-inputs
10414 (list python-pytest
10415 python-setuptools))
10416 (propagated-inputs
10417 (list python-mako
10418 python-pyramid))
10419 (home-page "https://github.com/Pylons/pyramid_mako")
10420 (synopsis "Mako template bindings for the Pyramid web framework")
10421 (description
10422 "This package provides Mako template bindings for the Pyramid web
10423framework.")
10424 (license license:repoze))))
10425
10426(define-public python-pyramid-retry
10427 (package
10428 (name "python-pyramid-retry")
10429 (version "2.1.1")
10430 (source
10431 (origin
10432 (method url-fetch)
10433 (uri (pypi-uri "pyramid_retry" version))
10434 (sha256
10435 (base32 "1jf07v6zhli0abgm2qajzfwg68bl9zy4xygjwl4svawbwrm2ga5s"))))
10436 (build-system pyproject-build-system)
10437 (native-inputs
10438 (list python-pytest
10439 python-setuptools
10440 python-webtest))
10441 (propagated-inputs
10442 (list python-pyramid
10443 python-zope-interface))
10444 (home-page "https://github.com/Pylons/pyramid_retry")
10445 (synopsis "Pyramid execution policy supporting retrying failed requests")
10446 (description
10447 "@code{pyramid_retry} is an execution policy for Pyramid that wraps requests
10448and can retry them a configurable number of times under certain \"retryable\"
10449error conditions before indicating a failure to the client.")
10450 (license license:expat)))
10451
10452(define-public python-pyramid-tm
10453 (package
10454 (name "python-pyramid-tm")
10455 (version "2.6")
10456 (source
10457 (origin
10458 (method url-fetch)
10459 (uri (pypi-uri "pyramid_tm" version))
10460 (sha256
10461 (base32 "173hg16hldfh5n3mn482xx64nldk308dzri31jd0qa4528cx4j41"))))
10462 (build-system pyproject-build-system)
10463 (arguments
10464 (list
10465 #:phases
10466 #~(modify-phases %standard-phases
10467 (add-after 'unpack 'fix-pytest-config
10468 (lambda _
10469 (substitute* "setup.cfg"
10470 ((" --cov") "")))))))
10471 (native-inputs
10472 (list python-pytest
10473 python-setuptools
10474 python-webtest))
10475 (propagated-inputs
10476 (list python-pyramid
10477 python-transaction))
10478 (home-page "https://github.com/Pylons/pyramid_tm")
10479 (synopsis "Centralized transaction management for Pyramid")
10480 (description
10481 "@code{pyramid_tm} is a package which allows Pyramid requests to join the
10482active @url{https://pypi.org/project/transaction/, transaction} as provided by
10483the Python transaction package.")
10484 (license license:repoze)))
10485
10486(define-public python-random-user-agent
10487 (package
10488 (name "python-random-user-agent")
10489 (version "1.0.1")
10490 (source
10491 (origin
10492 (method url-fetch)
10493 (uri (pypi-uri "random_user_agent" version))
10494 (sha256
10495 (base32
10496 "04nhzdh2ki7ybhjrmghxci6hcm6i03vvin2q2ynj87fbr1pa534g"))))
10497 (build-system python-build-system)
10498 (home-page "https://github.com/Luqman-Ud-Din/random_user_agent")
10499 (synopsis "List of user agents")
10500 (description
10501 "This package provides a list of user agents, from a collection of more
10502than 326,000 known user-agents. Users can pick a random one, or select one
10503based on filters.")
10504 (license license:expat)))
10505
10506(define-public python-rangehttpserver
10507 (package
10508 (name "python-rangehttpserver")
10509 (version "1.4.0")
10510 (source
10511 (origin
10512 (method git-fetch)
10513 (uri (git-reference
10514 (url "https://github.com/danvk/RangeHTTPServer")
10515 (commit version)))
10516 (file-name (git-file-name name version))
10517 (sha256
10518 (base32 "1dx533fsbq1mbz3by7qkm5bh2c253nwvm8214pqbwbfq07kqkwf2"))))
10519 (build-system pyproject-build-system)
10520 (native-inputs (list python-coverage python-coveralls python-pytest
10521 python-setuptools python-wheel))
10522 (home-page "https://github.com/danvk/RangeHTTPServer")
10523 (synopsis "SimpleHTTPServer with support for range requests")
10524 (description
10525 "This tool provides a simple HTTP server with support for Range
10526requests.")
10527 (license license:asl2.0)))
10528
10529(define-public python-flask-restx
10530 (package
10531 (name "python-flask-restx")
10532 (version "1.3.0")
10533 (source
10534 (origin
10535 (method git-fetch) ;no tests in PyPI archive
10536 (uri (git-reference
10537 (url "https://github.com/python-restx/flask-restx")
10538 (commit version)))
10539 (file-name (git-file-name name version))
10540 (sha256
10541 (base32 "1qmm3i1cdv0bvzsc1gn4ql2dsf1fbx85fk69vcmzpsdxzczmw508"))))
10542 (build-system pyproject-build-system)
10543 (arguments
10544 (list
10545 ;; 1214 passed, 6 skipped, 16 deselected, 3 warnings
10546 #:test-flags
10547 #~(list "--benchmark-skip"
10548 ;; ValueError: http://www.google.com is not a valid URL. Domain
10549 ;; does not exists.
10550 "--deselect=tests/test_inputs.py::URLTest::test_check"
10551 "-k" (string-join
10552 ;; See: <https://github.com/python-restx/flask-restx/issues/620>.
10553 (list "not test_rfc822_value"
10554 "test_iso8601_value"
10555 ;; assert 404 == 2000
10556 "test_specs_endpoint_host_and_subdomain"
10557 ;; ValueError: [email protected] is not a valid email
10558 "test_valid_value_check")
10559 " and not "))))
10560 (native-inputs
10561 (list python-blinker
10562 python-faker
10563 python-pytest
10564 python-pytest-benchmark
10565 python-pytest-flask
10566 python-pytest-mock
10567 python-setuptools))
10568 (propagated-inputs
10569 (list python-aniso8601
10570 python-flask
10571 python-importlib-resources
10572 python-jsonschema
10573 python-pytz
10574 python-werkzeug))
10575 (home-page "https://github.com/python-restx/flask-restx")
10576 (synopsis
10577 "Framework for fast, easy and documented API development with Flask")
10578 (description
10579 "Flask-RESTX is an extension for Flask that adds support for quickly building
10580REST APIs. Flask-RESTX encourages best practices with minimal setup. If you are familiar
10581 with Flask, Flask-RESTX should be easy to pick up. It provides a coherent collection of
10582decorators and tools to describe your API and expose its documentation properly using
10583Swagger.")
10584 (license license:bsd-3)))
10585
10586(define-deprecated-package python-flask-restplus
10587 python-flask-restx)
10588
10589(define-public python-flask-socketio
10590 (package
10591 (name "python-flask-socketio")
10592 (version "5.5.1")
10593 (source
10594 (origin
10595 (method url-fetch)
10596 (uri (pypi-uri "flask_socketio" version))
10597 (sha256
10598 (base32
10599 "1i0yqn39b4v4r2whppx47sg7iicvqzssd1clx7cclk07l52cjinr"))))
10600 (build-system pyproject-build-system)
10601 (propagated-inputs
10602 (list python-flask python-socketio))
10603 (native-inputs
10604 (list python-pytest python-redis python-setuptools python-wheel))
10605 (home-page "https://github.com/miguelgrinberg/Flask-SocketIO/")
10606 (synopsis "Socket.IO integration for Flask applications")
10607 (description "Socket.IO integration for Flask applications")
10608 (license license:expat)))
10609
10610(define-public python-manuel
10611 (package
10612 (name "python-manuel")
10613 (version "1.13.0")
10614 (source
10615 (origin
10616 (method url-fetch)
10617 (uri (pypi-uri "manuel" version))
10618 (sha256
10619 (base32 "0nl8psji3fizbxw34gdg22dndlg9lf5f56mnh1vr4vgsx06i4qsx"))))
10620 (build-system pyproject-build-system)
10621 (arguments
10622 (list
10623 ;; FIXME: Tests are broken, see: <https://github.com/benji-york/manuel/pull/32>.
10624 #:tests? #f))
10625 (propagated-inputs
10626 (list python-setuptools)) ;install requires
10627 (home-page "https://pypi.org/project/manuel/")
10628 (synopsis "Build tested documentation")
10629 (description
10630 "Manuel lets you mix and match traditional doctests with custom test syntax.")
10631 (license license:asl2.0)))
10632
10633(define-public python-pecan
10634 (package
10635 (name "python-pecan")
10636 (version "1.6.1")
10637 (source
10638 (origin
10639 (method git-fetch) ;no tests in pypi release
10640 (uri (git-reference
10641 (url "https://github.com/pecan/pecan")
10642 (commit version)))
10643 (file-name (git-file-name name version))
10644 (sha256
10645 (base32
10646 "1ybjvpws741bvxd7aq5hh8gv5sk9836hb9afgalqsm0lxsq0li3a"))))
10647 (build-system pyproject-build-system)
10648 (arguments
10649 (list
10650 #:test-flags '(list "--pyargs" "pecan")))
10651 (native-inputs
10652 (list gunicorn
10653 python-genshi
10654 python-jinja2
10655 python-pytest
10656 python-sqlalchemy))
10657 (propagated-inputs
10658 (list python-logutils
10659 python-mako
10660 python-six
10661 python-webob
10662 python-webtest))
10663 (home-page "http://github.com/pecan/pecan")
10664 (synopsis "WSGI object-dispatching web framework")
10665 (description "This package provides a WSGI object-dispatching web
10666framework, designed to be lean and fast, with few dependencies.")
10667 (license license:bsd-3)))
10668
10669(define-public python-persistent
10670 (package
10671 (name "python-persistent")
10672 (version "6.1.1")
10673 (source
10674 (origin
10675 (method git-fetch)
10676 (uri (git-reference
10677 (url "https://github.com/zopefoundation/persistent/")
10678 (commit version)))
10679 (file-name (git-file-name name version))
10680 (sha256
10681 (base32 "19qwqg49zql2c8l4vjxjb9haw0bzd6lk8p4v3hip2irch6a4578a"))))
10682 (build-system pyproject-build-system)
10683 (arguments
10684 (list
10685 #:phases
10686 #~(modify-phases %standard-phases
10687 (replace 'check
10688 (lambda* (#:key tests? #:allow-other-keys)
10689 (if tests?
10690 (invoke "zope-testrunner" "--test-path=src"
10691 ;; XXX: Ignore doc tests.
10692 "!persistent.tests.test_docs")
10693 (format #t "test suite not run~%")))))))
10694 (propagated-inputs
10695 (list python-cffi
10696 python-zope-deferredimport
10697 python-zope-interface
10698 python-zope-testrunner))
10699 (native-inputs
10700 (list python-manuel python-zope-testrunner python-setuptools))
10701 (home-page "https://github.com/zopefoundation/persistent/")
10702 (synopsis "Translucent persistent objects")
10703 (description
10704 "This package contains a generic persistence implementation for Python.
10705It forms the core protocol for making objects interact \"transparently\" with
10706a database such as the ZODB.")
10707 (license license:zpl2.1)))
10708
10709(define-public python-btrees
10710 (package
10711 (name "python-btrees")
10712 (version "6.1")
10713 (source
10714 (origin
10715 (method git-fetch)
10716 (uri (git-reference
10717 (url "https://github.com/zopefoundation/BTrees")
10718 (commit version)))
10719 (file-name (git-file-name name version))
10720 (sha256
10721 (base32 "0vcibmd725ddgsl5yzmi8d403day3796h82xlq84w91xbdrbd5d5"))))
10722 (build-system pyproject-build-system)
10723 (arguments
10724 (list
10725 #:phases
10726 #~(modify-phases %standard-phases
10727 (replace 'check
10728 (lambda* (#:key tests? #:allow-other-keys)
10729 (if tests?
10730 (invoke "zope-testrunner" "--test-path=src")
10731 (format #t "test suite not run~%")))))))
10732 (propagated-inputs (list python-persistent python-zope-interface))
10733 (native-inputs (list python-persistent python-transaction
10734 python-zope-testrunner python-setuptools))
10735 (home-page "https://github.com/zopefoundation/BTrees")
10736 (synopsis "Scalable persistent object containers")
10737 (description
10738 "This package contains a set of persistent object containers built around a
10739modified BTree data structure. The trees are optimized for use inside ZODB's
10740\"optimistic concurrency\" paradigm, and include explicit resolution of
10741conflicts detected by that mechanism.")
10742 (license license:zpl2.1)))
10743
10744(define-public python-transaction
10745 (package
10746 (name "python-transaction")
10747 (version "5.0")
10748 (source
10749 (origin
10750 (method url-fetch)
10751 (uri (pypi-uri "transaction" version))
10752 (sha256
10753 (base32 "0x0i5graxb93aa8bwf5rmm9zq7d7r6q2b4pw358wph5whbbpnvhh"))))
10754 (build-system pyproject-build-system)
10755 (native-inputs
10756 (list python-pytest
10757 python-setuptools))
10758 (propagated-inputs
10759 (list python-zope-interface))
10760 (home-page "https://github.com/zopefoundation/transaction")
10761 (synopsis "Transaction management for Python")
10762 (description "This package contains a generic transaction implementation
10763for Python. It is mainly used by the ZODB.")
10764 (license license:zpl2.1)))
10765
10766(define-public python-truststore
10767 (package
10768 (name "python-truststore")
10769 (version "0.10.4")
10770 (source
10771 (origin
10772 (method url-fetch)
10773 (uri (pypi-uri "truststore" version))
10774 (sha256
10775 (base32 "00f3xc7720rkddsn291yrw871kfnimi6d9xbwi75xbb3ci1vv4cx"))))
10776 (build-system pyproject-build-system)
10777 (arguments
10778 (list #:tests? #f)) ;all tests require Internet access
10779 (native-inputs
10780 (list python-flit-core))
10781 (home-page "https://github.com/sethmlarson/truststore")
10782 (synopsis "Verify certificates using native system trust stores")
10783 (description
10784 "Truststore is a library which exposes native system certificate stores (ie
10785\"trust stores\") through an @code{ssl.SSLContext-like} API. This means that
10786Python applications no longer need to rely on certifi as a root certificate
10787store.")
10788 (license license:expat)))
10789
10790(define-public python-robot-detection
10791 (package
10792 (name "python-robot-detection")
10793 (version "0.4")
10794 (source
10795 (origin
10796 (method url-fetch)
10797 (uri (pypi-uri "robot-detection" version))
10798 (sha256
10799 (base32
10800 "1xd2jm3yn31bnk1kqzggils2rxj26ylxsfz3ap7bhr3ilhnbg3rx"))))
10801 (build-system python-build-system)
10802 (arguments '(#:tests? #f)) ; Tests not shipped in pypi release.
10803 (propagated-inputs (list python-six))
10804 (home-page "https://github.com/rory/robot-detection")
10805 (synopsis "Detect web crawlers")
10806 (description
10807 "@code{robot_detection} is a python module to detect if a given HTTP User
10808Agent is a web crawler. It uses the list of registered robots from
10809@url{http://www.robotstxt.org}.")
10810 (license license:gpl3+)))
10811
10812(define-public python-robotframework-requests
10813 (package
10814 (name "python-robotframework-requests")
10815 (version "0.9.7")
10816 (source
10817 (origin
10818 (method git-fetch) ; no tests in PyPI release
10819 (uri (git-reference
10820 (url "https://github.com/MarketSquare/robotframework-requests")
10821 (commit (string-append "v" version))))
10822 (file-name (git-file-name name version))
10823 (sha256
10824 (base32 "077j8p5k41v53slyv8h32fcmqfi7m6z3r4gmyqqaawm5szfmy61m"))))
10825 (build-system pyproject-build-system)
10826 (native-inputs
10827 (list python-pytest
10828 python-setuptools
10829 python-wheel))
10830 (propagated-inputs
10831 (list python-requests
10832 python-robotframework))
10833 (home-page "https://github.com/MarketSquare/robotframework-requests")
10834 (synopsis "Robot Framework keyword library wrapper around requests")
10835 (description
10836 "@code{RequestsLibrary} is a @url{https://robotframework.org/, Robot
10837Framework} library aimed to provide HTTP API testing functionalities by
10838wrapping the @code{requests} Python library.")
10839 (license license:expat)))
10840
10841(define-public python-pysolr
10842 (package
10843 (name "python-pysolr")
10844 (version "3.10.0")
10845 (source
10846 (origin
10847 (method url-fetch)
10848 (uri (pypi-uri "pysolr" version))
10849 (sha256
10850 (base32 "02gl1sma5cnpd7srpri1g68lpsg3s5n3lr462p5ll8v9s4nllyqj"))))
10851 (build-system pyproject-build-system)
10852 (arguments
10853 '(#:tests? #f)) ; Tests require network access.
10854 (native-inputs
10855 (list python-setuptools
10856 python-setuptools-scm
10857 python-wheel))
10858 (propagated-inputs
10859 (list python-requests))
10860 (home-page "https://github.com/django-haystack/pysolr/")
10861 (synopsis "Lightweight python wrapper for Apache Solr")
10862 (description
10863 "This module provides an interface that queries the Apache Solr server
10864using a pure Python implementation.")
10865 (license license:bsd-3)))
10866
10867(define-public python-pyjsparser
10868 ;; XXX: This project is potentially abandonware, consider to remove in next
10869 ;; refresh cycle, see:
10870 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/28>,
10871 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/39>, and
10872 ;; <https://github.com/PiotrDabkowski/pyjsparser/issues/40>.
10873 (package
10874 (name "python-pyjsparser")
10875 (version "2.7.1")
10876 (source
10877 (origin
10878 (method url-fetch)
10879 (uri (pypi-uri "pyjsparser" version))
10880 (sha256
10881 (base32 "0ycmf9fsvwliqmm1n6sfz7x71y7i2kbfgn39d8lsbiccfxmxlq5y"))))
10882 (build-system pyproject-build-system)
10883 (arguments
10884 '(#:tests? #f)) ;no tests in PyPI
10885 (native-inputs (list python-setuptools))
10886 (home-page "https://github.com/PiotrDabkowski/pyjsparser")
10887 (synopsis "Fast JavaScript parser")
10888 (description
10889 "This package provides a fast JavaScript parser (based on esprima.js)")
10890 (license license:expat)))
10891
10892(define-public python-js2py
10893 (package
10894 (name "python-js2py")
10895 (version "0.74")
10896 (source
10897 (origin
10898 (method url-fetch)
10899 (uri (pypi-uri "Js2Py" version))
10900 (sha256
10901 (base32 "0bwpp23qpx9amzqisiqvzlr17hr7vxqp4ry8lgxhw639hjmadwrr"))))
10902 (build-system pyproject-build-system)
10903 (arguments
10904 (list #:tests? #f)) ; tests require Node
10905 (native-inputs
10906 (list python-setuptools))
10907 (propagated-inputs
10908 (list python-pyjsparser
10909 python-six
10910 python-tzlocal))
10911 (home-page "https://github.com/PiotrDabkowski/Js2Py")
10912 (synopsis "JavaScript to Python translator")
10913 (description
10914 "This package provides a JavaScript to Python translator and a JavaScript
10915interpreter written in pure Python.")
10916 (license license:expat)))
10917
10918(define-public python-http-ece
10919 (package
10920 (name "python-http-ece")
10921 (version "1.2.0")
10922 (source
10923 (origin
10924 (method git-fetch)
10925 (uri (git-reference
10926 (url "https://github.com/web-push-libs/encrypted-content-encoding")
10927 (commit (string-append "v" version))))
10928 (file-name (git-file-name name version))
10929 (sha256
10930 (base32
10931 "11v9cpmx4jc0nk25af96plzjz3mg1ysm1m001nx6jns06hil1gpy"))))
10932 (build-system python-build-system)
10933 (arguments
10934 `(#:phases
10935 (modify-phases %standard-phases
10936 (add-after 'unpack 'change-directory
10937 (lambda _ (chdir "python") #t)))))
10938 (propagated-inputs
10939 (list python-cryptography))
10940 (native-inputs
10941 (list python-coverage python-flake8 python-mock python-nose))
10942 (home-page "https://github.com/web-push-libs/encrypted-content-encoding")
10943 (synopsis "Encrypted Content Encoding for HTTP")
10944 (description
10945 "This package provides a simple implementation of Encrypted Content
10946Encoding for HTTP.")
10947 (license license:expat)))
10948
10949(define-public python-cloud-init
10950 (package
10951 (name "python-cloud-init")
10952 (version "24.2")
10953 (source
10954 (origin
10955 (method git-fetch)
10956 (uri (git-reference
10957 (url "https://github.com/canonical/cloud-init")
10958 (commit version)))
10959 (file-name (git-file-name name version))
10960 (sha256
10961 (base32 "18872z2y9wkh558y1bx5r0rksb4i584jbc8z4g8marwawhwxq506"))))
10962 (build-system pyproject-build-system)
10963 (arguments
10964 (list
10965 #:test-flags
10966 '(list
10967 ;; This requires usermod
10968 "--ignore=tests/unittests/distros/test_create_users.py"
10969 ;; This writes to /var
10970 "--ignore=tests/unittests/net/test_dhcp.py"
10971 "-k"
10972 (string-append
10973 ;; This test messes with PATH, so it cannot find mkdir
10974 "not test_path_env_gets_set_from_main"
10975 " and not test_apt_configure_sources_list_"
10976 ;; These all fail because /bin/sh doesn't exist. We cannot patch
10977 ;; this because the generated scripts must use /bin/sh as they are
10978 ;; supposed to be run on minimal systems.
10979 " and not test_handler_creates_and_runs_bootcmd_script_with_instance_id"
10980 " and not test_handler_runs_bootcmd_script_with_error"
10981 " and not test_subp_combined_stderr_stdout"
10982 " and not test_handle_part"))
10983 #:phases
10984 #~(modify-phases %standard-phases
10985 (add-after 'unpack 'patch-references
10986 (lambda _
10987 (substitute* "tests/unittests/cmd/test_clean.py"
10988 (("#!/bin/sh") (string-append "#!" (which "sh"))))))
10989 (add-after 'install 'move-files
10990 (lambda* (#:key inputs outputs #:allow-other-keys)
10991 (for-each (lambda (dir)
10992 (let ((source (string-append (site-packages inputs outputs) "/" dir))
10993 (target (string-append #$output "/" (basename dir))))
10994 (copy-recursively source target)
10995 (delete-file-recursively source)))
10996 (list "etc" "lib" "usr/lib" "usr/share")))))))
10997 (propagated-inputs
10998 (list python-configobj
10999 python-jinja2
11000 python-jsonpatch
11001 python-jsonschema
11002 python-netifaces
11003 python-oauthlib
11004 python-pyserial
11005 python-pyyaml
11006 python-responses))
11007 (native-inputs
11008 (list procps ;for ps when running tests
11009 python-pytest
11010 python-pytest-cov
11011 python-pytest-mock
11012 python-passlib
11013 python-setuptools
11014 python-wheel))
11015 (home-page "https://github.com/canonical/cloud-init")
11016 (synopsis "Cloud instance initialization tools")
11017 (description
11018 "Cloud-init is the multi-distribution method for cross-platform cloud
11019instance initialization. It is supported across all major public cloud
11020providers, provisioning systems for private cloud infrastructure, and
11021bare-metal installations.")
11022 ;; Either license can be chosen
11023 (license (list license:asl2.0 license:gpl3))))
11024
11025(define-public python-cloudscraper
11026 (package
11027 (name "python-cloudscraper")
11028 (version "1.2.60")
11029 (source
11030 (origin
11031 (method git-fetch)
11032 (uri (git-reference
11033 (url "https://github.com/VeNoMouS/cloudscraper")
11034 (commit version)))
11035 (file-name (git-file-name name version))
11036 (sha256
11037 (base32 "00cmxgwdm0x1j4a4ipwvpzih735hdzidljbijk1b3laj3dgvnvsm"))
11038 (modules '((guix build utils)))
11039 (snippet
11040 '(with-directory-excursion "cloudscraper"
11041 (for-each delete-file
11042 '("captcha/9kw.py"
11043 "captcha/anticaptcha.py"))
11044 (substitute* "__init__.py"
11045 ;; Perhaps it's a joke, but don't promote proprietary software.
11046 (("([Th]is feature is not available) in the .*'" _ prefix)
11047 (string-append prefix ".'")))))))
11048 (build-system python-build-system)
11049 (arguments
11050 `(#:phases
11051 (modify-phases %standard-phases
11052 ;; XXX: Dependencies, that have not yet been packaged
11053 ;; and cause an import error when included.
11054 (add-after 'unpack 'drop-unsupported-sources
11055 (lambda _
11056 (with-directory-excursion "cloudscraper"
11057 (for-each delete-file
11058 '("interpreters/v8.py")))))
11059 (add-after 'unpack 'fix-references
11060 (lambda _
11061 (substitute* "cloudscraper/interpreters/nodejs.py"
11062 (("'node'")
11063 (string-append "'" (which "node") "'")))))
11064 (replace 'check
11065 (lambda* (#:key tests? #:allow-other-keys)
11066 (when tests?
11067 (invoke "pytest" "-vv"
11068 "-k" "not test_getCookieString_challenge_js_challenge1_16_05_2020")))))))
11069 (inputs
11070 (list node-lts))
11071 (propagated-inputs
11072 (list python-js2py
11073 python-polling2
11074 python-requests
11075 python-requests-toolbelt
11076 python-responses
11077 python-pyparsing))
11078 (native-inputs
11079 (list python-pytest))
11080 (home-page "https://github.com/venomous/cloudscraper")
11081 (synopsis "Cloudflare anti-bot bypass")
11082 (description
11083 "This module acts as a webbrowser solving Cloudflare's Javascript
11084challenges.")
11085 (license license:expat)))
11086
11087(define-public python-imap-tools
11088 (package
11089 (name "python-imap-tools")
11090 (version "1.9.0")
11091 (source
11092 (origin
11093 (method git-fetch) ; no tests in PyPI release
11094 (uri (git-reference
11095 (url "https://github.com/ikvk/imap_tools")
11096 (commit (string-append "v" version))))
11097 (file-name (git-file-name name version))
11098 (sha256
11099 (base32 "0iawc6shxn8p0ysiqiahfic5rp1r16f7rfn11c8y2fl8falckynr"))))
11100 (arguments
11101 (list
11102 #:test-flags
11103 ;; Tests require a network connection
11104 #~(list "-k" (string-append "not test_action"
11105 " and not test_attributes"
11106 " and not test_connection"
11107 " and not test_folders"
11108 " and not test_idle"
11109 " and not test_live"))))
11110 (build-system pyproject-build-system)
11111 (native-inputs
11112 (list python-pytest python-setuptools python-wheel))
11113 (home-page "https://github.com/ikvk/imap_tools")
11114 (synopsis "Work with email and mailbox by IMAP")
11115 (description
11116 "This Python library provides tools to deal with email and mailboxes
11117over IMAP:
11118
11119@itemize
11120@item Parsed email message attributes
11121@item Query builder for searching emails
11122@item Work with emails in folders (copy, delete, flag, move, seen)
11123@item Work with mailbox folders (list, set, get, create, exists, rename, delete, status)
11124@end itemize")
11125 (license license:asl2.0)))
11126
11127(define-public python-giturlparse
11128 (package
11129 (name "python-giturlparse")
11130 (version "0.12.0")
11131 (source
11132 (origin
11133 (method git-fetch)
11134 (uri (git-reference
11135 (url "https://github.com/nephila/giturlparse")
11136 (commit version)))
11137 (file-name (git-file-name name version))
11138 (sha256
11139 (base32 "1fdbxp176p17sn5xc1418mz2vk00hlcsd5qmi2fdcfphqal6raan"))))
11140 (build-system pyproject-build-system)
11141 (native-inputs (list python-pytest python-setuptools))
11142 (home-page "https://github.com/nephila/giturlparse")
11143 (synopsis "Git URL parsing module")
11144 (description
11145 "This package provides a git URL parsing module which supports parsing
11146and rewriting of remote git URLs from various hosting providers.")
11147 (license license:asl2.0)))
11148
11149(define-public python-hstspreload
11150 (package
11151 (name "python-hstspreload")
11152 (version "2025.1.1")
11153 (source
11154 (origin
11155 (method git-fetch)
11156 (uri (git-reference
11157 (url "https://github.com/sethmlarson/hstspreload")
11158 (commit version)))
11159 (file-name (git-file-name name version))
11160 (sha256
11161 (base32 "02mdzhgdz3sprgc26qb084zy639h2zw2yc8d2vm1r18ap9k51ayq"))))
11162 (build-system pyproject-build-system)
11163 (arguments (list #:tests? #f)) ; tests require external resources.
11164 (native-inputs (list python-setuptools))
11165 (home-page "https://github.com/sethmlarson/hstspreload")
11166 (synopsis "Chromium HSTS Preload list as a Python package")
11167 (description
11168 "@code{python-hstspreload} contains Chromium HSTS Preload list
11169as a Python package.")
11170 (license license:bsd-3)))
11171
11172(define-public python-sanic-routing
11173 (package
11174 (name "python-sanic-routing")
11175 (version "23.12.0")
11176 (source
11177 (origin
11178 (method url-fetch)
11179 (uri (pypi-uri "sanic-routing" version))
11180 (sha256
11181 (base32 "014bhkharcgyprdvlk7wjxhjp1pr0cva1nwj4f2qrr23qiidrjhx"))))
11182 (build-system pyproject-build-system)
11183 (arguments
11184 ;; PyPi sources does not contain tests, recursive dependency on
11185 ;; python-sanic.
11186 (list #:tests? #f))
11187 (native-inputs (list python-setuptools python-wheel))
11188 (home-page "https://github.com/sanic-org/sanic-routing/")
11189 (synopsis "Routing component for Sanic")
11190 (description "Internal package for @code{python-sanic}, which provides
11191the @code{BasicRouter}.")
11192 (license license:expat)))
11193
11194(define-public python-sanic-testing
11195 (package
11196 (name "python-sanic-testing")
11197 (version "23.12.0")
11198 (source
11199 (origin
11200 (method url-fetch)
11201 (uri (pypi-uri "sanic-testing" version))
11202 (sha256
11203 (base32 "0gqkzv90sbj9rw7yfly9c58lq9dq30g5hhcgjl3ihzjb66vm571b"))))
11204 (build-system pyproject-build-system)
11205 (arguments
11206 ;; PyPi sources does not contain tests, recursive dependency on
11207 ;; python-sanic.
11208 (list #:tests? #f))
11209 (propagated-inputs (list python-httpx python-sanic-bootstrap))
11210 (native-inputs (list python-setuptools python-wheel))
11211 (home-page "https://github.com/sanic-org/sanic-testing/")
11212 (synopsis "Test clients for Sanic")
11213 (description "Internal package for @code{python-sanic}, which is
11214meant to be the core testing utility and clients for testing Sanic
11215applications.")
11216 (license license:expat)))
11217
11218(define-public python-sanic
11219 (package
11220 (name "python-sanic")
11221 (version "25.3.0")
11222 (source
11223 (origin
11224 (method url-fetch)
11225 (uri (pypi-uri "sanic" version))
11226 (sha256
11227 (base32 "1fv9wgsj54scbr7qhmwdgc4zqnqpwacpakcfxhsg10gc04h54pbp"))
11228 ;; Loosen requirements for both python-sanic and python-sanic-bootstrap.
11229 (modules '((guix build utils)))
11230 (snippet #~(substitute* "setup.py"
11231 (("setuptools>=[0-9.]*")
11232 "setuptools")))))
11233 (build-system pyproject-build-system)
11234 (arguments
11235 (list
11236 #:test-flags
11237 #~(list "--asyncio-mode=auto"
11238 "--ignore=tests/benchmark/"
11239 "--ignore=tests/typing/test_typing.py"
11240 ;; Most tests hang or fail
11241 "--ignore=tests/test_cli.py"
11242 "--ignore=tests/worker/test_worker_serve.py"
11243 "-k"
11244 (string-append
11245 ;; PyPi sources lack examples module.
11246 "not test_gunicorn_"
11247 ;; Does not expect brotli and reordered headers.
11248 " and not test_raw_headers"
11249 ;; These look like buggy testcases.
11250 " and not test_zero_downtime"
11251 " and not test_non_default_uvloop_config_raises_warning"
11252 " and not test_listeners_triggered"
11253 " and not test_keep_alive_connection_context"
11254 " and not test_keep_alive_client_timeout"
11255 " and not test_conflicting_body_methods_overload"
11256 " and not test_unix_connection"
11257 ;; Unclear why they fail since core-updates merge.
11258 " and not test_missing_sni"
11259 " and not test_no_matching_cert"
11260 " and not test_wildcards"
11261 ;; These tests fail because subprotocols appear to be
11262 ;; parameterized as None
11263 " and not test_websocket_route_with_subprotocols"
11264 ;; AF_UNIX path too long
11265 " and not test_setup_and_teardown_unix"
11266 " and not test_configure_socket"
11267 ;; Freezes
11268 " and not test_server_run_with_repl"
11269 " and not test_server_run"
11270 " and not test_no_workers"))))
11271 (propagated-inputs
11272 (list python-aiofiles
11273 python-aioquic
11274 python-html5tagger
11275 python-httptools
11276 python-multidict
11277 python-sanic-routing
11278 python-tracerite
11279 python-typing-extensions
11280 python-ujson
11281 python-uvloop
11282 python-websockets))
11283 (native-inputs
11284 (list python-beautifulsoup4
11285 python-chardet
11286 python-cryptography
11287 python-docutils
11288 python-mypy
11289 python-pygments
11290 python-pytest
11291 python-pytest-asyncio
11292 python-pytest-benchmark
11293 python-pytest-sanic
11294 python-sanic-testing
11295 python-setuptools
11296 python-slotscheck
11297 python-towncrier
11298 python-types-ujson
11299 python-uvicorn
11300 python-wheel))
11301 (home-page "https://github.com/sanic-org/sanic/")
11302 (synopsis "Async Python web server/framework")
11303 (description
11304 "Sanic is a Python web server and web framework that's written to go
11305fast. It allows the usage of the @code{async/await} syntax added in Python
113063.5, which makes your code non-blocking and speedy.")
11307 (license license:expat)))
11308
11309(define-public python-sanic-bootstrap
11310 (package
11311 (inherit python-sanic)
11312 (name "python-sanic-bootstrap")
11313 (arguments (list #:tests? #f))
11314 (native-inputs (list python-setuptools python-wheel))))
11315
11316(define-public python-socketio
11317 (package
11318 (name "python-socketio")
11319 (version "5.12.1")
11320 (source
11321 (origin
11322 (method url-fetch)
11323 (uri (pypi-uri "python_socketio" version))
11324 (sha256
11325 (base32
11326 "175sd3fdld3s477i6b3v49yhf1alsbm1vaxzq44nqrqb8wgzz682"))))
11327 (build-system pyproject-build-system)
11328 (arguments
11329 (list #:test-flags
11330 '(list "--timeout=60"
11331 ;; These tests freeze.
11332 "--ignore-glob=tests/async/*")))
11333 (propagated-inputs
11334 (list python-bidict python-engineio python-msgpack))
11335 (native-inputs
11336 (list python-pytest
11337 python-pytest-asyncio
11338 python-pytest-timeout
11339 python-setuptools
11340 python-uvicorn
11341 python-wheel))
11342 (home-page "https://github.com/miguelgrinberg/python-socketio/")
11343 (synopsis "Python Socket.IO server")
11344 (description
11345 "This package provides a Python implementation of the @code{Socket.IO}
11346realtime client and server.")
11347 (license license:expat)))
11348
11349(define-public python-socks
11350 (package
11351 (name "python-socks")
11352 (version "2.7.2")
11353 (source
11354 (origin
11355 (method git-fetch)
11356 (uri (git-reference
11357 (url "https://github.com/romis2012/python-socks")
11358 (commit (string-append "v" version))))
11359 (file-name (git-file-name name version))
11360 (sha256
11361 (base32 "1alrfjkir69006qmr2ax3inrffk2bllpljwmprwczb44r0mya77m"))))
11362 (build-system pyproject-build-system)
11363 (propagated-inputs (list python-trio))
11364 (native-inputs
11365 (list python-anyio
11366 python-async-timeout
11367 python-flask
11368 python-pytest
11369 python-pytest-asyncio
11370 python-pytest-trio
11371 python-setuptools
11372 python-tiny-proxy
11373 python-trustme
11374 python-yarl))
11375 (home-page "https://github.com/romis2012/python-socks")
11376 (synopsis
11377 "Core proxy (SOCKS4, SOCKS5, HTTP tunneling) functionality for Python")
11378 (description
11379 "Socks is a library providing core proxy (SOCKS4, SOCKS5, HTTP tunneling)
11380 functionality.")
11381 (license license:asl2.0)))
11382
11383(define-public python-socksio
11384 (package
11385 (name "python-socksio")
11386 (version "1.0.0")
11387 (source
11388 (origin
11389 (method url-fetch)
11390 (uri (pypi-uri "socksio" version))
11391 (sha256
11392 (base32 "1b64j45w35jzhjhnq44bnyad9ydh1iyyd7a6j2c8phxmllyyp2zq"))))
11393 (build-system pyproject-build-system)
11394 (native-inputs
11395 (list python-flit-core
11396 python-pytest
11397 python-pytest-cov))
11398 (home-page "https://github.com/sethmlarson/socksio")
11399 (synopsis "Sans-I/O implementation of SOCKS4, SOCKS4A, and SOCKS5")
11400 (description "The @code{socksio} Python module is a client-side sans-I/O
11401SOCKS proxy implementation. It supports SOCKS4, SOCKS4A, and SOCKS5.
11402@code{socksio} is a sans-I/O library similar to @code{h11} or @code{h2}; this
11403means the library itself does not handle the actual sending of the bytes
11404through the network, it only deals with the implementation details of the
11405SOCKS protocols. It can be paired with any I/O library.")
11406 (license license:expat)))
11407
11408(define-public python-simple-websocket
11409 (package
11410 (name "python-simple-websocket")
11411 (version "1.1.0")
11412 (source
11413 (origin
11414 (method url-fetch)
11415 (uri (pypi-uri "simple_websocket" version))
11416 (sha256
11417 (base32 "1r1all55d5dimiw3qwdhj53cxj9yjgnskcysmcscarx0g9726fbr"))))
11418 (build-system pyproject-build-system)
11419 (arguments
11420 ;; Requires Internet access to resolve example.com
11421 (list #:test-flags '(list "--ignore=tests/test_client.py")))
11422 (propagated-inputs (list python-wsproto))
11423 (native-inputs (list python-pytest
11424 python-setuptools))
11425 (home-page "https://github.com/miguelgrinberg/simple-websocket")
11426 (synopsis "Simple WebSocket server and client for Python")
11427 (description "This package provides a simple @code{WebSocket} server and
11428client for Python.")
11429 (license license:expat)))
11430
11431(define-public python-siosocks
11432 (package
11433 (name "python-siosocks")
11434 (version "0.3.0")
11435 (source (origin
11436 (method url-fetch)
11437 (uri (pypi-uri "siosocks" version))
11438 (sha256
11439 (base32
11440 "0qqxy8wl5mrmlkblzjq9nsg0cbm5jwgj409mhnhq6gd1ypvbndms"))))
11441 (build-system python-build-system)
11442 (arguments
11443 (list #:phases #~(modify-phases %standard-phases
11444 (replace 'check
11445 (lambda* (#:key tests? #:allow-other-keys)
11446 (when tests?
11447 (invoke "pytest" "-vvv")))))))
11448 (native-inputs (list python-pytest python-pytest-asyncio python-pytest-cov
11449 python-pytest-trio))
11450 (propagated-inputs (list python-trio))
11451 (home-page "https://github.com/pohmelie/siosocks")
11452 (synopsis "SOCKSv4 & SOCKSv5 TCP proxy protocol implementation in Python")
11453 (description
11454 "This package provides a Python module and framework for sans-io socks proxy
11455client/server with couple io backends.
11456
11457Features:
11458@itemize
11459@item Only TCP connect (no BIND, no UDP)
11460@item Both client and server
11461@item SOCKS versions: 4, 4a, 5
11462@item SOCKSv5 auth: no auth, username/password
11463@item Couple io backends: @code{asyncio}, @code{trio}, @code{socketserver}
11464@item One-shot socks server (@code{python -m siosocks})
11465@end itemize")
11466 (license license:expat)))
11467
11468(define-public python-tiny-proxy
11469 (package
11470 (name "python-tiny-proxy")
11471 (version "0.2.1")
11472 (source
11473 (origin
11474 (method url-fetch)
11475 (uri (pypi-uri "tiny_proxy" version))
11476 (sha256
11477 (base32 "05nq62fn3p7s1a6dkdvnrzmk39d9ddrzb3pqbbli025qs3m9j1bq"))))
11478 (build-system pyproject-build-system)
11479 ;; There are only a handful of tests and they require the as yet
11480 ;; unpackaged httpx_socks.
11481 (arguments (list #:tests? #false))
11482 (propagated-inputs (list python-anyio))
11483 (native-inputs
11484 (list python-httpx
11485 python-pytest
11486 python-setuptools
11487 python-wheel))
11488 (home-page "https://github.com/romis2012/tiny-proxy")
11489 (synopsis "Simple proxy server (SOCKS4(a), SOCKS5(h), HTTP tunnel)")
11490 (description "This package provides a simple proxy server (SOCKS4(a),
11491SOCKS5(h), HTTP tunnel).")
11492 (license license:asl2.0)))
11493
11494(define-public python-azure-nspkg
11495 (package
11496 (name "python-azure-nspkg")
11497 (version "3.0.2")
11498 (source
11499 (origin
11500 (method url-fetch)
11501 (uri (pypi-uri "azure-nspkg" version ".zip"))
11502 (sha256
11503 (base32
11504 "1l4xwdh0fcnvrv0mzig4g2kgqkfbsy64zjm1ggc6grk3mykcxlz7"))))
11505 (build-system python-build-system)
11506 (native-inputs (list unzip))
11507 (home-page "https://github.com/Azure/azure-sdk-for-python")
11508 (synopsis "Azure namespace internals")
11509 (description
11510 "This package is an internal Azure namespace package.")
11511 (license license:expat)))
11512
11513(define-public python-azure-storage-nspkg
11514 (package
11515 (name "python-azure-storage-nspkg")
11516 (version "3.1.0")
11517 (source
11518 (origin
11519 (method url-fetch)
11520 (uri (pypi-uri "azure-storage-nspkg" version))
11521 (sha256
11522 (base32 "049qcmgshz7dj9yaqma0fwcgbxwddgwyfcw4gmv45xfmaa3bwfvg"))))
11523 (build-system pyproject-build-system)
11524 (arguments
11525 (list #:tests? #f)) ;no tests in PyPI archive
11526 (native-inputs (list python-setuptools))
11527 (propagated-inputs (list python-azure-nspkg))
11528 (home-page "https://github.com/Azure/azure-storage-python")
11529 (synopsis "Microsoft Azure Storage Namespace package")
11530 (description
11531 "This project provides a client library in Python that makes it easy to
11532communicate with Microsoft Azure Storage services.")
11533 (license license:expat)))
11534
11535(define-public python-azure-common
11536 (package
11537 (name "python-azure-common")
11538 (version "1.1.28")
11539 (source
11540 (origin
11541 (method url-fetch)
11542 (uri (pypi-uri "azure-common" version ".zip"))
11543 (sha256
11544 (base32 "18q4cy1xl2zly3rk7a1sc14w932x59r8c9j4d8dnlsz32hrcvh2a"))))
11545 (build-system python-build-system)
11546 (propagated-inputs (list python-azure-nspkg))
11547 (native-inputs (list unzip))
11548 (home-page "https://github.com/Azure/azure-sdk-for-python")
11549 (synopsis "Microsoft Azure Client library for Python")
11550 (description "This package provides the Microsoft Azure Client library for
11551Python.")
11552 (license license:expat)))
11553
11554(define-public python-azure-core
11555 (package
11556 (name "python-azure-core")
11557 (version "1.32.0")
11558 (source
11559 (origin
11560 (method url-fetch)
11561 (uri (pypi-uri "azure_core" version))
11562 (sha256
11563 (base32 "1r9hqyqr5fxiiai0irr0n98gwgzj5f8y46vc1yci9bidddfw7cr2"))))
11564 (build-system pyproject-build-system)
11565 (arguments
11566 (list
11567 #:test-flags
11568 `(list ;; This fails because devtools_testutils doesn't exist.
11569 "--ignore=tests/test_connection_string_parsing.py"
11570 ;; These all need network access.
11571 "--ignore=samples"
11572 "--ignore=tests/async_tests/test_streaming_async.py"
11573 "--ignore=tests/test_streaming.py"
11574 "-m" "not asyncio and not live_test_only"
11575 "-k" ,(string-append
11576 "not test_decompress_plain_no_header"
11577 " and not test_compress_plain_no_header"
11578 " and not test_decompress_compressed_no_header"
11579 " and not test_requests_socket_timeout"))
11580 #:phases
11581 #~(modify-phases %standard-phases
11582 (add-before 'check 'add-test-pythonpath
11583 (lambda* (#:key tests? #:allow-other-keys)
11584 (when tests?
11585 (setenv "PYTHONPATH"
11586 (string-append
11587 (getcwd) "/tests/testserver_tests/coretestserver:"
11588 (getenv "GUIX_PYTHONPATH")))))))))
11589 (propagated-inputs
11590 (list python-aiohttp
11591 python-requests
11592 python-six
11593 python-typing-extensions))
11594 (native-inputs
11595 (list python-flask
11596 python-pytest
11597 python-pytest-aiohttp
11598 python-pytest-asyncio
11599 python-pytest-trio
11600 python-setuptools
11601 python-wheel))
11602 (home-page "https://github.com/Azure/azure-sdk-for-python")
11603 (synopsis "Microsoft Azure Core library for Python")
11604 (description "This package provides the Microsoft Azure Core library for
11605Python.")
11606 (license license:expat)))
11607
11608(define-public python-azure-storage-blob
11609 (package
11610 (name "python-azure-storage-blob")
11611 (version "12.27.0")
11612 (source
11613 (origin
11614 (method url-fetch)
11615 (uri (pypi-uri "azure_storage_blob" version))
11616 (sha256
11617 (base32 "16nb17f6bi0k53qlxybwqxdld3nj742hmsk4qcq3jwka5b6y5s4r"))))
11618 (build-system pyproject-build-system)
11619 (arguments
11620 ;; XXX: devtools_testutils is not provided as a proper package on PyPI,
11621 ;; Git does not contains setup.py, setup.cfg or pyproject.toml which makes
11622 ;; it hard to package in Guix.
11623 ;; <https://raw.githubusercontent.com/Azure/azure-sdk-for-python/refs/
11624 ;; heads/main/tools/azure-sdk-tools/devtools_testutils/README.md>.
11625 (list #:tests? #f))
11626 (native-inputs
11627 (list python-setuptools))
11628 (propagated-inputs
11629 (list python-azure-core
11630 python-cryptography
11631 python-isodate
11632 python-typing-extensions))
11633 (home-page "https://github.com/Azure/azure-sdk-for-python/")
11634 (synopsis "Microsoft Azure Blob Storage client library for Python")
11635 (description "This package provides the Microsoft Azure Blob Storage
11636Client Library for Python.")
11637 (license license:expat)))
11638
11639(define-public python-azure-storage-file-datalake
11640 (package
11641 (name "python-azure-storage-file-datalake")
11642 (version "12.22.0")
11643 (source
11644 (origin
11645 (method url-fetch)
11646 (uri (pypi-uri "azure_storage_file_datalake" version))
11647 (sha256
11648 (base32 "0xxg94684b630p8jrz38sg7mdcwp1wa0p5di27mswyrjycshvvcs"))))
11649 (build-system pyproject-build-system)
11650 (arguments
11651 ;; XXX: devtools_testutils is not provided as a proper package on PyPI,
11652 ;; Git does not contains setup.py, setup.cfg or pyproject.toml which makes
11653 ;; it hard to package in Guix.
11654 ;; <https://raw.githubusercontent.com/Azure/azure-sdk-for-python/refs/
11655 ;; heads/main/tools/azure-sdk-tools/devtools_testutils/README.md>.
11656 (list #:tests? #f))
11657 (native-inputs
11658 (list python-setuptools))
11659 (propagated-inputs
11660 (list python-azure-core
11661 python-azure-storage-blob
11662 python-isodate
11663 python-typing-extensions))
11664 (home-page "https://github.com/Azure/azure-sdk-for-python")
11665 (synopsis "Microsoft Azure File DataLake Storage Client Library for Python")
11666 (description
11667 "This package provides the Microsoft Azure File @code{DataLake} Storage
11668Client Library for Python.")
11669 (license license:expat)))
11670
11671(define-public python-google-auth
11672 (package
11673 (name "python-google-auth")
11674 (version "2.40.3")
11675 (source
11676 (origin
11677 (method url-fetch)
11678 (uri (pypi-uri "google_auth" version))
11679 (sha256
11680 (base32 "0xrvsqrqx89zkf13gjp328j2y5cfhl88sjzjkkm3dszdmllkl32h"))))
11681 (build-system pyproject-build-system)
11682 (arguments
11683 (list
11684 #:test-flags
11685 ;; This one test uses crypto.sign with an outdated calling convention.
11686 '(list "--ignore=tests/transport/test__mtls_helper.py")))
11687 (propagated-inputs
11688 (list python-cachetools-5
11689 python-pyasn1-modules
11690 python-pyjwt
11691 python-rsa))
11692 (native-inputs
11693 (list nss-certs-for-test
11694 python-aioresponses
11695 python-cryptography
11696 python-flask
11697 python-freezegun
11698 python-mock
11699 python-pyopenssl
11700 python-pytest
11701 python-pytest-asyncio
11702 python-pytest-localserver
11703 python-pyu2f
11704 python-requests
11705 python-responses
11706 python-setuptools
11707 python-wheel))
11708 (home-page "https://github.com/googleapis/google-auth-library-python")
11709 (synopsis "Google Authentication Library")
11710 (description "This library simplifies using Google's various
11711server-to-server authentication mechanisms to access Google APIs.")
11712 (license license:asl2.0)))
11713
11714(define-public python-google-resumable-media
11715 (package
11716 (name "python-google-resumable-media")
11717 (version "2.3.2")
11718 (source
11719 (origin
11720 (method url-fetch)
11721 (uri (pypi-uri "google-resumable-media" version))
11722 (sha256
11723 (base32 "04qm6rd4mpbbym8ci5xrb6fymc3mmm8x2z9f43q5iwbr3s5lx4h6"))))
11724 (build-system python-build-system)
11725 (arguments
11726 `(#:phases
11727 (modify-phases %standard-phases
11728 (replace 'check
11729 (lambda* (#:key tests? #:allow-other-keys)
11730 (when tests?
11731 ;; The system tests fail to find test_utils.retry.
11732 (delete-file-recursively "tests/system/")
11733 (invoke "pytest")))))))
11734 (propagated-inputs (list python-google-crc32c))
11735 (native-inputs
11736 (list python-google-auth
11737 python-mock
11738 python-pytest
11739 python-requests
11740 python-test-utils))
11741 (home-page "https://github.com/googleapis/google-resumable-media-python")
11742 (synopsis "Utilities for Google Media Downloads and Resumable Uploads")
11743 (description "This package provides utilities for Google Media Downloads
11744and Resumable Uploads.")
11745 (license license:asl2.0)))
11746
11747(define-public python-googleapis-common-protos
11748 (package
11749 (name "python-googleapis-common-protos")
11750 (version "1.56.4")
11751 (source
11752 (origin
11753 (method url-fetch)
11754 (uri (pypi-uri "googleapis-common-protos" version))
11755 (sha256
11756 (base32 "05s4dszqd5pjwjh4bdic40v1v447k0a3dynsrgypqf3rfb276n62"))))
11757 (build-system python-build-system)
11758 (arguments
11759 `(#:phases
11760 (modify-phases %standard-phases
11761 (replace 'check
11762 (lambda* (#:key tests? #:allow-other-keys)
11763 (when tests?
11764 (invoke "pytest")))))))
11765 (propagated-inputs (list python-protobuf))
11766 (native-inputs
11767 (list python-pytest))
11768 (home-page "https://github.com/googleapis/python-api-common-protos")
11769 (synopsis "Common protobufs used in Google APIs")
11770 (description "This package contains Python classes generated from the
11771common protos in the @code{googleapis/api-common-protos} repository.")
11772 (license license:asl2.0)))
11773
11774(define-public python-google-api-core
11775 (package
11776 (name "python-google-api-core")
11777 (version "2.7.3")
11778 (source
11779 (origin
11780 (method url-fetch)
11781 (uri (pypi-uri "google-api-core" version))
11782 (sha256
11783 (base32 "0ydwvg9gzp75cd11s62db5w3jhj643yrw095rv95psfb0h3pz58p"))))
11784 (build-system python-build-system)
11785 (arguments
11786 `(#:phases
11787 (modify-phases %standard-phases
11788 (replace 'check
11789 (lambda* (#:key tests? #:allow-other-keys)
11790 (when tests?
11791 ;; These don't work because it doesn't find AsyncMock even when
11792 ;; we add it to the inputs.
11793 (for-each delete-file
11794 '("tests/asyncio/test_page_iterator_async.py"
11795 "tests/asyncio/test_retry_async.py"))
11796 (invoke "pytest")))))))
11797 (propagated-inputs
11798 (list python-google-auth
11799 python-googleapis-common-protos
11800 python-protobuf
11801 python-proto-plus
11802 python-requests))
11803 (native-inputs
11804 (list python-mock
11805 python-pytest
11806 python-pytest-asyncio))
11807 (home-page "https://github.com/googleapis/python-api-core")
11808 (synopsis "Google API client core library")
11809 (description "This library defines common helpers used by all Google API
11810clients.")
11811 (license license:asl2.0)))
11812
11813(define-public python-google-cloud-core
11814 (package
11815 (name "python-google-cloud-core")
11816 (version "2.3.0")
11817 (source
11818 (origin
11819 (method url-fetch)
11820 (uri (pypi-uri "google-cloud-core" version))
11821 (sha256
11822 (base32 "0sa66kidgr32dfq9ngha9l362xnqvnqqmssn5my1gd3lc6g65apx"))))
11823 (build-system python-build-system)
11824 (arguments
11825 `(#:phases
11826 (modify-phases %standard-phases
11827 (replace 'check
11828 (lambda* (#:key tests? #:allow-other-keys)
11829 (when tests?
11830 (invoke "pytest")))))))
11831 (propagated-inputs (list python-google-api-core python-google-auth))
11832 (native-inputs
11833 (list python-grpcio python-pytest))
11834 (home-page "https://github.com/googleapis/python-cloud-core")
11835 (synopsis "Google Cloud API client core library")
11836 (description "This library defines common helpers (e.g. base @code{Client}
11837classes) used by all of the @code{google-cloud-*} packages.")
11838 (license license:asl2.0)))
11839
11840(define-public python-google-cloud-storage
11841 (package
11842 (name "python-google-cloud-storage")
11843 (version "2.3.0")
11844 (source
11845 (origin
11846 (method url-fetch)
11847 (uri (pypi-uri "google-cloud-storage" version))
11848 (sha256
11849 (base32 "0nwg9ic29s70kpvi71gmjv1y4w5a3vc9gj6d16f8w8hpbvgb1jzl"))))
11850 (build-system python-build-system)
11851 (arguments
11852 `(#:phases
11853 (modify-phases %standard-phases
11854 (replace 'check
11855 (lambda* (#:key tests? #:allow-other-keys)
11856 (when tests?
11857 (for-each delete-file-recursively
11858 (list
11859 ;; The system tests fail to find test_utils.retry.
11860 "tests/system/"
11861 ;; Needs docker.
11862 "tests/conformance/"))
11863 (invoke "pytest")))))))
11864 (native-inputs
11865 (list python-mock python-pytest python-test-utils))
11866 (propagated-inputs
11867 (list python-google-api-core
11868 python-google-auth
11869 python-google-cloud-core
11870 python-google-resumable-media
11871 python-protobuf
11872 python-requests))
11873 (home-page "https://github.com/googleapis/python-storage")
11874 (synopsis "Google Cloud Storage API client library")
11875 (description "Google Cloud Storage allows you to store data on Google
11876infrastructure, and it can be used to distribute large data objects to users
11877via direct download. This package provides a Google Cloud Storage API client
11878library for Python.")
11879 (license license:asl2.0)))
11880
11881(define-public python-smart-open
11882 (package
11883 (name "python-smart-open")
11884 (version "7.3.0")
11885 (source
11886 (origin
11887 (method git-fetch) ;no tests in PyPI archive
11888 (uri (git-reference
11889 (url "https://github.com/piskvorky/smart_open")
11890 (commit (string-append "v" version))))
11891 (file-name (git-file-name name version))
11892 (sha256
11893 (base32 "1jk3dj0j7idv94g1ga5wyvybakj4l150g26cbsjkrjfpy017vxab"))))
11894 (build-system pyproject-build-system)
11895 (arguments
11896 (list
11897 #:test-flags
11898 #~(list "--ignore=ci_helpers/"
11899 "--ignore=integration-tests/"
11900 ;; FIXME: Enable when guix/guix#1436 is resolved.
11901 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri"
11902 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri_contains_question_mark"
11903 "--deselect=tests/test_smart_open.py::ParseUriTest::test_gs_uri_contains_slash"
11904 "--deselect=tests/test_smart_open.py::ParseUriTest::test_scheme"
11905 "--ignore=tests/test_gcs.py")
11906 #:phases
11907 #~(modify-phases %standard-phases
11908 (add-before 'build 'set-version
11909 (lambda _
11910 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
11911 (propagated-inputs
11912 (list python-azure-common
11913 python-azure-core
11914 python-azure-storage-blob
11915 python-boto3
11916 ;; python-google-cloud-storage ;see guix/guix#1436
11917 python-paramiko
11918 python-requests
11919 python-wrapt
11920 python-zstandard))
11921 (native-inputs
11922 (list python-numpy
11923 python-moto
11924 python-pytest
11925 python-pytest-rerunfailures
11926 python-responses
11927 python-setuptools
11928 python-setuptools-scm
11929 python-wheel))
11930 (home-page "https://github.com/piskvorky/smart_open")
11931 (synopsis "Utilities for streaming large files")
11932 (description
11933 "This package provides utilities for streaming large files (S3, HDFS,
11934GCS, Azure Blob Storage, gzip, bz2, etc.)")
11935 (license license:expat)))
11936
11937(define-public python-smart-open-6
11938 (package
11939 (inherit python-smart-open)
11940 (name "python-smart-open")
11941 (version "6.4.0")
11942 (source
11943 (origin
11944 (method git-fetch)
11945 (uri (git-reference
11946 (url "https://github.com/piskvorky/smart_open")
11947 (commit (string-append "v" version))))
11948 (file-name (git-file-name name version))
11949 (sha256
11950 (base32 "1vpx37b6lsb6iwi59776ywjrqk1czv8arlhaf9073lrsbilqvj3x"))))
11951 (arguments
11952 (list
11953 ;; XXX: Tests need some older native inputs, disable for now.
11954 #:tests? #f))))
11955
11956(define-public python-w3lib
11957 (package
11958 (name "python-w3lib")
11959 (version "2.3.1")
11960 (source
11961 (origin
11962 (method url-fetch)
11963 (uri (pypi-uri "w3lib" version))
11964 (sha256
11965 (base32
11966 "1929layzxwdnf43hhrz7rabv388b2yibj7mnq9s62mr760mc12jw"))))
11967 (build-system pyproject-build-system)
11968 (native-inputs
11969 (list python-pytest python-setuptools python-wheel))
11970 (home-page "https://github.com/scrapy/w3lib")
11971 (synopsis "Python library of web-related functions")
11972 (description
11973 "This is a Python library of web-related functions, such as: remove
11974comments, or tags from HTML snippets, extract base url from HTML snippets,
11975translate entities on HTML strings, among other things.")
11976 (license license:bsd-3)))
11977
11978(define-public python-webcolors
11979 (package
11980 (name "python-webcolors")
11981 (version "24.11.1")
11982 (source
11983 (origin
11984 (method url-fetch)
11985 (uri (pypi-uri "webcolors" version))
11986 (sha256
11987 (base32 "1xl0vn4xa03vjwx6fj19q9kgb94g65gvdf3p0ivsy0i2ydldgczc"))))
11988 (build-system pyproject-build-system)
11989 (arguments
11990 (list
11991 #:phases
11992 '(modify-phases %standard-phases
11993 (add-after 'unpack 'patch-pyproject
11994 (lambda _
11995 ;; XXX Our version of python-pdm-backend does not recognize
11996 ;; "dependency-groups", but is fine with the bogus
11997 ;; "tool.whatever".
11998 (substitute* "pyproject.toml"
11999 (("\\[dependency-groups\\]") "[tool.whatever]")))))))
12000 (native-inputs
12001 (list python-pdm-backend python-pytest))
12002 (home-page "https://github.com/ubernostrum/webcolors")
12003 (synopsis "HTML/CSS color definitions library")
12004 (description "@code{python-webcolors} is a module for working with
12005HTML/CSS color definitions. Normalizing and converting between the following
12006formats is supported.
12007@itemize
12008@item Specification-defined color names
12009@item Six-digit hexadecimal
12010@item Three-digit hexadecimal
12011@item Integer rgb() triplet
12012@item Percentage rgb() triplet
12013@end itemize
12014Only the RGB colorspace is supported. Conversion to/from the HSL colorspace
12015can be handled by the @code{colorsys} module in the Python standard library.")
12016 (license license:bsd-3)))
12017
12018(define-public python-woob
12019 ;; TODO: woob requires backends which are currently installed on the fly in
12020 ;; ~/.local/share/woob/modules/3.7/woob_modules/ , perhaps we should install
12021 ;; them in the store instead. Many modules are included in the modules
12022 ;; directory in the source tree, but it is unclear how to install them.
12023 ;; Many modules require extra dependencies though, so maybe they should be
12024 ;; packaged independently of woob itself.
12025 (package
12026 (name "python-woob")
12027 (version "3.7")
12028 (source
12029 (origin
12030 (method git-fetch)
12031 (uri (git-reference
12032 (url "https://gitlab.com/woob/woob.git")
12033 (commit version)))
12034 (file-name (git-file-name name version))
12035 (sha256
12036 (base32 "1sy0aykff56xs4dnc7ak6m8is2zgz9fprf3i1pk8n861xz1z748i"))))
12037 (build-system pyproject-build-system)
12038 (arguments
12039 (list
12040 #:test-flags
12041 ;; Deselect tests that require DNS lookup.
12042 #~(list
12043 "--deselect=tests/browser/adapters.py::TestAdapter::test_ciphers"
12044 "--deselect=tests/browser/browsers.py::TestBrowser::test_verify")
12045 #:phases
12046 #~(modify-phases %standard-phases
12047 (add-before 'build 'relax-requirements
12048 (lambda _
12049 ;; "packaging ~= 23.0",
12050 (substitute* "pyproject.toml"
12051 (("\"packaging .*\",")
12052 "")))))))
12053 (native-inputs
12054 (list nss-certs-for-test
12055 python-pytest
12056 python-setuptools))
12057 (propagated-inputs
12058 (list python-babel
12059 python-colorama
12060 python-cssselect
12061 python-dateutil
12062 python-feedparser
12063 python-html2text
12064 python-lxml
12065 python-packaging
12066 python-pillow
12067 python-prettytable
12068 python-pycountry
12069 python-pyyaml
12070 python-requests
12071 python-responses
12072 python-rich
12073 python-termcolor
12074 python-unidecode))
12075 (home-page "https://woob.tech/")
12076 (synopsis "Woob, Web Outside Of Browsers")
12077 (description
12078 "Woob is a collection of applications able to interact with
12079websites, without requiring the user to open them in a browser. It also
12080provides well-defined APIs to talk to websites lacking one.")
12081 (license license:lgpl3+)))
12082
12083(define-public python-flask-combo-jsonapi
12084 (package
12085 (name "python-flask-combo-jsonapi")
12086 (version "1.1.0")
12087 (source
12088 (origin
12089 (method git-fetch)
12090 (uri (git-reference
12091 (url "https://github.com/AdCombo/flask-combo-jsonapi")
12092 (commit version)))
12093 (file-name (git-file-name name version))
12094 (sha256
12095 (base32 "07fhcjiyif80z1vyh35za29sqx1mmqh568jrbrrs675j4a797sj1"))))
12096 (build-system python-build-system)
12097 (arguments
12098 '(#:phases
12099 (modify-phases %standard-phases
12100 (add-after 'unpack 'loosen-requirements
12101 (lambda _
12102 ;; Don't pin specific versions of dependencies.
12103 (substitute* "requirements.txt"
12104 (("^sqlalchemy[=<>].*") "sqlalchemy\n")
12105 (("^marshmallow[=<>].*") "marshmallow\n")
12106 (("^Flask[=<>].*") "Flask\n"))))
12107 (replace 'check
12108 (lambda _
12109 (invoke "pytest" "-vv" "-k"
12110 ;; The following test fails for unknown reasons (see:
12111 ;; https://github.com/AdCombo/flask-combo-jsonapi/issues/66).
12112 "not test_get_list_with_simple_filter_\
12113relationship_custom_qs_api"))))))
12114 (propagated-inputs
12115 (list python-flask
12116 python-marshmallow
12117 python-marshmallow-jsonapi
12118 python-simplejson
12119 python-sqlalchemy
12120 python-apispec
12121 python-simplejson
12122 python-six))
12123 (native-inputs
12124 (list python-coverage
12125 python-coveralls
12126 python-pytest
12127 python-pytest-runner))
12128 (home-page "https://github.com/AdCombo/flask-combo-jsonapi")
12129 (synopsis "Flask extension to quickly create JSON:API 1.0 REST Web APIs")
12130 (description
12131 "Flask-COMBO-JSONAPI is a Python Flask extension for building REST Web APIs
12132compliant with the @uref{https://jsonapi.org, JSON:API 1.0} specification.
12133
12134It tries to combine the power of Flask-Restless with the flexibility of
12135Flask-RESTful to quickly build APIs that fit the complexity of existing
12136real-life projects with legacy data and diverse storage providers.")
12137 (license license:expat)))
12138
12139(define-public python-mwparserfromhell
12140 (package
12141 (name "python-mwparserfromhell")
12142 (version "0.7.2")
12143 (source
12144 (origin
12145 (method git-fetch)
12146 (uri (git-reference
12147 (url "https://github.com/earwig/mwparserfromhell")
12148 (commit (string-append "v" version))))
12149 (file-name (git-file-name name version))
12150 (sha256
12151 (base32 "083ir0nccm14431mmn243862gq731ww98fwpd95zm1yccvpzdy68"))))
12152 (build-system pyproject-build-system)
12153 (native-inputs (list python-pytest python-setuptools))
12154 (home-page "https://github.com/earwig/mwparserfromhell")
12155 (synopsis "Python parser for MediaWiki wikicode")
12156 (description
12157 "The MediaWiki Parser From Hell is a python library package that provides
12158a parser for MediaWiki.
12159
12160It exposes parses as normal string objects with additional methods giving
12161access to the special Wikicode features it contains (hyperlinks, tags,
12162templates…). The parser doesn't interpolate strings at all, it remains at a
12163purely formal level.
12164
12165Full documentation may be found at
12166@uref{https://mwparserfromhell.readthedocs.io, ReadTheDocs}")
12167 (license license:expat)))
12168
12169(define-public python-tweepy
12170 (package
12171 (name "python-tweepy")
12172 (version "4.4.0")
12173 (source
12174 (origin
12175 (method git-fetch)
12176 (uri
12177 (git-reference
12178 (url "https://github.com/tweepy/tweepy")
12179 (commit (string-append "v" version))))
12180 (file-name (git-file-name name version))
12181 (sha256
12182 (base32
12183 "0jl3j20iqvzqqw5q5ldval5wrc2pdx94zff3b6b87j51yjx3qjhr"))))
12184 (build-system python-build-system)
12185 (arguments
12186 `(#:tests? #f ;XXX: need /etc/ssl/certs/ca-certificates.crt
12187 #:phases
12188 (modify-phases %standard-phases
12189 (replace 'check
12190 (lambda* (#:key tests? #:allow-other-keys)
12191 (when tests?
12192 (invoke "python" "-m" "unittest" "discover" "tests")))))))
12193 (propagated-inputs
12194 (list python-aiohttp python-requests python-requests-oauthlib))
12195 (native-inputs
12196 (list python-vcrpy))
12197 (home-page "https://www.tweepy.org/")
12198 (synopsis "Twitter library for Python")
12199 (description "This package provides @code{Tweepy}, an easy-to-use Python
12200library for accessing the Twitter API.")
12201 (license license:expat)))
12202
12203(define-public python-quart
12204 (package
12205 (name "python-quart")
12206 (version "0.19.9")
12207 (source
12208 (origin
12209 (method git-fetch) ; no tests in PyPI release
12210 (uri (git-reference
12211 (url "https://github.com/pallets/quart")
12212 (commit version)))
12213 (file-name (git-file-name name version))
12214 (sha256
12215 (base32 "1h5ifv8g9dc9m07vj4v7dfalam83v38545d845vvgys1gan1pscd"))))
12216 (build-system pyproject-build-system)
12217 (arguments
12218 (list
12219 #:phases
12220 #~(modify-phases %standard-phases
12221 (add-after 'unpack 'remove-coverage-pytest-options
12222 (lambda _
12223 (substitute* "pyproject.toml"
12224 (("--no-cov-on-fail") "")))))))
12225 (native-inputs
12226 (list python-poetry-core
12227 python-pytest
12228 python-pytest-asyncio))
12229 (propagated-inputs
12230 (list hypercorn
12231 python-aiofiles
12232 python-blinker
12233 python-click
12234 python-dotenv
12235 python-flask
12236 python-itsdangerous
12237 python-jinja2
12238 python-markupsafe
12239 python-toml
12240 python-werkzeug))
12241 (home-page "https://gitlab.com/pgjones/quart/")
12242 (synopsis "Python ASGI web microframework with the same API as Flask")
12243 (description
12244 "This package provides a Python ASGI web microframework with the same API
12245as Flask.")
12246 (license license:expat)))
12247
12248(define-public python-quart-trio
12249 (package
12250 (name "python-quart-trio")
12251 (version "0.12.0")
12252 (source
12253 (origin
12254 (method url-fetch)
12255 (uri (pypi-uri "quart_trio" version))
12256 (sha256
12257 (base32 "130r8hdk7xxjp380z1r3m28lw86q2a6g9rf0mgp9gs6hk04q9v02"))))
12258 (build-system pyproject-build-system)
12259 (arguments
12260 (list
12261 #:phases
12262 #~(modify-phases %standard-phases
12263 (add-after 'unpack 'remove-coverage-pytest-options
12264 (lambda _
12265 (substitute* "pyproject.toml"
12266 (("--no-cov-on-fail") "")))))))
12267 (native-inputs
12268 (list python-pdm-backend
12269 python-pytest
12270 python-pytest-sugar
12271 python-pytest-trio))
12272 (propagated-inputs
12273 (list hypercorn
12274 python-exceptiongroup
12275 python-quart
12276 python-trio))
12277 (home-page "https://github.com/pgjones/quart-trio")
12278 (synopsis "Extension for Quart to support the Trio event loop")
12279 (description
12280 "This package provides a Quart extension to provide Trio support. This
12281is an alternative to using the asyncio event loop present in the Python
12282standard library and supported by default in Quart.")
12283 (license license:expat)))
12284
12285(define-public python-ajsonrpc
12286 (package
12287 (name "python-ajsonrpc")
12288 (version "1.2.0")
12289 (source
12290 (origin
12291 (method git-fetch)
12292 (uri (git-reference
12293 (url "https://github.com/pavlov99/ajsonrpc")
12294 (commit version)))
12295 (file-name (git-file-name name version))
12296 (sha256
12297 (base32 "0c7jxfkv5q2m95j54dn650gcvdbpag2qcki7phvmrwsgb36w09kd"))))
12298 (build-system pyproject-build-system)
12299 (arguments
12300 (list
12301 #:phases
12302 #~(modify-phases %standard-phases
12303 (add-after 'unpack 'set-version
12304 (lambda _
12305 (substitute* "ajsonrpc/__init__.py"
12306 (("^__version__ = .*")
12307 (string-append "__version__ = \"" #$version "\"\n"))))))))
12308 (native-inputs
12309 (list python-pytest
12310 python-setuptools))
12311 (propagated-inputs
12312 (list python-quart
12313 python-sanic
12314 python-tornado))
12315 (home-page "https://github.com/pavlov99/ajsonrpc")
12316 (synopsis "Async JSON-RPC 2.0 protocol and server")
12317 (description
12318 "This package provides a Python JSON-RPC 2.0 protocol and server powered
12319by asyncio.")
12320 (license license:expat)))
12321
12322(define-public python-protego
12323 (package
12324 (name "python-protego")
12325 (version "0.4.0")
12326 (source
12327 (origin
12328 (method url-fetch)
12329 (uri (pypi-uri "protego" version))
12330 (sha256
12331 (base32 "1xn2aska8v94jqnbyv4ywczb55gaqvr298q8ybhs168knrifd9ck"))))
12332 (build-system pyproject-build-system)
12333 (native-inputs (list python-pytest python-setuptools python-wheel))
12334 (home-page "https://github.com/scrapy/protego")
12335 (synopsis "Python robots.txt parser with support for modern conventions")
12336 (description "Protego is a pure-Python @file{robots.txt} parser with support
12337for modern conventions.")
12338 (license license:bsd-3)))
12339
12340(define-public python-parsel
12341 (package
12342 (name "python-parsel")
12343 (version "1.10.0")
12344 (source
12345 (origin
12346 (method url-fetch)
12347 (uri (pypi-uri "parsel" version))
12348 (sha256
12349 (base32 "1050v20gzijfcaxpm1d4bvxqw2l7xhyf9pxrawrv8lczanwpvw8l"))))
12350 (build-system pyproject-build-system)
12351 (propagated-inputs
12352 (list python-cssselect
12353 python-jmespath
12354 python-lxml
12355 python-typing-extensions
12356 python-w3lib))
12357 (native-inputs
12358 (list python-psutil python-pytest python-setuptools python-wheel))
12359 (home-page "https://github.com/scrapy/parsel")
12360 (synopsis "Extract data from HTML and XML using XPath and CSS selectors")
12361 (description "Parsel is a library to extract and remove data from
12362HTML and XML using XPath and CSS selectors, optionally combined with
12363regular expressions.")
12364 (license license:bsd-3)))
12365
12366(define-public python-scrapy
12367 (package
12368 (name "python-scrapy")
12369 (version "2.13.3")
12370 (source
12371 (origin
12372 (method url-fetch)
12373 (uri (pypi-uri "scrapy" version))
12374 (sha256
12375 (base32 "0k90pni6vkj7axx3cji0b2x7yg4yfh5kh1csqiq9ssp42265h5xz"))))
12376 (build-system pyproject-build-system)
12377 (arguments
12378 (list #:test-flags
12379 #~(list "--numprocesses" (number->string (parallel-job-count))
12380 "-k" (string-join
12381 ;; ConnectionRefusedError: [Errno 111] Connection
12382 ;; refused
12383 (list "not test_append"
12384 "test_append_active_mode"
12385 "test_overwrite"
12386 "test_overwrite_active_mode"
12387 "test_persist"
12388 ;; AssertionError
12389 "test_start_deprecated_super")
12390 " and not ")
12391 ;; Skip documentation testing.
12392 "--ignore=docs")
12393 #:phases
12394 #~(modify-phases %standard-phases
12395 (add-before 'check 'prepare-test-environment
12396 (lambda _
12397 (setenv "HOME" "/tmp"))))))
12398 (propagated-inputs
12399 (list python-cryptography
12400 python-cssselect
12401 python-defusedxml
12402 python-itemadapter
12403 python-itemloaders
12404 python-lxml
12405 python-packaging
12406 python-parsel
12407 python-protego
12408 python-pydispatcher
12409 python-pyopenssl
12410 python-pypydispatcher
12411 python-queuelib
12412 python-service-identity
12413 python-tldextract
12414 python-twisted
12415 python-w3lib
12416 python-zope-interface))
12417 (native-inputs
12418 (list nss-certs-for-test
12419 python-hatchling
12420 python-pexpect
12421 python-pytest
12422 python-pytest-xdist
12423 python-setuptools
12424 python-sybil
12425 python-testfixtures))
12426 (home-page "https://scrapy.org")
12427 (synopsis "High-level Web crawling and Web scraping framework")
12428 (description "Scrapy is a fast high-level web crawling and web
12429scraping framework, used to crawl websites and extract structured data
12430from their pages. It can be used for a wide range of purposes, from data
12431mining to monitoring and automated testing.")
12432 (license license:bsd-3)))
12433
12434(define-public python-jstyleson
12435 (package
12436 (name "python-jstyleson")
12437 (version "0.0.2")
12438 (source
12439 (origin
12440 (method url-fetch)
12441 (uri (pypi-uri "jstyleson" version))
12442 (sha256
12443 (base32 "13ihw6jqwkg3ai4xb83kw39pvh73b2wg6ld3wvj5jaasn7rh6038"))))
12444 (build-system python-build-system)
12445 (arguments (list #:tests? #f)) ;no tests in pypi release
12446 (home-page "https://github.com/linjackson78/jstyleson")
12447 (synopsis "JSON parser supporting js-style comments")
12448 (description "@code{jstyleson} is a Python library to parse JSON.
12449Contrary to the standard Python @code{json} library, it understands js-style
12450comments. Trailing comma is also supported.")
12451 (license license:expat)))
12452
12453(define-public python-html-text
12454 (package
12455 (name "python-html-text")
12456 (version "0.7.0")
12457 (source
12458 (origin
12459 (method url-fetch)
12460 (uri (pypi-uri "html_text" version))
12461 (sha256
12462 (base32 "10lixghras86av966ha9piqfl1iscf7nffg69dmz13sxjh371jrx"))))
12463 (build-system pyproject-build-system)
12464 (native-inputs
12465 (list python-pytest
12466 python-setuptools
12467 python-wheel))
12468 (propagated-inputs
12469 (list python-lxml
12470 python-lxml-html-clean))
12471 (home-page "https://github.com/TeamHG-Memex/html-text")
12472 (synopsis "Extract text from HTML")
12473 (description "HTML to Text is a Python library for extract text from HTML.
12474Contrary to other solution such as LXML or Beautiful Soup, the text extracted
12475with @code{html_text} does not contain elements such as JavaScript or inline
12476styles not normally visible to users. It also normalizes white space
12477characters in a smarter, more visually pleasing style.")
12478 (license license:expat)))
12479
12480(define-public python-mf2py
12481 (package
12482 (name "python-mf2py")
12483 (version "2.0.1")
12484 (source
12485 (origin
12486 (method git-fetch)
12487 (uri (git-reference
12488 (url "https://github.com/microformats/mf2py")
12489 (commit (string-append "v" version))))
12490 (file-name (git-file-name name version))
12491 (sha256
12492 (base32 "0ajnf0zrh1l48fvix9fbs1qvgbqhiljqnrm51rx44p7dbarpw4ls"))))
12493 (build-system pyproject-build-system)
12494 (native-inputs (list python-mock python-poetry-core python-pytest))
12495 (propagated-inputs
12496 (list python-beautifulsoup4 python-html5lib python-requests))
12497 (home-page "https://github.com/microformats/mf2py")
12498 (synopsis "Python Microformats2 parser")
12499 (description
12500 "This Python library provides a Microformats2 parser implementing the
12501full Microformats2 (mf2) specification, including backward compatibility with
12502Microformats1 (mf1).")
12503 (license license:expat)))
12504
12505(define-public python-extruct
12506 (package
12507 (name "python-extruct")
12508 (version "0.18.0")
12509 (source (origin
12510 (method git-fetch) ;for tests
12511 (uri (git-reference
12512 (url "https://github.com/scrapinghub/extruct")
12513 (commit (string-append "v" version))))
12514 (file-name (git-file-name name version))
12515 (sha256
12516 (base32
12517 "03qdldqrvmbsk6klq4nkxvvp3b2a0qqgqg115i3crbmialiaai45"))))
12518 (build-system pyproject-build-system)
12519 (arguments
12520 (list
12521 #:test-flags
12522 ;; 67 passed, 3 deselected
12523 ;; XXX: 3 tests fail with errors in assertion.
12524 #~(list "-k" (string-append
12525 "not test_microformat"
12526 " and not test_microformat"
12527 " and not test_umicroformat"))))
12528 (native-inputs
12529 (list python-pytest
12530 python-setuptools
12531 python-wheel))
12532 (propagated-inputs
12533 (list python-html-text
12534 python-jstyleson
12535 python-lxml
12536 python-mf2py
12537 python-pyrdfa3
12538 python-rdflib
12539 python-w3lib))
12540 (home-page "https://github.com/scrapinghub/extruct")
12541 (synopsis "Extract embedded metadata from HTML markup")
12542 (description "@code{extruct} is a Python library for extracting embedded
12543metadata from HTML markup. Currently, extruct supports:
12544@itemize
12545@item W3C's HTML Microdata
12546@item embedded JSON-LD
12547@item Microformat via mf2py
12548@item Facebook's Open Graph
12549@item (experimental) RDFa via rdflib
12550@item Dublin Core Metadata (DC-HTML-2003)
12551@end itemize")
12552 (license license:bsd-3)))
12553
12554(define-public python-wadllib
12555 (package
12556 (name "python-wadllib")
12557 (version "2.0.0")
12558 (source
12559 (origin
12560 (method url-fetch)
12561 (uri (pypi-uri "wadllib" version))
12562 (sha256
12563 (base32 "09vlfg4mzdmkqk6br7j8ms3116qk5am0nf4v1jkzwd7swhisznqy"))))
12564 (build-system pyproject-build-system)
12565 (arguments
12566 (list
12567 ;; XXX: Doctests are currently failing.
12568 #:tests? #f
12569 #:phases
12570 #~(modify-phases %standard-phases
12571 (replace 'check
12572 (lambda* (#:key tests? #:allow-other-keys)
12573 (if tests?
12574 (invoke "zope-testrunner" "--test-path=src")
12575 (format #t "test suite not run~%")))))))
12576 (native-inputs
12577 (list python-multipart python-setuptools python-zope-testrunner))
12578 (propagated-inputs (list python-lazr-uri))
12579 (home-page "https://launchpad.net/wadllib")
12580 (synopsis "Web Application Description Language (WADL) navigation library")
12581 (description "The @code{wadllib} Python library allows navigating HTTP
12582resources using Web Application Description Language (WADL) files as guides.")
12583 (license license:lgpl3)))
12584
12585(define-public python-zeep
12586 (package
12587 (name "python-zeep")
12588 (version "4.3.1")
12589 (source
12590 (origin
12591 (method url-fetch)
12592 (uri (pypi-uri "zeep" version))
12593 (sha256
12594 (base32 "0vm0asfak0pxfa9i753imcy72hk8gkxbj6pmw185b7dhw7lqalzl"))))
12595 (build-system pyproject-build-system)
12596 (arguments
12597 (list
12598 #:phases
12599 '(modify-phases %standard-phases
12600 (add-after 'unpack 'compatibility
12601 (lambda _
12602 ;; Relax requests-file requirement.
12603 (substitute* "pyproject.toml"
12604 (("\"requests-file.*\",")
12605 "\"requests-file\","))
12606 ;; httpx removed the "proxies" keyword. It's now either "mounts"
12607 ;; or "proxy". See https://github.com/encode/httpx/pull/2879.
12608 (substitute* "src/zeep/transports.py"
12609 (("proxies=") "proxy="))))
12610 ;; One test requires write access
12611 (add-before 'check 'set-HOME
12612 (lambda _ (setenv "HOME" (getcwd)))))))
12613 (propagated-inputs
12614 (list python-attrs
12615 python-isodate
12616 python-lxml
12617 python-platformdirs
12618 python-pytz
12619 python-requests
12620 python-requests-file
12621 python-requests-toolbelt))
12622 (native-inputs
12623 (list nss-certs-for-test
12624 python-freezegun
12625 python-pretend
12626 python-pytest
12627 python-pytest-asyncio
12628 python-pytest-cov
12629 python-pytest-httpx
12630 python-requests-mock
12631 python-setuptools
12632 python-wheel))
12633 (home-page "https://docs.python-zeep.org/en/stable/")
12634 (synopsis "Python SOAP client based on lxml / requests")
12635 (description "Zeep is a Python SOAP client. Highlights:
12636
12637@itemize
12638@item Build on top of @code{lxml} and @code{requests}.
12639@item Support for Soap 1.1, Soap 1.2 and HTTP bindings.
12640@item Support for WS-Addressing headers.
12641@item Support for WSSE (UserNameToken / x.509 signing).
12642@item Support for @code{asyncio} via @code{httpx}.
12643@item Experimental support for XOP messages.
12644@end itemize")
12645 (license license:expat)))
12646
12647(define-public python-pysimplesoap
12648 (package
12649 (name "python-pysimplesoap")
12650 (version "1.16.2")
12651 (source (origin
12652 (method url-fetch)
12653 (uri (pypi-uri "PySimpleSOAP" version))
12654 (sha256
12655 (base32
12656 "1qb7dn8m1cjwzql7vqj9i1hsscb7nyhimmlp45jrpzxds38g9fxi"))))
12657 (build-system python-build-system)
12658 (arguments
12659 (list #:tests? #f)) ;tests fail due to attempted web access
12660 (home-page "https://github.com/pysimplesoap/pysimplesoap")
12661 (synopsis "Simple and lightweight SOAP library for Python")
12662 (description
12663 "This package provides a simple and lightweight Python SOAP library for
12664client and server webservices interfaces, aimed to be as small and easy as
12665possible, supporting most common functionality.")
12666 (license license:lgpl3+)))
12667
12668(define-public python-http-client
12669 (package
12670 (name "python-http-client")
12671 (version "3.3.7")
12672 (home-page "https://github.com/sendgrid/python-http-client")
12673 (source (origin
12674 (method git-fetch)
12675 (uri (git-reference
12676 (url home-page)
12677 (commit version)))
12678 (file-name (git-file-name name version))
12679 (sha256
12680 (base32
12681 "0z0ziw3f4zw5fj4spiwhhs2x8qs3i5999ry2p6a5sc8b1lkkj2zi"))
12682 (snippet #~(begin
12683 (use-modules (guix build utils))
12684 (delete-file "tests/profile.py")))))
12685 (build-system python-build-system)
12686 (arguments
12687 (list #:phases
12688 #~(modify-phases %standard-phases
12689 (add-after 'unpack 'fix-tests
12690 (lambda _
12691 ;; The test expects the copyright to be updated each year.
12692 (substitute* "tests/test_daterange.py"
12693 (("time\\.strftime\\(\"%Y\"\\)") "2022")))))))
12694 (synopsis "HTTP REST client for Python")
12695 (description
12696 "This package provides access to any RESTful or RESTful-like API.")
12697 (license license:expat)))
12698
12699(define-public python-sendgrid
12700 (package
12701 (name "python-sendgrid")
12702 (version "6.9.7")
12703 (home-page "https://github.com/sendgrid/sendgrid-python/")
12704 (source (origin
12705 (method git-fetch)
12706 (uri (git-reference
12707 (url home-page)
12708 (commit version)))
12709 (file-name (git-file-name name version))
12710 (sha256
12711 (base32
12712 "0kvp4gm3bpcsj2mkv05pgvlcv1jlsfhcljcv61wz5kq9d273h7rg"))))
12713 (build-system python-build-system)
12714 (arguments
12715 (list #:tests? #f)) ;241/340 tests fail due to attempted web access
12716 (propagated-inputs (list python-http-client python-starkbank-ecdsa))
12717 (synopsis "SendGrid API library for Python")
12718 (description
12719 "The @code{sendgrid} Python library allows access to the
12720SendGrid Web API v3. Version 3+ of the library provides full support for all
12721SendGrid Web API v3 endpoints, including the new v3 /mail/send.")
12722 (license license:expat)))
12723
12724(define-public python-starlette
12725 (package
12726 (name "python-starlette")
12727 (version "0.42.0")
12728 (source (origin
12729 (method git-fetch)
12730 (uri (git-reference
12731 (url "https://github.com/encode/starlette")
12732 (commit version)))
12733 (file-name (git-file-name name version))
12734 (sha256
12735 (base32
12736 "0r46v6b687pqr4sjcv0rwd1ln248fnx0xkawbn945r04pg7c999q"))))
12737 (build-system pyproject-build-system)
12738 (propagated-inputs (list python-anyio
12739 python-typing-extensions
12740 ;; [all] extra dependencies:
12741 python-itsdangerous
12742 python-jinja2
12743 python-multipart
12744 python-pyyaml
12745 python-requests))
12746 (native-inputs (list python-hatchling
12747 python-httpx
12748 python-pytest
12749 python-typing-extensions))
12750 (home-page "https://github.com/encode/starlette")
12751 (synopsis "Little ASGI library")
12752 (description
12753 "Starlette is a lightweight ASGI (Asynchronous Server Gateway
12754Interface) framework/toolkit for building async web services in Python.")
12755 (license license:bsd-3)))
12756
12757(define-public python-starsessions
12758 (package
12759 (name "python-starsessions")
12760 (version "1.3.0")
12761 (source (origin
12762 (method git-fetch)
12763 (uri (git-reference
12764 (url "https://github.com/alex-oleshkevich/starsessions")
12765 (commit (string-append "v" version))))
12766 (file-name (git-file-name name version))
12767 (sha256
12768 (base32
12769 "00dkdhp22vfmcn0w4y7f2ii8m1xj5i7409x58g3l8lvk6v5ng2nf"))))
12770 (build-system pyproject-build-system)
12771 (arguments
12772 (list
12773 #:test-flags
12774 ;; These tests require a running redis server
12775 '(list "--ignore=tests/backends/test_redis.py"
12776 ;; XXX: this failure indicates a real compatibility problem, but
12777 ;; it seems restricted to the tests only.
12778 ;; AttributeError: 'Cookies' object has no attribute
12779 ;; 'clear_session_cookies'
12780 "-k"
12781 (string-append "not test_session_clears_on_tab_close"
12782 ;; This fails because an error is not raised.
12783 " and not test_session_wants_secret_key"))
12784 #:phases
12785 '(modify-phases %standard-phases
12786 (add-after 'unpack 'compatibilitiy
12787 (lambda _
12788 ;; aioredis has been renamed
12789 (substitute* "starsessions/backends/redis.py"
12790 (("aioredis") "redis")))))))
12791 (propagated-inputs
12792 (list python-redis
12793 python-itsdangerous
12794 python-starlette))
12795 (native-inputs
12796 (list python-black
12797 python-flake8
12798 python-httpx
12799 python-mypy
12800 python-poetry-core
12801 python-pytest
12802 python-pytest-asyncio
12803 python-requests))
12804 (home-page "https://github.com/alex-oleshkevich/starsessions")
12805 (synopsis "Pluggable session support for Starlette and FastAPI")
12806 (description
12807 "This package adds pluggable session backends and ships default
12808@code{InMemoryBackend} and @code{CookieBackend} implementations for Starlette
12809and FastAPI.")
12810 (license license:expat)))
12811
12812(define-public python-whereismyip
12813 (package
12814 (name "python-whereismyip")
12815 (version "0.1.0")
12816 (source
12817 (origin
12818 (method url-fetch)
12819 (uri (pypi-uri "whereismyip" version))
12820 (sha256
12821 (base32 "0psrlvax8249ccs2rvgdygpckzz22vxjcyzr2pql06d48k61gk54"))))
12822 (build-system pyproject-build-system)
12823 (arguments (list #:tests? #false)) ; There are no tests.
12824 (native-inputs (list python-setuptools))
12825 (home-page "https://pypi.org/project/whereismyip/")
12826 (synopsis "Queries multiple geolocation services until one succeeds")
12827 (description
12828 "This package provides a simple Python library that queries multiple geolocation
12829services until one succeeds.")
12830 (license license:gpl3)))
12831
12832(define-public python-whitenoise
12833 (package
12834 (name "python-whitenoise")
12835 (version "6.9.0")
12836 (source (origin
12837 (method git-fetch) ; PyPI missing test failes
12838 (uri (git-reference
12839 (url "https://github.com/evansd/whitenoise")
12840 (commit version)))
12841 (file-name (git-file-name name version))
12842 (sha256
12843 (base32
12844 "0y00a59ww9f631m51d5db5xcnbckzcwfm64wabp5vamn7l1kqqsj"))))
12845 (build-system pyproject-build-system)
12846 (arguments
12847 (list
12848 #:test-flags #~(list "-k" "not test_modified"))) ; HTTP 304 error
12849 (native-inputs (list python-brotli
12850 python-django
12851 python-requests
12852 python-pytest
12853 python-setuptools
12854 python-wheel))
12855 (home-page "https://github.com/evansd/whitenoise")
12856 (synopsis "Static file serving for WSGI applications")
12857 (description
12858 "WhiteNoise allows your web app to serve its own static files, making it
12859a self-contained unit that can be deployed anywhere without relying on nginx,
12860Amazon S3 or any other external service.")
12861 (license license:expat)))
12862
12863(define-public python-suds
12864 (package
12865 (name "python-suds")
12866 (version "1.2.0")
12867 (source
12868 (origin
12869 (method url-fetch)
12870 (uri (pypi-uri "suds" version))
12871 (sha256
12872 (base32 "1byyg7b2ixpr8hc849a6dd0qn5daxqawz6lb3php8lrmsb1n5cc3"))))
12873 (build-system pyproject-build-system)
12874 (arguments
12875 (list #:phases
12876 #~(modify-phases %standard-phases
12877 ;; XXX: chirp expects suds instead of suds_community
12878 (add-after 'install 'add-custom-dist-info
12879 (lambda _
12880 (for-each
12881 (lambda (dir)
12882 (with-directory-excursion (dirname dir)
12883 (symlink
12884 (basename dir)
12885 (string-append "suds-" #$version ".dist-info"))))
12886 (find-files #$output
12887 (lambda (file stat)
12888 (string-suffix? ".dist-info" file))
12889 #:directories? #t)))))))
12890 (native-inputs
12891 (list python-pytest
12892 python-setuptools
12893 python-wheel))
12894 (home-page "https://github.com/suds-community/suds")
12895 (synopsis "Lightweight SOAP python client for consuming Web Services")
12896 (description
12897 "Suds is a lightweight SOAP-based web service client for Python.")
12898 (license license:lgpl3+)))
12899
12900(define-public python-fastapi
12901 (package
12902 (name "python-fastapi")
12903 (version "0.115.6")
12904 (source (origin
12905 (method url-fetch)
12906 (uri (pypi-uri "fastapi" version))
12907 (sha256
12908 (base32
12909 "0m36nyldk0640mbsysm446bz6rfynpjsm5lajmra8kn1vmx6zi4y"))))
12910 (build-system pyproject-build-system)
12911 (arguments
12912 (list
12913 #:test-flags
12914 ;; Argument() missing 1 required positional argument: 'default'
12915 '(list "--ignore=tests/test_fastapi_cli.py"
12916 ;; cannot import name 'StaticPool' from 'sqlalchemy'
12917 "--ignore-glob=tests/test_tutorial/*"
12918 ;; FIXME: Unclear why these 8 tests fail.
12919 "--ignore=tests/test_dependency_contextmanager.py")
12920 #:phases
12921 '(modify-phases %standard-phases
12922 (add-after 'unpack 'relax-requirements
12923 (lambda _
12924 (substitute* "pyproject.toml"
12925 (("<0.42.0") "<=0.42.0")))))))
12926 (propagated-inputs (list python-email-validator
12927 python-fastapi-cli
12928 python-httpx
12929 python-itsdangerous
12930 python-jinja2
12931 python-multipart
12932 python-orjson
12933 python-pydantic-2
12934 python-pydantic-settings
12935 python-pyyaml
12936 python-starlette
12937 python-typing-extensions
12938 python-ujson
12939 python-uvicorn))
12940 (native-inputs
12941 (list python-dirty-equals
12942 python-flask
12943 python-inline-snapshot
12944 python-pdm-backend
12945 python-pyjwt
12946 python-pytest
12947 python-sqlalchemy))
12948 (home-page "https://github.com/tiangolo/fastapi")
12949 (synopsis "Web framework based on type hints")
12950 (description "FastAPI provides a web API framework based on pydantic and
12951starlette.")
12952 (license license:expat)))
12953
12954(define-public python-fastapi-csrf-protect
12955 (package
12956 (name "python-fastapi-csrf-protect")
12957 (version "0.3.3")
12958 (source (origin
12959 (method git-fetch)
12960 (uri (git-reference
12961 (url "https://github.com/aekasitt/fastapi-csrf-protect")
12962 (commit (string-append "v" version))))
12963 (file-name (git-file-name name version))
12964 (sha256
12965 (base32
12966 "181yawlbpd4709mamsradr9zj0jrbp4qvwfvmggs80pd36iiwyy8"))))
12967 (build-system pyproject-build-system)
12968 (propagated-inputs
12969 (list python-fastapi python-itsdangerous
12970 python-pydantic-2))
12971 (native-inputs
12972 (list python-poetry-core
12973 python-pytest))
12974 (home-page "https://github.com/aekasitt/fastapi-csrf-protect")
12975 (synopsis "Cross-Site Request Forgery (XSRF) protection")
12976 (description
12977 "This package provides a stateless implementation of @dfn{Cross-Site
12978Request Forgery} (XSRF) Protection by using the Double Submit Cookie mitigation
12979pattern.")
12980 (license license:expat)))
12981
12982(define-public python-fastapi-pagination-minimal
12983 (package
12984 (name "python-fastapi-pagination-minimal")
12985 (version "0.12.34")
12986 (source (origin
12987 (method git-fetch)
12988 (uri (git-reference
12989 (url "https://github.com/uriyyo/fastapi-pagination")
12990 (commit version)))
12991 (file-name (git-file-name name version))
12992 (sha256
12993 (base32
12994 "004w9h4ana0p766n7f0z0n06v1472yjci1hvbys9gncpclcc49gj"))))
12995 (build-system pyproject-build-system)
12996 ;; We run the tests in python-fastapi-pagination only.
12997 (arguments (list #:tests? #false))
12998 ;; These are the only required dependencies,
12999 ;; please add all optional dependencies to the
13000 ;; full python-fastapi-pagination below.
13001 (propagated-inputs (list python-fastapi python-pydantic-2))
13002 (native-inputs (list python-poetry-core))
13003 (home-page "https://github.com/uriyyo/fastapi-pagination")
13004 (synopsis "FastAPI pagination library")
13005 (description "@code{fastapi-pagination} is a Python library designed to
13006simplify pagination in FastAPI applications. It provides a set of utility
13007functions and data models to help you paginate your database queries and
13008return paginated responses to your clients.")
13009 (license license:expat)))
13010
13011(define-public python-fastapi-pagination
13012 (package
13013 (inherit python-fastapi-pagination-minimal)
13014 (name "python-fastapi-pagination")
13015 (arguments
13016 (list
13017 #:test-flags
13018 #~(list "--asyncio-mode=auto"
13019 "--unit-tests"
13020 "--ignore=tests/ext"
13021 ;; Netwok access is required.
13022 "-k" (string-join
13023 (list "not test_optional_params[postgres-default]"
13024 "test_optional_params[postgres-limit-offset]"
13025 "test_optional_params[sqlite-default]"
13026 "test_optional_params[sqlite-limit-offset]")
13027 " and not "))
13028 #:phases
13029 '(modify-phases %standard-phases
13030 (add-after 'unpack 'patch-tests
13031 (lambda _
13032 ;; We don't have a package for python-cassandra or motor, but we
13033 ;; also don't need them as we only run the unit tests anyway.
13034 (substitute* "tests/conftest.py"
13035 (("from cassandra.cluster.*") "")
13036 (("from motor.*") "")))))))
13037 (propagated-inputs
13038 (modify-inputs (package-propagated-inputs
13039 python-fastapi-pagination-minimal)
13040 (prepend python-asyncpg
13041 python-databases
13042 python-django
13043 python-fastapi
13044 python-pydantic-2
13045 python-sqlalchemy
13046 (package
13047 (inherit python-tortoise-orm)
13048 (arguments
13049 (substitute-keyword-arguments (package-arguments
13050 python-tortoise-orm)
13051 ((#:phases phases '%standard-phases)
13052 `(modify-phases ,phases
13053 (delete 'sanity-check)))))
13054 (propagated-inputs
13055 (modify-inputs (package-propagated-inputs python-tortoise-orm)
13056 (replace "python-aiosqlite" python-aiosqlite)))))))
13057 (native-inputs
13058 (list python-aiosqlite
13059 python-asgi-lifespan
13060 python-asyncpg
13061 python-faker
13062 python-httpx
13063 python-poetry-core
13064 python-pytest
13065 python-pytest-asyncio
13066 python-sqlalchemy
13067 python-typing-extensions))
13068 (description
13069 (string-append (package-description python-fastapi-pagination-minimal)
13070 "
13071
13072This package, as opposed to @code{python-fastapi-pagination-minimal}, depends on
13073all available optional dependencies supported by mainline
13074@code{fastapi-pagination}."))))
13075
13076(define-public python-fastapi-cli
13077 (package
13078 (name "python-fastapi-cli")
13079 (version "0.0.7")
13080 (source
13081 (origin
13082 (method url-fetch)
13083 (uri (pypi-uri "fastapi_cli" version))
13084 (sha256
13085 (base32 "0pk0ldmymc25ys4v6mslzd5vsjh9r69hfylh2ljl29pmarcvdcq2"))))
13086 (build-system pyproject-build-system)
13087 ;; Tests require fastapi, which depends on this package.
13088 (arguments (list #:tests? #false))
13089 (propagated-inputs (list python-rich-toolkit python-typer python-uvicorn))
13090 (native-inputs
13091 (list python-inline-snapshot python-pdm-backend python-pytest))
13092 (home-page "https://pypi.org/project/fastapi-cli/")
13093 (synopsis
13094 "Run and manage FastAPI apps from the command line with FastAPI CLI")
13095 (description
13096 "FastAPI CLI is a command line program fastapi that you can use to serve
13097your FastAPI app, manage your FastAPI project, and more.")
13098 (license license:expat)))
13099
13100(define-public python-pyactiveresource
13101 (package
13102 (name "python-pyactiveresource")
13103 (version "2.2.2")
13104 (source
13105 (origin
13106 (method git-fetch)
13107 (uri (git-reference
13108 (url "https://github.com/Shopify/pyactiveresource")
13109 (commit (string-append "v" version))))
13110 (file-name (git-file-name name version))
13111 (sha256
13112 (base32 "03pw6fwqjn09fbd6xmng0arlz75pp6ykw25c8d1snp4bxlzkrwqf"))))
13113 (build-system pyproject-build-system)
13114 (native-inputs (list python-dateutil python-pytest python-pyyaml
13115 python-setuptools))
13116 (propagated-inputs (list python-six))
13117 (home-page "https://github.com/Shopify/pyactiveresource/")
13118 (synopsis "ActiveResource for Python")
13119 (description
13120 "This package provides a Python port of the ActiveResource project.
13121
13122Active Resource attempts to provide a coherent wrapper object-relational
13123mapping for REST web services. It follows the same philosophy as Active
13124Record, in that one of its prime aims is to reduce the amount of code needed
13125to map to these resources. This is made possible by relying on a number of
13126code- and protocol-based conventions that make it easy for Active Resource to
13127infer complex relations and structures.")
13128 (license license:expat)))
13129
13130(define-public python-shopifyapi
13131 (package
13132 (name "python-shopifyapi")
13133 (version "12.7.0")
13134 (source
13135 (origin
13136 (method git-fetch)
13137 (uri (git-reference
13138 (url "https://github.com/Shopify/shopify_python_api")
13139 (commit (string-append "v" version))))
13140 (file-name (git-file-name name version))
13141 (sha256
13142 (base32 "11zjm3aspb247wwlmfmq6wwk6lv3xyv3lqnd78sczjg9anba3779"))))
13143 (build-system pyproject-build-system)
13144 (arguments
13145 (list
13146 #:test-flags
13147 #~'("-k"
13148 ;; Disable a failing test.
13149 "not test_raises_if_aud_doesnt_match_api_key")))
13150 (native-inputs (list python-mock python-pytest python-setuptools))
13151 (propagated-inputs (list python-pyactiveresource python-pyjwt
13152 python-pyyaml python-six))
13153 (home-page "https://github.com/Shopify/shopify_python_api")
13154 (synopsis "Shopify API for Python")
13155 (description
13156 "This package provides the Shopify API for Python.
13157
13158The ShopifyAPI library allows Python developers to programmatically access the
13159admin section of stores using an ActiveResource-like interface similar the
13160ruby Shopify API gem. The library makes HTTP requests to Shopify in order to
13161list, create, update, or delete resources (e.g. Order, Product, Collection).")
13162 (license license:expat)))
13163
13164(define-public python-pybadges
13165 (package
13166 (name "python-pybadges")
13167 (version "3.0.1")
13168 (source (origin
13169 (method git-fetch)
13170 (uri (git-reference
13171 (url "https://github.com/google/pybadges")
13172 (commit version)))
13173 (file-name (git-file-name name version))
13174 (sha256
13175 "1zgb9idz7m3mzf8wvik0gwmyrxp753axqjv2pab326cr5myj1s4b")))
13176 (build-system pyproject-build-system)
13177 (arguments
13178 (list
13179 #:test-flags
13180 #~'("-k"
13181 ;; Disable network dependent tests.
13182 "not test_changes and not test_not_image_url and not test_http_url")))
13183 (propagated-inputs (list python-jinja2 python-requests))
13184 (native-inputs (list python-flask
13185 python-fonttools
13186 python-pillow
13187 python-pytest
13188 python-setuptools
13189 python-wheel
13190 python-xmldiff))
13191 (home-page "https://github.com/google/pybadges")
13192 (synopsis "Generate Github-style badges on the command-line")
13193 (description
13194 "This package provides @code{python-pybadges}: a library and command-line
13195tool for generating Github-style badges as SVG images.")
13196 (license license:asl2.0)))
13197
13198(define-public python-grid5000
13199 (package
13200 (name "python-grid5000")
13201 (version "1.2.3")
13202 (source (origin
13203 (method git-fetch)
13204 (uri (git-reference
13205 (url "https://gitlab.inria.fr/msimonin/python-grid5000")
13206 (commit (string-append "v" version))))
13207 (file-name (git-file-name name version))
13208 (sha256
13209 "097pm8b68ihk29xz9zv29b1x0bhgjb4lfj8zxk2grbsh7wr9dipg")))
13210 (build-system python-build-system)
13211 (native-inputs (list python-wheel))
13212 (propagated-inputs (list python-requests python-ipython python-pyyaml))
13213 (arguments
13214 (list #:tests? #f)) ; No tests.
13215 (home-page "https://pypi.org/project/python-grid5000/")
13216 (synopsis "Grid5000 python client")
13217 (description
13218 "python-grid5000 is a python package wrapping the Grid5000 REST API.
13219You can use it as a library in your python project or you can explore the
13220Grid5000 resources interactively using the embedded shell.")
13221 (license license:gpl3+)))
13222
13223(define-public python-enoslib
13224 (package
13225 (name "python-enoslib")
13226 (version "8.0.1")
13227 (source
13228 (origin
13229 (method git-fetch)
13230 (uri (git-reference
13231 (url "https://gitlab.inria.fr/discovery/enoslib")
13232 (commit (string-append "v" version))))
13233 (file-name (git-file-name name version))
13234 (sha256 "0vs6b0bnlv95mzv0rjbxqwrhzkgjkn91gqipgwdf7y4ffpz8nybg")))
13235 (arguments
13236 (list
13237 #:test-flags
13238 #~(list "enoslib/tests/unit"
13239 "--ignore" "enoslib/tests/unit/infra/test_utils.py"
13240 "--ignore-glob" "enoslib/tests/unit/infra/enos_iotlab/*")
13241 #:phases
13242 #~(modify-phases %standard-phases
13243 (add-before 'check 'pre-check
13244 (lambda* (#:key tests? #:allow-other-keys)
13245 (when tests?
13246 ;; Otherwise Ansible fails to create its config directory.
13247 (setenv "HOME" "/tmp"))))
13248 ;; Disable the sanity check, which fails with the following error:
13249 ;;
13250 ;; ContextualVersionConflict(rich 12.4.1
13251 ;; (/gnu/store/...-python-rich-12.4.1/lib/python3.9/site-packages),
13252 ;; Requirement.parse('rich[jupyter]~=12.0.0'), {'enoslib'})
13253 ;;
13254 ;; The optional jupyter dependency of rich isn't critical for
13255 ;; EnOSlib to work
13256 (delete 'sanity-check))))
13257 (build-system pyproject-build-system)
13258 (native-inputs
13259 (list python-ddt
13260 python-freezegun
13261 python-pytest
13262 python-setuptools
13263 python-wheel))
13264 (propagated-inputs
13265 (list ansible
13266 python-cryptography
13267 python-grid5000
13268 python-jsonschema
13269 python-netaddr
13270 python-packaging
13271 python-requests
13272 python-rich
13273 python-sshtunnel
13274 python-pytz))
13275 (home-page "https://discovery.gitlabpages.inria.fr/enoslib/index.html")
13276 (synopsis "Deploy distributed testbeds on a variety of platforms")
13277 (description
13278 "EnOSlib is a library to build experimental frameworks on various
13279scientific testbeds. It lets you deploy networks of machines on actual
13280hardware on Grid'5000 or via OpenStack, to Vagrant, Chameleon, and more.")
13281 (license license:gpl3+)))
13282
13283(define-public python-pynetbox
13284 (package
13285 (name "python-pynetbox")
13286 (version "7.4.1")
13287 (source (origin
13288 (method url-fetch)
13289 (uri (pypi-uri "pynetbox" version))
13290 (sha256
13291 (base32
13292 "1hq0mqykwdsmcrj61fxxzdkpc7wnld4grhkcxy560ym79jbbb0iz"))))
13293 (build-system pyproject-build-system)
13294 (arguments
13295 (list
13296 #:test-flags
13297 ;; Integration tests depend on docker.
13298 '(list "--ignore=tests/integration")))
13299 (propagated-inputs (list python-packaging python-requests))
13300 (native-inputs
13301 (list python-pytest
13302 python-setuptools
13303 python-setuptools-scm
13304 python-wheel))
13305 (home-page "https://github.com/netbox-community/pynetbox")
13306 (synopsis "NetBox API client library")
13307 (description "Python module to query and edit data stored in a
13308@url{https://netbox.dev,NetBox} instance.")
13309 (license license:asl2.0)))
13310
13311(define-public python-waybackpack
13312 (package
13313 (name "python-waybackpack")
13314 (version "0.6.4")
13315 (source
13316 (origin
13317 (method url-fetch)
13318 (uri (pypi-uri "waybackpack" version))
13319 (sha256
13320 (base32 "16lcr2hv7gmp199fh3psrnv68j20pfxria8v6gchrpl1jqx9f923"))))
13321 (build-system pyproject-build-system)
13322 (arguments
13323 (list #:tests? #f)) ; would require network (and SSL certificates)
13324 (propagated-inputs (list python-requests))
13325 (native-inputs (list python-pytest python-setuptools python-wheel))
13326 (home-page "https://github.com/jsvine/waybackpack")
13327 (synopsis
13328 "Download the entire Wayback Machine archive for a given URL")
13329 (description
13330 "This package provides a library and a command-line tool that lets
13331you download the entire Wayback Machine archive for a given URL.")
13332 (license license:expat)))
13333
13334(define-public python-xyzservices
13335 (package
13336 (name "python-xyzservices")
13337 (version "2025.4.0")
13338 (source
13339 (origin
13340 (method url-fetch)
13341 (uri (pypi-uri "xyzservices" version))
13342 (sha256
13343 (base32 "1n096zg9bd4n6w6axcm16m9sxdkc6qy1mipva0scbyj86rqn9rvg"))))
13344 (build-system pyproject-build-system)
13345 (arguments
13346 (list
13347 #:test-flags #~(list "-m" "not request")))
13348 (native-inputs
13349 (list python-pytest
13350 python-mercantile
13351 python-requests
13352 python-setuptools
13353 python-setuptools-scm))
13354 (home-page "https://github.com/geopandas/xyzservices")
13355 (synopsis "Source of XYZ tiles providers")
13356 (description "@code{xyzservices} is a lightweight library providing a
13357repository of available XYZ services offering raster basemap tiles. The
13358repository is provided via Python API and as a compressed JSON file.")
13359 (license license:bsd-3)))
13360
13361(define-public s3cmd
13362 (package
13363 (name "s3cmd")
13364 (version "2.4.0")
13365 (source
13366 (origin
13367 (method git-fetch)
13368 (uri (git-reference
13369 (url "https://github.com/s3tools/s3cmd")
13370 (commit (string-append "v" version))))
13371 (file-name (git-file-name name version))
13372 (sha256
13373 (base32 "168c49d1v8r7azv66zz0w07jalf434c2jpg2xzads5jnxzmiy73k"))))
13374 (build-system pyproject-build-system)
13375 (arguments
13376 (list
13377 #:tests? #f ; XXX: Tests require network access.
13378 #:phases
13379 #~(modify-phases %standard-phases
13380 (add-after 'unpack 'hide-wrapping
13381 (lambda _
13382 (substitute* "S3/MultiPart.py"
13383 (("sys\\.argv\\[0\\]")
13384 "\"s3cmd\""))
13385 (substitute* "s3cmd"
13386 (("optparser\\.get_prog_name\\(\\)")
13387 "\"s3cmd\"")))))))
13388 (native-inputs (list python-setuptools))
13389 (inputs (list python-dateutil python-magic))
13390 (home-page "https://s3tools.org/s3cmd")
13391 (synopsis "Command line tool for S3-compatible storage services")
13392 (description
13393 "S3cmd is a command line tool for uploading, retrieving and managing data
13394in storage services that are compatible with the Amazon Simple Storage
13395Service (S3) protocol, including S3 itself. It supports rsync-like backup,
13396GnuPG encryption, and more. It also supports management of Amazon's
13397CloudFront content delivery network.")
13398 (license license:gpl2+)))