projects/guix·blob wip-node-riscv64 · refs

10858 lines · 392.2 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2015 Eric Dvorsak <[email protected]>
3;;; Copyright © 2015-2025 Efraim Flashner <[email protected]>
4;;; Copyright © 2017 Christopher Baines <[email protected]>
5;;; Copyright © 2016, 2017 Danny Milosavljevic <[email protected]>
6;;; Copyright © 2013, 2014, 2015, 2016, 2020 Andreas Enge <[email protected]>
7;;; Copyright © 2016, 2017, 2019-2023 Marius Bakke <[email protected]>
8;;; Copyright © 2015-2025 Ricardo Wurmus <[email protected]>
9;;; Copyright © 2017, 2021 Roel Janssen <[email protected]>
10;;; Copyright © 2016, 2017, 2020 Julien Lepiller <[email protected]>
11;;; Copyright © 2016, 2017 Nikita <[email protected]>
12;;; Copyright © 2014, 2017, 2021 Eric Bavier <[email protected]>
13;;; Copyright © 2014, 2015 Mark H Weaver <[email protected]>
14;;; Copyright © 2015 Cyril Roelandt <[email protected]>
15;;; Copyright © 2015, 2016, 2017, 2019 Leo Famulari <[email protected]>
16;;; Copyright © 2016, 2019, 2022 Hartmut Goebel <[email protected]>
17;;; Copyright © 2016–2021 Tobias Geerinckx-Rice <[email protected]>
18;;; Copyright © 2015, 2017 Ben Woodcroft <[email protected]>
19;;; Copyright © 2015, 2016 Christine Lemmer-Webber <[email protected]>
20;;; Copyright © 2017 Adriano Peluso <[email protected]>
21;;; Copyright © 2016 Dylan Jeffers <sapientech@[email protected]>
22;;; Copyright © 2016 David Craven <[email protected]>
23;;; Copyright © 2017 Oleg Pykhalov <[email protected]>
24;;; Copyright © 2015, 2016 David Thompson <[email protected]>
25;;; Copyright © 2017 Mark Meyer <[email protected]>
26;;; Copyright © 2018 Tomáš Čech <[email protected]>
27;;; Copyright © 2018, 2019, 2021, 2024 Nicolas Goaziou <[email protected]>
28;;; Copyright © 2018 Mathieu Othacehe <[email protected]>
29;;; Copyright © 2018, 2020, 2021, 2022, 2023 Maxim Cournoyer <[email protected]>
30;;; Copyright © 2019 Vagrant Cascadian <[email protected]>
31;;; Copyright © 2019 Brendan Tildesley <[email protected]>
32;;; Copyright © 2019 Pierre Langlois <[email protected]>
33;;; Copyright © 2019, 2020 Tanguy Le Carrour <[email protected]>
34;;; Copyright © 2020 Jakub Kądziołka <[email protected]>
35;;; Copyright © 2020 Evan Straw <[email protected]>
36;;; Copyright © 2020 Alexandros Theodotou <[email protected]>
37;;; Copyright © 2020 Holger Peters <[email protected]>
38;;; Copyright © 2020 Noisytoot <[email protected]>
39;;; Copyright © 2020 Edouard Klein <[email protected]>
40;;; Copyright © 2020, 2021, 2022, 2023 Vinicius Monego <[email protected]>
41;;; Copyright © 2020 Konrad Hinsen <[email protected]>
42;;; Copyright © 2020, 2022, 2024 Giacomo Leidi <[email protected]>
43;;; Copyright © 2021 Ekaitz Zarraga <[email protected]>
44;;; Copyright © 2021 Greg Hogan <[email protected]>
45;;; Copyright © 2021 Maxime Devos <[email protected]>
46;;; Copyright © 2021 Pradana Aumars <[email protected]>
47;;; Copyright © 2021, 2022, 2024 Arun Isaac <[email protected]>
48;;; Copyright © 2021, 2022, 2024 jgart <[email protected]>
49;;; Copyright © 2021 Alice Brenon <[email protected]>
50;;; Copyright © 2021 Mekeor Melire <[email protected]>
51;;; Copyright © 2022 John Kehayias <[email protected]>
52;;; Copyright © 2022 Denis 'GNUtoo' Carikli <[email protected]>
53;;; Copyright © 2022, 2023, 2025 Felix Gruber <[email protected]>
54;;; Copyright © 2022 Peter Polidoro <[email protected]>
55;;; Copyright © 2022 Antero Mejr <[email protected]>
56;;; Copyright © 2022 Luis Henrique Gomes Higino <[email protected]>
57;;; Copyright © 2022 Nicolas Graves <[email protected]>
58;;; Copyright © 2022 Tomasz Jeneralczyk <[email protected]>
59;;; Copyright © 2022 msimonin <[email protected]>
60;;; Copyright © 2022 Michael Rohleder <[email protected]>
61;;; Copyright © 2022 Baptiste Strazzulla <[email protected]>
62;;; Copyright © 2023 dan <[email protected]>
63;;; Copyright © 2023 John Kehayias <[email protected]>
64;;; Copyright © 2023 Ivan Vilata-i-Balaguer <[email protected]>
65;;; Copyright © 2024 Troy Figiel <[email protected]>
66;;; Copyright © 2024, 2025 Sharlatan Hellseher <[email protected]>
67;;; Copyright © 2024 normally_js <[email protected]>
68;;; Copyright © 2024 Markku Korkeala <[email protected]>
69;;; Copyright © 2024 Nguyễn Gia Phong <[email protected]>
70;;; Copyright © 2024 Zheng Junjie <[email protected]>
71;;; Copyright © 2024 Spencer King <[email protected]>
72;;; Copyright © 2024 Attila Lendvai <[email protected]>
73;;;
74;;; This file is part of GNU Guix.
75;;;
76;;; GNU Guix is free software; you can redistribute it and/or modify it
77;;; under the terms of the GNU General Public License as published by
78;;; the Free Software Foundation; either version 3 of the License, or (at
79;;; your option) any later version.
80;;;
81;;; GNU Guix is distributed in the hope that it will be useful, but
82;;; WITHOUT ANY WARRANTY; without even the implied warranty of
83;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
84;;; GNU General Public License for more details.
85;;;
86;;; You should have received a copy of the GNU General Public License
87;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
88
89(define-module (gnu packages python-web)
90 #:use-module ((guix licenses) #:prefix license:)
91 #:use-module (guix build-system cargo)
92 #:use-module (guix build-system copy)
93 #:use-module (guix build-system pyproject)
94 #:use-module (guix build-system python)
95 #:use-module (guix download)
96 #:use-module (guix gexp)
97 #:use-module (guix git-download)
98 #:use-module (guix packages)
99 #:use-module (guix utils)
100 #:use-module (gnu packages admin)
101 #:use-module (gnu packages base)
102 #:use-module (gnu packages bash)
103 #:use-module (gnu packages certs)
104 #:use-module (gnu packages check)
105 #:use-module (gnu packages cmake)
106 #:use-module (gnu packages compression)
107 #:use-module (gnu packages crates-io)
108 #:use-module (gnu packages crates-web)
109 #:use-module (gnu packages curl)
110 #:use-module (gnu packages databases)
111 #:use-module (gnu packages django)
112 #:use-module (gnu packages freedesktop)
113 #:use-module (gnu packages glib)
114 #:use-module (gnu packages gnupg)
115 #:use-module (gnu packages graphviz)
116 #:use-module (gnu packages groff)
117 #:use-module (gnu packages libevent)
118 #:use-module (gnu packages libffi)
119 #:use-module (gnu packages linux)
120 #:use-module (gnu packages node)
121 #:use-module (gnu packages openstack)
122 #:use-module (gnu packages pcre)
123 #:use-module (gnu packages pkg-config)
124 #:use-module (gnu packages protobuf)
125 #:use-module (gnu packages python)
126 #:use-module (gnu packages python-build)
127 #:use-module (gnu packages python-check)
128 #:use-module (gnu packages python-compression)
129 #:use-module (gnu packages python-crypto)
130 #:use-module (gnu packages python-science)
131 #:use-module (gnu packages python-xyz)
132 #:use-module (gnu packages qt)
133 #:use-module (gnu packages rdf)
134 #:use-module (gnu packages rpc)
135 #:use-module (gnu packages rust-apps)
136 #:use-module (gnu packages serialization)
137 #:use-module (gnu packages sphinx)
138 #:use-module (gnu packages texinfo)
139 #:use-module (gnu packages time)
140 #:use-module (gnu packages tls)
141 #:use-module (gnu packages version-control)
142 #:use-module (gnu packages web)
143 #:use-module (gnu packages xml)
144 #:use-module (gnu packages)
145 #:use-module (srfi srfi-1))
146
147(define-public python-devpi-common
148 (package
149 (name "python-devpi-common")
150 (version "4.0.4")
151 (source
152 (origin
153 (method url-fetch)
154 (uri (pypi-uri "devpi_common" version))
155 (sha256
156 (base32 "1k217b0fvsc7k2afw6wwlvqr1ksnv1vjzfm61g358vn98nd0lni3"))))
157 (build-system pyproject-build-system)
158 (propagated-inputs (list python-lazy python-packaging-legacy
159 python-requests))
160 (native-inputs
161 (list python-pytest
162 python-setuptools
163 python-wheel))
164 (home-page "https://github.com/devpi/devpi")
165 (synopsis
166 "Utilities jointly used by devpi-server, devpi-client and others")
167 (description
168 "This package provides utilities jointly used by devpi-server,
169devpi-client and others.")
170 (license license:expat)))
171
172(define-public python-devpi-client
173 (package
174 (name "python-devpi-client")
175 (version "7.2.0")
176 (source
177 (origin
178 (method url-fetch)
179 (uri (pypi-uri "devpi-client" version))
180 (sha256
181 (base32 "0ywx4ql8lsypb17n2miq39bmkrp232sdk8g6pskqp1y3b223chy1"))))
182 (build-system pyproject-build-system)
183 (arguments
184 (list
185 #:test-flags
186 ;; This wants to use pip install
187 '(list "--ignore=testing/test_upload.py"
188 ;; These complain about finding distutils. It's not my fault,
189 ;; mate, setuptools is right there, but you won't pick it!
190 "--ignore=testing/test_list_remove.py"
191 "--ignore=testing/test_main.py"
192 "--ignore=testing/test_install.py"
193 "--ignore=testing/test_functional.py"
194 "--ignore=testing/test_test.py")
195 #:phases
196 '(modify-phases %standard-phases
197 (add-after 'unpack 'patch-tests
198 (lambda _
199 ;; Do not replace the directory name of the store item.
200 (substitute* "testing/conftest.py"
201 (("\"devpi-server\", \"devpi-init\"")
202 "\"/bin/devpi-server\", \"/bin/devpi-init\""))))
203 (add-before 'check 'set-HOME
204 ;; Some tests need this
205 (lambda _ (setenv "HOME" "/tmp"))))))
206 (propagated-inputs (list python-pypa-build
207 python-check-manifest
208 python-colorama
209 python-devpi-common
210 python-iniconfig
211 python-pkginfo
212 python-platformdirs
213 python-pluggy
214 python-pypitoken
215 python-tomli))
216 (native-inputs
217 (list python-devpi-server
218 python-pytest
219 python-setuptools
220 python-virtualenv))
221 (home-page "https://github.com/devpi/devpi")
222 (synopsis "Devpi upload/install/... commands for Python developers")
223 (description
224 "The devpi command line tool is typically used in conjunction with
225devpi-server. It allows uploading, testing and installing packages from devpi
226indexes.")
227 (license license:expat)))
228
229(define-public python-devpi-process
230 (package
231 (name "python-devpi-process")
232 (version "1.0.2")
233 (source
234 (origin
235 (method url-fetch)
236 (uri (pypi-uri "devpi_process" version))
237 (sha256
238 (base32 "0v26i8bs0n8f2ikizwyvq77fw3l0nsyl4wj8yff0r3y351ydqbs1"))))
239 (build-system pyproject-build-system)
240 (arguments
241 (list
242 #:phases
243 '(modify-phases %standard-phases
244 (add-after 'unpack 'relax-requirements
245 (lambda _
246 ;; Our package is too old, sorry.
247 (substitute* "pyproject.toml"
248 (("typing-extensions>=4.12.2")
249 "typing-extensions>=4.10.0"))))
250 (add-after 'unpack 'patch-tool-locations
251 (lambda* (#:key inputs #:allow-other-keys)
252 (substitute* "src/devpi_process/__init__.py"
253 (("_exe\\(\"devpi-init\"\\)")
254 (string-append "\"" (search-input-file inputs "/bin/devpi-init") "\""))
255 (("_exe\\(\"devpi-server\"\\)")
256 (string-append "\"" (search-input-file inputs "/bin/devpi-server") "\""))
257 (("_exe\\(\"devpi\"\\)")
258 (string-append "\"" (search-input-file inputs "/bin/devpi") "\""))))))))
259 (propagated-inputs (list python-devpi-client python-devpi-server
260 python-typing-extensions))
261 (native-inputs
262 (list nss-certs-for-test
263 python-covdefaults
264 python-hatchling
265 python-hatch-vcs
266 python-httpx
267 python-pytest
268 python-pytest-cov))
269 (home-page "https://github.com/devpi/devpi")
270 (synopsis "API to create and use a devpi server process")
271 (description
272 "This package provides a programmatic API to create and use a devpi
273server process.")
274 (license license:expat)))
275
276(define-public python-devpi-server
277 (package
278 (name "python-devpi-server")
279 (version "6.14.0")
280 (source
281 (origin
282 (method url-fetch)
283 (uri (pypi-uri "devpi-server" version))
284 (sha256
285 (base32 "08smfjhnvqj68fp45gzqm9axjcgnksc0z31v48llivnzlxwf8cmr"))))
286 (build-system pyproject-build-system)
287 (arguments
288 (list
289 #:test-flags
290 ;; These all fail with: "module 'py' has no attribute 'io'"
291 '(list "--ignore=test_devpi_server/test_importexport.py"
292 "--ignore=test_devpi_server/test_main.py"
293 "--ignore=test_devpi_server/test_genconfig.py")))
294 (propagated-inputs (list python-argon2-cffi
295 python-attrs
296 python-defusedxml
297 python-devpi-common
298 python-httpx
299 python-itsdangerous
300 python-lazy
301 python-legacy-cgi
302 python-passlib
303 python-platformdirs
304 python-pluggy
305 python-py
306 python-pyramid
307 python-repoze-lru
308 python-ruamel.yaml
309 python-strictyaml
310 python-waitress))
311 (native-inputs
312 (list python-execnet
313 python-pytest
314 python-pytest-timeout
315 python-setuptools
316 python-webtest
317 python-wheel))
318 (home-page "https://devpi.net")
319 (synopsis "Pypi.org caching server")
320 (description "This package implements a reliable private and pypi.org
321caching server.")
322 (license license:expat)))
323
324(define-public python-domain-connect
325 (package
326 (name "python-domain-connect")
327 (version "0.0.11")
328 (source
329 (origin
330 (method git-fetch) ;no tests in PyPI archive
331 (uri (git-reference
332 (url "https://github.com/Domain-Connect/domainconnect_python")
333 (commit (string-append "v" version))))
334 (file-name (git-file-name name version))
335 (sha256
336 (base32 "1dhqbx15h074g51mj73j9hlyvb11isjnj4s9ih5kbw1g4vf1q1jk"))))
337 (build-system pyproject-build-system)
338 (arguments
339 (list
340 ;; Check and sanity-check phases require /etc/resolv.conf, which is not
341 ;; present in container.
342 #:tests? #f
343 #:phases #~(modify-phases %standard-phases (delete 'sanity-check))))
344 (native-inputs
345 (list python-setuptools
346 python-wheel))
347 (propagated-inputs
348 (list python-cryptography
349 python-dnspython
350 python-future
351 python-publicsuffix
352 python-publicsuffixlist))
353 (home-page "https://github.com/Domain-Connect/domainconnect_python")
354 (synopsis "Client library for Domain Connect protocol")
355 (description
356 "This package provides a Service Provider functionality in both Sync and
357Async mode for @url{https://domainconnect.org/, Domain Connect protocol}.")
358 (license license:expat)))
359
360(define-public python-domain-connect-dyndns
361 (package
362 (name "python-domain-connect-dyndns")
363 (version "0.0.9")
364 (source
365 (origin
366 (method url-fetch)
367 (uri (pypi-uri "domain-connect-dyndns" version))
368 (sha256
369 (base32 "0srrblcb64bp7k5cqqivx4kykqdkmmzmspxwv66vix9k7wxdwqzx"))))
370 (build-system pyproject-build-system)
371 (arguments
372 (list
373 ;; Check and sanity-check phases require /etc/resolv.conf, which is not
374 ;; present in container.
375 #:tests? #f
376 #:phases #~(modify-phases %standard-phases (delete 'sanity-check))))
377 (native-inputs
378 (list python-setuptools
379 python-wheel))
380 (propagated-inputs
381 (list python-dnspython
382 python-domain-connect
383 python-requests
384 python-validators))
385 (home-page "https://github.com/Domain-Connect/DomainConnectDDNS-Python")
386 (synopsis "Domain Connect Dynamic DNS in Python")
387 ;; Project lacks meaningful description in README, see
388 ;; <https://github.com/Domain-Connect/DomainConnectDDNS-Python/issues/43>.
389 (description
390 "Python client library for Dynamic DNS using
391@url{https://www.domainconnect.org/, Domain Connect} protocol.")
392 (license license:expat)))
393
394(define-public python-eventlet
395 (package
396 (name "python-eventlet")
397 (version "0.38.2")
398 (source
399 (origin
400 (method url-fetch)
401 (uri (pypi-uri "eventlet" version))
402 (sha256
403 (base32
404 "1b7dhy3pyp3nfv0zzjrs7i3kam40cl1nh3acy2fd59ywy4x84ika"))))
405 (build-system pyproject-build-system)
406 (arguments
407 (list
408 #:test-flags
409 '(list "-k"
410 (string-append
411 "not TestGetaddrinfo"
412 " and not TestProxyResolver"
413 " and not test_noraise_dns_tcp"
414 " and not test_raise_dns_tcp"
415 " and not test_hosts_no_network"
416 " and not test_import_rdtypes_then_eventlet"
417 " and not test_patcher_existing_locks"
418 " and not test_dns_methods_are_green"))
419 #:phases
420 '(modify-phases %standard-phases
421 (add-after 'unpack 'avoid-OSError
422 (lambda _
423 ;; If eventlet tries to load greendns, an OSError is thrown when
424 ;; getprotobyname is called. Thankfully there is an environment
425 ;; variable to disable the greendns import, so use it:
426 (setenv "EVENTLET_NO_GREENDNS" "yes"))))))
427 (native-inputs
428 (list python-hatch-vcs
429 python-hatchling
430 python-pytest
431 python-twine))
432 (propagated-inputs
433 (list python-dnspython
434 python-greenlet
435 python-monotonic))
436 (home-page "https://eventlet.net")
437 (synopsis "Concurrent networking library for Python")
438 (description
439 "Eventlet is a concurrent networking library for Python that
440allows you to change how you run your code, not how you write it.
441It uses @code{epoll} or @code{libevent} for highly scalable non-blocking I/O.
442Coroutines ensure that the developer uses a blocking style of programming
443that is similar to threading, but provide the benefits of non-blocking I/O.
444The event dispatch is implicit, which means you can easily use @code{Eventlet}
445from the Python interpreter, or as a small part of a larger application.")
446 (license license:expat)))
447
448(define-public python-hookdns
449 (package
450 (name "python-hookdns")
451 (version "2.0.0")
452 (source
453 (origin
454 (method url-fetch)
455 (uri (pypi-uri "hookdns" version))
456 (sha256
457 (base32 "087x12dy6slhyqwqblby2fpjdcy61yk3lqp3fplami0rmbn02fb7"))))
458 (build-system pyproject-build-system)
459 (arguments
460 (list
461 #:test-flags
462 #~(list "-k" (string-join
463 ;; Tests requiring networking.
464 (list
465 "not test_patch_contextmanager_with_another_hostname"
466 "test_patch_contextmanager_with_another_hostname_ipv6"
467 "test_patch_contextmanager_with_ipv4"
468 "test_patch_contextmanager_with_name"
469 "test_patch_contextmanager_with_public_fqdn_and_"
470 "test_patch_contextmanager_with_unknown_hostname"
471 "test_patch_decorator_with_another_hostname"
472 "test_patch_decorator_with_another_hostname_ipv6"
473 "test_patch_decorator_with_ipv4"
474 "test_patch_decorator_with_name"
475 "test_patch_decorator_with_public_fqdn_and_a_name_for_"
476 "test_patch_decorator_with_unknown_hostname"
477 "test_real_getaddrinfo_with_name_ipv6"
478 "test_real_getaddrinfo_with_public_fqdn_ipv4"
479 "test_real_getaddrinfo_with_public_fqdn_ipv6"
480 "test_real_gethostbyname_ex_with_public_fqdn"
481 "test_real_gethostbyname_with_public_fqdn"
482 "test_real_requests_ip"
483 "test_real_requests_name"
484 "test_real_requests_with_public_fqdn"
485 "test_reentrant")
486 " and not "))))
487 (native-inputs
488 (list python-pytest
489 python-requests
490 python-setuptools
491 python-wheel))
492 (home-page "https://github.com/cle-b/hookdns")
493 (synopsis "DNS resolution customization library")
494 (description
495 "HookDNS implements functionality that allows for modifying name
496resolution in a Python script without any changes to the hosts file or the use
497of a fake DNS resolver.")
498 (license license:asl2.0)))
499
500(define-public python-huggingface-hub
501 (package
502 (name "python-huggingface-hub")
503 (version "0.23.2")
504 (source
505 (origin
506 (method git-fetch)
507 (uri (git-reference
508 (url "https://github.com/huggingface/huggingface_hub")
509 (commit (string-append "v" version))))
510 (file-name (git-file-name name version))
511 (sha256
512 (base32 "0hygxqcixkc1d9sr47j2km6z0p17aj4k1dzm4cvpddrvhrgqayq5"))))
513 (build-system pyproject-build-system)
514 (arguments
515 (list
516 #:test-flags
517 ;; We don't have sentence_transformers...
518 '(list "--ignore=contrib/sentence_transformers/test_sentence_transformers.py"
519 ;; ...nor do we have InquirerPy...
520 "--ignore=tests/test_command_delete_cache.py"
521 ;; ...or timm...
522 "--ignore=contrib/timm/test_timm.py"
523 ;; ...or spacy_huggingface_hub
524 "--ignore=contrib/spacy/test_spacy.py"
525 ;; These all require internet access
526 "--ignore=tests/test_cache_no_symlinks.py"
527 "--ignore=tests/test_cache_layout.py"
528 "--ignore=tests/test_commit_scheduler.py"
529 "--ignore=tests/test_file_download.py"
530 "--ignore=tests/test_hf_api.py"
531 "--ignore=tests/test_hf_file_system.py"
532 "--ignore=tests/test_inference_api.py"
533 "--ignore=tests/test_inference_async_client.py"
534 "--ignore=tests/test_inference_client.py"
535 "--ignore=tests/test_inference_text_generation.py"
536 "--ignore=tests/test_login_utils.py"
537 "--ignore=tests/test_offline_utils.py"
538 "--ignore=tests/test_repocard.py"
539 "--ignore=tests/test_repository.py"
540 "--ignore=tests/test_snapshot_download.py"
541 "--ignore=tests/test_utils_cache.py"
542 "--ignore=tests/test_utils_git_credentials.py"
543 "--ignore=tests/test_utils_http.py"
544 "--ignore=tests/test_utils_pagination.py"
545 "--ignore=tests/test_webhooks_server.py"
546 "-k" (string-append
547 "not test_push_to_hub"
548 " and not test_from_pretrained_model_id_only"
549 " and not test_from_pretrained_model_id_and_revision"))
550 #:phases
551 '(modify-phases %standard-phases
552 (add-before 'check 'pre-check
553 ;; Some tests need to write to HOME.
554 (lambda _ (setenv "HOME" "/tmp"))))))
555 (propagated-inputs
556 (list python-filelock
557 python-fsspec
558 python-packaging
559 python-pyyaml
560 python-requests
561 python-tqdm
562 python-typing-extensions))
563 (native-inputs
564 (list python-aiohttp
565 python-fastapi
566 python-jedi
567 python-jinja2
568 python-mypy
569 python-numpy
570 python-pillow
571 python-pydantic-2
572 python-pytest
573 python-pytest-asyncio
574 python-pytest-cov
575 python-pytest-env
576 python-pytest-rerunfailures
577 python-pytest-vcr
578 python-pytest-xdist
579 python-setuptools
580 python-types-requests
581 python-types-toml
582 python-types-urllib3
583 python-typing-extensions
584 python-urllib3
585 python-wheel))
586 (home-page "https://github.com/huggingface/huggingface_hub")
587 (synopsis "Client library for accessing the huggingface.co hub")
588 (description
589 "This package provides a client library to download and publish models,
590datasets and other repos on the @url{huggingface.co} hub.")
591 (license license:asl2.0)))
592
593(define-public python-lazr-restfulclient
594 (package
595 (name "python-lazr-restfulclient")
596 (version "0.14.4")
597 (source
598 (origin
599 (method url-fetch)
600 (uri (pypi-uri "lazr.restfulclient" version))
601 (sha256
602 (base32 "11yhlqmdf2cqbdfzn8gdmzvmcivh4fflr18zf412sflvfjrdc3xz"))))
603 (build-system python-build-system)
604 ;; Disable the test suite to avoid the lazr.authentication requirement,
605 ;; which requires the ancient 'oauth', a Python 2 only library.
606 (arguments (list #:tests? #f))
607 (propagated-inputs
608 (list python-distro
609 python-httplib2
610 python-oauthlib
611 python-pyparsing
612 python-six
613 python-wadllib))
614 (home-page "https://launchpad.net/lazr.restfulclient")
615 (synopsis "Web client Python library extending wadlib")
616 (description "This package provides a programmable client library that
617adds functionality on top of @code{wadlib}.")
618 (license license:lgpl3+)))
619
620(define-public python-launchpadlib
621 (package
622 (name "python-launchpadlib")
623 (version "1.10.16")
624 (source
625 (origin
626 (method url-fetch)
627 (uri (pypi-uri "launchpadlib" version))
628 (sha256
629 (base32 "106aixwchwyb100wlf4cnj1vgsi2d7x40ps8xv8az27r6qwv3x0d"))))
630 (build-system python-build-system)
631 (arguments
632 (list #:phases #~(modify-phases %standard-phases
633 (add-before 'check 'set-home
634 (lambda _
635 ;; Tests require a writable home.
636 (setenv "HOME" "/tmp"))))))
637 (propagated-inputs
638 (list python-httplib2
639 python-keyring
640 python-lazr-restfulclient
641 python-lazr-uri))
642 (native-inputs (list python-mock python-testresources python-wadllib))
643 (home-page "https://help.launchpad.net/API/launchpadlib")
644 (synopsis "Python client library for Launchpad's web service")
645 (description "@code{launchpadlib} is a Python library that allows
646scripting Launchpad via its the web service API.")
647 (license license:lgpl3+)))
648
649(define-public python-lazr-uri
650 (package
651 (name "python-lazr-uri")
652 (version "1.0.6")
653 (source
654 (origin
655 (method url-fetch)
656 (uri (pypi-uri "lazr.uri" version))
657 (sha256
658 (base32 "0r44rw0bj5mayhqwfwj1dnrjgzj1lrh7ishiddd1vygnrczqa9jh"))))
659 (build-system python-build-system)
660 (native-inputs (list python-zope-testrunner))
661 (home-page "https://launchpad.net/lazr.uri")
662 (synopsis "Python URI manipulation library")
663 (description "This Python package provides a self-contained, easily
664reusable library for parsing, manipulating, and generating URIs.")
665 (license license:lgpl3)))
666
667(define-public python-legacy-cgi
668 (package
669 (name "python-legacy-cgi")
670 (version "2.6.1")
671 (source
672 (origin
673 (method url-fetch)
674 (uri (pypi-uri "legacy_cgi" version))
675 (sha256
676 (base32 "0hksizyq7awmwh3337zy0rmj47x6b5igzam6ffj74gbwfjfakbgj"))))
677 (build-system pyproject-build-system)
678 (native-inputs (list python-poetry-core python-pytest))
679 (home-page "https://github.com/jackrosenthal/legacy-cgi")
680 (synopsis "Fork of the legacy standard library cgi and cgitb modules")
681 (description
682 "This is a fork of the standard library modules @code{cgi} and
683@code{cgitb}. They are slated to be removed from the Python standard library
684in Python 3.13 by PEP-594.")
685 (license license:psfl)))
686
687(define-public python-portend
688 (package
689 (name "python-portend")
690 (version "3.2.0")
691 (source
692 (origin
693 (method url-fetch)
694 (uri (pypi-uri "portend" version))
695 (sha256
696 (base32 "0wpvixicc3d0lack65554mvdrrckkn18p1xcgiv9v5cwq59a6l2j"))))
697 (build-system pyproject-build-system)
698 ;; Do not test pyproject.toml with python-pytest-checkdocs as it tries to
699 ;; download dependencies.
700 (arguments
701 '(#:test-flags '("-k" "not project")))
702 (propagated-inputs (list python-tempora))
703 ;; TODO: Add python-pytest-ruff to native-inputs once it has been packaged.
704 (native-inputs (list python-pytest
705 python-pytest-black
706 python-pytest-checkdocs
707 python-pytest-cov
708 python-pytest-enabler
709 python-pytest-mypy
710 python-setuptools
711 python-wheel))
712 (home-page "https://github.com/jaraco/portend")
713 (synopsis "Monitor TCP ports for bound or unbound states")
714 (description
715 "@code{python-portend} can be used to monitor TCP ports for bound or
716unbound states. For example, waiting for a port to be occupied or freed
717within a set timeout. @code{python-portend} can also be used directly from
718the command line.")
719 (license license:expat)))
720
721(define-public python-prawcore
722 (package
723 (name "python-prawcore")
724 (version "2.4.0")
725 (source
726 (origin
727 (method git-fetch)
728 (uri (git-reference
729 (url "https://github.com/praw-dev/prawcore")
730 (commit (string-append "v" version))))
731 (file-name (git-file-name name version))
732 (sha256
733 (base32 "1y7gh7kk002b2h1ppkr1llb2gjfnby28zvx11j4ji0wm3r3rjh5l"))))
734 (build-system pyproject-build-system)
735 (arguments
736 ;; XXX: These tests fail with an incomplete request response.
737 (list #:test-flags
738 #~'("-k" #$(string-append
739 "not test_revoke__access_token_with_refresh_set"
740 " and not test_revoke__access_token_without_refresh_set"
741 " and not test_revoke__refresh_token_with_access_set"
742 " and not test_refresh__with_scopes"
743 " and not test_request__patch"))))
744 (native-inputs
745 (list python-betamax
746 python-betamax-matchers
747 python-betamax-serializers
748 python-flit-core
749 python-mock
750 python-pytest
751 python-testfixtures))
752 (propagated-inputs
753 (list python-requests))
754 (synopsis "Core component of PRAW")
755 (description "PRAWcore is a low-level communication layer used by PRAW.")
756 (home-page "https://praw.readthedocs.io/en/latest/")
757 (license license:bsd-2)))
758
759(define-public python-praw
760 (package
761 (name "python-praw")
762 (version "7.8.1")
763 (source
764 (origin
765 (method git-fetch)
766 (uri (git-reference
767 (url "https://github.com/praw-dev/praw")
768 (commit (string-append "v" version))))
769 (file-name (git-file-name name version))
770 (sha256
771 (base32 "05qq43l4334cq8r8k731qnb45nq12vvfdxwbr6q84a1hafp7n4cg"))))
772 (build-system pyproject-build-system)
773 (arguments
774 (list #:test-flags
775 #~(list "--ignore=tests/units/models"
776 "--ignore=tests/integration/models"
777 "--ignore=tests/unit/test_config.py"
778 "--ignore=tests/integration/test_reddit.py")))
779 (native-inputs
780 (list python-betamax
781 python-betamax-matchers
782 python-flit-core
783 python-pytest))
784 (propagated-inputs
785 (list python-prawcore python-update-checker python-websocket-client))
786 (synopsis "Python Reddit API Wrapper")
787 (description "PRAW is a Python package that allows for simple access to
788Reddit’s API. It aims to be easy to use and internally follows all of Reddit’s
789API rules.")
790 (home-page "https://praw.readthedocs.io/en/latest/")
791 (license license:bsd-2)))
792
793(define-public python-frozenlist
794 (package
795 (name "python-frozenlist")
796 (version "1.2.0")
797 (source
798 (origin
799 (method url-fetch)
800 (uri (pypi-uri "frozenlist" version))
801 (sha256
802 (base32 "1pkr23by7pk9lsmsh0wiqirpkq3f1f08b0615nbzysn51bk1n838"))))
803 (build-system python-build-system)
804 (arguments
805 '(#:phases
806 (modify-phases %standard-phases
807 (replace 'check
808 (lambda* (#:key tests? #:allow-other-keys)
809 (when tests?
810 (invoke "pytest" "tests")))))))
811 (native-inputs (list python-pytest))
812 (home-page "https://github.com/aio-libs/frozenlist")
813 (synopsis "List-like data structure for Python")
814 (description "@code{frozenlist.FrozenList} is a list-like structure which
815implements @code{collections.abc.MutableSequence}. It can be made immutable
816by calling @code{FrozenList.freeze}.")
817 (license license:asl2.0)))
818
819(define-public python-aiobotocore
820 (package
821 (name "python-aiobotocore")
822 (version "2.17.0")
823 (source
824 (origin
825 (method url-fetch)
826 (uri (pypi-uri "aiobotocore" version))
827 (sha256
828 (base32 "1hlwgy1z6ln6bh7b2i9syv7q2bagjkjbws247gbgkgv5qlri6153"))))
829 (build-system pyproject-build-system)
830 (arguments
831 (list
832 ;; Too many tests fail seemingly because they need Internet access.
833 #:tests? #false
834 #:test-flags
835 '(list
836 ;; No module named 'tests'
837 "--ignore=tests/test_config.py"
838 ;; function uses no argument 's3_verify'
839 "--ignore=tests/test_basic_s3.py"
840 ;; function uses no argument 'signature_version'
841 "--ignore=tests/test_dynamodb.py"
842 ;; attempted relative import with no known parent package
843 "--ignore=tests/test_stubber.py"
844 ;; No module named 'pip'
845 "--ignore=tests/test_version.py")))
846 (propagated-inputs (list python-aiohttp
847 python-aioitertools
848 python-botocore
849 python-jmespath
850 python-multidict
851 python-dateutil
852 python-urllib3
853 python-wrapt))
854 (native-inputs
855 (list python-dill
856 python-docutils
857 python-moto
858 python-pytest
859 python-pytest-asyncio
860 python-requests
861 python-setuptools
862 python-werkzeug
863 python-wheel))
864 (home-page "https://pypi.org/project/aiobotocore/")
865 (synopsis "Async client for AWS services using botocore and aiohttp")
866 (description "This package provides an async client for Amazon services
867using botocore and aiohttp/asyncio. This library is a mostly full featured
868asynchronous version of botocore.")
869 (license license:asl2.0)))
870
871(define-public python-aiohappyeyeballs
872 (package
873 (name "python-aiohappyeyeballs")
874 (version "2.4.4")
875 (source
876 (origin
877 (method url-fetch)
878 (uri (pypi-uri "aiohappyeyeballs" version))
879 (sha256
880 (base32 "0ibpfm552pflim399qq34cnd79xhz5qr5khqzhx1hqwwi23pvpaz"))))
881 (build-system pyproject-build-system)
882 (native-inputs
883 (list python-poetry-core
884 python-pytest
885 python-pytest-asyncio
886 python-pytest-cov))
887 (home-page "https://github.com/aio-libs/aiohappyeyeballs")
888 (synopsis "Happy Eyeballs for asyncio")
889 (description "This library exists to allow connecting with Happy
890Eyeballs (RFC 8305) when you already have a list of @code{addrinfo} and not a
891DNS name.")
892 (license license:psfl)))
893
894(define-public python-aioitertools
895 (package
896 (name "python-aioitertools")
897 (version "0.12.0")
898 (source
899 (origin
900 (method url-fetch)
901 (uri (pypi-uri "aioitertools" version))
902 (sha256
903 (base32 "0syxv2r90d6410hc68jxhk610pdgx19n1n5rc7shaxxv9xdhbaf2"))))
904 (build-system pyproject-build-system)
905 ;; Curiously, no tests are collected although they exist.
906 (arguments (list #:tests? #false))
907 (propagated-inputs (list python-typing-extensions))
908 (native-inputs
909 (list python-coverage
910 python-flake8
911 python-flit-core
912 python-mypy
913 python-pytest
914 python-pytest-asyncio
915 python-sphinx))
916 (home-page "https://pypi.org/project/aioitertools/")
917 (synopsis "Itertools and builtins for AsyncIO and mixed iterables")
918 (description
919 "This package provides an implementation of itertools, builtins, and more
920for AsyncIO and mixed-type iterables.")
921 (license license:expat)))
922
923(define-public python-aiosignal
924 (package
925 (name "python-aiosignal")
926 (version "1.3.1")
927 (source
928 (origin
929 (method url-fetch)
930 (uri (pypi-uri "aiosignal" version))
931 (sha256
932 (base32 "1z4cnqww6j0xl6f3vx2r6kfv1hdny1pnlll7difvfj8nbvhrdkal"))))
933 (build-system pyproject-build-system)
934 (arguments (list #:test-flags #~(list "tests")))
935 (propagated-inputs (list python-frozenlist))
936 (native-inputs
937 (list python-pytest
938 python-pytest-asyncio
939 python-pytest-cov
940 python-setuptools
941 python-wheel))
942 (home-page "https://github.com/aio-libs/aiosignal")
943 (synopsis "Callback manager for Python @code{asyncio} projects")
944 (description "This Python module provides @code{Signal}, an abstraction to
945register asynchronous callbacks. The @code{Signal} abstraction can be used
946for adding, removing and dropping callbacks.")
947 (license license:asl2.0)))
948
949(define-public python-aiohttp
950 (package
951 (name "python-aiohttp")
952 (version "3.11.11")
953 (source
954 (origin
955 (method url-fetch)
956 (uri (pypi-uri "aiohttp" version))
957 (sha256
958 (base32 "0gihj076nm3863sqfnbh786621w1ad7lj7fq88d85wzbwvqwfjdv"))
959 (snippet
960 #~(begin
961 (use-modules ((guix build utils)))
962 ;; TODO: Unbundle the llhttp sources.
963 ;; (delete-file-recursively "vendor")
964 (delete-file "aiohttp/_http_parser.c")
965 (delete-file "aiohttp/_http_writer.c")))))
966 (build-system pyproject-build-system)
967 (arguments
968 (list
969 #:test-flags
970 '(list
971 ;; This tests requires the 'proxy.py' module, not yet packaged.
972 "--ignore=tests/test_proxy_functional.py"
973 ;; These tests need brotli.
974 "--ignore=tests/test_web_sendfile_functional.py"
975 "--ignore=tests/test_web_functional.py"
976 ;; These tests need pytest_codspeed
977 "--ignore-glob=tests/test_benchmarks*"
978 ;; These tests need python_on_whales
979 "--ignore=tests/autobahn/test_autobahn.py"
980 "-k"
981 ;; These tests fail for unknown reasons (see:
982 ;; https://github.com/aio-libs/aiohttp/issues/7130)
983 (string-append
984 "not test_no_warnings "
985 "and not test_default_loop "
986 "and not test_ctor_global_loop "
987 "and not test_set_loop_default_loop "
988
989 ;; Disable brotli tests, because we’re not providing that optional
990 ;; library.
991 "and not test_feed_eof_no_err_brotli "
992
993 ;; Disable the following tests as they require
994 ;; networking.
995 "and not TestDeflateBuffer "
996 "and not test_client_session_timeout_zero "
997 "and not test_empty_body "
998 "and not test_mark_formdata_as_processed[pyloop] "
999 "and not test_receive_runtime_err[pyloop] "
1000
1001 ;; assert 'gzip, deflate' == 'gzip, deflate, br'
1002 "and not test_headers[pyloop] "
1003 ;; ~/.. does not resolve
1004 "and not test_add_static_path_resolution"))
1005 #:phases
1006 '(modify-phases %standard-phases
1007 (add-after 'unpack 'fix-tests
1008 (lambda _
1009 ;; Make sure the timestamp of this file is > 1990, because a few
1010 ;; tests like test_static_file_if_modified_since_past_date depend
1011 ;; on it.
1012 (let ((late-90s (* 60 60 24 365 30)))
1013 (utime "tests/data.unknown_mime_type" late-90s late-90s))))
1014 (add-before 'build 'cythonize
1015 (lambda _
1016 ;; Adapted from the Makefile.
1017 (with-directory-excursion "aiohttp"
1018 (for-each
1019 (lambda (file)
1020 (invoke "cython" "-3"
1021 file "-I" "."))
1022 (find-files "." "_.*\\.pyx$"))))))))
1023 (propagated-inputs
1024 (list python-aiohappyeyeballs
1025 python-aiosignal
1026 python-async-timeout
1027 python-attrs
1028 python-frozenlist
1029 python-multidict
1030 python-propcache
1031 python-yarl))
1032 (native-inputs
1033 (list gunicorn-bootstrap
1034 python-cython-3
1035 python-freezegun
1036 python-pytest
1037 python-pytest-cov
1038 python-pytest-mock
1039 python-pytest-xdist
1040 python-re-assert
1041 python-setuptools
1042 python-wheel))
1043 (home-page "https://github.com/aio-libs/aiohttp/")
1044 (synopsis "Async HTTP client/server framework (asyncio)")
1045 (description "@code{aiohttp} is an asynchronous HTTP client/server
1046framework.
1047
1048Its main features are:
1049@itemize
1050@item Supports both client and server side of HTTP protocol.
1051@item Supports both client and server Web-Sockets out-of-the-box without the
1052Callback Hell.
1053@item Web-server has middlewares and pluggable routing.
1054@end itemize")
1055 (license license:asl2.0)))
1056
1057(define-public python-aiohttp-socks
1058 (package
1059 (name "python-aiohttp-socks")
1060 (version "0.10.1")
1061 (source
1062 (origin
1063 (method url-fetch)
1064 (uri (pypi-uri "aiohttp_socks" version))
1065 (sha256
1066 (base32
1067 "0s70jpcr9wc8ld2v1w309cz7r8mm2bipf6zbkdqqaa0z0pwf3wj9"))))
1068 (build-system pyproject-build-system)
1069 (arguments (list #:tests? #false)) ;none included
1070 (propagated-inputs
1071 (list python-aiohttp python-socks))
1072 (native-inputs (list python-setuptools python-wheel))
1073 (home-page "https://github.com/romis2012/aiohttp-socks")
1074 (synopsis "SOCKS proxy connector for aiohttp")
1075 (description "This package provides a SOCKS proxy connector for
1076aiohttp. It supports SOCKS4(a) and SOCKS5.")
1077 (license license:asl2.0)))
1078
1079(define-public python-aiodns
1080 (package
1081 (name "python-aiodns")
1082 (version "3.0.0")
1083 (source
1084 (origin
1085 (method url-fetch)
1086 (uri (pypi-uri "aiodns" version))
1087 (sha256
1088 (base32
1089 "1mlcw14hxyzd2yg89gj1l84gfi8nbl7h32iw17myxz23wymxyswl"))))
1090 (build-system python-build-system)
1091 (propagated-inputs (list python-pycares))
1092 (arguments
1093 `(#:tests? #f)) ;tests require internet access
1094 (home-page "https://github.com/saghul/aiodns")
1095 (synopsis "Simple DNS resolver for asyncio")
1096 (description "@code{aiodns} provides a simple way for doing
1097asynchronous DNS resolutions with a synchronous looking interface by
1098using @url{https://github.com/saghul/pycares,pycares}.")
1099 (license license:expat)))
1100
1101(define-public python-aioquic
1102 (package
1103 (name "python-aioquic")
1104 (version "1.2.0")
1105 (source
1106 (origin
1107 (method url-fetch)
1108 (uri (pypi-uri "aioquic" version))
1109 (sha256
1110 (base32 "16bigrn5b46c7nmpzxhnlhh4y03hwc7dbd0mi5f8r53i7yxn64pr"))))
1111 (build-system pyproject-build-system)
1112 (arguments
1113 (list
1114 #:test-flags
1115 #~(list "-k" (string-join
1116 ;; AssertionError: AlertBadCertificate not raised
1117 (list "not test_verify_subject_no_subjaltname"
1118 ;; AttributeError: module
1119 ;; 'service_identity.cryptography' has no attribute
1120 ;; 'extract_patterns'
1121 "test_verify_subject_with_subjaltname"
1122 ;; AttributeError: module
1123 ;; 'service_identity.cryptography' has no attribute
1124 ;; 'extract_patterns'
1125 "test_verify_subject_with_subjaltname_ipaddress")
1126 " and not "))))
1127 (native-inputs
1128 (list nss-certs-for-test
1129 python-pytest
1130 python-setuptools
1131 python-wheel))
1132 (inputs
1133 (list openssl))
1134 (propagated-inputs
1135 (list python-certifi
1136 python-pylsqpack
1137 python-pyopenssl
1138 python-service-identity))
1139 (home-page "https://github.com/aiortc/aioquic")
1140 (synopsis "QUIC and HTTP3 implementation in Python")
1141 (description
1142 "@code{aioquic} is a library for the QUIC network protocol in Python.
1143It features a minimal TLS 1.3 implementation, a QUIC stack and an HTTP/3 stack.")
1144 (license license:bsd-3)))
1145
1146(define-public python-aiorpcx
1147 (package
1148 (name "python-aiorpcx")
1149 (version "0.22.1")
1150 (source
1151 (origin
1152 (method url-fetch)
1153 (uri (pypi-uri "aiorpcX" version))
1154 (sha256
1155 (base32
1156 "0lx54bcinp44fmr8q4bbffsqbkg8kdcwykf9i5jj0bj3sfzgf9k0"))))
1157 (build-system python-build-system)
1158 (propagated-inputs
1159 (list python-attrs))
1160 (home-page "https://github.com/kyuupichan/aiorpcX")
1161 (synopsis "Generic asyncio RPC implementation")
1162 (description
1163 "The aiorpcX library is a generic asyncio implementation of RPC suitable
1164for an application that is a client, server or both.
1165
1166The package includes a module with full coverage of JSON RPC versions 1.0 and
11672.0, JSON RPC protocol auto-detection, and arbitrary message framing. It also
1168comes with a SOCKS proxy client.")
1169 (license (list license:expat license:bsd-2))))
1170
1171(define-public python-aiorpcx-0.18
1172 (package
1173 (inherit python-aiorpcx)
1174 (version "0.18.7")
1175 (source
1176 (origin
1177 (method url-fetch)
1178 (uri (pypi-uri "aiorpcX" version))
1179 (sha256
1180 (base32
1181 "1rswrspv27x33xa5bnhrkjqzhv0sknv5kd7pl1vidw9d2z4rx2l0"))))))
1182
1183(define-public python-aiostream
1184 (package
1185 (name "python-aiostream")
1186 (version "0.4.5")
1187 (source (origin
1188 ;; Tests not included in pypi release.
1189 (method git-fetch)
1190 (uri (git-reference
1191 (url "https://github.com/vxgmichel/aiostream")
1192 (commit (string-append "v" version))))
1193 (file-name (git-file-name name version))
1194 (sha256
1195 (base32
1196 "0l2ijb7yk0820wiyf6zrzx8fhzf8925an7r06mcaw3in1mr6rssq"))))
1197 (build-system python-build-system)
1198 (native-inputs
1199 (list python-pytest
1200 python-pytest-asyncio
1201 python-pytest-cov
1202 python-pytest-runner
1203 python-setuptools
1204 python-wheel))
1205 (home-page "https://github.com/vxgmichel/aiostream")
1206 (synopsis "Generator-based operators for asynchronous iteration")
1207 (description "@code{aiostream} provides a collection of stream operators that can
1208be combined to create asynchronous pipelines of operations. It can be seen as an
1209asynchronous version of @code{itertools}, although some aspects are slightly
1210different. All the provided operators return a unified interface called a stream. A
1211stream is an enhanced asynchronous iterable.")
1212 (license license:gpl3)))
1213
1214(define-public python-asgiref
1215 (package
1216 (name "python-asgiref")
1217 (version "3.8.1")
1218 (source (origin
1219 (method url-fetch)
1220 (uri (pypi-uri "asgiref" version))
1221 (sha256
1222 (base32 "146mhkn3zp2bqf7j6r3chdlvfzgs5x1lrnqahsllgjdyl20bshy3"))))
1223 (build-system pyproject-build-system)
1224 (native-inputs
1225 (list python-mypy python-pytest python-pytest-asyncio python-setuptools
1226 python-wheel))
1227 (home-page "https://github.com/django/asgiref/")
1228 (synopsis "ASGI specs, helper code, and adapters")
1229 (description
1230 "ASGI is a standard for Python asynchronous web apps and servers to
1231communicate with each other, and positioned as an asynchronous successor to
1232WSGI. This package includes libraries for implementing ASGI servers.")
1233 (license license:bsd-3)))
1234
1235(define-public python-asgi-csrf
1236 (package
1237 (name "python-asgi-csrf")
1238 (version "0.11")
1239 (source (origin
1240 (method git-fetch) ;for tests
1241 (uri (git-reference
1242 (url "https://github.com/simonw/asgi-csrf")
1243 (commit version)))
1244 (file-name (git-file-name name version))
1245 (sha256
1246 (base32
1247 "1dn9v47z2b599cnwahxvzsll2w28940ycgh5skxgq04vcqqssf29"))))
1248 (build-system pyproject-build-system)
1249 (propagated-inputs (list python-itsdangerous python-multipart))
1250 (native-inputs (list python-asgi-lifespan
1251 python-httpx
1252 python-pytest
1253 python-pytest-asyncio
1254 python-starlette
1255 python-setuptools
1256 python-wheel))
1257 (home-page "https://github.com/simonw/asgi-csrf")
1258 (synopsis "ASGI middleware for protecting against CSRF attacks")
1259 (description "This Asynchronous Server Gateway Interface (ASGI)
1260middleware protects against Cross-site request forgery (CSRF) attacks.
1261It implements the Double Submit Cookie pattern, where a cookie is set
1262that is then compared to a @code{csrftoken} hidden form field or a
1263@code{x-csrftoken} HTTP header.")
1264 (license license:asl2.0)))
1265
1266(define-public python-asgi-lifespan
1267 (package
1268 (name "python-asgi-lifespan")
1269 (version "2.1.0")
1270 (source (origin
1271 (method git-fetch) ;for tests
1272 (uri (git-reference
1273 (url "https://github.com/florimondmanca/asgi-lifespan")
1274 (commit version)))
1275 (file-name (git-file-name name version))
1276 (sha256
1277 (base32
1278 "0iqa3h61gsq1qd6j9v68k989596m9n9k1dx8zv6135rmhzzrs296"))))
1279 (build-system pyproject-build-system)
1280 (arguments
1281 (list
1282 #:test-flags
1283 '(list "-c" "/dev/null" ;ignore coverage-related options
1284 "-k"
1285 (string-append
1286 ;; XXX: Some tests fail because of "Exceptions from Trio nursery"
1287 "not (test_lifespan_manager[trio-None-None-StartupFailed]"
1288 " or test_lifespan_manager[trio-None-BodyFailed-None]"
1289 " or test_lifespan_manager[trio-None-BodyFailed-StartupFailed]"
1290 " or test_lifespan_manager[trio-ShutdownFailed-None-None]"
1291 " or test_lifespan_manager[trio-ShutdownFailed-None-StartupFailed]"
1292 " or test_lifespan_manager[trio-ShutdownFailed-BodyFailed-StartupFailed]"
1293 " or test_lifespan_timeout[trio-slow_shutdown]"
1294 " or test_lifespan_not_supported[trio-http_only]"
1295 " or test_lifespan_not_supported[trio-http_no_assert]"
1296 " or test_lifespan_not_supported[trio-http_no_assert_before_receive_request]"
1297 ")"))
1298 #:phases
1299 '(modify-phases %standard-phases
1300 (add-after 'unpack 'compatibility
1301 (lambda _
1302 ;; httpx version 0.28.0 removed the "app" shortcut.
1303 (substitute* "tests/test_manager.py"
1304 (("app=manager.app")
1305 "transport=httpx.ASGITransport(manager.app)")))))))
1306 (native-inputs (list python-httpx
1307 python-pytest
1308 python-pytest-asyncio
1309 python-pytest-trio
1310 python-starlette
1311 python-setuptools
1312 python-wheel))
1313 (propagated-inputs (list python-sniffio))
1314 (home-page "https://github.com/florimondmanca/asgi-lifespan")
1315 (synopsis "Programmatic startup/shutdown of ASGI apps")
1316 (description "Programmatically send startup/shutdown lifespan events
1317into Asynchronous Server Gateway Interface (ASGI) applications. When
1318used in combination with an ASGI-capable HTTP client such as HTTPX, this
1319allows mocking or testing ASGI applications without having to spin up an
1320ASGI server.")
1321 (license license:expat)))
1322
1323(define-public python-a2wsgi
1324 (package
1325 (name "python-a2wsgi")
1326 (version "1.10.7")
1327 (source (origin
1328 (method url-fetch)
1329 (uri (pypi-uri "a2wsgi" version))
1330 (sha256
1331 (base32
1332 "13ikyfmkx7hlrbg5rpcdm6kw4wcsy00giil3f72hpb6sw7vjyinf"))))
1333 (build-system pyproject-build-system)
1334 (arguments
1335 (list
1336 #:test-flags
1337 #~(list "-k" (string-join
1338 (list "not test_starlette_stream_response"
1339 "test_starlette_base_http_middleware"
1340 "test_baize_stream_response"
1341 ;; Fails because of harmless whitespace differences.
1342 "test_wsgi_post")
1343 " and not "))
1344 #:build-backend "pdm.backend"))
1345 (native-inputs
1346 (list python-pdm-backend
1347 python-pytest
1348 ;; python-baize ; not packed yet
1349 python-httpx-bootstrap
1350 ;; Cycle: python-a2wsgi->python-uvicorn->
1351 ;; python-httpx->python-starlette->python-a2wsgi
1352 ;; python-starlette
1353 python-pytest-asyncio))
1354 (home-page "https://github.com/abersheeran/a2wsgi")
1355 (synopsis "Convert WSGI to ASGI or vice versa")
1356 (description
1357 "This program converts a WSGI program to an ASGI program or the other
1358way around. It depends only on the Python standard library.")
1359 (license license:asl2.0)))
1360
1361(define-public python-httpauth
1362 (package
1363 (name "python-httpauth")
1364 (version "0.4.1")
1365 (source (origin
1366 (method url-fetch)
1367 (uri (pypi-uri "httpauth" version))
1368 (sha256
1369 (base32
1370 "1m6rwvivg61l3h34hf6p6gkqmr69sb1c4k5ha379nxq0p8bfgahb"))))
1371 (build-system pyproject-build-system)
1372 (native-inputs (list python-pytest python-setuptools python-wheel))
1373 (home-page "https://github.com/jonashaag/httpauth")
1374 (synopsis "WSGI HTTP Digest Authentication middleware")
1375 (description "@code{python-httpauth} is WSGI middleware that secures some/all
1376routes using HTTP Digest Authentication.")
1377 (license license:bsd-2)))
1378
1379(define-public python-css-html-js-minify
1380 (package
1381 (name "python-css-html-js-minify")
1382 (version "2.5.5")
1383 (source (origin
1384 (method url-fetch)
1385 (uri (pypi-uri "css-html-js-minify" version ".zip"))
1386 (sha256
1387 (base32
1388 "0v3l2dqdk2y4r6ax259gs4ij1zzm9yxg6491s6254vs9w3vi37sa"))))
1389 (build-system python-build-system)
1390 ;; XXX: The git repository has no tags, and the PyPI releases do not
1391 ;; contain tests.
1392 (arguments '(#:tests? #f))
1393 (native-inputs (list unzip))
1394 (home-page "https://github.com/juancarlospaco/css-html-js-minify")
1395 (synopsis "CSS/HTML/JS minifier")
1396 (description
1397 "This package provides a single-file minifier for CSS, HTML, and JavaScript.")
1398 ;; XXX: The README just says "GNU GPL and GNU LGPL and MIT". From
1399 ;; <https://github.com/juancarlospaco/css-html-js-minify/issues/9> it
1400 ;; looks like the user can choose a license.
1401 (license (list license:gpl3+ license:lgpl3+ license:expat))))
1402
1403(define-public python-aws-sam-translator
1404 (package
1405 (name "python-aws-sam-translator")
1406 (version "1.94.0")
1407 (source
1408 (origin
1409 (method git-fetch) ; no tests in PyPI release
1410 (uri (git-reference
1411 (url "https://github.com/aws/serverless-application-model")
1412 (commit (string-append "v" version))))
1413 (file-name (git-file-name name version))
1414 (sha256
1415 (base32 "0rrmp2a2lr1bb909x34j7dqkdynx48hfwxg9m488s0mws68f78m3"))))
1416 (build-system pyproject-build-system)
1417 (arguments
1418 (list
1419 #:test-flags
1420 #~(list "--numprocesses" (number->string (parallel-job-count))
1421 "--ignore=tests/bin/test_public_interface.py"
1422 "tests")
1423 #:phases
1424 #~(modify-phases %standard-phases
1425 (add-after 'unpack 'fix-pytest-config
1426 (lambda _
1427 ;; Drop test coverage requirements.
1428 (substitute* "pytest.ini"
1429 ((".*addopts.*") ""))))
1430 (add-before 'check 'pre-check
1431 (lambda _
1432 (setenv "AWS_DEFAULT_REGION" "eu-west-3"))))))
1433 (native-inputs
1434 (list python-pytest
1435 python-setuptools
1436 python-pytest-xdist
1437 python-parameterized
1438 python-pyyaml
1439 python-wheel))
1440 (propagated-inputs
1441 (list python-boto3
1442 python-jsonschema
1443 python-pydantic-2
1444 python-typing-extensions))
1445 (home-page "https://github.com/aws/serverless-application-model")
1446 (synopsis "Transform AWS SAM templates into AWS CloudFormation templates")
1447 (description
1448 "AWS SAM Translator is a library that transform @dfn{Serverless Application
1449Model} (SAM) templates into AWS CloudFormation templates.")
1450 (license license:asl2.0)))
1451
1452(define-public python-aws-xray-sdk
1453 (package
1454 (name "python-aws-xray-sdk")
1455 (version "2.14.0")
1456 (home-page "https://github.com/aws/aws-xray-sdk-python")
1457 (source (origin
1458 (method git-fetch)
1459 (uri (git-reference (url home-page) (commit version)))
1460 (file-name (git-file-name name version))
1461 (sha256
1462 (base32
1463 "0khm86218rfjmgfw0azk7gnq6y9gkj95i0i30wa5v2li1z4z8qxd"))))
1464 (build-system pyproject-build-system)
1465 (arguments
1466 (list
1467 #:test-flags
1468 '(list ;; Tries to connect to external network resources
1469 "--ignore=tests/ext/httpx"
1470 ;; TODO: How to configure Django for these tests?
1471 "--ignore=tests/ext/django"
1472 ;; These tests require packages not yet in Guix.
1473 "--ignore=tests/ext/aiobotocore/test_aiobotocore.py"
1474 "--ignore=tests/ext/aiohttp/test_middleware.py"
1475 "--ignore=tests/ext/pg8000/test_pg8000.py"
1476 "--ignore=tests/ext/psycopg2/test_psycopg2.py"
1477 "--ignore=tests/ext/pymysql/test_pymysql.py"
1478 "--ignore=tests/ext/pynamodb/test_pynamodb.py"
1479 "--ignore=tests/ext/sqlalchemy_core/test_postgres.py"
1480 "--ignore=tests/ext/sqlalchemy_core/test_dburl.py"
1481 "--ignore=tests/test_async_recorder.py"
1482 ;; FIXME: module 'sqlalchemy.orm' has no attribute 'DeclarativeBase'.
1483 "--ignore-glob=tests/ext/sqlalchemy*"
1484 "--ignore=tests/ext/flask_sqlalchemy/test_query.py"
1485 ;; FIXME: Why is this failing?
1486 "--ignore=tests/test_patcher.py"
1487 "--ignore=tests/test_lambda_context.py"
1488 ;; These tests want to access httpbin.org.
1489 "--ignore=tests/ext/requests/test_requests.py"
1490 "--ignore=tests/ext/httplib/test_httplib.py"
1491 "--ignore=tests/ext/aiohttp/test_client.py")
1492 #:phases
1493 '(modify-phases %standard-phases
1494 (add-before 'check 'pre-check
1495 (lambda _
1496 ;; Allow "import tests.utils" to work as expected.
1497 (setenv "PYTHONPATH" (getcwd)))))))
1498 (native-inputs
1499 (list ;; These are required for the test suite.
1500 python-bottle
1501 python-flask
1502 python-flask-sqlalchemy
1503 python-httpx
1504 python-mock
1505 python-pymysql
1506 python-pytest
1507 python-pytest-aiohttp
1508 python-pytest-asyncio
1509 python-pytest-benchmark
1510 python-requests
1511 python-sqlalchemy
1512 python-webtest
1513 python-setuptools
1514 python-wheel))
1515 (propagated-inputs
1516 (list python-aiohttp
1517 python-botocore
1518 python-future
1519 python-jsonpickle
1520 python-urllib3
1521 python-wrapt))
1522 (synopsis "Profile applications on AWS X-Ray")
1523 (description
1524 "The AWS X-Ray SDK for Python enables Python developers to record and
1525emit information from within their applications to the AWS X-Ray service.")
1526 (license license:asl2.0)))
1527
1528(define-public python-publicsuffixlist
1529 (package
1530 (name "python-publicsuffixlist")
1531 (version "1.0.2.20250202")
1532 (source
1533 (origin
1534 (method url-fetch)
1535 (uri (pypi-uri "publicsuffixlist" version))
1536 (sha256
1537 (base32 "0llam7g7sv08lcfgy18iph8br8ldjmy2qbjaykc9pd3z4iisb0yd"))))
1538 (build-system pyproject-build-system)
1539 (native-inputs
1540 (list python-setuptools
1541 python-wheel))
1542 (home-page "https://github.com/ko-zu/psl")
1543 (synopsis "Public suffix list for Python")
1544 (description
1545 "This package provides an implementation of
1546@url{https://publicsuffix.org/, Public Suffix List } as Python library.
1547
1548Features:
1549@itemize
1550@item supports IDN (unicode and punycoded)
1551@item shipped with built-in PSL and an updater script
1552@item written in Pure Python with no library dependencies
1553@end itemize")
1554 (license license:mpl2.0)))
1555
1556(define-public python-python3-saml
1557 (package
1558 (name "python-python3-saml")
1559 (version "1.16.0")
1560 (source
1561 (origin
1562 (method git-fetch)
1563 (uri (git-reference
1564 (url "https://github.com/SAML-Toolkits/python3-saml")
1565 (commit (string-append "v" version))))
1566 (file-name (git-file-name name version))
1567 (sha256
1568 (base32 "1isisymhk8zblj5942jfl0zq392q5fpjikx52nywvzb0m2dcc81b"))))
1569 (build-system pyproject-build-system)
1570 (arguments
1571 (list
1572 ;; 214 tests pass, 50 fail; many fail because of required Internet
1573 ;; access or because of assumptions about the location of test files.
1574 #:tests? #false
1575 #:phases
1576 #~(modify-phases %standard-phases
1577 ;; FIXME: This should be fixed in python-xmlsec
1578 (add-before 'check 'pre-check
1579 (lambda* (#:key inputs #:allow-other-keys)
1580 (setenv "LD_LIBRARY_PATH"
1581 (dirname (search-input-file inputs "lib/libxmlsec1-openssl.so.1.2.37"))))))))
1582 (propagated-inputs (list python-isodate python-lxml python-xmlsec))
1583 (native-inputs (list python-coverage
1584 python-flake8
1585 python-freezegun
1586 python-poetry-core
1587 python-pytest
1588 python-setuptools
1589 python-wheel))
1590 (home-page "https://github.com/SAML-Toolkits/python3-saml")
1591 (synopsis "Saml Python toolkit")
1592 (description
1593 "The SAML Python Toolkit lets you add SAML support to your Python
1594software.")
1595 (license license:expat)))
1596
1597(define-public python-ovh
1598 (package
1599 (name "python-ovh")
1600 (version "1.1.0")
1601 (source (origin
1602 (method url-fetch)
1603 (uri (pypi-uri "ovh" version))
1604 (sha256
1605 (base32
1606 "0ygniv12lixh9rvnjcd01gzbzk2b5xwcg2a59b7964a77dd9p3qh"))))
1607 (build-system pyproject-build-system)
1608 (arguments (list #:tests? #f)) ; XXX: tests require networking
1609 (propagated-inputs (list python-requests))
1610 (native-inputs (list python-black
1611 python-coverage
1612 python-flake8
1613 python-isort
1614 python-pytest
1615 python-pytest-cov
1616 python-setuptools
1617 python-sphinx
1618 python-wheel))
1619 (home-page "https://api.ovh.com")
1620 (synopsis "Interact with OVHcloud APIs")
1621 (description "This package provides the official module to perform HTTP requests
1622to the OVHcloud APIs.")
1623 (license license:bsd-3)))
1624
1625(define-public python-cbor2
1626 (package
1627 (name "python-cbor2")
1628 (version "5.4.2.post1")
1629 (source
1630 (origin
1631 (method url-fetch)
1632 (uri (pypi-uri "cbor2" version))
1633 (sha256
1634 (base32 "15y78xcc3zkmvj1mdzz8gyhf3apbl91073kwhzbjk5abc1civwlw"))))
1635 (build-system pyproject-build-system)
1636 (native-inputs
1637 (list python-pytest
1638 python-pytest-cov
1639 python-setuptools
1640 python-setuptools-scm
1641 python-wheel))
1642 (home-page "https://github.com/agronholm/cbor2")
1643 (synopsis "Concise Binary Object Representation (CBOR) (de)serializer")
1644 (description "This Python library provides encoding and decoding for the
1645Concise Binary Object
1646Representation (CBOR) (@url{https://www.rfc-editor.org/rfc/rfc8949.html, RFC
16478949}) serialization format. The specification is fully compatible with the
1648original RFC 7049. Among its features are:
1649@itemize
1650@item Simple API like the @code{json} or @code{pickle} modules.
1651@item Support many CBOR tags with stdlib objects.
1652@item Generic tag decoding.
1653@item Shared value references including cyclic references.
1654@item String references compact encoding with repeated strings replaced with
1655indices.
1656@item Optional C module backend tested on big- and little-endian architectures.
1657@item Extensible tagged value handling using tag_hook and object_hook on
1658decode and default on encode.
1659@end itemize")
1660 (license license:expat)))
1661
1662(define-public python-cfn-lint
1663 (package
1664 (name "python-cfn-lint")
1665 (version "1.22.1")
1666 (source (origin
1667 (method git-fetch)
1668 (uri (git-reference
1669 (url "https://github.com/aws-cloudformation/cfn-lint")
1670 (commit (string-append "v" version))))
1671 (file-name (git-file-name name version))
1672 (sha256
1673 (base32
1674 "1zz121r9yv1irwdbk07s7958fh43h3r3q39qcj0gv4kpgb0vdf32"))))
1675 (build-system pyproject-build-system)
1676 (arguments
1677 (list
1678 #:test-flags
1679 #~(list "-k" (string-join
1680 (list
1681 ;; Skip documentation tests.
1682 "not test_update_docs"
1683 ;; Tests fail with error: AssertinError ...
1684 "test_parameter_for_autopublish_code_sha256"
1685 "test_sam_with_language_extension"
1686 "test_module_integration"
1687 "test_templates"
1688 ;; Test fails with error: diff error while comparing
1689 ;; graphs.
1690 "test_build_graph")
1691 " and not "))))
1692 (native-inputs
1693 (list python-defusedxml
1694 python-pydot
1695 python-pytest
1696 python-setuptools
1697 python-wheel))
1698 (propagated-inputs
1699 (list python-aws-sam-translator
1700 python-importlib-resources
1701 python-jschema-to-python
1702 python-jsonpatch
1703 python-junit-xml
1704 python-networkx
1705 python-pyyaml
1706 python-regex
1707 python-sarif-om
1708 python-sympy
1709 python-typing-extensions))
1710 (home-page "https://github.com/aws-cloudformation/cfn-lint")
1711 (synopsis "Validate CloudFormation templates")
1712 (description
1713 "This package lets you validate CloudFormation YAML/JSON templates against
1714the CloudFormation spec and additional checks. Includes checking valid values
1715for resource properties and best practices.")
1716 (license license:expat)))
1717
1718(define-public python-jschema-to-python
1719 (package
1720 (name "python-jschema-to-python")
1721 (version "1.2.3")
1722 (source (origin
1723 (method url-fetch)
1724 (uri (pypi-uri "jschema_to_python" version))
1725 (sha256
1726 (base32
1727 "14cvaiwm56g0v6p7zviikaa5i9ln3yqy910jmp60hirhbpz19zvn"))))
1728 (build-system python-build-system)
1729 (propagated-inputs (list python-attrs python-jsonpickle python-pbr))
1730 (native-inputs (list python-pytest))
1731 (home-page "https://github.com/microsoft/jschema-to-python")
1732 (synopsis "Generate Python classes from a JSON schema")
1733 (description "This package generates source code for Python classes from a
1734@url{http://jschema.org,JSchema} JSON schema.")
1735 (license license:expat)))
1736
1737(define-public python-requests-cache
1738 (package
1739 (name "python-requests-cache")
1740 (version "1.2.1")
1741 (source
1742 (origin
1743 (method url-fetch)
1744 (uri (pypi-uri "requests_cache" version))
1745 (sha256
1746 (base32 "1l8i4l2pd26gbrlcdb5z056wvsqfr3vvbyqq2f8x1f65zn3ckav8"))))
1747 (build-system pyproject-build-system)
1748 (arguments
1749 (list
1750 #:test-flags
1751 #~(list "--numprocesses" (number->string (parallel-job-count))
1752 ;; These tests require access to external services, e.g. MongoDB
1753 ;; and Redis.
1754 "--ignore=tests/integration"
1755 ;; AttributeError: <class 'requests.adapters.HTTPAdapter'> does
1756 ;; not have the attribute 'get_connection_with_tls_context'
1757 "-k" "not test_mock_session")
1758 #:phases
1759 #~(modify-phases %standard-phases
1760 (add-before 'check 'pre-check
1761 (lambda _
1762 ;; PermissionError: [Errno 13] Permission denied:
1763 ;; '/homeless-shelter'
1764 (setenv "HOME" "/tmp"))))))
1765 (native-inputs
1766 (list python-poetry-core
1767 python-pytest
1768 python-pytest-rerunfailures
1769 python-pytest-xdist
1770 python-requests-mock
1771 python-responses
1772 python-rich
1773 python-tenacity
1774 python-time-machine
1775 python-timeout-decorator))
1776 (propagated-inputs
1777 (list python-attrs
1778 python-boto3
1779 python-bson
1780 python-cattrs
1781 python-itsdangerous
1782 python-orjson
1783 python-platformdirs
1784 python-pymongo
1785 python-pyyaml
1786 python-redis
1787 python-requests
1788 python-ujson
1789 python-url-normalize
1790 python-urllib3))
1791 (home-page "https://github.com/requests-cache/requests-cache")
1792 (synopsis "Persistent HTTP cache for Python requests")
1793 (description
1794 "This package provides a drop-in replacement for @code{requests.Session}
1795with caching offload to SQLite, Redis, MongoDB and AWS DynamoDB or save
1796responses as planin JSON/YAML file or save responses as plain JSON/YAML
1797files.")
1798 (license license:bsd-2)))
1799
1800(define-public python-s3path
1801 (package
1802 (name "python-s3path")
1803 (version "0.6.0")
1804 (source
1805 (origin
1806 (method url-fetch)
1807 (uri (pypi-uri "s3path" version))
1808 (sha256
1809 (base32 "0gbvyr60mkpm7jbjiya0pmx26q6cfp27p5czw08jwn3k5cp77krk"))))
1810 (build-system pyproject-build-system)
1811 (arguments
1812 (list
1813 ;; XXX: All tests fail with error: fixture 's3_mock' not found.
1814 #:tests? #f))
1815 (native-inputs
1816 (list python-setuptools
1817 python-wheel))
1818 (propagated-inputs
1819 (list python-boto3
1820 python-smart-open))
1821 (home-page "https://github.com/liormizr/s3path")
1822 (synopsis "Pathlib extension for AWS S3 Service")
1823 (description
1824 "S3Path provide a Python convenient File-System/Path like interface for
1825AWS S3 Service using boto3 S3 resource as a driver.")
1826 (license license:asl2.0)))
1827
1828(define-public python-sarif-om
1829 (package
1830 (name "python-sarif-om")
1831 (version "1.0.4")
1832 (source (origin
1833 (method url-fetch)
1834 (uri (pypi-uri "sarif_om" version))
1835 (sha256
1836 (base32
1837 "167gb8xjm0310km3w1s12bqldbv7zyklkr4j5900vq4361ml2pyd"))))
1838 (build-system python-build-system)
1839 (propagated-inputs (list python-attrs))
1840 (native-inputs (list python-pbr))
1841 (home-page "https://github.com/microsoft/sarif-python-om")
1842 (synopsis "Python implementation of the SARIF 2.1.0 object model")
1843 (description "This module contains classes for the object model defined
1844by the @url{https://sarifweb.azurewebsites.net,Static Analysis Results
1845Interchange Format (SARIF)} file format.")
1846 (license license:expat)))
1847
1848(define-public python-falcon
1849 (package
1850 (name "python-falcon")
1851 (version "4.0.2")
1852 (source
1853 (origin
1854 ;; Use git, as there are some test files missing from the PyPI release,
1855 ;; such as 'examples' directory.
1856 (method git-fetch)
1857 (uri (git-reference
1858 (url "https://github.com/falconry/falcon")
1859 (commit version)))
1860 (file-name (git-file-name name version))
1861 (sha256
1862 (base32
1863 "1zhyvfbz4c1bxd4vbsgk19dzih6kkzgin10lmsr32x3b4qgnwqxs"))))
1864 (build-system pyproject-build-system)
1865 (arguments
1866 (list
1867 #:test-flags
1868 '(list "-k" "not slow"
1869 "--ignore-glob=examples/*" "--ignore-glob=bench/*" "tests")
1870 #:phases
1871 '(modify-phases %standard-phases
1872 (add-before 'check 'pre-check
1873 (lambda _
1874 (setenv "FALCON_ASGI_WRAP_NON_COROUTINES" "Y")
1875 (setenv "FALCON_TESTING_SESSION" "Y")
1876 (setenv "PYTHONASYNCIODEBUG" "1")
1877 (setenv "HOME" "/tmp"))))))
1878 (propagated-inputs
1879 (list python-mimeparse))
1880 (native-inputs
1881 (list python-aiofiles
1882 python-cbor2
1883 python-cython-3 ;for faster binaries
1884 python-fakeredis
1885 python-httpx
1886 python-mujson
1887 python-msgpack
1888 python-orjson
1889 python-pecan
1890 python-pillow
1891 python-pytest
1892 python-pytest-asyncio
1893 python-pytest-runner
1894 python-pyyaml
1895 python-rapidjson
1896 python-requests
1897 python-setuptools
1898 python-testtools
1899 python-ujson
1900 python-websockets
1901 python-wheel))
1902 (home-page "https://falconframework.org")
1903 (synopsis "Web framework for building APIs and application backends")
1904 (description "Falcon is a web API framework for building microservices,
1905application backends and higher-level frameworks. Among its features are:
1906@itemize
1907@item Optimized and extensible code base
1908@item Routing via URI templates and REST-inspired resource
1909classes
1910@item Access to headers and bodies through request and response
1911classes
1912@item Request processing via middleware components and hooks
1913@item Idiomatic HTTP error responses
1914@item Straightforward exception handling
1915@item Unit testing support through WSGI helpers and mocks
1916@item Compatible with both CPython and PyPy
1917@item Cython support for better performance when used with CPython
1918@end itemize")
1919 (license license:asl2.0)))
1920
1921(define-public python-falcon-cors
1922 (package
1923 (name "python-falcon-cors")
1924 (version "1.1.7")
1925 (source
1926 (origin
1927 (method url-fetch)
1928 (uri (pypi-uri "falcon-cors" version))
1929 (sha256
1930 (base32
1931 "12pym7hwsbd8b0c1azn95nas8gm3f1qpr6lpyx0958xm65ffr20p"))))
1932 (build-system python-build-system)
1933 (native-inputs
1934 (list python-falcon))
1935 (home-page
1936 "https://github.com/lwcolton/falcon-cors")
1937 (synopsis "Falcon @dfn{cross-origin resource sharing} (CORS) library")
1938 (description "This middleware provides @dfn{cross-origin resource
1939sharing} (CORS) support for Falcon. It allows applying a specially crafted
1940CORS object to the incoming requests, enabling the ability to serve resources
1941over a different origin than that of the web application.")
1942 (license license:asl2.0)))
1943
1944(define-public python-furl
1945 (package
1946 (name "python-furl")
1947 (version "2.1.3")
1948 (source
1949 (origin
1950 (method url-fetch)
1951 (uri (pypi-uri "furl" version))
1952 (sha256
1953 (base32
1954 "0knc76pm8pzigs3bpx9fccfsfxqrgblqphar46hq9i364vz8hqas"))))
1955 (build-system python-build-system)
1956 (propagated-inputs
1957 (list python-six python-orderedmultidict))
1958 (native-inputs
1959 (list python-flake8))
1960 (home-page "https://github.com/gruns/furl")
1961 (synopsis "URL manipulation in Python")
1962 (description "Furl provides an easy-to-use alternative to the
1963@code{urllib} and @code{urlparse} modules for manipulating URLs.")
1964 (license license:unlicense)))
1965
1966(define-public python-httplib2
1967 (package
1968 (name "python-httplib2")
1969 (version "0.22.0")
1970 (source
1971 (origin
1972 ;; Tests not included in the release tarball.
1973 (method git-fetch)
1974 (uri (git-reference
1975 (url "https://github.com/httplib2/httplib2")
1976 (commit (string-append "v" version))))
1977 (file-name (git-file-name name version))
1978 (sha256
1979 (base32
1980 "1zkp3glv0iha7p68p5m0sb8mrrammkdc0mx32517xry52s4iva7g"))))
1981 (build-system pyproject-build-system)
1982 (arguments
1983 (list
1984 #:phases
1985 #~(modify-phases %standard-phases
1986 (add-after 'unpack 'adjust-test-requirements
1987 (lambda _
1988 (substitute* "requirements-test.txt"
1989 (("==") ">=")))))))
1990 (native-inputs
1991 (list python-cryptography
1992 python-flake8
1993 python-future
1994 python-mock
1995 python-pytest
1996 python-pytest-cov
1997 python-pytest-forked
1998 python-pytest-randomly
1999 python-pytest-timeout
2000 python-pytest-xdist
2001 python-six
2002 python-setuptools
2003 python-wheel))
2004 (home-page "https://github.com/httplib2/httplib2")
2005 (synopsis "Comprehensive HTTP client library")
2006 (description
2007 "A comprehensive HTTP client library supporting many features left out of
2008other HTTP libraries.")
2009 (license license:expat)))
2010
2011(define-public python-cheroot
2012 (package
2013 (name "python-cheroot")
2014 (version "10.0.1")
2015 (source
2016 (origin
2017 (method url-fetch)
2018 (uri (pypi-uri "cheroot" version))
2019 (sha256
2020 (base32
2021 "0h0p3fnpa4dxi589s7ljlzb6p3mhqdivb3pc2f36pljqfrwjzf70"))))
2022 (build-system pyproject-build-system)
2023 (arguments
2024 (list
2025 #:test-flags
2026 #~(list "--cov=cheroot"
2027 ;; Tests are flaky in parallel invocation.
2028 ;; "--numprocesses=auto"
2029 "--doctest-modules"
2030 "--showlocals"
2031 "-k" (string-append
2032 ;; Disable test requiring networking.
2033 "not test_tls_client_auth"
2034 ;; TypeError: HTTPConnection.request() got an unexpected keyword
2035 ;; argument 'chunked'
2036 " and not test_peercreds_unix_sock"
2037 " and not test_peercreds_unix_sock_with_lookup"))
2038 #:phases
2039 #~(modify-phases %standard-phases
2040 (replace 'check
2041 (lambda* (#:key tests? test-flags #:allow-other-keys)
2042 (when tests?
2043 (with-directory-excursion "/tmp"
2044 (apply invoke "pytest" "-v"
2045 (append test-flags (list #$output))))))))))
2046 (propagated-inputs
2047 (list python-jaraco-functools python-more-itertools))
2048 (native-inputs
2049 (list python-jaraco-text
2050 python-portend
2051 python-pyopenssl
2052 python-pypytools
2053 python-pytest-cov
2054 python-pytest-mock
2055 python-requests
2056 python-requests-toolbelt
2057 python-requests-unixsocket
2058 python-setuptools
2059 python-setuptools-scm
2060 python-trustme
2061 python-wheel))
2062 (home-page "https://cheroot.cherrypy.dev")
2063 (synopsis "Highly-optimized, pure-python HTTP server")
2064 (description
2065 "Cheroot is a high-performance, pure-Python HTTP server.")
2066 (license license:bsd-3)))
2067
2068(define-public httpie
2069 (package
2070 (name "httpie")
2071 (version "3.2.2")
2072 (source
2073 (origin
2074 (method url-fetch)
2075 (uri (pypi-uri "httpie" version))
2076 (sha256
2077 (base32
2078 "140w4mr0w7scpf4j5qm4h475vbwrgxzkdwyygwcmql1r1cgngywb"))))
2079 (build-system python-build-system)
2080 (arguments
2081 ;; The tests attempt to access external web servers, so we cannot run them.
2082 '(#:tests? #f))
2083 (propagated-inputs
2084 (list python-charset-normalizer
2085 python-colorama
2086 python-defusedxml
2087 python-importlib-metadata
2088 python-multidict
2089 python-pip
2090 python-pygments
2091 python-requests
2092 python-requests-toolbelt
2093 python-rich
2094 python-setuptools))
2095 (home-page "https://httpie.io")
2096 (synopsis "cURL-like tool for humans")
2097 (description
2098 "A command line HTTP client with an intuitive UI, JSON support,
2099syntax highlighting, wget-like downloads, plugins, and more. It consists of
2100a single http command designed for painless debugging and interaction with
2101HTTP servers, RESTful APIs, and web services.")
2102 ;; This was fixed in 1.0.3.
2103 (properties `((lint-hidden-cve . ("CVE-2019-10751"))))
2104 (license license:bsd-3)))
2105
2106(define-public parfive
2107 (package
2108 (name "parfive")
2109 (version "2.1.0")
2110 (source (origin
2111 (method url-fetch)
2112 (uri (pypi-uri "parfive" version))
2113 (sha256
2114 (base32
2115 "13nw2y7wjzj6w049av6ff4d0zxgbhkrgck0xyh676c114hcv8v6d"))))
2116 (build-system pyproject-build-system)
2117 (arguments
2118 (list
2119 ;; Disable tests requiring network access.
2120 #:test-flags
2121 #~(list "-k" (string-append
2122 "not test_ftp"
2123 " and not test_ftp_pasv_command"
2124 " and not test_ftp_http"))))
2125 (propagated-inputs (list python-aiofiles python-aioftp python-aiohttp
2126 python-tqdm))
2127 (native-inputs (list python-pytest
2128 python-pytest-asyncio
2129 python-pytest-cov
2130 python-pytest-localserver
2131 python-pytest-socket
2132 python-setuptools
2133 python-setuptools-scm
2134 python-wheel))
2135 (home-page "https://parfive.readthedocs.io/")
2136 (synopsis "HTTP and FTP parallel file downloader")
2137 (description
2138 "This package provides CLI tool and Python library @code{parallel} file
2139downloader using asyncio. parfive can handle downloading multiple files in
2140parallel as well as downloading each file in a number of chunks.
2141
2142asciicast demo of parfive parfive works by creating a downloader object,
2143appending files to it and then running the download. parfive has a synchronous
2144API, but uses asyncio to parallelise downloading the files.")
2145 (license license:expat)))
2146
2147(define-public python-html2text
2148 (package
2149 (name "python-html2text")
2150 (version "2020.1.16")
2151 (source
2152 (origin
2153 (method url-fetch)
2154 (uri (pypi-uri "html2text" version))
2155 (sha256
2156 (base32
2157 "1fvv4z6dblii2wk1x82981ag8yhxbim1v2ksgywxsndh2s7335p2"))))
2158 (build-system python-build-system)
2159 (arguments
2160 '(#:phases
2161 (modify-phases %standard-phases
2162 (replace 'check
2163 (lambda _
2164 (invoke "pytest" "test/"))))))
2165 (native-inputs
2166 (list python-pytest))
2167 (home-page "https://github.com/Alir3z4/html2text")
2168 (synopsis "Convert HTML into plain text")
2169 (description "html2text takes HTML and converts it into plain ASCII text
2170which is also valid markdown. html2text was originally written by Aaron
2171Swartz.")
2172 (license license:gpl3+)))
2173
2174(define-public python-jose
2175 (package
2176 (name "python-jose")
2177 (version "3.3.0")
2178 (home-page "https://github.com/mpdavis/python-jose")
2179 (source (origin
2180 (method git-fetch)
2181 (uri (git-reference (url home-page) (commit version)))
2182 (file-name (git-file-name name version))
2183 (sha256
2184 (base32
2185 "18whsdpllg8574ma4r0qawkgw4nam6lsf63pi6761j38rvl84lg9"))))
2186 (build-system pyproject-build-system)
2187 (arguments
2188 (list
2189 #:test-flags
2190 '(list "-k"
2191 ;; These fail because of unexpected locations of line breaks.
2192 (string-append "not test_public_key_to_pem "
2193 "and not test_private_key_to_pem "
2194 "and not test_public_key_load_cycle "
2195 "and not test_private_key_load_cycle"))))
2196 (native-inputs
2197 (list ;; All native inputs are for tests.
2198 python-pyasn1 python-pytest python-pytest-cov
2199 python-pytest-runner
2200 python-setuptools
2201 python-wheel))
2202 (propagated-inputs
2203 (list python-cryptography python-ecdsa python-rsa python-six))
2204 (synopsis "JOSE implementation in Python")
2205 (description
2206 "The @dfn{JavaScript Object Signing and Encryption} (JOSE) technologies
2207- JSON Web Signature (JWS), JSON Web Encryption (JWE), JSON Web Key (JWK), and
2208JSON Web Algorithms (JWA) - collectively can be used to encrypt and/or sign
2209content using a variety of algorithms.")
2210 (license license:expat)))
2211
2212(define-public python-joserfc
2213 (package
2214 (name "python-joserfc")
2215 (version "1.0.1")
2216 (source
2217 (origin
2218 (method url-fetch)
2219 (uri (pypi-uri "joserfc" version))
2220 (sha256
2221 (base32 "11m600bmj70bp96wxhwvyj4d57w0zahzq3vic7s4a4k85pl7nl64"))))
2222 (build-system pyproject-build-system)
2223 (arguments
2224 (list
2225 #:test-flags
2226 ;; No module named 'Crypto'
2227 '(list "--ignore=tests/jwe/test_chacha20.py"
2228 ;; Deprecation warnings are not raised.
2229 "-k" (string-append "not test_guess_bytes_key"
2230 " and not test_guess_callable_key"
2231 " and not test_guess_str_key"))))
2232 (propagated-inputs (list python-cryptography))
2233 (native-inputs (list python-pytest python-setuptools python-wheel))
2234 (home-page "https://github.com/authlib/joserfc")
2235 (synopsis "Python library for JOSE RFCs")
2236 (description
2237 "This package provides a Python library for JOSE RFCs, including JWS,
2238JWE, JWK, JWA, and JWT.")
2239 (license license:bsd-3)))
2240
2241(define-public python-jwcrypto
2242 (package
2243 (name "python-jwcrypto")
2244 (version "1.5.0")
2245 (source (origin
2246 (method url-fetch)
2247 (uri (pypi-uri "jwcrypto" version))
2248 (sha256
2249 (base32
2250 "138bh6x1yy0qpk63bxa7mxnd97gfdm1fkpwm8wrdz3g3z0fca79c"))))
2251 (build-system pyproject-build-system)
2252 (propagated-inputs (list python-cryptography python-deprecated))
2253 (native-inputs (list python-setuptools python-wheel))
2254 (home-page "https://github.com/latchset/jwcrypto")
2255 (synopsis "Implementation of JOSE Web standards")
2256 (description
2257 "WCrypto is an implementation of the @dfn{Javascript Object Signing and
2258Encryption} (JOSE) Web Standards.")
2259 (license license:lgpl3+)))
2260
2261(define-public python-pypitoken
2262 (package
2263 (name "python-pypitoken")
2264 (version "7.0.1")
2265 (source
2266 (origin
2267 (method url-fetch)
2268 (uri (pypi-uri "pypitoken" version))
2269 (sha256
2270 (base32 "18hhwmdfs9y5ypl1n8z2h2ys2f52mv5xr043gzgb34mpmg0wi46x"))))
2271 (build-system pyproject-build-system)
2272 ;; There are no tests.
2273 (arguments (list #:tests? #false))
2274 (propagated-inputs (list python-jsonschema python-pymacaroons
2275 python-typing-extensions))
2276 (native-inputs (list python-poetry-core))
2277 (home-page "https://pypitoken.readthedocs.io/en/latest/")
2278 (synopsis "Manipulate PyPI API tokens")
2279 (description "This package lets you manipulate PyPI API tokens.")
2280 (license license:expat)))
2281
2282(define-public python-pyscss
2283 (package
2284 (name "python-pyscss")
2285 (version "1.4.0")
2286 (source
2287 (origin
2288 (method git-fetch) ; no tests in PyPI release
2289 (uri (git-reference
2290 (url "https://github.com/Kronuz/pyScss")
2291 (commit (string-append "v" version))))
2292 (file-name (git-file-name name version))
2293 (sha256
2294 (base32 "1vinddg8sbh3v9n1r1wmvjx6ydk8xp7scbvhb3csl4y9xz7vhk6g"))))
2295 (build-system pyproject-build-system)
2296 (native-inputs
2297 (list python-pytest python-pytest-cov python-setuptools python-wheel))
2298 (inputs
2299 (list pcre))
2300 (home-page "https://github.com/Kronuz/pyScss")
2301 (synopsis "Scss compiler for Python")
2302 (description "@code{pyScss} is a compiler for Sass, a superset language of
2303CSS3 that adds programming capabilities and some other syntactic sugar.")
2304 (license license:expat)))
2305
2306(define-public python-jsonpickle
2307 (package
2308 (name "python-jsonpickle")
2309 (version "4.0.0")
2310 (source (origin
2311 (method url-fetch)
2312 (uri (pypi-uri "jsonpickle" version))
2313 (sha256
2314 (base32
2315 "0dipys8p4hkqnp9nwkpysfv7mhws2hrr73wgn00pdmq4n990hrzw"))))
2316 (build-system pyproject-build-system)
2317 (arguments
2318 (list
2319 #:test-flags
2320 ;; Prevent running the flake8 and black pytest plugins, which only tests
2321 ;; style and frequently causes harmless failures.
2322 '(list "-o" "addopts=''" "tests")
2323 #:phases
2324 '(modify-phases %standard-phases
2325 (add-before 'check 'pre-check
2326 (lambda* (#:key inputs #:allow-other-keys)
2327 (setenv "TZ" "UTC")
2328 (setenv "TZDIR"
2329 (search-input-directory inputs "share/zoneinfo")))))))
2330 (propagated-inputs
2331 (list python-importlib-metadata))
2332 (native-inputs
2333 (list python-bson
2334 python-ecdsa
2335 python-feedparser
2336 python-pymongo
2337 python-pytest
2338 python-pytest-benchmark
2339 python-pytest-cov
2340 python-pytest-enabler
2341 python-setuptools
2342 python-setuptools-scm
2343 python-simplejson
2344 python-sqlalchemy
2345 python-ujson
2346 python-wheel
2347 tzdata-for-tests))
2348 (home-page "https://jsonpickle.github.io/")
2349 (synopsis "Serialize object graphs into JSON")
2350 (description
2351 "This package provides a Python library for serializing any arbitrary
2352object graph to and from JSON.")
2353 (license license:bsd-3)))
2354
2355(define-public python-mechanicalsoup
2356 (package
2357 (name "python-mechanicalsoup")
2358 (version "1.0.0")
2359 (source
2360 (origin
2361 (method url-fetch)
2362 (uri (pypi-uri "MechanicalSoup" version))
2363 (sha256
2364 (base32 "01sddjxy3rznh63hnl5lbv1hhk6xyiviwmkiw4x7v4ap35fb3lrp"))))
2365 (build-system python-build-system)
2366 (propagated-inputs
2367 (list python-beautifulsoup4 python-lxml python-requests python-six))
2368 (native-inputs
2369 (list python-pytest-cov
2370 python-pytest-flake8
2371 python-pytest-httpbin
2372 python-pytest-mock
2373 python-pytest-runner
2374 python-requests-mock
2375 python-setuptools
2376 python-wheel))
2377 (home-page "https://mechanicalsoup.readthedocs.io/")
2378 (synopsis "Python library for automating website interaction")
2379 (description
2380 "MechanicalSoup is a Python library for automating interaction with
2381websites. It automatically stores and sends cookies, follows redirects, and can
2382follow links and submit forms. It doesn’t do JavaScript.")
2383 (license license:expat)))
2384
2385(define-public python-hyperframe
2386 (package
2387 (name "python-hyperframe")
2388 (version "6.0.1")
2389 (source
2390 (origin
2391 (method url-fetch)
2392 (uri (pypi-uri "hyperframe" version))
2393 (sha256
2394 (base32 "055951gyhnjqpa2al52rj34g8yrls9inyn56n7nfkj0x4d300ldf"))))
2395 (build-system python-build-system)
2396 (arguments
2397 `(#:phases
2398 (modify-phases %standard-phases
2399 (replace 'check
2400 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
2401 (when tests?
2402 (add-installed-pythonpath inputs outputs)
2403 (invoke "pytest" "-vv" "test")))))))
2404 (native-inputs
2405 (list python-pytest))
2406 (home-page "https://github.com/python-hyper/hyperframe")
2407 (synopsis "HTTP/2 framing layer for Python")
2408 (description
2409 "This library contains the HTTP/2 framing code used in the hyper project.
2410It provides a pure-Python codebase that is capable of decoding a binary stream
2411into HTTP/2 frames.")
2412 (license license:expat)))
2413
2414(define-public python-hpack
2415 (package
2416 (name "python-hpack")
2417 (version "4.0.0")
2418 (source
2419 (origin
2420 ;; PyPI tarball is missing some files necessary for the tests.
2421 (method git-fetch)
2422 (uri (git-reference
2423 (url "https://github.com/python-hyper/hpack")
2424 (commit (string-append "v" version))))
2425 (file-name (git-file-name name version))
2426 (sha256
2427 (base32 "11qdayvz5a8zlzdcdm37f2z1fgnl67pz6j8xj2dz5rfa5lds29yq"))))
2428 (build-system python-build-system)
2429 (arguments
2430 `(#:phases
2431 (modify-phases %standard-phases
2432 (replace 'check
2433 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
2434 (when tests?
2435 (add-installed-pythonpath inputs outputs)
2436 (invoke "pytest" "-vv" "test")))))))
2437 (native-inputs
2438 (list python-pytest))
2439 (home-page "https://hyper.rtfd.org")
2440 (synopsis "Pure-Python HPACK header compression")
2441 (description
2442 "This module contains a pure-Python HTTP/2 header encoding (HPACK) logic
2443for use in Python programs that implement HTTP/2.")
2444 (license license:expat)))
2445
2446(define-public python-h11
2447 (package
2448 (name "python-h11")
2449 (version "0.14.0")
2450 (source
2451 (origin
2452 (method url-fetch)
2453 (uri (pypi-uri "h11" version))
2454 (sha256
2455 (base32 "17b97c56y31hi0n0x0cb5a87x4xr9jijf2y06pzj0977k6zgn6cg"))))
2456 (build-system pyproject-build-system)
2457 (native-inputs
2458 (list python-pytest python-setuptools python-wheel))
2459 (home-page "https://github.com/python-hyper/h11")
2460 (synopsis "Pure-Python, bring-your-own-I/O implementation of HTTP/1.1")
2461 (description
2462 "This is a little HTTP/1.1 library written from scratch in Python, heavily
2463inspired by hyper-h2. It's a bring-your-own-I/O library; h11 contains no IO
2464code whatsoever. This means you can hook h11 up to your favorite network API,
2465and that could be anything you want.")
2466 (license license:expat)))
2467
2468(define-public python-h2
2469 (package
2470 (name "python-h2")
2471 (version "4.1.0")
2472 (source
2473 (origin
2474 (method url-fetch)
2475 (uri (pypi-uri "h2" version))
2476 (sha256
2477 (base32 "1fraip114fm1ha5w37pdc0sk8dn9pb0ck267zrwwpap7zc4clfm8"))))
2478 (build-system python-build-system)
2479 (arguments
2480 `(#:phases
2481 (modify-phases %standard-phases
2482 (replace 'check
2483 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
2484 (when tests?
2485 (add-installed-pythonpath inputs outputs)
2486 (invoke "python" "-m" "pytest" "-vv" "test"
2487 ;; This test exceededs the Hypothesis deadline.
2488 ,@(if (target-riscv64?)
2489 `("-k" "not test_changing_max_frame_size")
2490 '()))))))))
2491 (native-inputs
2492 (list python-hypothesis python-pytest))
2493 (propagated-inputs
2494 (list python-hpack python-hyperframe))
2495 (home-page "https://github.com/python-hyper/h2")
2496 (synopsis "HTTP/2 State-Machine based protocol implementation")
2497 (description
2498 "This module contains a pure-Python implementation of a HTTP/2 protocol
2499stack. It does not provide a parsing layer, a network layer, or any rules
2500about concurrency. Instead, it's a purely in-memory solution, defined in
2501terms of data actions and HTTP/2 frames. This is one building block of a full
2502Python HTTP implementation.")
2503 (license license:expat)))
2504
2505(define-public python-sockjs-tornado
2506 (package
2507 (name "python-sockjs-tornado")
2508 (version "1.0.6")
2509 (source
2510 (origin
2511 (method url-fetch)
2512 (uri (pypi-uri "sockjs-tornado" version))
2513 (sha256
2514 (base32
2515 "15dgv6hw6c7h3m310alw1h6p5443lrm9pyqhcv2smc13fz1v04pc"))))
2516 (build-system python-build-system)
2517 (arguments
2518 `(;; There are no tests, and running the test phase requires missing
2519 ;; dependencies
2520 #:tests? #f))
2521 (propagated-inputs
2522 (list python-tornado))
2523 (home-page "https://github.com/mrjoes/sockjs-tornado/")
2524 (synopsis
2525 "SockJS Python server implementation on top of the Tornado framework")
2526 (description
2527 "SockJS-tornado provides the server-side counterpart to a SockJS client
2528library, through the Tornado framework.
2529
2530SockJS provides a low-latency, full-duplex, cross-domain communication channel
2531between a web browser and web server.")
2532 (license license:expat)))
2533
2534(define-public python-flask-assets
2535 ;; The latest release still depends on the abandoned flask-script, whereas
2536 ;; at this later commit (already 2 years old at the time of this writing)
2537 ;; the dependency has been lifted.
2538 (let ((commit "62efd23fe95ee6a86fc1cfaa98fc1e2152093557")
2539 (revision "1"))
2540 (package
2541 (name "python-flask-assets")
2542 (version (git-version "2.1.0" revision commit))
2543 (source
2544 (origin
2545 (method git-fetch)
2546 (uri (git-reference
2547 (url "https://github.com/miracle2k/flask-assets/")
2548 (commit commit)))
2549 (file-name (git-file-name name version))
2550 (sha256
2551 (base32 "11q8vm2ipj4xrvawy9vl1l4k8kb4r72ghy1n8xrzci52v6lx8960"))))
2552 (build-system pyproject-build-system)
2553 (propagated-inputs
2554 (list python-flask python-webassets))
2555 (native-inputs
2556 (list nss-certs-for-test python-pytest python-setuptools python-wheel))
2557 (home-page "https://github.com/miracle2k/flask-assets")
2558 (synopsis "Asset management for Flask")
2559 (description "This package integrates @code{webassets} with Flask, adding
2560support for merging, minifying and compiling CSS and Javascript files.")
2561 (license license:bsd-2))))
2562
2563(define-public python-flask-babel
2564 (package
2565 (name "python-flask-babel")
2566 (version "4.0.0")
2567 (source
2568 (origin
2569 (method git-fetch) ;no tests in pypi release
2570 (uri (git-reference
2571 (url "https://github.com/python-babel/flask-babel")
2572 (commit (string-append "v" version))))
2573 (sha256
2574 (base32
2575 "19yq3f5rixbwhv7wxdarvi9hdj98a9dq8y76in9c1q3jxaigw104"))))
2576 (build-system pyproject-build-system)
2577 (native-inputs
2578 (list python-poetry-core
2579 python-pytest
2580 python-pytest-cov
2581 python-pytest-mock))
2582 (propagated-inputs
2583 (list python-babel
2584 python-flask
2585 python-jinja2
2586 python-pytz))
2587 (home-page "https://github.com/python-babel/flask-babel")
2588 (synopsis "Add i18n/l10n support to Flask applications")
2589 (description "This package implements internationalization and localization
2590support for Flask. This is based on the Python babel module as well as pytz -
2591both of which are installed automatically if you install this library.")
2592 (license license:bsd-3)))
2593
2594(define-public python-flask-cors
2595 (package
2596 (name "python-flask-cors")
2597 (version "3.0.10")
2598 (source (origin
2599 (method url-fetch)
2600 (uri (pypi-uri "Flask-Cors" version))
2601 (sha256
2602 (base32
2603 "1pl16615fn1pc5n0vdrqlxm45mqsdjjxqv3gfkrs111v7wwkj25n"))))
2604 (build-system python-build-system)
2605 (native-inputs
2606 (list python-flask python-nose python-packaging))
2607 (propagated-inputs
2608 (list python-six))
2609 (home-page "https://flask-cors.readthedocs.io/en/latest/")
2610 (synopsis "Handle Cross-Origin Resource Sharing with Flask")
2611 (description
2612 "This package provides a Flask extension for handling @acronym{CORS,Cross
2613Origin Resource Sharing}, making cross-origin AJAX possible.")
2614 (license license:expat)))
2615
2616(define-public python-flask-markdown
2617 (package
2618 (name "python-flask-markdown")
2619 (version "0.3")
2620 (source
2621 (origin
2622 (method url-fetch)
2623 (uri (pypi-uri "Flask-Markdown" version))
2624 (sha256
2625 (base32
2626 "0l32ikv4f7va926jlq4f7gx0xid247bhlxl6bd9av5dk8ljz1hyq"))))
2627 (build-system python-build-system)
2628 (arguments
2629 '(#:tests? #f)) ; Tests seem to be incompatible with latest python
2630 (propagated-inputs
2631 (list python-markdown python-flask))
2632 (native-inputs
2633 (list python-nose))
2634 (home-page "https://github.com/dcolish/flask-markdown")
2635 (synopsis "Small extension to help with using Markdown in Flask")
2636 (description
2637 "Flask-Markdown supports several extensions for Markdown and integrates
2638into Jinja2 by default.")
2639 (license license:bsd-3)))
2640
2641(define-public python-flask-misaka
2642 (package
2643 (name "python-flask-misaka")
2644 (version "1.0.1")
2645 (source
2646 (origin
2647 (method url-fetch)
2648 (uri (pypi-uri "Flask-Misaka" version))
2649 (sha256
2650 (base32
2651 "1yi9iall3ml1n8bff1mg49xajmldcm5pc0fkpl3w2rlnny08giax"))))
2652 (build-system pyproject-build-system)
2653 (arguments
2654 (list #:test-flags #~(list "tests.py")))
2655 (native-inputs
2656 (list python-flask python-pytest python-setuptools python-wheel))
2657 (propagated-inputs
2658 (list python-markupsafe python-misaka))
2659 (home-page "https://github.com/singingwolfboy/flask-misaka/")
2660 (synopsis "Flask interface to Misaka, a Markdown parsing library")
2661 (description
2662 "This package provides an interface between the Flask web framework and
2663the Misaka Markdown parser.")
2664 (license license:expat)))
2665
2666(define-public python-flask-session
2667 (package
2668 (name "python-flask-session")
2669 (version "0.4.0")
2670 (source
2671 (origin
2672 (method url-fetch)
2673 (uri (pypi-uri "Flask-Session" version))
2674 (sha256
2675 (base32
2676 "0ihzlhdhss8f93p3njzva9rdm7kmhaakdlzz680wmi583wr59vf9"))))
2677 (build-system python-build-system)
2678 (arguments
2679 '(#:tests? #f)) ; Tests require the various storage backends to be present
2680 (propagated-inputs
2681 (list python-cachelib python-flask))
2682 (home-page "https://github.com/fengsp/flask-session")
2683 (synopsis "Adds server-side session support to your Flask application")
2684 (description
2685 "Flask-Session is an extension for Flask that adds support for
2686Server-side sessions, with a variety of different backends for session
2687storage.")
2688 (license license:bsd-3)))
2689
2690(define-public python-html5lib
2691 (package
2692 (name "python-html5lib")
2693 (version "1.1")
2694 (source
2695 (origin
2696 (method url-fetch)
2697 (uri (pypi-uri "html5lib" version))
2698 (sha256
2699 (base32
2700 "0vqlhk0hgbsfkh7ybmby93xhlx8dq6pr5blf356ka3z2c41b9rdj"))))
2701 (build-system python-build-system)
2702 (propagated-inputs
2703 (list python-six python-webencodings
2704 ;; Required by Calibre 5.
2705 python-chardet))
2706 (arguments
2707 `(#:test-target "check"))
2708 (home-page
2709 "https://github.com/html5lib/html5lib-python")
2710 (synopsis
2711 "Python HTML parser based on the WHATWG HTML specification")
2712 (description
2713 "Html5lib is an HTML parser based on the WHATWG HTML specification
2714and written in Python.")
2715 (license license:expat)))
2716
2717(define-public python-html5-parser
2718 (package
2719 (name "python-html5-parser")
2720 (version "0.4.10")
2721 (source (origin
2722 (method url-fetch)
2723 (uri (pypi-uri "html5-parser" version))
2724 (sha256
2725 (base32
2726 "195wgxls3df7djry9cz3p2k9644l6bfd66fczbaw55fsq0c48agr"))))
2727 (build-system python-build-system)
2728 (native-inputs
2729 (list pkg-config))
2730 (inputs
2731 (list libxml2))
2732 (propagated-inputs
2733 (list python-lxml python-beautifulsoup4 python-chardet))
2734 (home-page "https://html5-parser.readthedocs.io")
2735 (synopsis "Fast C-based HTML5 parsing for Python")
2736 (description "This package provides a fast implementation of the HTML5
2737parsing spec for Python. Parsing is done in C using a variant of the gumbo
2738parser. The gumbo parse tree is then transformed into an lxml tree, also in
2739C, yielding parse times that can be a thirtieth of the html5lib parse times.")
2740 ;; src/as-python-tree.[c|h] are licensed GPL3. The other files
2741 ;; indicate ASL2.0, including the LICENSE file for the whole project.
2742 (license (list license:asl2.0 license:gpl3))))
2743
2744(define-public python-html5tagger
2745 (package
2746 (name "python-html5tagger")
2747 (version "1.3.0")
2748 (source (origin
2749 (method url-fetch)
2750 (uri (pypi-uri "html5tagger" version))
2751 (sha256
2752 (base32
2753 "1acd1a4f66gi4plqnsml7cf33qp83mxsnmnqpdwkpj7597xkvyl4"))))
2754 (build-system pyproject-build-system)
2755 (native-inputs
2756 (list python-setuptools python-setuptools-scm python-wheel))
2757 (home-page "https://github.com/sanic-org/html5tagger")
2758 (synopsis "Create HTML documents from Python")
2759 (description
2760 "@code{html5tagger} provides a simplified HTML5 syntax that can
2761be written directly in Python without templates.")
2762 (license license:unlicense)))
2763
2764(define-public python-minio
2765 (package
2766 (name "python-minio")
2767 (version "7.1.9")
2768 (source (origin
2769 (method url-fetch)
2770 (uri (pypi-uri "minio" version))
2771 (sha256
2772 (base32
2773 "02nh865xbf2glxvcy70ir6gkcwqxl119zryfc70q7w0yjvkg64d7"))))
2774 (build-system python-build-system)
2775 (arguments
2776 '(#:phases (modify-phases %standard-phases
2777 (add-before 'check 'disable-failing-tests
2778 (lambda _
2779 ;; This test requires network access.
2780 (delete-file "tests/unit/credentials_test.py"))))))
2781 (native-inputs
2782 (list python-faker python-mock python-nose))
2783 (propagated-inputs
2784 (list python-certifi python-dateutil python-pytz python-urllib3))
2785 (home-page "https://github.com/minio/minio-py")
2786 (synopsis "Programmatically access Amazon S3 from Python")
2787 (description
2788 "This package provides a Python library for interacting with any
2789Amazon S3 compatible object storage server.")
2790 (license license:asl2.0)))
2791
2792(define-public python-pycurl
2793 (package
2794 (name "python-pycurl")
2795 (version "7.45.4")
2796 (source
2797 (origin
2798 (method git-fetch)
2799 (uri (git-reference
2800 (url "https://github.com/pycurl/pycurl")
2801 (commit (string-append
2802 "REL_" (string-replace-substring version "." "_")))))
2803 (file-name (git-file-name name version))
2804 (sha256
2805 (base32 "00cd1l0lsml0708hpv5k4qyhqfv0qphb0p317j9aci2wdspn1mpl"))))
2806 (build-system pyproject-build-system)
2807 (arguments
2808 '(#:test-flags
2809 ;; The test suite is not thread safe:
2810 ;; - some tests want to use the same port: address already in use
2811 ;; - some tests use signal.Signal, i.e. main-thread only
2812 (list "-k" (string-append
2813 ;; Disable hanginging tests
2814 "not test_multi_socket_select"
2815 ;; E assert None is not None
2816 ;; E+ where None =
2817 ;; <tests.multi_callback_test.MultiCallbackTest
2818 ;; testMethod=test_multi_socket_action>.timer_result
2819 " and not test_multi_socket_action"
2820 ;; OSError: tests/fake-curl/libcurl/with_gnutls.so: cannot
2821 ;; open shared object file: No such file or directory
2822 " and not test_libcurl_ssl_gnutls"
2823 ;; OSError: tests/fake-curl/libcurl/with_nss.so: cannot
2824 ;; open shared object file: No such file or directory
2825 " and not test_libcurl_ssl_nss"
2826 ;; OSError: tests/fake-curl/libcurl/with_openssl.so: cannot
2827 ;; open shared object file: No such file or directory
2828 " and not test_libcurl_ssl_openssl"
2829 ;; Probably due to an expired CA
2830 " and not test_request_without_certinfo"
2831 ;; "A libcurl function was given a bad argument"
2832 " and not test_proxy_tlsauth"))
2833 #:phases (modify-phases %standard-phases
2834 (add-before 'build 'configure-tls-backend
2835 (lambda _
2836 ;; XXX: PycURL fails to automatically determine which
2837 ;; TLS backend to use when cURL is built with
2838 ;; --disable-static. See setup.py and
2839 ;; <https://github.com/pycurl/pycurl/pull/147>.
2840 (setenv "PYCURL_SSL_LIBRARY" "gnutls"))))))
2841 (native-inputs
2842 (list python-bottle
2843 python-flaky
2844 python-flask
2845 python-pytest
2846 python-setuptools
2847 python-wheel))
2848 (inputs
2849 (list curl gnutls))
2850 (home-page "http://pycurl.io/")
2851 (synopsis "Lightweight Python wrapper around libcurl")
2852 (description "Pycurl is a lightweight wrapper around libcurl. It provides
2853high-speed transfers via libcurl and frequently outperforms alternatives.")
2854
2855 ;; Per 'README.rst', this is dual-licensed: users can redistribute pycurl
2856 ;; under the terms of LGPLv2.1+ or Expat.
2857 (license (list license:lgpl2.1+ license:expat))))
2858
2859(define-public python-url-normalize
2860 (package
2861 (name "python-url-normalize")
2862 (version "1.4.3")
2863 (source
2864 (origin
2865 (method git-fetch) ; no tests in PyPI release
2866 (uri (git-reference
2867 (url "https://github.com/niksite/url-normalize")
2868 (commit version)))
2869 (file-name (git-file-name name version))
2870 (sha256
2871 (base32 "09nac5nh94x0n4bfazjfxk96b20mfsx6r1fnvqv85gkzs0rwqkaq"))))
2872 (build-system pyproject-build-system)
2873 (arguments
2874 (list
2875 #:phases
2876 #~(modify-phases %standard-phases
2877 (add-after 'unpack 'use-poetry-core
2878 (lambda _
2879 ;; Patch to use the core poetry API.
2880 (substitute* "pyproject.toml"
2881 (("poetry.masonry.api") "poetry.core.masonry.api")))))))
2882 (native-inputs
2883 (list python-poetry-core
2884 python-pytest
2885 python-pytest-flakes
2886 python-pytest-cov
2887 python-pytest-socket))
2888 (home-page "https://github.com/niksite/url-normalize")
2889 (synopsis "URL normalization for Python")
2890 (description
2891 "This package provides a URI Normalization function with following
2892features:
2893@itemize
2894@item take care of IDN domains
2895@item always provide the URI scheme in lowercase characters
2896@item always provide the host, if any, in lowercase characters
2897@item only perform percent-encoding where it is essential
2898@item always use uppercase A-through-F characters when percent-encoding
2899@item prevent dot-segments appearing in non-relative URI paths
2900@item for schemes that define a default authority, use an empty authority if
2901the default is desired
2902@item for schemes that define an empty path to be equivalent to a path of
2903@code{/}, use @code{/}
2904@item for schemes that define a port, use an empty port if the default is
2905desired
2906@item all portions of the URI must be utf-8 encoded NFC from Unicode strings
2907@end itemize")
2908 (license license:expat)))
2909
2910(define-public python-webencodings
2911 (package
2912 (name "python-webencodings")
2913 (version "0.5.1")
2914 (source (origin
2915 (method url-fetch)
2916 (uri (pypi-uri "webencodings" version))
2917 (sha256
2918 (base32
2919 "08qrgrc4hrximb2gqnl69g01s93rhf2842jfxdjljc1dbwj1qsmk"))))
2920 (build-system python-build-system)
2921 (arguments
2922 '(#:phases
2923 (modify-phases %standard-phases
2924 (replace 'check
2925 (lambda _
2926 (invoke "py.test" "-v" "webencodings/tests.py")
2927 #t)))))
2928 (native-inputs
2929 (list python-pytest))
2930 (home-page "https://github.com/SimonSapin/python-webencodings")
2931 (synopsis "Character encoding aliases for legacy web content")
2932 (description
2933 "In order to be compatible with legacy web content when interpreting
2934something like @code{Content-Type: text/html; charset=latin1}, tools need
2935to use a particular set of aliases for encoding labels as well as some
2936overriding rules. For example, @code{US-ASCII} and @code{iso-8859-1} on
2937the web are actually aliases for @code{windows-1252}, and a @code{UTF-8}
2938or @code{UTF-16} BOM takes precedence over any other encoding declaration.
2939The WHATWG @url{https://encoding.spec.whatwg.org/,Encoding} standard
2940defines all such details so that implementations do not have to
2941reverse-engineer each other.
2942
2943This module implements the Encoding standard and has encoding labels and
2944BOM detection, but the actual implementation for encoders and decoders
2945is Python’s.")
2946 (license license:bsd-3)))
2947
2948(define-public python-omnipath
2949 ;; The latest release is incompatible with Numpy 2 and pretty old. A new
2950 ;; release is expected soon.
2951 (let ((commit "3d1613493aa1554618fb2d7297f82e034b7694ce")
2952 (revision "0"))
2953 (package
2954 (name "python-omnipath")
2955 (version (git-version "1.0.8" revision commit))
2956 (source (origin
2957 (method git-fetch)
2958 (uri (git-reference
2959 (url "https://github.com/saezlab/omnipath/")
2960 (commit commit)))
2961 (file-name (git-file-name name commit))
2962 (sha256
2963 (base32
2964 "03lqbgqihglh9mmp7lwmar26fcnsb1qaidrzbmp0z2wvsrgi4fg7"))))
2965 (build-system pyproject-build-system)
2966 (arguments
2967 (list
2968 #:test-flags
2969 '(list "-k"
2970 (string-append
2971 ;; These require internet access
2972 "not test_download_homologene"
2973 " and not test_complex_genes"
2974 ;; Arrays are not equal: Mismatched elements: 4759 / 255465 (1.86%)
2975 " and not test_import_intercell_network"))
2976 #:phases
2977 #~(modify-phases %standard-phases
2978 (add-before 'build 'pretend-version
2979 ;; The version string is usually derived via setuptools-scm, but
2980 ;; without the git metadata available, the version string is set
2981 ;; to '0.0.0'.
2982 (lambda _
2983 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION"
2984 #$(version-major+minor (package-version this-package)))))
2985 (add-after 'unpack 'set-home
2986 (lambda _ (setenv "HOME" "/tmp"))))))
2987 (propagated-inputs
2988 (list python-attrs
2989 python-docrep
2990 python-inflect
2991 python-networkx
2992 python-packaging
2993 python-pandas
2994 python-requests
2995 python-tqdm
2996 python-typing-extensions
2997 python-urllib3
2998 python-wrapt))
2999 (native-inputs
3000 (list nss-certs-for-test
3001 python-bump2version
3002 python-pytest
3003 python-pytest-mock
3004 python-pytest-socket
3005 python-requests-mock
3006 python-setuptools
3007 python-setuptools-scm
3008 python-tox
3009 python-wheel))
3010 (home-page "https://omnipathdb.org/")
3011 (synopsis "Python client for the OmniPath web service")
3012 (description "This package provides a Python client for the OmniPath web
3013service.")
3014 (license license:expat))))
3015
3016(define-public python-openai
3017 (package
3018 (name "python-openai")
3019 (version "0.28.1")
3020 (source (origin
3021 (method url-fetch)
3022 (uri (pypi-uri "openai" version))
3023 (sha256
3024 (base32
3025 "1j6wsavgrxzh6ls8hp45nllz8f5l65a6vzk0lvhlqnx6579xmqab"))))
3026 (build-system pyproject-build-system)
3027 (arguments
3028 (list
3029 #:test-flags
3030 ;; These require internet access and an openai API key.
3031 '(list "--ignore=openai/tests/asyncio/test_endpoints.py"
3032 "--ignore=openai/tests/test_endpoints.py"
3033 "-k" "not test_requestor_cycle_sessions\
3034 and not test_requestor_sets_request_id\
3035 and not test_file_cli")))
3036 (propagated-inputs (list python-aiohttp python-requests python-tqdm
3037 python-typing-extensions))
3038 (native-inputs (list python-black python-pytest python-pytest-asyncio
3039 python-pytest-mock python-setuptools python-wheel))
3040 (home-page "https://github.com/openai/openai-python")
3041 (synopsis "Python client library for the OpenAI API")
3042 (description "This package provides a Python client library for the
3043OpenAI API.")
3044 (license license:expat)))
3045
3046(define-public python-openapi-schema-validator
3047 (package
3048 (name "python-openapi-schema-validator")
3049 (version "0.6.2")
3050 (source
3051 (origin
3052 (method git-fetch) ;no tests in pypi release
3053 (uri (git-reference
3054 (url "https://github.com/p1c2u/openapi-schema-validator")
3055 (commit version)))
3056 (file-name (git-file-name name version))
3057 (sha256
3058 (base32
3059 "0pgsm1x7lhc5ryj4l45ik8m5x9gqyi50dkflaiqqr4fnl0bsbx09"))))
3060 (build-system pyproject-build-system)
3061 (arguments
3062 (list
3063 #:test-flags
3064 ;; This one returns 5 instead of 4 elements
3065 '(list "-k" "not test_array_prefixitems_invalid")
3066 #:phases
3067 #~(modify-phases %standard-phases
3068 (add-after 'unpack 'remove-coverage-pytest-options
3069 (lambda _
3070 (substitute* "pyproject.toml"
3071 (("^--cov.*") ""))))
3072 ;; See https://github.com/python-openapi/openapi-schema-validator/issues/204
3073 (add-after 'unpack 'relax-requirements
3074 (lambda _
3075 (substitute* "pyproject.toml"
3076 (("jsonschema-specifications.*")
3077 "jsonschema-specifications = \">=2023.5.2\"\n")))))))
3078 (native-inputs (list python-poetry-core python-pytest))
3079 (propagated-inputs
3080 (list python-isodate
3081 python-jsonschema
3082 python-rfc3339-validator
3083 python-strict-rfc3339))
3084 (home-page "https://github.com/p1c2u/openapi-schema-validator")
3085 (synopsis "OpenAPI schema validation library for Python")
3086 (description "Openapi-schema-validator is a Python library that validates
3087a schema against:
3088@itemize
3089@item OpenAPI Schema Specification v3.0 which is an extended subset of the
3090JSON Schema Specification Wright Draft 00.
3091@item OpenAPI Schema Specification v3.1 which is an extended superset of the
3092JSON Schema Specification Draft 2020-12.
3093@end itemize")
3094 (license license:bsd-3)))
3095
3096(define-public python-openapi-spec-validator
3097 (package
3098 (name "python-openapi-spec-validator")
3099 (version "0.7.1")
3100 (source
3101 (origin
3102 (method git-fetch) ;no tests in pypi release
3103 (uri (git-reference
3104 (url "https://github.com/p1c2u/openapi-spec-validator")
3105 (commit version)))
3106 (file-name (git-file-name name version))
3107 (sha256
3108 (base32
3109 "0s5yd4dbr6knwd2g1g4v2931k14n1lm80l11n2ija18yfis8yisz"))))
3110 (build-system pyproject-build-system)
3111 (arguments
3112 (list
3113 ;; These tests attempt to fetch resources from the Internet
3114 #:test-flags '(list "--ignore-glob=tests/integration/validation/**"
3115 "-k" "not example")
3116 #:phases
3117 #~(modify-phases %standard-phases
3118 (add-after 'unpack 'remove-coverage-pytest-options
3119 (lambda _
3120 (substitute* "pyproject.toml"
3121 (("^--cov.*") "")))))))
3122 (native-inputs
3123 (list python-poetry-core
3124 python-pytest))
3125 (propagated-inputs
3126 (list python-jsonschema
3127 python-jsonschema-path
3128 python-lazy-object-proxy
3129 python-openapi-schema-validator
3130 python-pyyaml
3131 python-requests
3132 python-setuptools))
3133 (home-page "https://github.com/p1c2u/openapi-spec-validator")
3134 (synopsis "OpenAPI spec validator")
3135 (description "OpenAPI Spec Validator is a Python library that validates an
3136OpenAPI specification against the OpenAPI 2.0 (also known as Swagger), OpenAPI
31373.0 and OpenAPI 3.1 specifications. The validator aims to check for full
3138compliance with the specification.")
3139 (license license:asl2.0)))
3140
3141(define-public python-openapi-core
3142 (package
3143 (name "python-openapi-core")
3144 (version "0.19.4")
3145 (source
3146 (origin
3147 (method git-fetch)
3148 (uri (git-reference
3149 (url "https://github.com/p1c2u/openapi-core")
3150 (commit version)))
3151 (file-name (git-file-name name version))
3152 (sha256
3153 (base32
3154 "092sj2933jmvq5r76khr0vphih490vls1ga3s43gz8i47aqaxx96"))))
3155 (build-system pyproject-build-system)
3156 (arguments
3157 (list
3158 #:test-flags
3159 '(list "tests/unit"
3160 ;; Ignore Pytest configuration in setup.cfg that adds
3161 ;; unwanted flake8 and coverage options.
3162 "-c" "/dev/null"
3163 "-k" "not test_chars_valid")))
3164 (native-inputs (list python-django
3165 python-falcon
3166 python-flask
3167 python-mock
3168 python-poetry-core
3169 python-pytest
3170 python-responses))
3171 (propagated-inputs
3172 (list python-attrs
3173 python-aiohttp
3174 python-dictpath
3175 python-isodate
3176 python-jsonschema
3177 python-lazy-object-proxy
3178 python-more-itertools
3179 python-openapi-schema-validator
3180 python-openapi-spec-validator
3181 python-parse
3182 python-six
3183 python-werkzeug))
3184 (home-page "https://github.com/p1c2u/openapi-core")
3185 (synopsis "OpenAPI core library")
3186 (description "Openapi-core is a Python library that adds client-side and
3187server-side support for the OpenAPI Specification v3. It has features such
3188as:
3189@itemize
3190@item Validation of requests and responses
3191@item Schema casting and unmarshalling
3192@item Media type and parameters deserialization
3193@item Security providers (API keys, Cookie, Basic and Bearer HTTP
3194authentications)
3195@item Custom deserializers and formats
3196@item Integration with libraries and frameworks.
3197@end itemize")
3198 (license license:bsd-3)))
3199
3200(define-public python-openid
3201 (package
3202 (name "python-openid")
3203 (version "3.2.0")
3204 (source
3205 (origin
3206 (method url-fetch)
3207 (uri (pypi-uri "python3-openid" version))
3208 (sha256
3209 (base32
3210 "1bxf9a3ny1js422j962zfzl4a9dhj192pvai05whn7j0iy9gdyrk"))))
3211 (build-system python-build-system)
3212 (arguments
3213 `(#:phases
3214 (modify-phases %standard-phases
3215 (replace 'check
3216 (lambda* (#:key tests? #:allow-other-keys)
3217 (when tests?
3218 (invoke "coverage" "run" "-m"
3219 "unittest" "openid.test.test_suite")))))))
3220 (propagated-inputs
3221 (list python-defusedxml))
3222 (native-inputs
3223 (list python-coverage python-psycopg2 python-django))
3224 (home-page "https://github.com/necaris/python3-openid")
3225 (synopsis "OpenID support for servers and consumers")
3226 (description "This library provides OpenID authentication for Python, both
3227for clients and servers.")
3228 (license license:asl2.0)))
3229
3230(define-public python-cssutils
3231 (package
3232 (name "python-cssutils")
3233 (version "2.11.1")
3234 (source
3235 (origin
3236 (method url-fetch)
3237 (uri (pypi-uri "cssutils" version))
3238 (sha256
3239 (base32
3240 "1qpq7xvzqp4cfcb8837rnd30x4hws3rkp33qpvmnxbxn2djsfqq5"))))
3241 (build-system pyproject-build-system)
3242 (arguments
3243 (list
3244 #:phases
3245 #~(modify-phases %standard-phases
3246 (replace 'check
3247 (lambda _
3248 (invoke "pytest" "-vv" "-k"
3249 (string-append "not encutils "
3250 "and not website.logging")))))))
3251 (native-inputs
3252 (list python-cssselect
3253 python-jaraco-test
3254 python-lxml
3255 python-pytest
3256 python-setuptools
3257 python-wheel))
3258 (propagated-inputs
3259 (list python-more-itertools))
3260 (home-page "https://github.com/jaraco/cssutils")
3261 (synopsis
3262 "CSS Cascading Style Sheets library for Python")
3263 (description
3264 "Cssutils is a Python package for parsing and building CSS
3265Cascading Style Sheets. Currently it provides a DOM only and no rendering
3266options.")
3267 (license license:lgpl3+)))
3268
3269(define-public python-css-parser
3270 (package
3271 (inherit python-cssutils)
3272 (name "python-css-parser")
3273 (version "1.0.7")
3274 (source
3275 (origin
3276 (method url-fetch)
3277 (uri (pypi-uri "css-parser" version ".tar.gz"))
3278 (sha256
3279 (base32 "1ldv9s3an4pgk7b5x6z07rw9b5fdrasdldnf22829pb26b39dq15"))))
3280 (home-page "https://github.com/ebook-utils/css-parser")
3281 (synopsis "Fork of cssutils modified for parsing ebooks")
3282 (description
3283 "Css-parser is a Python package for parsing and building CSS
3284Cascading Style Sheets. Currently it provides a DOM only and no rendering
3285options.
3286
3287It's a fork of cssutils 1.0.2, updated and modified for parsing ebooks, due to
3288cssutils not receiving updates as of 1.0.2.")
3289 (license license:lgpl3+)))
3290
3291(define-public python-cssselect
3292 (package
3293 (name "python-cssselect")
3294 (version "1.2.0")
3295 (source (origin
3296 ;; The PyPI release does not contain tests.
3297 (method git-fetch)
3298 (uri (git-reference
3299 (url "https://github.com/scrapy/cssselect")
3300 (commit (string-append "v" version))))
3301 (file-name (git-file-name name version))
3302 (sha256
3303 (base32
3304 "1x4nrvb1p1byi1whmspik7lbh303akdlh762dayfxam3hycsh5kk"))))
3305 (build-system pyproject-build-system)
3306 (native-inputs
3307 (list python-lxml python-pytest python-setuptools python-wheel))
3308 (home-page "https://github.com/scrapy/cssselect")
3309 (synopsis "CSS3 selector parser and translator to XPath 1.0")
3310 (description
3311 "Cssselect ia a Python module that parses CSS3 Selectors and translates
3312them to XPath 1.0 expressions. Such expressions can be used in lxml or
3313another XPath engine to find the matching elements in an XML or HTML document.")
3314 (license license:bsd-3)))
3315
3316(define-public python-databricks-cli
3317 (package
3318 (name "python-databricks-cli")
3319 (version "0.17.0")
3320 (home-page "https://github.com/databricks/databricks-cli")
3321 (source (origin
3322 (method git-fetch)
3323 (uri (git-reference (url home-page) (commit version)))
3324 (file-name (git-file-name name version))
3325 (sha256
3326 (base32
3327 "1qwbxnx64kw7lrzlyx3hfbnjxpc19cqvvj0gcrkqpyjsgd08vja0"))))
3328 (build-system python-build-system)
3329 (arguments
3330 '(#:phases (modify-phases %standard-phases
3331 (replace 'check
3332 (lambda _
3333 (invoke "pytest" "tests" "-vv"))))))
3334 (native-inputs
3335 ;; For tests.
3336 (list python-decorator
3337 python-mock
3338 python-pytest
3339 python-requests-mock))
3340 (propagated-inputs
3341 (list python-click
3342 python-oauthlib
3343 python-pyjwt
3344 python-requests
3345 python-six
3346 python-tabulate))
3347 (synopsis "Command line interface for Databricks")
3348 (description
3349 "The Databricks Command Line Interface is a tool which provides an easy
3350to use interface to the Databricks platform. The CLI is built on top of the
3351Databricks REST APIs.")
3352 (license license:asl2.0)))
3353
3354(define-public python-openid-cla
3355 (package
3356 (name "python-openid-cla")
3357 (version "1.2")
3358 (source
3359 (origin
3360 (method url-fetch)
3361 (uri (pypi-uri "python-openid-cla" version))
3362 (sha256
3363 (base32
3364 "102hy2qisvjxp5s0v9lvwqi4f2dk0dhns40vjgn008yxc7k0h3cr"))))
3365 (build-system python-build-system)
3366 (arguments '(#:tests? #f)) ; No tests.
3367 (propagated-inputs (list python-openid python-six))
3368 (home-page "https://github.com/puiterwijk/python-openid-cla/")
3369 (synopsis "Implementation of the OpenID CLA extension for python-openid")
3370 (description "@code{openid-cla} is an implementation of the OpenID
3371contributor license agreement extension for python-openid.")
3372 (license license:bsd-3)))
3373
3374(define-public python-openid-teams
3375 (package
3376 (name "python-openid-teams")
3377 (version "1.1")
3378 (source
3379 (origin
3380 (method url-fetch)
3381 (uri (pypi-uri "python-openid-teams" version))
3382 (sha256
3383 (base32
3384 "05zrh78alav24rxkbqlpbad6d3x2nljk6z6j7kflxf3vdqa7w969"))))
3385 (build-system python-build-system)
3386 (arguments '(#:tests? #f)) ; No tests.
3387 (propagated-inputs (list python-openid python-six))
3388 (home-page "https://github.com/puiterwijk/python-openid-teams/")
3389 (synopsis "Implementation of the OpenID teams extension for python-openid")
3390 (description
3391 "@code{openid-teams} is an implementation of the OpenID
3392teams extension for python-openid.")
3393 (license license:bsd-3)))
3394
3395(define-public python-priority
3396 (package
3397 (name "python-priority")
3398 (version "1.3.0")
3399 (source
3400 (origin
3401 (method url-fetch)
3402 (uri (pypi-uri "priority" version))
3403 (sha256
3404 (base32 "1gpzn9k9zgks0iw5wdmad9b4dry8haiz2sbp6gycpjkzdld9dhbb"))))
3405 (build-system python-build-system)
3406 (arguments
3407 `(#:phases
3408 (modify-phases %standard-phases
3409 (replace 'check
3410 (lambda* (#:key inputs outputs #:allow-other-keys)
3411 (add-installed-pythonpath inputs outputs)
3412 (invoke "pytest" "-vv" "test" "-k"
3413 ;; This test exceeded the Hypothesis deadline.
3414 "not test_period_of_repetition"))))))
3415 (native-inputs
3416 (list python-hypothesis python-pytest python-pytest-cov
3417 python-pytest-xdist))
3418 (home-page "https://python-hyper.org/projects/priority/en/latest/")
3419 (synopsis "Pure-Python implementation of the HTTP/2 priority tree")
3420 (description
3421 "Priority is a pure-Python implementation of the priority logic for HTTP/2,
3422set out in RFC 7540 Section 5.3 (Stream Priority).")
3423 (license license:expat)))
3424
3425(define-public python-wsproto
3426 (package
3427 (name "python-wsproto")
3428 (version "1.2.0")
3429 (source
3430 (origin
3431 (method url-fetch)
3432 (uri (pypi-uri "wsproto" version))
3433 (sha256
3434 (base32 "0rahm1j9danv1l6i6as80acwv16ycihxkhrvwjiqh9drxhk5ymmd"))))
3435 (build-system pyproject-build-system)
3436 (native-inputs
3437 (list python-pytest python-setuptools python-wheel))
3438 (propagated-inputs
3439 (list python-h11))
3440 (home-page "https://github.com/python-hyper/wsproto/")
3441 (synopsis "WebSockets state-machine based protocol implementation")
3442 (description
3443 "@code{wsproto} is a pure-Python implementation of a WebSocket protocol
3444stack. It's written from the ground up to be embeddable in whatever program you
3445choose to use, ensuring that you can communicate via WebSockets, as defined in
3446RFC6455, regardless of your programming paradigm.")
3447 (license license:expat)))
3448
3449(define-public hypercorn
3450 (package
3451 (name "hypercorn")
3452 (version "0.17.3")
3453 (source
3454 (origin
3455 (method git-fetch) ;PyPI does not have tests
3456 (uri (git-reference
3457 (url "https://github.com/pgjones/hypercorn")
3458 (commit version)))
3459 (file-name (git-file-name name version))
3460 (sha256
3461 (base32 "13v6cy4frvnddv9zak06a4lmwxp121hjyfrlapxfmb7m3i8qrm02"))))
3462 (build-system pyproject-build-system)
3463 ;; Propagate because Hypercorn also exposes functionality over a module.
3464 (propagated-inputs (list python-exceptiongroup
3465 python-h11
3466 python-taskgroup
3467 python-h2
3468 python-priority
3469 python-tomli
3470 python-wsproto))
3471 (native-inputs (list nss-certs-for-test
3472 python-httpx
3473 python-poetry-core
3474 python-pytest
3475 python-pytest-asyncio
3476 python-pytest-cov
3477 python-pytest-trio
3478 python-trio))
3479 (home-page "https://gitlab.com/pgjones/hypercorn/")
3480 (synopsis "ASGI Server based on Hyper libraries")
3481 (description
3482 "Hypercorn is an ASGI web server based on the sans-io hyper, h11, h2, and
3483wsproto libraries and inspired by Gunicorn. It supports HTTP/1, HTTP/2,
3484WebSockets (over HTTP/1 and HTTP/2), ASGI/2, and ASGI/3 specifications. It
3485can utilise asyncio, uvloop, or trio worker types.")
3486 (license license:expat)))
3487
3488(define-public python-hypercorn
3489 (deprecated-package "python-hypercorn" hypercorn))
3490
3491(define-public python-querystring-parser
3492 (package
3493 (name "python-querystring-parser")
3494 (version "1.2.4")
3495 (source (origin
3496 (method url-fetch)
3497 (uri (pypi-uri "querystring_parser" version))
3498 (sha256
3499 (base32
3500 "0qlar8a0wa003hm2z6wcpb625r6vjj0a70rsni9h8lz0zwfcwkv4"))))
3501 (build-system python-build-system)
3502 (arguments
3503 `(#:phases (modify-phases %standard-phases
3504 (replace 'check
3505 (lambda _
3506 ;; XXX FIXME: This test is broken with Python 3.7:
3507 ;; https://github.com/bernii/querystring-parser/issues/35
3508 (substitute* "querystring_parser/tests.py"
3509 (("self\\.assertEqual\\(self\\.knownValuesNormalized, result\\)")
3510 "True"))
3511 (invoke "python" "querystring_parser/tests.py"))))))
3512 (propagated-inputs
3513 (list python-six))
3514 (home-page "https://github.com/bernii/querystring-parser")
3515 (synopsis "QueryString parser that correctly handles nested dictionaries")
3516 (description
3517 "This package provides a query string parser for Python and Django
3518projects that correctly creates nested dictionaries from sent form/querystring
3519data.")
3520 (license license:expat)))
3521
3522(define-public python-tornado
3523 (package
3524 (name "python-tornado")
3525 (version "5.1.1")
3526 (source
3527 (origin
3528 (method url-fetch)
3529 (uri (pypi-uri "tornado" version))
3530 (sha256
3531 (base32
3532 "02clqk2116jbnq8lnaqmdw3p52nqrd9ib59r4xz2ll43fpcmhlaf"))))
3533 (build-system python-build-system)
3534 (arguments
3535 (list
3536 #:phases
3537 '(modify-phases %standard-phases
3538 (add-after 'unpack 'fix-collections
3539 (lambda _
3540 (substitute* "tornado/httputil.py"
3541 (("collections.MutableMapping")
3542 "collections.abc.MutableMapping"))))
3543 (replace 'check
3544 (lambda* (#:key tests? #:allow-other-keys)
3545 (when tests?
3546 (substitute* "tornado/test/runtests.py"
3547 (("\"error\", category=DeprecationWarning")
3548 "\"ignore\", category=DeprecationWarning")
3549 ;; Disable tests that use SSL.
3550 (("'tornado.test.simple_httpclient_test',") "")
3551 (("'tornado.test.iostream_test',") "")
3552 (("'tornado.test.httpserver_test',") "")
3553 ;; Some timeouts are triggered in these two modules
3554 (("'tornado.test.queues_test',") "")
3555 (("'tornado.test.locks_test',") ""))
3556 ;; Skip all network tests
3557 (setenv "NO_NETWORK" "1")
3558 ;; Skip timing-relevant tests
3559 (setenv "TRAVIS" "1")
3560 (invoke "python" "-m" "tornado.test.runtests"
3561 "--verbose=yes")))))))
3562 (native-inputs
3563 (list python-certifi))
3564 (home-page "https://www.tornadoweb.org/")
3565 (synopsis "Python web framework and asynchronous networking library")
3566 (description
3567 "Tornado is a Python web framework and asynchronous networking library,
3568originally developed at FriendFeed. By using non-blocking network I/O,
3569Tornado can scale to tens of thousands of open connections, making it ideal
3570for long polling, WebSockets, and other applications that require a long-lived
3571connection to each user.")
3572 (license license:asl2.0)))
3573
3574(define-public python-tornado-6
3575 (package
3576 (name "python-tornado")
3577 (version "6.4.2")
3578 (source
3579 (origin
3580 (method url-fetch)
3581 (uri (pypi-uri "tornado" version))
3582 (sha256
3583 (base32 "02v2mlvr58xg0l0gh08nswl53z73wkf23sziggypk63ffjsdbflj"))))
3584 (build-system pyproject-build-system)
3585 (arguments
3586 (list
3587 #:test-flags
3588 ;; AttributeError: 'TestIOStreamWebMixin' object has no attribute 'io_loop'
3589 #~(list "--ignore=tornado/test/iostream_test.py")))
3590 (native-inputs
3591 (list python-certifi
3592 python-pytest
3593 python-setuptools
3594 python-wheel))
3595 (home-page "https://www.tornadoweb.org/")
3596 (synopsis "Python web framework and asynchronous networking library")
3597 (description
3598 "Tornado is a Python web framework and asynchronous networking library,
3599originally developed at FriendFeed. By using non-blocking network I/O,
3600Tornado can scale to tens of thousands of open connections, making it ideal
3601for long polling, WebSockets, and other applications that require a long-lived
3602connection to each user.")
3603 (license license:asl2.0)))
3604
3605(define-public python-tornado-http-auth
3606 (package
3607 (name "python-tornado-http-auth")
3608 (version "1.1.1")
3609 (source
3610 (origin
3611 (method url-fetch)
3612 (uri (pypi-uri "tornado-http-auth" version))
3613 (sha256
3614 (base32 "0hyc5f0a09i5yb99pk4bxpg6w9ichbrb5cv7hc9hff7rxd8w0v0x"))))
3615 (build-system python-build-system)
3616 (propagated-inputs
3617 (list python-tornado))
3618 (home-page "https://github.com/gvalkov/tornado-http-auth")
3619 (synopsis "Digest and basic authentication module for Tornado")
3620 (description
3621 "Provides support for adding authentication to services using the Tornado
3622web framework, either via the basic or digest authentication schemes.")
3623 (license license:asl2.0)))
3624
3625(define-public python-terminado
3626 (package
3627 (name "python-terminado")
3628 (version "0.10.0")
3629 (source
3630 (origin
3631 (method url-fetch)
3632 (uri (pypi-uri "terminado" version))
3633 (sha256
3634 (base32
3635 "1smvra3sc9sg64w49kfn5yhagshq3x55839748ck5dvxvk4hgza6"))))
3636 (build-system python-build-system)
3637 (propagated-inputs
3638 (list python-tornado-6 python-ptyprocess))
3639 (native-inputs
3640 (list python-pytest))
3641 (arguments
3642 `(#:phases
3643 (modify-phases %standard-phases
3644 (replace 'check
3645 (lambda _ (invoke "pytest" "-vv"))))))
3646 (home-page "https://github.com/jupyter/terminado")
3647 (synopsis "Terminals served to term.js using Tornado websockets")
3648 (description "This package provides a Tornado websocket backend for the
3649term.js Javascript terminal emulator library.")
3650 (license license:bsd-2)))
3651
3652(define-public python-wsgi-intercept
3653 (package
3654 (name "python-wsgi-intercept")
3655 (version "1.13.1")
3656 (source (origin
3657 (method url-fetch)
3658 (uri (pypi-uri "wsgi_intercept" version))
3659 (sha256
3660 (base32
3661 "1h94dj7h7n7zdj3ll4imqjhq5vk21yidk2niwnmpw7xik9inrgbr"))))
3662 (build-system pyproject-build-system)
3663 (arguments
3664 (list
3665 ;; XXX: tests required internet access
3666 #:tests? #f))
3667 (propagated-inputs
3668 (list python-six))
3669 (native-inputs
3670 (list python-httplib2
3671 python-pytest
3672 python-requests
3673 python-setuptools
3674 python-urllib3
3675 python-wheel))
3676 (synopsis "Puts a WSGI application in place of a real URI for testing")
3677 (description "Wsgi_intercept installs a WSGI application in place of a real
3678URI for testing. Testing a WSGI application normally involves starting a
3679server at a local host and port, then pointing your test code to that address.
3680Instead, this library lets you intercept calls to any specific host/port
3681combination and redirect them into a WSGI application importable by your test
3682program. Thus, you can avoid spawning multiple processes or threads to test
3683your Web app.")
3684 (home-page "https://github.com/cdent/wsgi-intercept")
3685 (license license:expat)))
3686
3687(define-public python-webob
3688 (package
3689 (name "python-webob")
3690 (version "1.8.6")
3691 (source
3692 (origin
3693 (method url-fetch)
3694 (uri (pypi-uri "WebOb" version))
3695 (sha256
3696 (base32
3697 "026i3z99nr3px75isa9mbnky5i7rffiv4d124h5kxfjjsxz92fma"))))
3698 (build-system python-build-system)
3699 (native-inputs
3700 (list python-nose))
3701 (home-page "https://webob.org/")
3702 (synopsis "WSGI request and response object")
3703 (description
3704 "WebOb provides wrappers around the WSGI request environment, and an
3705object to help create WSGI responses.")
3706 (license license:expat)))
3707
3708(define-public python-zc-lockfile
3709 (package
3710 (name "python-zc-lockfile")
3711 (version "3.0.post1")
3712 (source
3713 (origin
3714 (method url-fetch)
3715 (uri (pypi-uri "zc.lockfile" version))
3716 (sha256
3717 (base32 "1v41irj7azaag3f14xyviv3l8mvap74v5p3q274k68vakrnyxcmd"))))
3718 (build-system python-build-system)
3719 (arguments
3720 '(#:phases (modify-phases %standard-phases
3721 (replace 'check
3722 (lambda* (#:key tests? #:allow-other-keys)
3723 (if tests?
3724 (invoke "zope-testrunner" "--test-path=src")
3725 (format #t "test suite not run~%")))))))
3726 (native-inputs (list python-zope-testing python-zope-testrunner))
3727 (home-page "https://github.com/zopefoundation/zc.lockfile")
3728 (synopsis "Interprocess locks using lock files")
3729 (description
3730 "This package provides an implementation of interprocess locks using lock
3731files. These locks can also be used to mediate access to other files.")
3732 (license license:zpl2.1)))
3733
3734(define-public python-zconfig
3735 (package
3736 (name "python-zconfig")
3737 (version "4.0")
3738 (source
3739 (origin
3740 (method url-fetch)
3741 (uri (pypi-uri "ZConfig" version))
3742 (sha256
3743 (base32 "0mh13p38vq7ip4zkvaplzr8w0mqrmmqiyb5y663d165slvxl5mpq"))))
3744 (build-system python-build-system)
3745 (arguments
3746 '(#:phases (modify-phases %standard-phases
3747 (replace 'check
3748 (lambda* (#:key tests? #:allow-other-keys)
3749 (if tests?
3750 (begin
3751 ;; This test assumes we still have setup.py in the
3752 ;; directory from which we import zconfig, which
3753 ;; does not work after installing the package.
3754 (delete-file-recursively
3755 "src/ZConfig/tests/test_readme.py")
3756 (invoke "zope-testrunner" "-vv" "--test-path=src"
3757 "--all"))
3758 (format #t "test suite not run~%")))))))
3759 (native-inputs (list python-docutils python-manuel python-zope-exceptions
3760 python-zope-testrunner))
3761 (home-page "https://github.com/zopefoundation/ZConfig/")
3762 (synopsis "Structured configuration library intended for general use")
3763 (description
3764 "@code{zconfig} is a configuration library intended for general
3765use. It supports a hierarchical schema-driven configuration model that allows
3766a schema to specify data conversion routines written in Python. Its model is
3767very different from the model supported by the @code{configparser} module
3768found in Python's standard library, and is more suitable to
3769configuration-intensive applications.")
3770 (license license:zpl2.1)))
3771
3772(define-public python-zodb
3773 (package
3774 (name "python-zodb")
3775 (version "5.8.1")
3776 (source
3777 (origin
3778 (method url-fetch)
3779 (uri (pypi-uri "ZODB" version))
3780 (sha256
3781 (base32 "1pv4w8mnx6j4xvkcjbkh99pv8ljby7g9f7zjq7zhdmk06sykmiy6"))))
3782 (build-system pyproject-build-system)
3783 (arguments
3784 '(#:phases (modify-phases %standard-phases
3785 (replace 'check
3786 (lambda* (#:key tests? #:allow-other-keys)
3787 (if tests?
3788 (begin
3789 ;; This test does not work after installing the
3790 ;; package, since it expects the ZODB source code
3791 ;; to reside in the src/ directory.
3792 (delete-file-recursively
3793 "src/ZODB/tests/testdocumentation.py")
3794 (invoke "zope-testrunner" "-vv" "--test-path=src"
3795 "--all"))
3796 (format #t "test suite not run~%")))))))
3797 (propagated-inputs (list python-btrees
3798 python-persistent
3799 python-zconfig
3800 python-six
3801 python-transaction
3802 python-zc-lockfile
3803 python-zodbpickle
3804 python-zope-interface))
3805 (native-inputs (list python-manuel python-zope-testing
3806 python-zope-testrunner))
3807 (home-page "http://zodb-docs.readthedocs.io")
3808 (synopsis "Object-oriented database for Python")
3809 (description
3810 "@code{ZODB} provides an object-oriented and @acronym{ACID,
3811Atomicity Consistency Isolation Durability} compliant database for Python with
3812a high degree of transparency. @code{ZODB} is an object-oriented database,
3813not an object-relational mapping. This comes with several advantaged:
3814
3815@itemize
3816@item no separate language for database operations
3817@item very little impact on your code to make objects persistent
3818@item no database mapper that partially hides the database.
3819@item almost no seam between code and database.
3820@end itemize")
3821 (license license:zpl2.1)))
3822
3823(define-public python-zodbpickle
3824 (package
3825 (name "python-zodbpickle")
3826 (version "3.2")
3827 (source
3828 (origin
3829 (method url-fetch)
3830 (uri (pypi-uri "zodbpickle" version))
3831 (sha256
3832 (base32 "035bjrksl4h92mvjkx6id4gjcpc1k4mbci8ryjl6l9mki7ihx77b"))))
3833 (build-system pyproject-build-system)
3834 (arguments
3835 '(#:phases (modify-phases %standard-phases
3836 (replace 'check
3837 (lambda* (#:key tests? #:allow-other-keys)
3838 (if tests?
3839 (invoke "zope-testrunner" "-vv" "--test-path=src"
3840 "--all")
3841 (format #t "test suite not run~%")))))))
3842 (native-inputs (list python-zope-testrunner python-setuptools python-wheel))
3843 (home-page "https://github.com/zopefoundation/zodbpickle")
3844 (synopsis "Uniform pickling interface for @code{zodb}")
3845 (description
3846 "This package is a fork of the @code{pickle} module (and the
3847supporting C extension) from both Python 3.2 and Python 3.3. The fork adds
3848support for the @code{noload} operations used by @code{zodb}.")
3849 (license (list license:psfl license:zpl2.1))))
3850
3851(define-public python-zope-event
3852 (package
3853 (name "python-zope-event")
3854 (version "4.4")
3855 (source
3856 (origin
3857 (method url-fetch)
3858 (uri (pypi-uri "zope.event" version))
3859 (sha256
3860 (base32
3861 "1ksbc726av9xacml6jhcfyn828hlhb9xlddpx6fcvnlvmpmpvhk9"))))
3862 (build-system python-build-system)
3863 (home-page "https://pypi.org/project/zope.event/")
3864 (synopsis "Event publishing system for Python")
3865 (description "Zope.event provides an event publishing API, intended for
3866use by applications which are unaware of any subscribers to their events. It
3867is a simple event-dispatching system on which more sophisticated event
3868dispatching systems can be built.")
3869 (license license:zpl2.1)))
3870
3871(define-public python-zope-interface
3872 (package
3873 (name "python-zope-interface")
3874 (version "5.1.0")
3875 (source
3876 (origin
3877 (method url-fetch)
3878 (uri (pypi-uri "zope.interface" version))
3879 (sha256
3880 (base32
3881 "03nrl6b8cb600dnnh46y149awvrm0gxyqgwq5hdw3lvys8mw9r20"))))
3882 (build-system python-build-system)
3883 (arguments '(#:tests? #f)) ; test suite can't find python-zope-testing
3884 (native-inputs
3885 (list python-coverage python-nose python-zope-event
3886 python-zope-testing))
3887 (home-page "https://github.com/zopefoundation/zope.interface")
3888 (synopsis "Python implementation of the \"design by contract\"
3889methodology")
3890 (description "Zope.interface provides an implementation of \"object
3891interfaces\" for Python. Interfaces are a mechanism for labeling objects as
3892conforming to a given API or contract.")
3893 (license license:zpl2.1)))
3894
3895(define-public python-zope-exceptions
3896 (package
3897 (name "python-zope-exceptions")
3898 (version "4.6")
3899 (source
3900 (origin
3901 (method url-fetch)
3902 (uri (pypi-uri "zope.exceptions" version))
3903 (sha256
3904 (base32
3905 "1kc3hql2i35ys5alkj9csiaz2s9bx0rff585vnrrgvavqsj297b1"))))
3906 (build-system python-build-system)
3907 (arguments
3908 '(#:phases
3909 (modify-phases %standard-phases
3910 (replace 'check
3911 (lambda* (#:key tests? #:allow-other-keys)
3912 (if tests?
3913 (invoke "zope-testrunner" "--test-path=src")
3914 (format #t "test suite not run~%")))))))
3915 (native-inputs
3916 `(("python-zope-testrunner" ,python-zope-testrunner-bootstrap)))
3917 (propagated-inputs
3918 (list python-zope-interface))
3919 (home-page "https://pypi.org/project/zope.exceptions/")
3920 (synopsis "Zope exceptions")
3921 (description "Zope.exceptions provides general-purpose exception types
3922that have uses outside of the Zope framework.")
3923 (license license:zpl2.1)))
3924
3925(define (python-zope-bootstrap-package orig)
3926 (package
3927 (inherit orig)
3928 (name (string-append (package-name orig) "-bootstrap"))
3929 (arguments
3930 (if (null? (package-arguments orig))
3931 `(#:tests? #f
3932 #:phases (modify-phases %standard-phases
3933 (delete 'sanity-check)))
3934 (substitute-keyword-arguments (package-arguments orig)
3935 ((#:tests? _ #f) #f)
3936 ((#:phases phases '%standard-phases)
3937 `(modify-phases ,phases
3938 (delete 'sanity-check))))))
3939 (propagated-inputs `())
3940 (native-inputs `())
3941 (properties `((hidden? . #t)))))
3942
3943(define-public python-zope-exceptions-bootstrap
3944 (python-zope-bootstrap-package python-zope-exceptions))
3945
3946(define-public python-zope-testing
3947 (package
3948 (name "python-zope-testing")
3949 (version "4.7")
3950 (source
3951 (origin
3952 (method url-fetch)
3953 (uri (pypi-uri "zope.testing" version))
3954 (sha256
3955 (base32
3956 "1sh3c3i0m8n8fnhqiry0bk3rr356i56ry7calmn57s1pvv8yhsyn"))))
3957 (build-system python-build-system)
3958 (home-page "https://pypi.org/project/zope.testing/")
3959 (synopsis "Zope testing helpers")
3960 (description "Zope.testing provides a number of testing utilities for HTML
3961forms, HTTP servers, regular expressions, and more.")
3962 (license license:zpl2.1)))
3963
3964(define-public python-zope-testrunner
3965 (package
3966 (name "python-zope-testrunner")
3967 (version "5.2")
3968 (source
3969 (origin
3970 (method url-fetch)
3971 (uri (pypi-uri "zope.testrunner" version))
3972 (sha256
3973 (base32
3974 "0jyyf1dcz156q95x2y7yw2v420q2xn3cff0c5aci7hmdmcbn0gc7"))))
3975 (build-system python-build-system)
3976 (arguments
3977 '(#:tests? #f ;FIXME: Tests can't find zope.interface.
3978 #:phases
3979 (modify-phases %standard-phases
3980 (add-after 'unpack 'remove-problematic-test
3981 (lambda _
3982 ;; This test contains invalid syntax, which breaks bytecode
3983 ;; compilation. For simplicity just remove it.
3984 (delete-file
3985 "src/zope/testrunner/tests/testrunner-ex/sample2/badsyntax.py"))))))
3986 (native-inputs
3987 (list python-zope-testing))
3988 (propagated-inputs
3989 (list python-six python-zope-exceptions python-zope-interface))
3990 (home-page "https://pypi.org/project/zope.testrunner/")
3991 (synopsis "Zope testrunner script")
3992 (description "Zope.testrunner provides a script for running Python
3993tests.")
3994 (license license:zpl2.1)))
3995
3996(define-public python-zope-testrunner-bootstrap
3997 (package
3998 (inherit (python-zope-bootstrap-package python-zope-testrunner))
3999 (propagated-inputs
4000 `(("python-six" ,python-six)
4001 ("python-zope-exceptions" ,python-zope-exceptions-bootstrap)))
4002 (properties `((hidden? . #t)))))
4003
4004(define-public python-zope-i18nmessageid
4005 (package
4006 (name "python-zope-i18nmessageid")
4007 (version "5.1.1")
4008 (source
4009 (origin
4010 (method url-fetch)
4011 (uri (pypi-uri "zope.i18nmessageid" version))
4012 (sha256
4013 (base32 "14mx62khys82p2gmmf3m40x4jmvcz3rndvl6qik2n2qfp13n7ds7"))))
4014 (build-system pyproject-build-system)
4015 (native-inputs
4016 (list python-coverage python-setuptools
4017 python-wheel python-zope-testrunner))
4018 (propagated-inputs
4019 (list python-six))
4020 (home-page "https://pypi.org/project/zope.i18nmessageid/")
4021 (synopsis "Message identifiers for internationalization")
4022 (description "Zope.i18nmessageid provides facilities for declaring
4023internationalized messages within program source text.")
4024 (license license:zpl2.1)))
4025
4026(define-public python-zope-schema
4027 (package
4028 (name "python-zope-schema")
4029 (version "7.0.1")
4030 (source
4031 (origin
4032 (method url-fetch)
4033 (uri (pypi-uri "zope.schema" version))
4034 (sha256
4035 (base32
4036 "1fgvx7nim9plxnyiq6vmah1dji7ba5290fws1i0lwk9m0g5xpm7a"))))
4037 (build-system python-build-system)
4038 (arguments
4039 `(#:phases
4040 (modify-phases %standard-phases
4041 (replace 'check
4042 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
4043 (add-installed-pythonpath inputs outputs)
4044 (if tests?
4045 (invoke "zope-testrunner" "--test-path=src")
4046 #t))))))
4047 (propagated-inputs
4048 (list python-zope-event python-zope-interface))
4049 (native-inputs
4050 (list python-zope-i18nmessageid python-zope-testing
4051 python-zope-testrunner))
4052 (home-page "https://pypi.org/project/zope.schema/")
4053 (synopsis "Zope data schemas")
4054 (description "Zope.scheme provides extensions to zope.interface for
4055defining data schemas.")
4056 (license license:zpl2.1)))
4057
4058(define-public python-zope-sqlalchemy
4059 (package
4060 (name "python-zope-sqlalchemy")
4061 (version "1.6")
4062 (source (origin
4063 (method url-fetch)
4064 (uri (pypi-uri "zope.sqlalchemy" version))
4065 (sha256
4066 (base32
4067 "1azm2awl2ra10xl6wps3yvy14jk2rpzvsyfsb9cncm97aydbwlww"))))
4068 (build-system python-build-system)
4069 (propagated-inputs
4070 (list python-sqlalchemy
4071 python-transaction
4072 python-zope-interface))
4073 (native-inputs (list python-zope-testing))
4074 (home-page "https://github.com/zopefoundation/zope.sqlalchemy")
4075 (synopsis "Minimal SQLAlchemy transaction integration for Zope")
4076 (description "The aim of this package is to unify the plethora of existing
4077packages integrating SQLAlchemy with Zope's transaction management. As such,
4078it only provides a data manager and makes no attempt to define a @i{zopeish}
4079way to configure engines.")
4080 (license license:zpl2.1)))
4081
4082(define-public python-zope-configuration
4083 (package
4084 (name "python-zope-configuration")
4085 (version "4.4.0")
4086 (source (origin
4087 (method url-fetch)
4088 (uri (pypi-uri "zope.configuration" version))
4089 (sha256
4090 (base32
4091 "0g6vrl7y27z9cj5xyrww9xlzk4npj55mgmlrcd9d2nj08jn2pw79"))))
4092 (build-system python-build-system)
4093 (native-inputs
4094 (list python-manuel python-zope-testing python-zope-testrunner))
4095 (propagated-inputs
4096 (list python-zope-i18nmessageid python-zope-interface
4097 python-zope-schema))
4098 (home-page "https://pypi.org/project/zope.configuration/")
4099 (synopsis "Zope Configuration Markup Language")
4100 (description "Zope.configuration implements ZCML, the Zope Configuration
4101Markup Language.")
4102 (license license:zpl2.1)))
4103
4104(define-public python-zope-configuration-bootstrap
4105 (python-zope-bootstrap-package python-zope-configuration))
4106
4107(define-public python-zope-copy
4108 (package
4109 (name "python-zope-copy")
4110 (version "4.2")
4111 (source
4112 (origin
4113 (method url-fetch)
4114 (uri (pypi-uri "zope.copy" version))
4115 (sha256
4116 (base32
4117 "06m75434krl57n6p73c2qj55k5i3fixg887j8ss01ih6zw4rvfs7"))))
4118 (build-system python-build-system)
4119 (arguments
4120 '(#:phases
4121 (modify-phases %standard-phases
4122 (replace 'check
4123 (lambda _
4124 (invoke "zope-testrunner" "--test-path=src" "\\[]"))))))
4125 (propagated-inputs
4126 (list python-zope-interface))
4127 (native-inputs
4128 `(("python-zope-component" ,python-zope-component-bootstrap)
4129 ("python-zope-location" ,python-zope-location-bootstrap)
4130 ("python-zope-testing" ,python-zope-testing)
4131 ("python-zope-testrunner" ,python-zope-testrunner)))
4132 (home-page "https://github.com/zopefoundation/zope.copy")
4133 (synopsis "Pluggable object copying mechanism")
4134 (description
4135 "This package provides a pluggable mechanism for copying persistent objects.")
4136 (license license:zpl2.1)))
4137
4138(define-public python-zope-proxy
4139 (package
4140 (name "python-zope-proxy")
4141 (version "4.3.5")
4142 (source
4143 (origin
4144 (method url-fetch)
4145 (uri (pypi-uri "zope.proxy" version))
4146 (sha256
4147 (base32
4148 "14h7nyfbl5vpfk0rbviy4ygdfx0yx5kncvg6jpbdb0dhwna0ssm6"))))
4149 (build-system python-build-system)
4150 (native-inputs
4151 (list python-zope-security-bootstrap python-zope-testrunner))
4152 (propagated-inputs
4153 (list python-zope-interface))
4154 (home-page "https://pypi.org/project/zope.proxy/")
4155 (synopsis "Generic, transparent proxies")
4156 (description "Zope.proxy provides generic, transparent proxies for Python.
4157Proxies are special objects which serve as mostly-transparent wrappers around
4158another object, intervening in the apparent behavior of the wrapped object
4159only when necessary to apply the policy (e.g., access checking, location
4160brokering, etc.) for which the proxy is responsible.")
4161 (license license:zpl2.1)))
4162
4163(define-public python-zope-proxy-bootstrap
4164 (python-zope-bootstrap-package python-zope-proxy))
4165
4166(define-public python-zope-hookable
4167 (package
4168 (name "python-zope-hookable")
4169 (version "5.0.1")
4170 (source
4171 (origin
4172 (method url-fetch)
4173 (uri (pypi-uri "zope.hookable" version))
4174 (sha256
4175 (base32
4176 "0hc82lfr7bk53nvbxvjkibkarngyrzgfk2i6bg8wshl0ly0pdl19"))))
4177 (build-system python-build-system)
4178 (native-inputs
4179 (list python-coverage python-zope-testing))
4180 (home-page "https://github.com/zopefoundation/zope.hookable")
4181 (synopsis "Zope hookable")
4182 (description "This package supports the efficient creation of hookable
4183objects, which are callable objects that are meant to be optionally replaced.
4184The idea is that you create a function that does some default thing and make i
4185hookable. Later, someone can modify what it does by calling its sethook method
4186and changing its implementation. All users of the function, including those
4187that imported it, will see the change.")
4188 (license license:zpl2.1)))
4189
4190(define-public python-zope-location
4191 (package
4192 (name "python-zope-location")
4193 (version "4.2")
4194 (source
4195 (origin
4196 (method url-fetch)
4197 (uri (pypi-uri "zope.location" version))
4198 (sha256
4199 (base32
4200 "1b40pzl8v00d583d3gsxv1qjdw2dhghlgkbgxl3m07d5r3izj857"))))
4201 (build-system python-build-system)
4202 (arguments
4203 '(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
4204 (native-inputs
4205 (list python-zope-testrunner))
4206 (propagated-inputs
4207 (list python-zope-interface python-zope-proxy python-zope-schema))
4208 (home-page "https://pypi.org/project/zope.location/")
4209 (synopsis "Zope location library")
4210 (description "Zope.location implements the concept of \"locations\" in
4211Zope3, which are are special objects that have a structural location.")
4212 (license license:zpl2.1)))
4213
4214(define-public python-zope-location-bootstrap
4215 (python-zope-bootstrap-package python-zope-location))
4216
4217(define-public python-zope-security
4218 (package
4219 (name "python-zope-security")
4220 (version "5.1.1")
4221 (source
4222 (origin
4223 (method url-fetch)
4224 (uri (pypi-uri "zope.security" version))
4225 (sha256
4226 (base32
4227 "11lfw67cigscfax9c5j63xcvz2qcj724zx5fcdqyc94am2glim0h"))))
4228 (build-system python-build-system)
4229 (propagated-inputs
4230 (list python-zope-component
4231 python-zope-i18nmessageid
4232 python-zope-interface
4233 python-zope-location
4234 python-zope-proxy
4235 python-zope-schema))
4236 (native-inputs
4237 (list python-btrees
4238 python-zope-component-bootstrap
4239 python-zope-configuration-bootstrap
4240 python-zope-location-bootstrap
4241 python-zope-testing
4242 python-zope-testrunner))
4243 (home-page "https://pypi.org/project/zope.security/")
4244 (synopsis "Zope security framework")
4245 (description "Zope.security provides a generic mechanism to implement
4246security policies on Python objects.")
4247 (license license:zpl2.1)))
4248
4249(define-public python-zope-security-bootstrap
4250 (package
4251 (inherit (python-zope-bootstrap-package python-zope-security))
4252 (propagated-inputs
4253 `(("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
4254 ("python-zope-interface" ,python-zope-interface)
4255 ("python-zope-proxy" ,python-zope-proxy-bootstrap)
4256 ("python-zope-schema" ,python-zope-schema)))))
4257
4258(define-public python-zope-component
4259 (package
4260 (name "python-zope-component")
4261 (version "4.6.2")
4262 (source
4263 (origin
4264 (method url-fetch)
4265 (uri (pypi-uri "zope.component" version))
4266 (sha256
4267 (base32
4268 "14iwp95hh6q5dj4k9h1iw75cbp89bs27nany4dinyglb44c8jqli"))))
4269 (build-system python-build-system)
4270 (arguments
4271 '(#:phases
4272 (modify-phases %standard-phases
4273 (replace 'check
4274 (lambda* (#:key tests? #:allow-other-keys)
4275 (if tests?
4276 (invoke "python" "setup.py" "test")
4277 (format #t "test suite not run~%")))))))
4278 (native-inputs
4279 `(("python-persistent" ,python-persistent)
4280 ("python-zope-configuration" ,python-zope-configuration-bootstrap)
4281 ("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
4282 ("python-zope-location" ,python-zope-location-bootstrap)
4283 ("python-zope-proxy" ,python-zope-proxy-bootstrap)
4284 ("python-zope-security" ,python-zope-security-bootstrap)
4285 ("python-zope-testing" ,python-zope-testing)
4286 ("python-zope-testrunner" ,python-zope-testrunner)))
4287 (propagated-inputs
4288 (list python-zope-deferredimport python-zope-deprecation
4289 python-zope-event python-zope-hookable python-zope-interface))
4290 (home-page "https://github.com/zopefoundation/zope.component")
4291 (synopsis "Zope Component Architecture")
4292 (description "Zope.component represents the core of the Zope Component
4293Architecture. Together with the zope.interface package, it provides
4294facilities for defining, registering and looking up components.")
4295 (license license:zpl2.1)))
4296
4297(define-public python-zope-component-bootstrap
4298 (python-zope-bootstrap-package python-zope-component))
4299
4300(define-public python-zope-deferredimport
4301 (package
4302 (name "python-zope-deferredimport")
4303 (version "4.3.1")
4304 (source
4305 (origin
4306 (method url-fetch)
4307 (uri (pypi-uri "zope.deferredimport" version))
4308 (sha256
4309 (base32
4310 "1q89v54dwniiqypjbwywwdfjdr4kdkqlyqsgrpplgvsygdg39cjp"))))
4311 (build-system python-build-system)
4312 (propagated-inputs
4313 (list python-zope-proxy))
4314 (native-inputs
4315 (list python-zope-testrunner))
4316 (home-page "https://github.com/zopefoundation/zope.deferredimport")
4317 (synopsis "Defer imports until used by code")
4318 (description
4319 "Often, especially for package modules, you want to import names for
4320convenience, but not actually perform the imports until necessary. The
4321@code{zope.deferredimport} package provided facilities for defining names in
4322modules that will be imported from somewhere else when used. You can also cause
4323deprecation warnings to be issued when a variable is used.")
4324 (license license:zpl2.1)))
4325
4326(define-public python-ndg-httpsclient
4327 (package
4328 (name "python-ndg-httpsclient")
4329 (version "0.5.1")
4330 (source (origin
4331 (method url-fetch)
4332 (uri (pypi-uri "ndg_httpsclient" version))
4333 (sha256
4334 (base32
4335 "0412b7i1s4vj7lz9r72nmb28h9syd4q2x89bdirkkc3a6z8awbyp"))))
4336 (build-system python-build-system)
4337 (arguments
4338 '(;; The tests appear to require networking.
4339 #:tests? #f))
4340 (propagated-inputs
4341 (list python-pyasn1 python-pyopenssl))
4342 (synopsis "HTTPS support for Python's httplib and urllib2")
4343 (description "This is a HTTPS client implementation for httplib and urllib2
4344based on PyOpenSSL. PyOpenSSL provides a more fully-featured SSL implementation
4345over the default provided with Python and, importantly, enables full
4346verification of the SSL peer.")
4347 (home-page "https://github.com/cedadev/ndg_httpsclient/")
4348 (license license:bsd-3)))
4349
4350(define-public python-nh3
4351 (package
4352 (name "python-nh3")
4353 (version "0.2.20")
4354 (source
4355 (origin
4356 (method url-fetch)
4357 (uri (pypi-uri "nh3" version))
4358 (sha256
4359 (base32 "1mcf3y5294glji9lhzh57wymw4srbvzdg0kcakm0p2pqgwnw81cp"))))
4360 (build-system cargo-build-system)
4361 (arguments
4362 (list
4363 #:imported-modules `(,@%cargo-build-system-modules
4364 ,@%pyproject-build-system-modules)
4365 #:modules '((guix build cargo-build-system)
4366 ((guix build pyproject-build-system) #:prefix py:)
4367 (guix build utils))
4368 #:phases
4369 #~(modify-phases %standard-phases
4370 (replace 'build (assoc-ref py:%standard-phases 'build))
4371 (replace 'install (assoc-ref py:%standard-phases 'install))
4372 ;; cargo-build-system's %standard-phases has 'check before 'install.
4373 (delete 'check)
4374 (add-after 'install 'check
4375 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
4376 (when tests?
4377 (py:add-installed-pythonpath inputs outputs)
4378 (invoke "pytest" "-vv" "tests")))))
4379 #:cargo-inputs
4380 `(("rust-ammonia" ,rust-ammonia-4)
4381 ("rust-pyo3" ,rust-pyo3-0.23))
4382 #:install-source? #false))
4383 (native-inputs (list maturin python-pytest python-wrapper))
4384 (home-page "https://nh3.readthedocs.io")
4385 (synopsis "Python bindings to Ammonia HTML sanitization library")
4386 (description "This package provides Python bindings to Ammonia HTML
4387sanitizer Rust crate.")
4388 (license license:expat)))
4389
4390(define-public python-noiseprotocol
4391 (package
4392 (name "python-noiseprotocol")
4393 (version "0.3.1")
4394 (source
4395 (origin
4396 (method url-fetch)
4397 (uri (pypi-uri "noiseprotocol" version))
4398 (sha256
4399 (base32 "0ifnj0mpbqsfqba9n12vf5yzxj4qf2gxql3ry43qyshgnrqsi4mh"))))
4400 (build-system pyproject-build-system)
4401 (propagated-inputs (list python-cryptography))
4402 (native-inputs (list python-setuptools python-wheel))
4403 (home-page "https://github.com/plizonczyk/noiseprotocol")
4404 (synopsis "Implementation of Noise Protocol Framework")
4405 (description
4406 "This package provides an implementation of Noise Protocol Framework.")
4407 (license license:expat)))
4408
4409(define-public python-websocket-client
4410 (package
4411 (name "python-websocket-client")
4412 (version "1.8.0")
4413 (source
4414 (origin
4415 (method url-fetch)
4416 (uri (pypi-uri "websocket_client" version))
4417 (sha256
4418 (base32 "1nn3qi5g59j55wfy2z02j6lq2cm281fq0wi406b2yqys8jgxyf9j"))))
4419 (build-system pyproject-build-system)
4420 (arguments
4421 (list
4422 #:test-flags
4423 ;; This test requires networking.
4424 '(list "-k" "not testConnect")))
4425 (native-inputs
4426 (list python-pysocks
4427 python-pytest
4428 python-setuptools
4429 python-websockets
4430 python-wheel))
4431 (home-page "https://github.com/websocket-client/websocket-client")
4432 (synopsis "WebSocket client for Python")
4433 (description "The Websocket-client module provides the low level APIs for
4434WebSocket usage in Python programs.")
4435 (license license:lgpl2.1+)))
4436
4437(define-public python-websocket-client-0.59
4438 (package
4439 (inherit python-websocket-client)
4440 (version "0.59.0")
4441 (source
4442 (origin
4443 (method url-fetch)
4444 (uri (pypi-uri "websocket-client" version))
4445 (sha256
4446 (base32 "0p0cz2mdissq7iw1n7jrmsfir0jfmgs1dvnpnrx477ffx9hbsxnk"))))))
4447
4448(define-public python-purl
4449 (package
4450 (name "python-purl")
4451 (version "1.5")
4452 (source
4453 (origin
4454 (method url-fetch)
4455 (uri (pypi-uri "purl" version))
4456 (sha256
4457 (base32
4458 "15ibnz1xrh5msmn04j0nr00sz4n7jwx6cwd6zlx99kkz3vpin53m"))))
4459 (build-system python-build-system)
4460 (propagated-inputs (list python-six))
4461 (home-page
4462 "https://github.com/codeinthehole/purl")
4463 (synopsis
4464 "Python package for URL manipulation")
4465 (description
4466 "Purl is a Python package for handling URLs.")
4467 (license license:expat)))
4468
4469(define-public python-apiron
4470 (package
4471 (name "python-apiron")
4472 (version "5.1.0")
4473 (source
4474 (origin
4475 (method url-fetch)
4476 (uri (pypi-uri "apiron" version))
4477 (sha256
4478 (base32 "1qwbqn47sf0aqznj1snbv37v8ijx476qqkjf5l9pac7xjkxsr8qk"))))
4479 (build-system pyproject-build-system)
4480 (arguments
4481 (list #:test-flags '(list "-k" "not test_call")))
4482 (propagated-inputs
4483 (list python-requests))
4484 (native-inputs
4485 (list python-pytest python-pytest-cov
4486 python-setuptools python-wheel))
4487 (home-page "https://github.com/ithaka/apiron")
4488 (synopsis "Python wrapper for interacting with RESTful APIs")
4489 (description
4490 "@code{apiron} provides a declarative, structured configuration of
4491services and endpoints with a unified interface for interacting with RESTful
4492APIs.")
4493 (license license:expat)))
4494
4495(define-public python-beren
4496 (package
4497 (name "python-beren")
4498 (version "0.7.0")
4499 (source
4500 (origin
4501 (method url-fetch)
4502 (uri (pypi-uri "beren" version))
4503 (sha256
4504 (base32 "1v3mdwfqsyza892zvs124ym9w1bkng1j56b7l4dwfjir3723xcgf"))))
4505 (build-system python-build-system)
4506 (arguments
4507 ;; The test tries to open a connection to a remote server.
4508 `(#:tests? #f))
4509 (propagated-inputs
4510 (list python-apiron))
4511 (home-page "https://github.com/teffalump/beren")
4512 (synopsis "REST client for Orthanc DICOM servers")
4513 (description
4514 "@code{beren} provides a REST client for Orthanc, a DICOM server.")
4515 (license license:gpl3+)))
4516
4517(define-public python-requests
4518 (package
4519 (name "python-requests")
4520 (version "2.31.0")
4521 (source (origin
4522 (method url-fetch)
4523 (uri (pypi-uri "requests" version))
4524 (sha256
4525 (base32
4526 "1qfidaynsrci4wymrw3srz8v1zy7xxpcna8sxpm91mwqixsmlb4l"))))
4527 (build-system pyproject-build-system)
4528 (arguments
4529 (list #:test-flags
4530 ;; These require internet access
4531 '(list "--ignore=tests/test_requests.py"
4532 "-k" (string-append "not test_use_proxy_from_environment"
4533 " and not requests.sessions.Session"
4534 " and not requests.models.PreparedRequest"
4535 " and not requests.api.request")
4536 "tests/")))
4537 (propagated-inputs
4538 (list python-certifi
4539 python-charset-normalizer
4540 python-idna
4541 python-urllib3))
4542 (native-inputs
4543 (list python-pip
4544 python-pytest
4545 python-pytest-mock
4546 python-setuptools
4547 python-wheel))
4548 (home-page "https://requests.readthedocs.io/")
4549 (synopsis "Python HTTP library")
4550 (description
4551 "Requests is a Python HTTP client library. It aims to be easier to use
4552than Python’s urllib2 library.")
4553 (license license:asl2.0)))
4554
4555(define-public python-requests-next
4556 (package
4557 (inherit python-requests)
4558 (name "python-requests")
4559 (version "2.32.3")
4560 (source
4561 (origin
4562 (method url-fetch)
4563 (uri (pypi-uri "requests" version))
4564 (sha256
4565 (base32 "0q5742pnibwy74169kacin3dmqg9jzmzk7qab5aq5caffcbm8djm"))))
4566 (native-inputs
4567 (modify-inputs (package-native-inputs python-requests)
4568 (prepend nss-certs-for-test)))))
4569
4570(define-public python-requests-kerberos
4571 (package
4572 (name "python-requests-kerberos")
4573 (version "0.14.0")
4574 ;; No tests in the PyPI tarball.
4575 (source
4576 (origin
4577 (method git-fetch)
4578 (uri (git-reference
4579 (url "https://github.com/requests/requests-kerberos")
4580 (commit (string-append "v" version))))
4581 (file-name (git-file-name name version))
4582 (sha256
4583 (base32 "0s30pcnlir3j2jmf7yh065f294cf3x0x5i3ldskn8mm0a3657mv3"))))
4584 (build-system pyproject-build-system)
4585 (propagated-inputs (list python-cryptography
4586 python-pyspnego
4587 python-requests))
4588 (native-inputs (list python-pytest python-pytest-mock python-setuptools
4589 python-wheel))
4590 (home-page "https://github.com/requests/requests-kerberos")
4591 (synopsis "Kerberos authentication handler for python-requests")
4592 (description "This package provides a Kerberos authentication handler for
4593python-requests.")
4594 (license license:isc)))
4595
4596(define-public python-requests-unixsocket
4597 (package
4598 (name "python-requests-unixsocket")
4599 (version "0.2.0")
4600 (source
4601 (origin
4602 (method url-fetch)
4603 (uri (pypi-uri "requests-unixsocket" version))
4604 (sha256
4605 (base32 "1sn12y4fw1qki5gxy9wg45gmdrxhrndwfndfjxhpiky3mwh1lp4y"))))
4606 (build-system pyproject-build-system)
4607 (arguments
4608 (list
4609 #:test-flags
4610 ;; TypeError: HTTPConnection.request() got an unexpected keyword
4611 ;; argument 'chunked'
4612 #~(list "-k" (string-append "not test_unix_domain_adapter_ok"
4613 " and not test_unix_domain_adapter_url_with_query_params"
4614 " and not test_unix_domain_adapter_connection_error"
4615 " and not test_unix_domain_adapter_monkeypatch"))
4616 #:phases
4617 #~(modify-phases %standard-phases
4618 (add-before 'check 'skip-pep8
4619 (lambda _
4620 (substitute* "pytest.ini"
4621 (("--pep8") "")))))))
4622 (native-inputs
4623 (list python-apipkg
4624 python-appdirs
4625 python-execnet
4626 python-packaging
4627 python-pep8
4628 python-py
4629 python-pyparsing
4630 python-pytest
4631 python-pytest-cache
4632 python-pytest-pep8
4633 python-setuptools
4634 python-six
4635 python-waitress
4636 python-wheel))
4637 (propagated-inputs
4638 (list python-pbr
4639 python-requests
4640 python-urllib3))
4641 (home-page "https://github.com/msabramo/requests-unixsocket")
4642 (synopsis "Talk HTTP via a UNIX domain socket")
4643 (description
4644 "This Python package lets you use the @code{requests} library to talk
4645HTTP via a UNIX domain socket.")
4646 (license license:asl2.0)))
4647
4648(define-public python-requests_ntlm
4649 (package
4650 (name "python-requests_ntlm")
4651 (version "1.2.0")
4652 (source
4653 (origin
4654 (method url-fetch)
4655 (uri (pypi-uri "requests_ntlm" version))
4656 (sha256
4657 (base32
4658 "1a0np7lk8ma1plv1s4aw5q9h2z3aljprkl9qsfypqcaf0zsqbhik"))))
4659 (build-system python-build-system)
4660 (propagated-inputs
4661 (list python-cryptography python-pyspnego python-requests))
4662 (home-page "https://github.com/requests/requests-ntlm")
4663 (synopsis
4664 "NTLM authentication support for Requests")
4665 (description
4666 "This package allows for HTTP NTLM authentication using the requests
4667library.")
4668 (license license:isc)))
4669
4670(define-public python-requests-mock
4671 (package
4672 (name "python-requests-mock")
4673 (version "1.8.0")
4674 (source
4675 (origin
4676 (method url-fetch)
4677 (uri (pypi-uri "requests-mock" version))
4678 (sha256
4679 (base32
4680 "09nj8fmyj7xz2mgwyvbw0fl9zybmx2d3qd2hf529vvjc9s24d3z6"))))
4681 (build-system python-build-system)
4682 (propagated-inputs
4683 (list python-requests python-six))
4684 (native-inputs
4685 (list python-pbr
4686 python-discover
4687 python-docutils
4688 python-fixtures
4689 python-mock
4690 python-purl
4691 python-pytest
4692 python-sphinx
4693 python-testrepository))
4694 (home-page "https://requests-mock.readthedocs.org/")
4695 (synopsis "Mock out responses from the requests package")
4696 (description
4697 "This module provides a building block to stub out the HTTP requests
4698portions of your testing code.")
4699 (license license:asl2.0)))
4700
4701(define-public python-requests-toolbelt
4702 (package
4703 (name "python-requests-toolbelt")
4704 (version "1.0.0")
4705 (source
4706 (origin
4707 (method url-fetch)
4708 (uri (pypi-uri "requests-toolbelt" version))
4709 (sha256
4710 (base32 "1ijvip427ki177ycrblcn1mfgsq7ixzpvqqfvidjn0a7s2is10bn"))))
4711 (build-system pyproject-build-system)
4712 (arguments
4713 (list
4714 #:test-flags
4715 ;; Requiring networking or fail due not valid certs: AttributeError:
4716 ;; 'MockHTTPResponse' object has no attribute 'close'
4717 #~(list "-k" (string-append "not test_dump_all"
4718 " and not test_dump_response"
4719 " and not test_prepared_request_override_base"
4720 " and not test_prepared_request_with_base"
4721 " and not test_request_override_base"
4722 " and not test_request_with_base"))))
4723 (native-inputs
4724 (list python-betamax
4725 python-mock
4726 python-pyopenssl
4727 python-pytest
4728 python-setuptools
4729 python-trustme
4730 python-wheel))
4731 (propagated-inputs
4732 (list python-requests))
4733 (synopsis "Extensions to python-requests")
4734 (description "This is a toolbelt of useful classes and functions to be used
4735with python-requests.")
4736 (home-page "https://github.com/requests/toolbelt/")
4737 (license license:asl2.0)))
4738
4739(define-public python-requests-ftp
4740 (package
4741 (name "python-requests-ftp")
4742 (version "0.3.1")
4743 (source
4744 (origin
4745 (method url-fetch)
4746 (uri (pypi-uri "requests-ftp" version))
4747 (sha256
4748 (base32
4749 "0yh5v21v36dsjsgv4y9dx4mmz35741l5jf6pbq9w19d8rfsww13m"))))
4750 (build-system python-build-system)
4751 (propagated-inputs
4752 (list python-requests))
4753 (home-page
4754 "https://github.com/Lukasa/requests-ftp")
4755 (synopsis "FTP Transport Adapter for Requests")
4756 (description
4757 "Requests-FTP is an implementation of a simple FTP transport
4758adapter for use with the Requests library.")
4759 (license license:asl2.0)))
4760
4761(define-public python-aioftp
4762 (package
4763 (name "python-aioftp")
4764 (version "0.22.3")
4765 (source (origin
4766 (method url-fetch)
4767 (uri (pypi-uri "aioftp" version))
4768 (sha256
4769 (base32
4770 "0w621mg956m9rn7v39jpwi4gpnpl90pprwl29cp640dahqqv38ms"))))
4771 (build-system pyproject-build-system)
4772 (native-inputs
4773 (list python-async-timeout
4774 python-pytest
4775 python-pytest-asyncio
4776 python-pytest-cov
4777 python-setuptools
4778 python-trustme
4779 python-wheel))
4780 (propagated-inputs (list python-siosocks))
4781 (home-page "https://aioftp.readthedocs.io/")
4782 (synopsis "FTP client/server for asyncio in Python")
4783 (description
4784 "FTP client and server for asyncio (Python 3) Library implementing FTP
4785protocol, both client and server for Python asyncio module.
4786
4787 Supported commands as client: USER, PASS, ACCT, PWD, CWD, CDUP, MKD, RMD,
4788 MLSD, MLST, RNFR, RNTO, DELE, STOR, APPE, RETR, TYPE, PASV, ABOR, QUIT,
4789 REST, LIST (as fallback).
4790
4791 Supported commands as server: USER, PASS, QUIT, PWD, CWD, CDUP, MKD, RMD,
4792 MLSD, LIST (non-standard), MLST, RNFR, RNTO, DELE, STOR, RETR,
4793 TYPE (\"I\" and \"A\"), PASV, ABOR, APPE, REST.")
4794 (license license:asl2.0)))
4795
4796(define-public python-mohawk
4797 (package
4798 (name "python-mohawk")
4799 (version "1.1.0")
4800 (source (origin
4801 (method url-fetch)
4802 (uri (pypi-uri "mohawk" version))
4803 (sha256
4804 (base32
4805 "08wppsv65yd0gdxy5zwq37yp6jmxakfz4a2yx5wwq2d222my786j"))))
4806 (build-system python-build-system)
4807 (native-inputs (list python-mock python-nose))
4808 (propagated-inputs (list python-six))
4809 (home-page "https://github.com/kumar303/mohawk")
4810 (synopsis "Library for Hawk HTTP authorization")
4811 (description
4812 "Mohawk is an alternate Python implementation of the Hawk HTTP
4813authorization scheme.")
4814 (license license:bsd-3)))
4815
4816(define-public python-msal
4817 (package
4818 (name "python-msal")
4819 (version "1.31.1")
4820 (home-page
4821 "https://github.com/AzureAD/microsoft-authentication-library-for-python")
4822 (source (origin
4823 (method git-fetch)
4824 ;; Pypi does not have tests.
4825 (uri (git-reference (url home-page) (commit version)))
4826 (file-name (git-file-name name version))
4827 (sha256
4828 (base32
4829 "18dg1j2az5ywk6klfd3kp36fxa4cmmf9yvma4li0a2nz2jgc1gdd"))))
4830 (build-system python-build-system)
4831 (arguments
4832 ;; Tests (all?) rely on network access and only some can be disabled by
4833 ;; setting the environment variable TRAVIS_TAG.
4834 (list #:tests? #f))
4835 (native-inputs (list python-mock))
4836 (propagated-inputs (list python-cryptography python-pyjwt python-requests))
4837 (synopsis "Microsoft Authentication Library (MSAL) for Python")
4838 (description
4839 "The Microsoft Authentication Library for Python enables applications to
4840integrate with the Microsoft identity platform. It allows you to sign in
4841users or apps with Microsoft identities (Azure AD, Microsoft Accounts and
4842Azure AD B2C accounts) and obtain tokens to call Microsoft APIs such as
4843Microsoft Graph or your own APIs registered with the Microsoft identity
4844platform. It is built using industry standard OAuth2 and OpenID Connect
4845protocols.")
4846 (license license:expat)))
4847
4848(define-public oauth2ms
4849 (let ((commit "a1ef0cabfdea57e9309095954b90134604e21c08")
4850 (revision "0"))
4851 (package
4852 (name "oauth2ms")
4853 (version (git-version "0.0.0" revision commit))
4854 (source (origin
4855 (method git-fetch)
4856 (uri (git-reference
4857 (url "https://github.com/harishkrupo/oauth2ms")
4858 (commit commit)))
4859 (file-name (git-file-name name version))
4860 (sha256
4861 (base32
4862 "0dqi6n4npdrvb42r672n4sl1jl8z5lsk554fwiiihpj0faa9dx64"))))
4863 (build-system copy-build-system)
4864 (arguments
4865 (list #:install-plan #~`(("oauth2ms" "bin/oauth2ms")
4866 ("." #$(string-append "share/doc/" name "-"
4867 version "/")
4868 #:include-regexp ("\\.org$")))
4869 #:phases #~(modify-phases %standard-phases
4870 (add-after 'install 'wrap-pythonpath
4871 (lambda* (#:key inputs outputs #:allow-other-keys)
4872 (let ((path (getenv "GUIX_PYTHONPATH")))
4873 (wrap-program (string-append #$output
4874 "/bin/oauth2ms")
4875 `("GUIX_PYTHONPATH" ":" prefix
4876 (,path)))))))))
4877 (inputs (list bash-minimal python python-gnupg python-msal python-pyxdg))
4878 (home-page "https://github.com/harishkrupo/oauth2ms")
4879 (synopsis "XOAUTH2 compatible Microsoft Office 365 token fetcher")
4880 (description
4881 "Oauth2ms can be used to fetch OAuth 2.0 tokens from the Microsoft Identity
4882endpoint. Additionally, it can encode the token in the XOAUTH2 format to be
4883used as authentication in IMAP mail servers.")
4884 (license license:asl2.0))))
4885
4886(define-public python-oauthlib
4887 (package
4888 (name "python-oauthlib")
4889 (version "3.1.0")
4890 (source (origin
4891 (method url-fetch)
4892 (uri (pypi-uri "oauthlib" version))
4893 (sha256
4894 (base32
4895 "12gqnabwck30gdlpwm6af3s28qm9p2yc7b1w8s4fk9ncbz1irr5y"))))
4896 (build-system python-build-system)
4897 (arguments
4898 `(#:phases (modify-phases %standard-phases
4899 (replace 'check
4900 (lambda _
4901 (invoke "pytest" "-vv"))))))
4902 (native-inputs
4903 (list python-pytest python-pytest-cov python-mock))
4904 (propagated-inputs
4905 (list python-cryptography python-pyjwt python-blinker))
4906 (home-page "https://github.com/oauthlib/oauthlib")
4907 (synopsis "OAuth implementation for Python")
4908 (description
4909 "Oauthlib is a generic, spec-compliant, thorough implementation of the
4910OAuth request-signing logic.")
4911 (license license:bsd-3)))
4912
4913(define-public python-rauth
4914 (package
4915 (name "python-rauth")
4916 (version "0.7.3")
4917 (source
4918 (origin
4919 (method url-fetch)
4920 (uri (pypi-uri "rauth" version))
4921 (sha256
4922 (base32
4923 "02kv8w8l98ky223avyq7vw7x1f2ya9chrm59r77ylq45qb0xnk2j"))))
4924 (build-system python-build-system)
4925 (arguments
4926 `(#:test-target "check"))
4927 (propagated-inputs
4928 (list python-requests))
4929 (home-page "https://github.com/litl/rauth")
4930 (synopsis "Python library for OAuth 1.0/a, 2.0, and Ofly")
4931 (description
4932 "Rauth is a Python library for OAuth 1.0/a, 2.0, and Ofly. It also
4933provides service wrappers for convenient connection initialization and
4934authenticated session objects providing things like keep-alive.")
4935 (license license:expat)))
4936
4937(define-public python-unalix
4938 (package
4939 (name "python-unalix")
4940 (version "0.9")
4941 (source
4942 (origin
4943 ;; There's only a wheel on PyPI.
4944 (method git-fetch)
4945 (uri (git-reference
4946 (url "https://github.com/AmanoTeam/Unalix")
4947 (commit (string-append "v" version))))
4948 (file-name (git-file-name name version))
4949 (sha256
4950 (base32 "0h8wc1axv26h753a8brc6dccqndx005c2bhr09gwg5c1hj9zsfml"))))
4951 (build-system python-build-system)
4952 (native-inputs (list python-pytest))
4953 (arguments
4954 '(#:phases
4955 (modify-phases %standard-phases
4956 (replace 'check
4957 (lambda* (#:key tests? #:allow-other-keys)
4958 (when tests?
4959 (invoke "pytest")))))))
4960 (home-page "https://pypi.org/project/Unalix/")
4961 (synopsis "Python library for removing tracking fields from URLs")
4962 (description "Unalix is a library written in Python implementing the
4963specification used by the @url{https://github.com/ClearURLs/Addon, ClearURLs}
4964addon for removing tracking fields from URLs.")
4965 (license license:lgpl3+)))
4966
4967(define-public python-urllib3
4968 (package
4969 (name "python-urllib3")
4970 (version "2.2.1")
4971 (source
4972 (origin
4973 (method url-fetch)
4974 (uri (pypi-uri "urllib3" version))
4975 (sha256
4976 (base32
4977 "06fg8jj64lgxr2jrizzrsdvaf1avpg5qmhvnswhfbf8sqrv0hmyh"))))
4978 (build-system pyproject-build-system)
4979 (arguments `(#:tests? #f))
4980 (native-inputs (list python-hatchling))
4981 (propagated-inputs
4982 (append
4983 ;; These 5 inputs are used to build urrlib3[secure]
4984 (list python-certifi)
4985 (if (member (%current-system)
4986 (package-transitive-supported-systems python-cryptography))
4987 (list python-cryptography)
4988 '())
4989 (list python-idna)
4990 (if (member (%current-system)
4991 (package-transitive-supported-systems python-pyopenssl))
4992 (list python-pyopenssl)
4993 '())
4994 (list python-pysocks)))
4995 (home-page "https://urllib3.readthedocs.io/")
4996 (synopsis "HTTP library with thread-safe connection pooling")
4997 (description
4998 "Urllib3 supports features left out of urllib and urllib2 libraries. It
4999can reuse the same socket connection for multiple requests, it can POST files,
5000supports url redirection and retries, and also gzip and deflate decoding.")
5001 (license license:expat)))
5002
5003(define-public python-urllib3-next
5004 (package
5005 (name "python-urllib3")
5006 (version "1.26.17")
5007 (source
5008 (origin
5009 (method url-fetch)
5010 (uri (pypi-uri "urllib3" version))
5011 (sha256
5012 (base32
5013 "08fzhaf77kbjj5abpl9xag6fpfxkdp1k5s7sqd3ayacdq91a5mi4"))))
5014 (build-system python-build-system)
5015 (arguments `(#:tests? #f))
5016 (propagated-inputs
5017 (append
5018 ;; These 5 inputs are used to build urrlib3[secure]
5019 (list python-certifi)
5020 (if (member (%current-system)
5021 (package-transitive-supported-systems python-cryptography))
5022 (list python-cryptography)
5023 '())
5024 (list python-idna)
5025 (if (member (%current-system)
5026 (package-transitive-supported-systems python-pyopenssl))
5027 (list python-pyopenssl)
5028 '())
5029 (list python-pysocks)))
5030 (home-page "https://urllib3.readthedocs.io/")
5031 (synopsis "HTTP library with thread-safe connection pooling")
5032 (description
5033 "Urllib3 supports features left out of urllib and urllib2 libraries. It
5034can reuse the same socket connection for multiple requests, it can POST files,
5035supports url redirection and retries, and also gzip and deflate decoding.")
5036 (license license:expat)))
5037
5038(define-public python-awscrt
5039 (package
5040 (name "python-awscrt")
5041 (version "0.23.0")
5042 (source
5043 (origin
5044 (method url-fetch)
5045 (uri (pypi-uri "awscrt" version))
5046 (sha256
5047 (base32 "0a669xxfmgw3g6xpcnm64pbmlrbxw5wf3jcrivixscl2glapdxgx"))))
5048 (build-system pyproject-build-system)
5049 (arguments
5050 (list
5051 #:phases
5052 #~(modify-phases %standard-phases
5053 (add-after 'unpack 'disable-broken-tests
5054 (lambda _
5055 ;; Disable broken tests. These tests fail because the
5056 ;; certificate bundle at the default location does not exist.
5057 (substitute* "test/test_auth.py"
5058 (("def test_default_provider")
5059 "def _test_default_provider"))
5060 (substitute* "test/test_http_client.py"
5061 (("def test_h2_client")
5062 "def _test_h2_client"))
5063 (substitute* "test/test_s3.py"
5064 (("def test_sanity")
5065 "def _test_sanity")
5066 (("def test_sanity_secure")
5067 "def _test_sanity_secure")
5068 (("def test_wait_shutdown")
5069 "def _test_wait_shutdown"))))
5070 (add-after 'unpack 'override-cert-bundle-location
5071 (lambda* (#:key inputs #:allow-other-keys)
5072 (let ((bundle (search-input-file inputs
5073 "/etc/ssl/certs/ca-certificates.crt")))
5074 (setenv "SSL_CERT_FILE" bundle)
5075 (substitute* "awscrt/io.py"
5076 (("( +)opt = TlsContextOptions\\(\\)" m indent)
5077 (string-append m "\n"
5078 indent "import os\n"
5079 indent "\
5080opt.override_default_trust_store_from_path(None, os.getenv('SSL_CERT_FILE')) if os.getenv('SSL_CERT_FILE') else None\n")))
5081 (substitute* "test/appexit_http.py"
5082 (("( +)tls_ctx_opt = awscrt.io.TlsContextOptions.*" m indent)
5083 (string-append m indent
5084 "tls_ctx_opt.override_default_trust_store_from_path(None, '"
5085 bundle "')\n")))
5086 (substitute* "test/test_io.py"
5087 (("( +)opt = TlsContextOptions\\(\\).*" m indent)
5088 (string-append m indent
5089 "opt.override_default_trust_store_from_path(None, '"
5090 bundle "')\n"))))))
5091 (add-after 'unpack 'use-system-libraries
5092 (lambda _
5093 (setenv "AWS_CRT_BUILD_USE_SYSTEM_LIBCRYPTO" "1")))
5094 (replace 'check
5095 (lambda* (#:key tests? #:allow-other-keys)
5096 (when tests?
5097 (invoke "python3" "-m" "unittest"
5098 "discover" "--verbose")))))))
5099 (inputs (list openssl))
5100 (native-inputs (list cmake-minimal
5101 python-setuptools
5102 python-wheel
5103 ;; For tests only
5104 nss-certs-for-test
5105 python-boto3
5106 python-websockets))
5107 (home-page "https://github.com/awslabs/aws-crt-python")
5108 (synopsis "Common runtime for AWS Python projects")
5109 (description
5110 "This package provides a common runtime for AWS Python projects.")
5111 (license license:asl2.0)))
5112
5113(define-public python-awscrt-for-awscli
5114 (package
5115 (inherit python-awscrt)
5116 (version "0.22.0")
5117 (source
5118 (origin
5119 (method url-fetch)
5120 (uri (pypi-uri "awscrt" version))
5121 (sha256
5122 (base32 "0w6pw42jbznrxh92cd97p96dg2nz698mcbfy7md3zw18jfsb18jc"))))))
5123
5124(define-public awscli
5125 (package
5126 ;; Note: updating awscli typically requires updating botocore as well.
5127 (name "awscli")
5128 (version "1.36.32")
5129 (source
5130 (origin
5131 (method git-fetch) ; no tests in PyPI release
5132 (uri (git-reference
5133 (url "https://github.com/aws/aws-cli")
5134 (commit version)))
5135 (file-name (git-file-name name version))
5136 (sha256
5137 (base32 "1b4bfv7mgrxw7nfbv9ag97qcsqch2p7raip6111rqg5vdhvsck19"))))
5138 (build-system pyproject-build-system)
5139 (arguments
5140 (list
5141 #:test-flags
5142 #~(list "--numprocesses" (number->string (parallel-job-count))
5143 ;; Tests require networking.
5144 "--ignore" "tests/integration"
5145 ;; It struggles to set PYTHONPATH.
5146 ;;
5147 ;; AssertionError: 'argument operation: Invalid choice, valid
5148 ;; choices are:' not found in '
5149 "-k"
5150 (string-append "not test_subscribe_to_shard_removed"
5151 " and not test_start_conversation_removed"
5152 ;; Tests fail during mocking.
5153 " and not test_no_groff_or_mandoc_exists"))
5154 #:phases
5155 #~(modify-phases %standard-phases
5156 (add-after 'unpack 'fix-reference-to-groff
5157 (lambda _
5158 ;; XXX: Consider to use wrap-program instead, it tries to parse
5159 ;; the PATH.
5160 (substitute* "awscli/help.py"
5161 (("if self._exists_on_path\\('groff'\\):") "if 'groff':")
5162 (("raise ExecutableNotFoundError\\('groff'\\)") "")
5163 (("cmdline = \\['groff'")
5164 (format #f "cmdline = ['~a/bin/groff'"
5165 #$(this-package-input "groff-minimal"))))))
5166 (add-before 'check 'set-environment
5167 (lambda _
5168 ;; PermissionError: [Errno 13] Permission denied:
5169 ;; '/homeless-shelter'
5170 (setenv "HOME" "/tmp"))))))
5171 (native-inputs
5172 (list python-pytest
5173 python-pytest-xdist
5174 python-setuptools
5175 python-wheel))
5176 (inputs
5177 (list groff-minimal
5178 python-botocore
5179 python-colorama
5180 python-docutils-0.15
5181 python-pyyaml
5182 python-rsa
5183 python-s3transfer))
5184 (home-page "https://aws.amazon.com/cli/")
5185 (synopsis "Command line client for AWS")
5186 (description
5187 "AWS CLI provides a unified command line interface to the Amazon Web
5188Services (AWS) API.")
5189 (license license:asl2.0)))
5190
5191(define-public awscli-2
5192 (package
5193 (inherit awscli)
5194 (name "awscli")
5195 (version "2.20.0")
5196 (source
5197 (origin
5198 (method git-fetch)
5199 (uri (git-reference
5200 (url "https://github.com/aws/aws-cli")
5201 (commit version)))
5202 (file-name (git-file-name name version))
5203 (sha256
5204 (base32
5205 "0hyr9gmcfk7nzkgs0v6wgkh8k15dyhknqzfymbc9a9sa2dblc40q"))))
5206 (build-system pyproject-build-system)
5207 (arguments
5208 (list
5209 #:test-flags
5210 ;; The resource leak tests use ps to check for memory consumption.
5211 '(list "--ignore=functional/botocore/leak/test_resource_leaks.py"
5212 ;; These tests complain about unavailable TLS certs.
5213 "--ignore=functional/ec2instanceconnect/test_opentunnel.py"
5214 ;; These seem to require Internet access.
5215 "--ignore=unit/botocore/test_awsrequest.py")
5216 #:phases
5217 #~(modify-phases %standard-phases
5218 (add-after 'unpack 'ignore-deprecations
5219 (lambda _
5220 (substitute* "pyproject.toml"
5221 (("\"error::") "\"ignore::"))))
5222 (add-after 'unpack 'fix-reference-to-groff
5223 (lambda* (#:key inputs #:allow-other-keys)
5224 (substitute* "awscli/help.py"
5225 (("if self._exists_on_path\\('groff'\\):") "if True:")
5226 (("cmdline = \\['groff'")
5227 (string-append "cmdline = ['"
5228 (search-input-file inputs "bin/groff")
5229 "'")))))
5230 (replace 'check
5231 (lambda* (#:key tests? test-flags #:allow-other-keys)
5232 (when tests?
5233 (let ((skip-args
5234 (string-append
5235 "-k" "\""
5236 ;; No idea why this fails.
5237 "not test_no_groff_or_mandoc_exists"
5238 ;; Needs $HOME
5239 " and not test_attach_history_handler"
5240 ;; Complains about TLS certs.
5241 " and not test_command_returns_shutdown_exception"
5242 "\"")))
5243 (substitute* "scripts/ci/run-tests"
5244 (("--numprocesses=auto" m)
5245 (string-join (cons* m skip-args test-flags) " "))))
5246 (invoke "python" "scripts/ci/run-tests")))))))
5247 (inputs
5248 (list groff
5249 nss-certs-for-test
5250 python-awscrt-for-awscli
5251 python-colorama
5252 python-botocore
5253 python-cryptography
5254 python-dateutil
5255 python-docutils
5256 python-jmespath
5257 python-jsonschema
5258 python-prompt-toolkit
5259 python-ruamel.yaml-0.16
5260 python-ruamel.yaml.clib
5261 python-urllib3))
5262 (native-inputs
5263 (list python-distro
5264 python-flit
5265 python-pytest
5266 python-pytest-xdist
5267 python-wheel))))
5268
5269;; This is not an official release of awscli version 2, so it should not be
5270;; named awscli.
5271(define-public awscliv2
5272 (package
5273 (inherit awscli)
5274 (name "awscliv2")
5275 (version "2.3.1")
5276 (source
5277 (origin
5278 (method url-fetch)
5279 (uri (pypi-uri name version))
5280 (sha256
5281 (base32
5282 "1bpp6kmb75qdhgzsx69ki04345bfkzwnmg84y5x6nyfpph2g3fsz"))))
5283 (arguments
5284 ;; FIXME: The 'pypi' release does not contain tests.
5285 '(#:tests? #f))
5286 (inputs
5287 (list python-importlib-resources
5288 python-executor))
5289 (native-inputs
5290 (list python-poetry-core
5291 python-pytest))))
5292
5293
5294(define-public python-wsgiproxy2
5295 (package
5296 (name "python-wsgiproxy2")
5297 (version "0.4.6")
5298 (source
5299 (origin
5300 (method url-fetch)
5301 (uri (pypi-uri "WSGIProxy2" version ".tar.gz"))
5302 (sha256
5303 (base32 "16jch5nic0hia28lps3c678s9s9mjdq8n87igxncjg0rpi5adqnf"))))
5304 (build-system python-build-system)
5305 (native-inputs
5306 (list python-webtest))
5307 (propagated-inputs
5308 (list python-requests python-six python-urllib3 python-webob))
5309 (home-page "https://github.com/gawel/WSGIProxy2/")
5310 (synopsis "WSGI Proxy with various http client backends")
5311 (description "WSGI turns HTTP requests into WSGI function calls.
5312WSGIProxy turns WSGI function calls into HTTP requests.
5313It also includes code to sign requests and pass private data,
5314and to spawn subprocesses to handle requests.")
5315 (license license:expat)))
5316
5317(define-public python-pastedeploy
5318 (package
5319 (name "python-pastedeploy")
5320 (version "2.1.1")
5321 (source
5322 (origin
5323 (method url-fetch)
5324 (uri (pypi-uri "PasteDeploy" version))
5325 (sha256
5326 (base32 "05s88qdjdwd9d9qs13fap7nqgxs7qs5qfzzjbrc5va13k2mxdskd"))))
5327 (build-system python-build-system)
5328 (arguments
5329 '(#:test-target "pytest"))
5330 (native-inputs
5331 (list python-pytest python-pytest-runner))
5332 (home-page "https://pylonsproject.org/")
5333 (synopsis
5334 "Load, configure, and compose WSGI applications and servers")
5335 (description
5336 "This tool provides code to load WSGI applications and servers from URIs;
5337these URIs can refer to Python Eggs for INI-style configuration files. Paste
5338Script provides commands to serve applications based on this configuration
5339file.")
5340 (license license:expat)))
5341
5342(define-public python-webtest
5343 (package
5344 (name "python-webtest")
5345 (version "2.0.35")
5346 (source
5347 (origin
5348 (method url-fetch)
5349 (uri (pypi-uri "WebTest" version))
5350 (sha256
5351 (base32 "11xhgdj251zkvz5w30fvspii08ki2vrpr1im9sph1wmlnasnihda"))))
5352 (build-system python-build-system)
5353 (arguments
5354 ;; Tests require python-pyquery, which creates a circular dependency.
5355 `(#:tests? #f))
5356 (propagated-inputs
5357 (list python-waitress python-webob python-six python-beautifulsoup4))
5358 (home-page "https://docs.pylonsproject.org/projects/webtest/")
5359 (synopsis "Helper to test WSGI applications")
5360 (description "Webtest allows you to test your Python web applications
5361without starting an HTTP server. It supports anything that supports the
5362minimum of WSGI.")
5363 (license license:expat)))
5364
5365(define-public python-flask
5366 (package
5367 (name "python-flask")
5368 (version "3.1.0")
5369 (source
5370 (origin
5371 (method url-fetch)
5372 (uri (pypi-uri "flask" version))
5373 (sha256
5374 (base32 "1b1nb250jxrjplbs21wnwq69250vs3iz2pdhs7cwi5y8hi8kr1sz"))))
5375 (build-system pyproject-build-system)
5376 (native-inputs
5377 (list python-flit-core
5378 python-pytest))
5379 (propagated-inputs
5380 (list python-asgiref ;async extra
5381 python-click
5382 python-blinker
5383 python-importlib-metadata
5384 python-itsdangerous
5385 python-jinja2
5386 python-werkzeug))
5387 (home-page "https://palletsprojects.com/p/flask/")
5388 (synopsis "Microframework based on Werkzeug, Jinja2 and good intentions")
5389 (description "Flask is a micro web framework based on the Werkzeug toolkit
5390and Jinja2 template engine. It is called a micro framework because it does not
5391presume or force a developer to use a particular tool or library.")
5392 (license license:bsd-3)))
5393
5394(define-public python-flask-compress
5395 (package
5396 (name "python-flask-compress")
5397 (version "1.13")
5398 (source (origin
5399 (method url-fetch)
5400 (uri (pypi-uri "Flask-Compress" version))
5401 (sha256
5402 (base32
5403 "178jzz6jxlxllcjqamzh5q7ahfh90m5cl1il9vmjs3xhz65z35pf"))))
5404 (build-system pyproject-build-system)
5405 (propagated-inputs (list python-brotli python-flask))
5406 (native-inputs (list python-setuptools-scm python-setuptools python-wheel))
5407 (home-page "https://github.com/colour-science/flask-compress")
5408 (synopsis "Compress responses in a Flask app")
5409 (description
5410 "This package lets you compress Flask application responses and static
5411files with gzip, deflate or brotli. Flask-Compress both adds the various
5412headers required for a compressed response and compresses the response data.")
5413 (license license:expat)))
5414
5415(define-public python-flask-seasurf
5416 (package
5417 (name "python-flask-seasurf")
5418 (version "1.1.1")
5419 (source (origin
5420 (method url-fetch)
5421 (uri (pypi-uri "Flask-SeaSurf" version))
5422 (sha256
5423 (base32
5424 "1aaib4n27q0f2alp87mhv3f79vg7qckp71rphbd0mb39qw470lsl"))))
5425 (build-system pyproject-build-system)
5426 (arguments
5427 (list #:tests? #false)) ;there are none
5428 (propagated-inputs (list python-flask))
5429 (native-inputs (list python-setuptools python-wheel))
5430 (home-page "https://github.com/maxcountryman/flask-seasurf/")
5431 (synopsis "CSRF extension for Flask")
5432 (description "SeaSurf is a Flask extension for preventing cross-site
5433request forgery (CSRF). CSRF attacks are problematic because the mechanism
5434they use is relatively easy to exploit. This extension attempts to aid you in
5435securing your application from such attacks. This extension is based on the
5436Django middleware.")
5437 (license license:bsd-3)))
5438
5439(define-public python-flask-wtf
5440 (package
5441 (name "python-flask-wtf")
5442 (version "1.2.2")
5443 (source
5444 (origin
5445 (method url-fetch)
5446 (uri (pypi-uri "Flask-WTF" version))
5447 (sha256
5448 (base32
5449 "0sv6hjva1fdizb7sr46230pplx8qz8rnb4bxrfy71xbc8cgfxlkr"))))
5450 (build-system pyproject-build-system)
5451 (propagated-inputs
5452 (list python-flask python-flask python-itsdangerous python-wtforms))
5453 (native-inputs
5454 (list python-hatchling python-pytest))
5455 (home-page "https://github.com/lepture/flask-wtf")
5456 (synopsis "Simple integration of Flask and WTForms")
5457 (description "Flask-WTF integrates Flask and WTForms, including CSRF, file
5458upload, and reCAPTCHA.")
5459 (license license:bsd-3)))
5460
5461(define-public python-flask-multistatic
5462 (package
5463 (name "python-flask-multistatic")
5464 (version "1.0")
5465 (source
5466 (origin
5467 (method url-fetch)
5468 (uri (pypi-uri "flask-multistatic" version))
5469 (sha256
5470 (base32
5471 "0p4v50rwv64wcd0zlq7rzl4waprwr4hj19s3cgf1isywa7jcisgm"))))
5472 (build-system python-build-system)
5473 (propagated-inputs
5474 (list python-flask))
5475 (home-page "https://pagure.io/flask-multistatic")
5476 (synopsis "Flask plugin to allow overriding static files")
5477 (description "@code{flask-multistatic} is a flask plugin that adds support
5478for overriding static files.")
5479 (license license:gpl3+)))
5480
5481(define-public python-cookies
5482 (package
5483 (name "python-cookies")
5484 (version "2.2.1")
5485 (source (origin
5486 (method url-fetch)
5487 (uri (pypi-uri "cookies" version))
5488 (sha256
5489 (base32
5490 "13pfndz8vbk4p2a44cfbjsypjarkrall71pgc97glk5fiiw9idnn"))))
5491 (build-system python-build-system)
5492 (arguments
5493 `(;; test are broken: https://gitlab.com/sashahart/cookies/issues/3
5494 #:tests? #f))
5495 (native-inputs
5496 (list python-pytest))
5497 (synopsis "HTTP cookie parser and renderer")
5498 (description "A RFC 6265-compliant HTTP cookie parser and renderer in
5499Python.")
5500 (home-page "https://gitlab.com/sashahart/cookies")
5501 (license license:expat)))
5502
5503(define-public python-responses
5504 (package
5505 (name "python-responses")
5506 (version "0.25.3")
5507 (source (origin
5508 (method url-fetch)
5509 (uri (pypi-uri "responses" version))
5510 (sha256
5511 (base32
5512 "1fld6lsa143md4lxccwxq9iyqm9d8a05i9sp7lqjibnrmd3r4yv1"))))
5513 (build-system pyproject-build-system)
5514 (native-inputs
5515 (list python-pytest
5516 python-pytest-asyncio
5517 python-pytest-httpserver
5518 python-setuptools
5519 python-tomli
5520 python-tomli-w
5521 python-wheel))
5522 (propagated-inputs
5523 (list python-requests
5524 python-pyyaml
5525 python-urllib3))
5526 (home-page "https://github.com/getsentry/responses")
5527 (synopsis "Utility for mocking out the `requests` Python library")
5528 (description "A utility library for mocking out the `requests` Python
5529library.")
5530 (license license:asl2.0)))
5531
5532(define-public python-grequests
5533 (package
5534 (name "python-grequests")
5535 (version "0.3.0")
5536 (source
5537 (origin
5538 (method url-fetch)
5539 (uri (pypi-uri "grequests" version))
5540 (sha256
5541 (base32
5542 "1j9icncllbkv7x5719b20mx670c6q1jrdx1sakskkarvx3pc8h8g"))))
5543 (build-system python-build-system)
5544 (propagated-inputs
5545 (list python-gevent python-requests))
5546 (native-inputs
5547 (list python-nose python-zope-interface python-zope-event))
5548 (home-page "https://github.com/kennethreitz/grequests")
5549 (synopsis "Python library for asynchronous HTTP requests")
5550 (description "GRequests is a Python library that allows you to use
5551@code{Requests} with @code{Gevent} to make asynchronous HTTP Requests easily")
5552 (license license:bsd-2)))
5553
5554(define-public python-gwebsockets
5555 (package
5556 (name "python-gwebsockets")
5557 (version "0.7")
5558 (source (origin
5559 (method url-fetch)
5560 (uri (pypi-uri "gwebsockets" version))
5561 (sha256
5562 (base32
5563 "0kgq7wssz0mrhxdafkfc9prj0qjv9z0lyivyqvjvjnnypg54di7m"))))
5564 (build-system python-build-system)
5565 (propagated-inputs
5566 (list python-pygobject))
5567 (home-page "https://github.com/sugarlabs/gwebsockets")
5568 (synopsis "GLib based websockets server")
5569 (description "This package provides a websocket server written in Python.
5570It uses GIO for network communication and hence it easily integrates with the
5571GLib mainloop.")
5572 (license license:asl2.0)))
5573
5574(define-public python-dpkt
5575 (package
5576 (name "python-dpkt")
5577 (version "1.9.4")
5578 (source
5579 (origin
5580 (method url-fetch)
5581 (uri (pypi-uri "dpkt" version))
5582 (sha256
5583 (base32
5584 "1d28r8pmhzjjd6hrn1xcddinfhwv8lcl1s59ygmqa8kfmz5pkrgl"))))
5585 (build-system python-build-system)
5586 (home-page "https://github.com/kbandla/dpkt")
5587 (synopsis "Packet generator and parser for TCP/IP protocols")
5588 (description "The dpkt module is a fast, simple packet generator and parser
5589for the basic TCP/IP protocols.")
5590 (license license:bsd-3)))
5591
5592(define-public python-geventhttpclient
5593 (package
5594 (name "python-geventhttpclient")
5595 (version "2.3.3")
5596 (source (origin
5597 (method git-fetch)
5598 (uri (git-reference
5599 (url "https://github.com/geventhttpclient/geventhttpclient")
5600 (commit version)
5601 (recursive? #true)))
5602 (file-name (git-file-name name version))
5603 (sha256
5604 (base32
5605 "1ya0i0fbx054mfx5d1k75fcf64xzp7vva8lkwwzan41xbnc56nyj"))))
5606 (build-system pyproject-build-system)
5607 (arguments
5608 (list
5609 #:test-flags
5610 ;; Disable network tests.
5611 '(list "-k"
5612 (string-append "not test_client_simple"
5613 " and not test_client_ssl"
5614 " and not test_client_with_default_headers"
5615 " and not test_client_without_leading_slash"
5616 " and not test_download"
5617 " and not test_fail_invalid_ca_certificate"
5618 " and not test_httpbin_multipart"
5619 " and not test_multi_queries_greenlet_safe"
5620 " and not test_no_form_encode_header"
5621 " and not test_no_form_encoded_header"
5622 " and not test_request_with_headers"
5623 " and not test_response_context_manager"
5624 " and not test_urllib_request"))))
5625 (native-inputs (list nss-certs-for-test
5626 python-dpkt python-pytest python-requests
5627 python-setuptools python-wheel))
5628 (propagated-inputs (list python-brotli python-certifi python-gevent
5629 python-urllib3))
5630 (home-page "https://github.com/geventhttpclient/geventhttpclient")
5631 (synopsis "HTTP client library for gevent")
5632 (description "@code{python-geventhttpclient} is a high performance,
5633concurrent HTTP client library for python using @code{gevent}.")
5634 (license license:expat)))
5635
5636(define-public python-requests-oauthlib
5637 (package
5638 (name "python-requests-oauthlib")
5639 (version "1.2.0")
5640 (source
5641 (origin
5642 (method url-fetch)
5643 (uri (pypi-uri "requests-oauthlib" version))
5644 (sha256
5645 (base32
5646 "0mrglgcvq7k48pf27s4gifdk0za8xmgpf55jy15yjj471qrk6rdx"))))
5647 (build-system python-build-system)
5648 (arguments
5649 `(#:phases
5650 (modify-phases %standard-phases
5651 ;; removes tests that require network access
5652 (add-before 'check 'pre-check
5653 (lambda _
5654 (delete-file "tests/test_core.py")
5655 #t)))))
5656 (native-inputs
5657 (list python-pyjwt python-requests-mock python-mock))
5658 (propagated-inputs
5659 (list python-oauthlib python-requests))
5660 (home-page
5661 "https://github.com/requests/requests-oauthlib")
5662 (synopsis
5663 "OAuthlib authentication support for Requests")
5664 (description
5665 "Requests-OAuthlib uses the Python Requests and OAuthlib libraries to
5666provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
5667 (license license:isc)))
5668
5669(define-public python-url
5670 (package
5671 (name "python-url")
5672 (version "0.2.0")
5673 (source (origin
5674 (method url-fetch)
5675 (uri (pypi-uri "url" version))
5676 (sha256
5677 (base32
5678 "0v879yadcz9qxfl41ak6wkga1kimp9cflla9ddz03hjjvgkqy5ki"))))
5679 (build-system python-build-system)
5680 (propagated-inputs
5681 (list python-publicsuffix))
5682 (native-inputs
5683 (list python-coverage python-nose))
5684 (arguments
5685 `(#:tests? #f)) ; FIXME: tests fail with "ImportError: No module named 'tests'"
5686 (home-page "https://github.com/seomoz/url-py")
5687 (synopsis "URL Parsing")
5688 (description "Library for parsing urls.")
5689 (license license:expat)))
5690
5691(define-public python-cachecontrol
5692 (package
5693 (name "python-cachecontrol")
5694 (version "0.14.1")
5695 (source
5696 (origin
5697 (method git-fetch)
5698 ;; Pypi does not have tests.
5699 (uri (git-reference
5700 (url "https://github.com/ionrock/cachecontrol")
5701 (commit (string-append "v" version))))
5702 (file-name (git-file-name name version))
5703 (sha256
5704 (base32
5705 "07ifs4dhahhsgj4vxgfl5ymnmb4my5l2wb8jiinn6fncszcfmr59"))))
5706 (build-system pyproject-build-system)
5707 (arguments
5708 ;; Versions > 0.11.6 depend on CherryPy for testing.
5709 ;; It's too much work to package CherryPy for now.
5710 `(#:tests? #f))
5711 (propagated-inputs
5712 (list python-filelock python-lockfile python-msgpack python-requests))
5713 (native-inputs
5714 (list python-flit-core))
5715 (home-page "https://github.com/ionrock/cachecontrol")
5716 (synopsis "The httplib2 caching algorithms for use with requests")
5717 (description "CacheControl is a port of the caching algorithms in
5718@code{httplib2} for use with @code{requests} session objects.")
5719 (license license:asl2.0)))
5720
5721(define-public python-cachecontrol-0.11
5722 (package
5723 (inherit python-cachecontrol)
5724 (name "python-cachecontrol")
5725 (version "0.11.7")
5726 (source
5727 (origin
5728 (method url-fetch)
5729 (uri (pypi-uri "CacheControl" version))
5730 (sha256
5731 (base32
5732 "07jsfhlbcwgqg6ayz8nznzaqg5rmxqblbzxz1qvg5wc44pcjjy4g"))))
5733 (native-inputs (list python-setuptools python-wheel))))
5734
5735(define-public python-betamax
5736 (package
5737 (name "python-betamax")
5738 (version "0.9.0")
5739 (source
5740 (origin
5741 (method url-fetch)
5742 (uri (pypi-uri "betamax" version))
5743 (sha256
5744 (base32
5745 "152zil1j4gl1whnldi08zwjr4z2bnlbd061kr3ipjs5wg4b6wcc2"))))
5746 (build-system python-build-system)
5747 (arguments
5748 '(;; Many tests fail because they require networking.
5749 #:tests? #f))
5750 (propagated-inputs
5751 (list python-requests))
5752 (home-page "https://github.com/sigmavirus24/betamax")
5753 (synopsis "Record HTTP interactions with python-requests")
5754 (description "Betamax will record your test suite's HTTP interactions and
5755replay them during future tests. It is designed to work with python-requests.")
5756 (license license:expat)))
5757
5758(define-public python-betamax-matchers
5759 (package
5760 (name "python-betamax-matchers")
5761 (version "0.4.0")
5762 (source
5763 (origin
5764 (method url-fetch)
5765 (uri (pypi-uri "betamax-matchers" version))
5766 (sha256
5767 (base32
5768 "07qpwjyq2i2aqhz5iwghnj4pqr2ys5n45v1vmpcfx9r5mhwrsq43"))))
5769 (build-system python-build-system)
5770 (propagated-inputs
5771 (list python-betamax python-requests-toolbelt))
5772 (home-page "https://github.com/sigmavirus24/betamax_matchers")
5773 (synopsis "VCR imitation for python-requests")
5774 (description "@code{betamax-matchers} provides a set of Matchers for
5775Betamax.")
5776 (license license:asl2.0)))
5777
5778(define-public python-betamax-serializers
5779 (package
5780 (name "python-betamax-serializers")
5781 (version "0.2.1")
5782 (source
5783 (origin
5784 (method url-fetch)
5785 (uri (pypi-uri "betamax-serializers" version))
5786 (sha256
5787 (base32 "0ja9isbjmzzhxdj69s0kdsvw8nkp073w6an6a4liy5vk3fdl2p1l"))))
5788 (build-system python-build-system)
5789 (propagated-inputs
5790 (list python-betamax python-pyyaml))
5791 (synopsis "Set of third-party serializers for Betamax")
5792 (description "Betamax-Serializers are an experimental set of Serializers for
5793Betamax that may possibly end up in the main package.")
5794 (home-page "https://gitlab.com/betamax/serializers")
5795 (license license:asl2.0)))
5796
5797(define-public python-s3fs
5798 (package
5799 (name "python-s3fs")
5800 (version "2024.12.0")
5801 (source
5802 (origin
5803 (method url-fetch)
5804 (uri (pypi-uri "s3fs" version))
5805 (sha256
5806 (base32 "0mpxk4xvg0gwzapdh9r3fvnjhi8ymf96f7c756xabk26b67kl3qv"))))
5807 (build-system pyproject-build-system)
5808 ;; Many tests fail with "No such file or directory" raised by the HTTP
5809 ;; client.
5810 (arguments (list #:tests? #false))
5811 (propagated-inputs (list python-aiobotocore python-aiohttp python-fsspec))
5812 (native-inputs
5813 (list python-flask ;for moto
5814 python-flask-cors
5815 python-moto
5816 python-pytest
5817 python-pytest-asyncio
5818 python-setuptools
5819 python-wheel))
5820 (home-page "https://github.com/fsspec/s3fs/")
5821 (synopsis "Convenient filesystem interface over S3")
5822 (description "This package provides a convenient filesystem interface over
5823S3.")
5824 (license license:bsd-3)))
5825
5826(define-public python-s3transfer
5827 (package
5828 (name "python-s3transfer")
5829 (version "0.10.3")
5830 (source
5831 (origin
5832 (method url-fetch)
5833 (uri (pypi-uri "s3transfer" version))
5834 (sha256
5835 (base32 "032bjky1q8r5x80mvb0ah60g0zq4snwf0xa4c7779m44mdsfsl2g"))))
5836 (build-system pyproject-build-system)
5837 (arguments
5838 (list
5839 #:test-flags
5840 #~(list "--numprocesses" (number->string (parallel-job-count))
5841 ;; Tests require networking.
5842 "--ignore" "tests/integration")))
5843 (native-inputs
5844 (list python-docutils
5845 python-mock
5846 python-nose
5847 python-pytest
5848 python-pytest-xdist
5849 python-setuptools
5850 python-wheel))
5851 (propagated-inputs
5852 (list python-botocore
5853 python-urllib3))
5854 (home-page "https://github.com/boto/s3transfer")
5855 (synopsis "Amazon S3 Transfer Manager")
5856 (description
5857 "S3transfer is a Python library for managing Amazon S3 transfers.")
5858 (license license:asl2.0)))
5859
5860(define-public python-flask-restful
5861 (package
5862 (name "python-flask-restful")
5863 (version "0.3.10")
5864 (source
5865 (origin
5866 (method url-fetch)
5867 (uri (pypi-uri "Flask-RESTful" version))
5868 (sha256
5869 (base32
5870 "0dzckjjz3aw8nmisr5g9mnv02s2nqlhblykr9ydqzpr703pz4jpy"))))
5871 (build-system pyproject-build-system)
5872 (arguments
5873 ;; See <https://github.com/flask-restful/flask-restful/issues/980>.
5874 (list #:tests? #f))
5875 (propagated-inputs
5876 (list python-aniso8601 python-flask python-pytz))
5877 (native-inputs
5878 (list python-blinker
5879 python-mock
5880 python-pytest
5881 python-setuptools
5882 python-wheel))
5883 (home-page "https://www.github.com/flask-restful/flask-restful/")
5884 (synopsis "Flask module for creating REST APIs")
5885 (description
5886 "This package contains a Flask module for creating REST APIs.")
5887 (license license:bsd-3)))
5888
5889(define-public python-flask-htpasswd
5890 (package
5891 (name "python-flask-htpasswd")
5892 (version "0.5.0")
5893 (source
5894 (origin
5895 (method url-fetch)
5896 (uri (pypi-uri "flask-htpasswd" version))
5897 (sha256
5898 (base32
5899 "19arq4rn5nll0bbnsff1j10blm0ydp8nvs09c56s29kmlgj3r42x"))))
5900 (build-system pyproject-build-system)
5901 (arguments (list #:tests? #false)) ;none included
5902 (propagated-inputs
5903 (list python-flask python-passlib python-pyjwt python-tox))
5904 (native-inputs (list python-pytest
5905 python-setuptools
5906 python-wheel))
5907 (home-page "https://github.com/carsongee/flask-htpasswd")
5908 (synopsis "Basic authentication via htpasswd files in Flask applications")
5909 (description "This package provides Basic authentication via
5910@file{htpasswd} files and access_token authentication in Flask
5911applications.")
5912 (license license:bsd-3)))
5913
5914(define-public python-flask-sqlalchemy
5915 (package
5916 (name "python-flask-sqlalchemy")
5917 (version "3.1.1")
5918 (source (origin
5919 (method url-fetch)
5920 (uri (pypi-uri "flask_sqlalchemy" version))
5921 (sha256
5922 (base32
5923 "04l3dfivznlpvk9p9f20zdbyxl869k42z2w7glddlbc0h6w8pdp4"))))
5924 (build-system pyproject-build-system)
5925 (arguments
5926 (list
5927 #:test-flags
5928 #~(list "-k" (string-append "not test_explicit_table[db2]"
5929 " and not test_explicit_table[db4]"))))
5930 (native-inputs
5931 (list python-flit-core
5932 python-pytest))
5933 (propagated-inputs
5934 (list python-flask
5935 python-sqlalchemy-2))
5936 (home-page "https://github.com/mitsuhiko/flask-sqlalchemy")
5937 (synopsis "Module adding SQLAlchemy support to your Flask application")
5938 (description
5939 "This package adds SQLAlchemy support to your Flask application.")
5940 (license license:bsd-3)))
5941
5942(define-public python-flask-restful-swagger
5943 (package
5944 (name "python-flask-restful-swagger")
5945 (version "0.20.1")
5946 (source
5947 (origin
5948 (method url-fetch)
5949 (uri (pypi-uri "flask-restful-swagger" version))
5950 (sha256
5951 (base32
5952 "1p66f98b5zpypnnz56pxpbirchqj6aniw6qyrp8h572l0dn9xlvq"))))
5953 (build-system python-build-system)
5954 (arguments '(#:tests? #f)) ;no tests
5955 (propagated-inputs
5956 (list python-flask-restful python-six))
5957 (home-page "https://github.com/rantav/flask-restful-swagger")
5958 (synopsis "Extract Swagger specs from Flask-Restful projects")
5959 (description "This package lets you extract Swagger API documentation
5960specs from your Flask-Restful projects.")
5961 (license license:expat)))
5962
5963(define-public python-htmlmin
5964 (package
5965 (name "python-htmlmin")
5966 (version "0.1.12")
5967 (source
5968 (origin
5969 (method url-fetch)
5970 (uri (pypi-uri "htmlmin" version))
5971 (sha256
5972 (base32
5973 "0y51xhabw6x8jk8k93xl8vznshpz3jb6l28075r5sjip613fzhah"))))
5974 (arguments
5975 `(#:tests? #f)) ; no tests
5976 (build-system python-build-system)
5977 (home-page "https://htmlmin.readthedocs.org/en/latest/")
5978 (synopsis "HTML minifier")
5979 (description "@code{htmlmin} is an HTML minifier that just works.
5980It comes with safe defaults and easily configurable options.")
5981 (license license:bsd-3)))
5982
5983(define-public python-flask-htmlmin
5984 (package
5985 (name "python-flask-htmlmin")
5986 (version "1.2")
5987 (source
5988 (origin
5989 (method url-fetch)
5990 (uri (pypi-uri "Flask-HTMLmin" version))
5991 (sha256
5992 (base32
5993 "1n6zlq72kakkw0z2jpq6nh74lfsmxybm4g053pwhc14fbr809348"))))
5994 (propagated-inputs
5995 (list python-flask python-htmlmin))
5996 (build-system python-build-system)
5997 (home-page "https://github.com/hamidfzm/Flask-HTMLmin")
5998 (synopsis "HTML response minifier for Flask")
5999 (description
6000 "Minify @code{text/html} MIME type responses when using @code{Flask}.")
6001 (license license:bsd-3)))
6002
6003(define-public python-jsmin
6004 (package
6005 (name "python-jsmin")
6006 (version "3.0.1")
6007 (source
6008 (origin
6009 (method url-fetch)
6010 (uri (pypi-uri "jsmin" version))
6011 (sha256
6012 (base32
6013 "1z1brjsvni0260bypldkl8a05sgp0qk18x560zl44igr3q99m5f0"))))
6014 (build-system python-build-system)
6015 (home-page "https://github.com/tikitu/jsmin/")
6016 (synopsis "Python JavaScript minifier")
6017 (description
6018 "@code{jsmin} is a JavaScript minifier, usable from both Python code and
6019on the command line.")
6020 (license license:expat)))
6021
6022(define-public python-flask-login
6023 (package
6024 (name "python-flask-login")
6025 (version "0.6.3")
6026 (source
6027 (origin
6028 (method git-fetch)
6029 (uri (git-reference
6030 (url "https://github.com/maxcountryman/flask-login")
6031 (commit version)))
6032 (file-name (git-file-name name version))
6033 (sha256
6034 (base32 "0wk3dni5qssmbn8ii3hsh89qa3kwr97i92k27bzgsgxvvsfwwzja"))))
6035 (build-system pyproject-build-system)
6036 (propagated-inputs
6037 (list python-flask))
6038 (native-inputs
6039 ;; For tests.
6040 (list python-blinker
6041 python-mock
6042 python-pytest
6043 python-semantic-version
6044 python-setuptools
6045 python-werkzeug
6046 python-wheel))
6047 (home-page "https://github.com/maxcountryman/flask-login")
6048 (synopsis "User session management for Flask")
6049 (description
6050 "@code{Flask-Login} provides user session management for Flask. It
6051handles the common tasks of logging in, logging out, and remembering your
6052users' sessions over extended periods of time.")
6053 (license license:expat)))
6054
6055(define-public python-oauth2client
6056 (package
6057 (name "python-oauth2client")
6058 (version "4.0.0")
6059 (source
6060 (origin
6061 (method url-fetch)
6062 (uri (pypi-uri "oauth2client" version))
6063 (sha256
6064 (base32
6065 "1irqqap2zibysf8dba8sklfqikia579srd0phm5n754ni0h59gl0"))))
6066 (build-system python-build-system)
6067 (arguments
6068 `(#:tests? #f))
6069 (propagated-inputs
6070 (list python-httplib2
6071 python-pyasn1
6072 python-pyasn1-modules
6073 python-pyparsing
6074 python-rsa
6075 python-six))
6076 (home-page "https://github.com/google/oauth2client/")
6077 (synopsis "OAuth 2.0 client library")
6078 (description "@code{python-oauth2client} provides an OAuth 2.0 client
6079library for Python")
6080 (license license:asl2.0)))
6081
6082(define-public python-flask-oidc
6083 (package
6084 (name "python-flask-oidc")
6085 (version "1.4.0")
6086 (source
6087 (origin
6088 (method url-fetch)
6089 (uri (pypi-uri "flask-oidc" version))
6090 (sha256
6091 (base32
6092 "0klgwpn2iy5y7011xh2c8zkryxdwkpxh7qjs3hp5cynl748ia4hc"))))
6093 (build-system python-build-system)
6094 (arguments
6095 (list #:phases
6096 #~(modify-phases %standard-phases
6097 (replace 'check
6098 (lambda* (#:key tests? #:allow-other-keys)
6099 (when tests?
6100 (invoke "nosetests")))))))
6101 (propagated-inputs
6102 (list python-flask python-itsdangerous python-oauth2client
6103 python-six))
6104 (native-inputs
6105 (list python-nose python-mock))
6106 (home-page "https://github.com/puiterwijk/flask-oidc")
6107 (synopsis "OpenID Connect extension for Flask")
6108 (description "@code{python-flask-oidc} provides an OpenID Connect extension
6109for Flask.")
6110 (license license:bsd-2)))
6111
6112(define-public python-webassets
6113 (package
6114 (name "python-webassets")
6115 (version "2.0")
6116 (source
6117 (origin
6118 (method url-fetch)
6119 (uri (pypi-uri "webassets" version))
6120 (sha256
6121 (base32
6122 "1kc1042jydgk54xpgcp0r1ib4gys91nhy285jzfcxj3pfqrk4w8n"))))
6123 (build-system python-build-system)
6124 (arguments
6125 '(#:phases (modify-phases %standard-phases
6126 (add-before 'check 'adjust-tests
6127 (lambda _
6128 ;; Fix for Python 3.9 compatibility.
6129 (substitute* "tests/test_script.py"
6130 (("self\\.t\\.isAlive")
6131 "self.t.is_alive"))
6132 ;; This test requires 'postcss' and 'babel' which are
6133 ;; not yet available in Guix.
6134 (delete-file "tests/test_filters.py")
6135 ;; These expect pytest, but when pytest is added to the
6136 ;; environment more tests fail.
6137 (delete-file "tests/test_cache.py")
6138 (delete-file "tests/test_bundle_build.py")
6139 (delete-file "tests/test_bundle_urls.py")))
6140 (replace 'check
6141 (lambda _
6142 (invoke "nosetests" "-vv"))))))
6143 (propagated-inputs
6144 (list python-pyyaml))
6145 (native-inputs
6146 (list python-jinja2 python-mock python-nose))
6147 (home-page "https://github.com/miracle2k/webassets")
6148 (synopsis "Media asset management")
6149 (description "Merges, minifies and compresses Javascript and CSS files,
6150supporting a variety of different filters, including YUI, jsmin, jspacker or
6151CSS tidy. Also supports URL rewriting in CSS files.")
6152 (license license:bsd-2)))
6153
6154(define-public python-cssmin
6155 (package
6156 (name "python-cssmin")
6157 (version "0.2.0")
6158 (source
6159 (origin
6160 (method url-fetch)
6161 (uri (pypi-uri "cssmin" version))
6162 (sha256
6163 (base32
6164 "1dk723nfm2yf8cp4pj785giqlwv42l0kj8rk40kczvq1hk6g04p0"))))
6165 (build-system python-build-system)
6166 (home-page "https://github.com/zacharyvoase/cssmin")
6167 (synopsis "Python port of the YUI CSS Compressor")
6168 (description "Python port of the YUI CSS Compressor.")
6169 (license (list license:expat license:bsd-3))))
6170
6171(define-public python-elasticsearch
6172 (package
6173 (name "python-elasticsearch")
6174 (version "7.17.12")
6175 (source
6176 (origin
6177 (method git-fetch) ; no tests in PyPI release
6178 (uri (git-reference
6179 (url "https://github.com/elastic/elasticsearch-py")
6180 (commit (string-append "v" version))))
6181 (file-name (git-file-name name version))
6182 (sha256
6183 (base32 "0v3azgxh1nd0jyqhnb1w28ky3nfx8sjq5vlx2gp33v6vxmvqy1qr"))))
6184 (build-system pyproject-build-system)
6185 (arguments
6186 (list
6187 #:test-flags
6188 ;; Requiring network config.
6189 #~(list "--ignore=test_elasticsearch/test_connection.py"
6190 ;; All tests failed.
6191 "--ignore=test_elasticsearch/test_async")))
6192 (native-inputs
6193 (list python-aiohttp
6194 python-dateutil
6195 python-mock
6196 python-pytest
6197 python-pytest-asyncio
6198 python-pytest-cov
6199 python-pyyaml
6200 python-requests
6201 python-setuptools
6202 python-wheel))
6203 (propagated-inputs
6204 (list python-certifi
6205 python-urllib3-next))
6206 (home-page "https://github.com/elastic/elasticsearch-py")
6207 (synopsis "Low-level client for Elasticsearch")
6208 (description "Official low-level client for Elasticsearch. Its goal is to
6209provide common ground for all Elasticsearch-related code in Python; because of
6210this it tries to be opinion-free and very extendable.")
6211 ;; Apache-2.0 in setup.py and LICENSE file for 11 years.
6212 (license license:asl2.0)))
6213
6214(define-public python-engineio
6215 (package
6216 (name "python-engineio")
6217 (version "4.11.2")
6218 (source
6219 (origin
6220 (method url-fetch)
6221 (uri (pypi-uri "python_engineio" version))
6222 (sha256
6223 (base32
6224 "0abijzn4srf89jlj0kqcd9xbhyxvglzxkciy5nxv815rrvdb0nql"))))
6225 (build-system pyproject-build-system)
6226 (arguments
6227 (list
6228 ;; File not found.
6229 #:test-flags '(list "-k" "not test_static_files")))
6230 (propagated-inputs
6231 (list python-aiohttp
6232 python-requests
6233 python-simple-websocket
6234 python-tornado
6235 python-websocket-client))
6236 (native-inputs (list python-pytest python-setuptools python-wheel))
6237 (home-page "https://github.com/miguelgrinberg/python-engineio/")
6238 (synopsis "Engine.IO server")
6239 (description "This package provides a Python implementation of the
6240@code{Engine.IO} realtime client and server.")
6241 (license license:expat)))
6242
6243(define-public python-ephemeral-port-reserve
6244 (package
6245 (name "python-ephemeral-port-reserve")
6246 (version "1.1.4")
6247 (source
6248 (origin
6249 (method url-fetch)
6250 (uri (pypi-uri "ephemeral_port_reserve" version))
6251 (sha256
6252 (base32 "1chl9hil7ggz6l4sfhmp0l2j55qcskbc3pj9360b0309jwndmxxq"))))
6253 (build-system pyproject-build-system)
6254 (native-inputs
6255 (list python-setuptools
6256 python-wheel))
6257 (home-page "https://github.com/Yelp/ephemeral-port-reserve/")
6258 (synopsis "Find an unused port, reliably")
6259 (description
6260 "Bind to an ephemeral port, force it into the TIME_WAIT state, and unbind
6261it.")
6262 (license license:expat)))
6263
6264(define-public python-flask-migrate
6265 (package
6266 (name "python-flask-migrate")
6267 (version "4.1.0")
6268 (home-page "https://github.com/miguelgrinberg/flask-migrate/")
6269 (source (origin
6270 (method git-fetch)
6271 (uri (git-reference (url home-page)
6272 (commit (string-append "v" version))))
6273 (file-name (git-file-name name version))
6274 (sha256
6275 (base32
6276 "09qw1hhyssa5gahm199x67d55c55m3k9m23xp2bdacwsiv8jw57g"))))
6277 (build-system pyproject-build-system)
6278 (propagated-inputs
6279 (list python-flask python-alembic python-flask-sqlalchemy))
6280 (native-inputs
6281 (list python-pytest python-setuptools python-wheel))
6282 (synopsis "SQLAlchemy database migrations for Flask programs using
6283Alembic")
6284 (description "This package contains SQLAlchemy database migration tools
6285for Flask programs that are using @code{python-alembic}.")
6286 (license license:expat)))
6287
6288(define-public python-genshi
6289 (package
6290 (name "python-genshi")
6291 (version "0.7.7")
6292 (source
6293 (origin
6294 (method git-fetch)
6295 (uri (git-reference
6296 (url "https://github.com/edgewall/genshi")
6297 (commit version)))
6298 (file-name (git-file-name name version))
6299 (sha256
6300 (base32 "06q14mn5n56rdnqvsbbjixygilblgg85fzw029n96qf6f1rvldiq"))))
6301 (propagated-inputs
6302 (list python-six))
6303 (build-system python-build-system)
6304 (home-page "https://genshi.edgewall.org/")
6305 (synopsis "Toolkit for generation of output for the web")
6306 (description "Genshi is a Python library that provides an integrated set
6307of components for parsing, generating, and processing HTML, XML or other
6308textual content for output generation on the web.")
6309 (license license:bsd-3)))
6310
6311(define-public python-flask-principal
6312 (package
6313 (name "python-flask-principal")
6314 (version "0.4.0")
6315 (source
6316 (origin
6317 (method url-fetch)
6318 (uri (pypi-uri "Flask-Principal" version))
6319 (sha256
6320 (base32
6321 "0lwlr5smz8vfm5h9a9i7da3q1c24xqc6vm9jdywdpgxfbi5i7mpm"))))
6322 (build-system python-build-system)
6323 (propagated-inputs
6324 (list python-blinker))
6325 (native-inputs
6326 (list python-flask python-nose))
6327 (home-page "https://pythonhosted.org/Flask-Principal/")
6328 (synopsis "Identity management for Flask")
6329 (description "@code{flask_principal} is a identity management library for
6330Flask. It supports managing both authentication and authorization data in a
6331thread-local variable.")
6332 (license license:expat)))
6333
6334(define-public python-flask-httpauth
6335 (package
6336 (name "python-flask-httpauth")
6337 (version "4.8.0")
6338 (source
6339 (origin
6340 (method url-fetch)
6341 (uri (pypi-uri "Flask-HTTPAuth" version))
6342 (sha256
6343 (base32
6344 "0yh9fn6pak64has89pcy03f1cn198vkil872y5jjr53kph2qlmk6"))))
6345 (build-system pyproject-build-system)
6346 (propagated-inputs (list python-flask))
6347 (native-inputs
6348 (list nss-certs-for-test
6349 python-pytest
6350 python-setuptools
6351 python-wheel))
6352 (home-page "https://github.com/miguelgrinberg/flask-httpauth/")
6353 (synopsis "Basic and Digest HTTP authentication for Flask routes")
6354 (description "@code{flask_httpauth} provides Basic and Digest HTTP
6355authentication for Flask routes.")
6356 (license license:expat)))
6357
6358(define-public python-uritemplate
6359 (package
6360 (name "python-uritemplate")
6361 (version "4.1.1")
6362 (source
6363 (origin
6364 (method url-fetch)
6365 (uri (pypi-uri "uritemplate" version))
6366 (sha256
6367 (base32
6368 "1w14a775d92mx9pdhb5zimifpfr2lfcn0vfdpjagcy9vbkyfsij3"))))
6369 (build-system python-build-system)
6370 (home-page "https://uritemplate.readthedocs.org")
6371 (synopsis "Library to deal with URI Templates")
6372 (description "@code{uritemplate} provides Python library to deal with URI
6373Templates.")
6374 ;; The software is made available under the terms of *either* of the
6375 ;; licenses found in LICENSE.APACHE or LICENSE.BSD. Contributions
6376 ;; are made under *both* licenses (excerpt from the LICENSE file).
6377 (license (list license:bsd-2 license:asl2.0))))
6378
6379(define-public python-uritemplate-3
6380 (package
6381 (inherit python-uritemplate)
6382 (name "python-uritemplate")
6383 (version "3.0.1")
6384 (source (origin
6385 (method url-fetch)
6386 (uri (pypi-uri "uritemplate" version))
6387 (sha256
6388 (base32 "1bkwmgr0ia9gcn4bszs2xlvml79f0bi2s4a87xg22ky9rq8avy2s"))))))
6389
6390(define-public python-publicsuffix
6391 (package
6392 (name "python-publicsuffix")
6393 (version "1.1.0")
6394 (source (origin
6395 (method url-fetch)
6396 (uri (pypi-uri "publicsuffix" version))
6397 (sha256
6398 (base32
6399 "1adx520249z2cy7ykwjr1k190mn2888wqn9jf8qm27ly4qymjxxf"))))
6400 (build-system python-build-system)
6401 (arguments
6402 `(#:tests? #f)) ; tests use the internet
6403 (home-page "https://www.tablix.org/~avian/git/publicsuffix.git")
6404 (synopsis "Get suffix for a domain name")
6405 (description "Get a public suffix for a domain name using the Public Suffix
6406List.")
6407 (license license:expat)))
6408
6409(define-public python-publicsuffix2
6410 (package
6411 (name "python-publicsuffix2")
6412 (version "2.20191221")
6413 (source
6414 (origin
6415 (method url-fetch)
6416 (uri (pypi-uri "publicsuffix2" version))
6417 (sha256
6418 (base32 "0yzysvfj1najr1mb4pcqrbmjir3xpb69rlffln95a3cdm8qwry00"))))
6419 (build-system python-build-system)
6420 (arguments
6421 '(#:phases
6422 (modify-phases %standard-phases
6423 (add-after 'unpack 'ignore-maintainer-inputs
6424 (lambda _
6425 ;; Comment out a demand for python-requests, which is used only by
6426 ;; the unused ‘update_psl’ helper command.
6427 (substitute* "setup.py"
6428 (("'requests " match)
6429 (format #f "# ~a" match)))
6430 #t)))
6431 #:tests? #f)) ; the test suite requires network access
6432 (home-page "https://github.com/pombredanne/python-publicsuffix2")
6433 (synopsis "Get a public suffix for a domain name using the Public Suffix List")
6434 (description "Get a public suffix for a domain name using the Public Suffix
6435List. Forked from and using the same API as the publicsuffix package.")
6436 (license (list license:expat license:mpl2.0))))
6437
6438(define-public python-werkzeug
6439 (package
6440 (name "python-werkzeug")
6441 (version "3.1.3")
6442 (source
6443 (origin
6444 (method url-fetch)
6445 (uri (pypi-uri "werkzeug" version))
6446 (sha256
6447 (base32
6448 "0ij7si3aa3ykac7k7fz481h4majqqwn2iqwhjxkji4y18plkqwk0"))))
6449 (build-system pyproject-build-system)
6450 (arguments
6451 (list
6452 #:test-flags
6453 ;; Test requiring networking setup.
6454 #~(list "--ignore=tests/test_serving.py"
6455 "--deselect=tests/test_debug.py::test_basic"
6456 "--deselect=tests/test_exceptions.py::test_response_body"
6457 "--deselect=tests/middleware/test_http_proxy.py::test_http_proxy")))
6458 (native-inputs
6459 (list python-flit-core
6460 python-pytest
6461 python-watchdog
6462 python-ephemeral-port-reserve
6463 python-pytest-timeout
6464 python-pytest-xprocess))
6465 (propagated-inputs
6466 (list python-markupsafe
6467 python-requests))
6468 (home-page "https://palletsprojects.com/p/werkzeug/")
6469 (synopsis "Utilities for WSGI applications")
6470 (description "One of the most advanced WSGI utility modules. It includes a
6471powerful debugger, full-featured request and response objects, HTTP utilities to
6472handle entity tags, cache control headers, HTTP dates, cookie handling, file
6473uploads, a powerful URL routing system and a bunch of community-contributed
6474addon modules.")
6475 (license license:x11)))
6476
6477(define-public python-werkzeug-1.0
6478 (package
6479 (inherit python-werkzeug)
6480 (version "1.0.1")
6481 (source (origin
6482 (method url-fetch)
6483 (uri (pypi-uri "Werkzeug" version))
6484 (sha256
6485 (base32
6486 "0z74sa1xw5h20yin9faj0vvdbq713cgbj84klc72jr9nmpjv303c"))
6487 (patches (search-patches "python-werkzeug-tests.patch"))))
6488 (arguments
6489 '(#:phases
6490 (modify-phases %standard-phases
6491 (delete 'check)
6492 (add-after 'install 'check
6493 (lambda* (#:key inputs outputs #:allow-other-keys)
6494 (add-installed-pythonpath inputs outputs)
6495 (invoke "python" "-m" "pytest"))))))
6496 (propagated-inputs
6497 (list python-requests))
6498 (native-inputs
6499 (list python-pytest python-pytest-timeout python-setuptools
6500 python-wheel))))
6501
6502(define-public python-bottle
6503 (package
6504 (name "python-bottle")
6505 (version "0.12.23")
6506 (source
6507 (origin
6508 (method url-fetch)
6509 (uri (pypi-uri "bottle" version))
6510 (sha256
6511 (base32 "0rs1w293gp5bhxip2cci8mfkhld6n5qcznvlna3nxclz76mf6gb8"))))
6512 (build-system python-build-system)
6513 (arguments
6514 `(#:phases
6515 (modify-phases %standard-phases
6516 (replace 'check
6517 (lambda* (#:key tests? #:allow-other-keys)
6518 (when tests?
6519 (with-directory-excursion "test"
6520 (invoke "pytest" "-vvv"))))))))
6521 (native-inputs (list python-pytest))
6522 (home-page "https://bottlepy.org/")
6523 (synopsis "WSGI framework for small web-applications")
6524 (description "@code{python-bottle} is a WSGI framework for small web-applications.")
6525 (license license:expat)))
6526
6527(define-public python-wtforms
6528 (package
6529 (name "python-wtforms")
6530 (version "3.1.2")
6531 (source
6532 (origin
6533 (method url-fetch)
6534 (uri (pypi-uri "wtforms" version))
6535 (sha256
6536 (base32 "1fblnkzvs6339glwx8bskdjy7nhn2ap90y9g6b399713sy063mzq"))))
6537 (build-system pyproject-build-system)
6538 (native-inputs (list python-hatchling python-pytest))
6539 (propagated-inputs (list python-babel python-email-validator
6540 python-markupsafe))
6541 (home-page "https://wtforms.readthedocs.io/")
6542 (synopsis
6543 "Form validation and rendering library for Python web development")
6544 (description
6545 "WTForms is a flexible forms validation and rendering library
6546for Python web development. It is very similar to the web form API
6547available in Django, but is a standalone package.")
6548 (license license:bsd-3)))
6549
6550(define-public python-wtforms-sqlalchemy
6551 (package
6552 (name "python-wtforms-sqlalchemy")
6553 (version "0.4.1")
6554 (source
6555 (origin
6556 (method url-fetch)
6557 (uri (pypi-uri "WTForms-SQLAlchemy" version))
6558 (sha256
6559 (base32 "1nx4x0ifanlbrzh3f9ns8ihnchlkzf54ilvqmgcgcz2j72vm43rp"))))
6560 (build-system pyproject-build-system)
6561 (native-inputs (list python-pytest python-setuptools python-wheel))
6562 (propagated-inputs (list python-sqlalchemy python-wtforms))
6563 (home-page "https://github.com/wtforms/wtforms-sqlalchemy/")
6564 (synopsis "SQLAlchemy tools for WTForms")
6565 (description
6566 "WTForms-SQLAlchemy is a fork of the @code{wtforms.ext.sqlalchemy}
6567package from WTForms. The package has been renamed to
6568@code{wtforms_sqlalchemy} but otherwise should function the same as
6569@code{wtforms.ext.sqlalchemy} did.")
6570 (license license:bsd-3)))
6571
6572(define-public python-paste
6573 (package
6574 (name "python-paste")
6575 (version "3.10.1")
6576 (source
6577 (origin
6578 (method url-fetch)
6579 (uri (pypi-uri "paste" version))
6580 (sha256
6581 (base32
6582 "0jjyl39r5ncx98rwi855x71qrwvwm59idgn7q0c7m2jyb8314g8w"))))
6583 (build-system pyproject-build-system)
6584 (native-inputs
6585 (list python-pytest
6586 python-setuptools
6587 python-wheel))
6588 (home-page "https://pythonpaste.readthedocs.io/")
6589 (synopsis "Python web development tools, focusing on WSGI")
6590 (description
6591 "Paste provides a variety of web development tools and middleware which
6592can be nested together to build web applications. Paste's design closely
6593follows ideas flowing from WSGI (Web Standard Gateway Interface).")
6594 (license license:expat)))
6595
6596(define-public python-pastescript
6597 (package
6598 (name "python-pastescript")
6599 (version "3.7.0")
6600 (source
6601 (origin
6602 (method url-fetch)
6603 (uri (pypi-uri "pastescript" version))
6604 (sha256
6605 (base32 "08959bmp62pb2rlwr4wpwij15y83jcf9wa9jgg32jlvfzf6h4vsk"))))
6606 (build-system pyproject-build-system)
6607 (arguments
6608 (list
6609 #:test-flags #~(list "--ignore=tests/appsetup/testfiles")))
6610 (native-inputs
6611 (list python-pytest
6612 python-wheel))
6613 (propagated-inputs
6614 (list python-paste
6615 python-pastedeploy
6616 python-setuptools))
6617 (home-page "https://github.com/pasteorg/pastescript")
6618 (synopsis "Pluggable command line tool for serving web applications and more")
6619 (description
6620 "PasteScript is a plugin-friendly command line tool which provides a
6621variety of features, from launching web applications to bootstrapping project
6622layouts.")
6623 (license license:expat)))
6624
6625(define-public python-urlgrabber
6626 (package
6627 (name "python-urlgrabber")
6628 (version "4.1.0")
6629 (source
6630 (origin
6631 (method url-fetch)
6632 (uri (pypi-uri "urlgrabber" version))
6633 (sha256
6634 (base32 "0fg16zlw49cw7pjq9dhpc5vd35d5zz1mlki55m464qxfmfpzhnh7"))))
6635 (build-system python-build-system)
6636 (arguments
6637 `(#:phases
6638 (modify-phases %standard-phases
6639 (replace 'check
6640 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
6641 (when tests?
6642 (add-installed-pythonpath inputs outputs)
6643 (invoke "python" "test/runtests.py")))))))
6644 (propagated-inputs
6645 (list python-pycurl python-setuptools python-six))
6646 (home-page "http://urlgrabber.baseurl.org/") ; no HTTPS
6647 (synopsis "High-level cross protocol url-grabber")
6648 (description
6649 "@code{urlgrabber} is a library that unifies access to files available on
6650the web, FTP or locally. It supports HTTP, FTP and file:// protocols, it
6651supports features like HTTP keep-alive, reget, throttling and more.")
6652 (license license:lgpl2.1+)))
6653
6654(define-public python-pycares
6655 (package
6656 (name "python-pycares")
6657 (version "4.3.0")
6658 (source
6659 (origin
6660 (method url-fetch)
6661 (uri (pypi-uri "pycares" version))
6662 (sha256
6663 (base32
6664 "0i8d0433wmm7wi8i2l2hjiyhmy35b9s888qrk6fqx5xcdmpnjhn5"))))
6665 (build-system python-build-system)
6666 (arguments `(#:tests? #f)) ;tests require internet access
6667 (propagated-inputs (list python-cffi))
6668 (home-page "https://github.com/saghul/pycares")
6669 (synopsis "Python interface for @code{c-ares}")
6670 (description "@code{pycares} is a Python module which provides an
6671interface to @code{c-ares}, a C library that performs DNS requests and
6672name resolutions asynchronously.")
6673 (license license:expat)))
6674
6675(define-public python-yarl
6676 (package
6677 (name "python-yarl")
6678 (version "1.18.3")
6679 (source
6680 (origin
6681 (method url-fetch)
6682 (uri (pypi-uri "yarl" version))
6683 (sha256
6684 (base32
6685 "1qfj6kvdxr8bzka4lp0bh0xfgr5mzx7zzvj2jb4vcxxzbk20265c"))))
6686 (build-system pyproject-build-system)
6687 (arguments
6688 (list
6689 #:test-flags '(list "--ignore-glob=tests/test_*_benchmarks.py")
6690 #:phases
6691 '(modify-phases %standard-phases
6692 (add-after 'unpack 'patch-build-system
6693 (lambda _
6694 ;; XXX: I don't know how to tell it to build the extensions in
6695 ;; place.
6696 (substitute* "packaging/pep517_backend/_backend.py"
6697 (("build_inplace=False") "build_inplace=True")))))))
6698 (native-inputs
6699 (list python-covdefaults
6700 python-cython-3
6701 python-expandvars
6702 python-pytest
6703 python-pytest-cov
6704 python-pytest-xdist
6705 python-setuptools
6706 python-tomli
6707 python-wheel))
6708 (propagated-inputs
6709 (list python-packaging python-idna python-multidict python-propcache))
6710 (home-page "https://github.com/aio-libs/yarl/")
6711 (synopsis "Yet another URL library")
6712 (description "@code{yarl} module provides handy @code{URL} class
6713for URL parsing and changing.")
6714 (license license:asl2.0)))
6715
6716(define-public python-canvasapi
6717 (package
6718 (name "python-canvasapi")
6719 (version "3.2.0")
6720 (source (origin
6721 (method git-fetch)
6722 (uri (git-reference
6723 (url "https://github.com/ucfopen/canvasapi")
6724 (commit (string-append "v" version))))
6725 (file-name (git-file-name name version))
6726 (sha256
6727 (base32
6728 "1vbd3ndhmxi8scxgxs6sc7r0rdaliqd80384n06nyb3haqz25inm"))))
6729 (build-system pyproject-build-system)
6730 (propagated-inputs (list python-arrow python-pytz python-requests))
6731 (native-inputs (list python-requests-mock python-setuptools python-wheel))
6732 (home-page "https://github.com/ucfopen/canvasapi")
6733 (synopsis "API wrapper for the Canvas LMS")
6734 (description
6735 "CanvasAPI is a Python library for accessing Instructure’s Canvas LMS API.
6736The library enables developers to programmatically manage Canvas courses,
6737users, gradebooks, and more.")
6738 (license license:expat)))
6739
6740(define-public python-google
6741 (package
6742 (name "python-google")
6743 (version "3.0.0")
6744 (source (origin
6745 (method url-fetch)
6746 (uri (pypi-uri "google" version))
6747 (sha256
6748 (base32
6749 "1gncv3l11za0mpxvmpaf5n5j3jzp282rz62yml4ha4z55q930d8l"))))
6750 (build-system python-build-system)
6751 (arguments
6752 `(#:tests? #f)) ; There are no tests.
6753 (propagated-inputs
6754 (list python-beautifulsoup4))
6755 (home-page "https://breakingcode.wordpress.com/")
6756 (synopsis "Python bindings to the Google search engine")
6757 (description "This package provides Python bindings for using the
6758Google search engine. Its module is called @code{googlesearch}.")
6759 (license license:bsd-3)))
6760
6761(define-public python-google-api-client
6762 (package
6763 (name "python-google-api-client")
6764 (version "2.102.0")
6765 (source
6766 (origin
6767 (method url-fetch)
6768 (uri (pypi-uri "google-api-python-client" version))
6769 (sha256
6770 (base32
6771 "07b9afz3g3lk976i974h6ikvl7wzwm0a0ws0iynxvmd4favgjvwh"))))
6772 (build-system python-build-system)
6773 (arguments
6774 `(#:tests? #f)) ; tests require internet access
6775 (propagated-inputs
6776 (list python-google-api-core
6777 python-google-auth
6778 python-google-auth-httplib2
6779 python-httplib2
6780 python-pyparsing
6781 python-six
6782 python-uritemplate-3))
6783 (home-page "https://github.com/google/google-api-python-client")
6784 (synopsis "Core Python library for accessing Google APIs")
6785 (description "Python client library for Google's discovery based APIs")
6786 (license license:asl2.0)))
6787
6788(define-public python-google-auth-httplib2
6789 (package
6790 (name "python-google-auth-httplib2")
6791 (version "0.1.1")
6792 (source (origin
6793 (method url-fetch)
6794 (uri (pypi-uri "google-auth-httplib2" version))
6795 (sha256
6796 (base32 "0agwwgw04nks7lzpm224fbvpnjfgzz67pkrfls77ipf6zmawajy6"))))
6797 (build-system python-build-system)
6798 (propagated-inputs
6799 (list python-google-auth python-httplib2 python-six))
6800 (native-inputs
6801 (list python-flask python-mock python-pytest python-pytest-localserver))
6802 (home-page
6803 "https://github.com/GoogleCloudPlatform/google-auth-library-python-httplib2")
6804 (synopsis "Google Authentication Library: httplib2 transport")
6805 (description "This package provides a Google Authentication Library plugin
6806for httplib2 transport.")
6807 (license license:asl2.0)))
6808
6809(define-public python-google-auth-oauthlib
6810 (package
6811 (name "python-google-auth-oauthlib")
6812 (version "1.1.0")
6813 (source
6814 (origin
6815 (method url-fetch)
6816 (uri (pypi-uri "google-auth-oauthlib" version))
6817 (sha256
6818 (base32 "1yvsjd1vh440nsh9vpnig23sq4k1ia749x5g1dwm7r4110xqrsl3"))))
6819 (build-system python-build-system)
6820 (propagated-inputs (list python-google-auth python-requests-oauthlib))
6821 (native-inputs (list python-flask))
6822 (home-page
6823 "https://github.com/GoogleCloudPlatform/google-auth-library-python-oauthlib")
6824 (synopsis "Google Authentication Library: oauthlib")
6825 (description "This package provides a Google Authentication Library plugin
6826with oauthlib.")
6827 (license license:asl2.0)))
6828
6829(define-public whoogle-search
6830 (package
6831 (name "whoogle-search")
6832 (version "0.8.4")
6833 (source (origin
6834 (method url-fetch)
6835 (uri (pypi-uri "whoogle-search" version))
6836 (sha256
6837 (base32
6838 "0hsy4l98nzj6i1lf63wvqd0yharkaz44zsxh863ymy47rxnwimz7"))))
6839 (build-system pyproject-build-system)
6840 (arguments
6841 (list
6842 ;; The tests need network access
6843 #:tests? #f))
6844 (propagated-inputs
6845 (list python-beautifulsoup4
6846 python-brotli
6847 python-cryptography
6848 python-cssutils
6849 python-defusedxml
6850 python-flask
6851 python-dotenv
6852 python-requests
6853 python-stem
6854 python-validators
6855 python-waitress))
6856 (native-inputs (list python-setuptools python-wheel))
6857 (home-page "https://github.com/benbusby/whoogle-search")
6858 (synopsis "Self-hosted, ad-free, privacy-respecting metasearch engine")
6859 (description
6860 "Get Google results, but without any ads, javascript, AMP links,
6861cookies, or IP address tracking. Quick and simple to implement as a primary
6862search engine replacement on both desktop and mobile.")
6863 (license license:expat)))
6864
6865(define-public python-hawkauthlib
6866 (package
6867 (name "python-hawkauthlib")
6868 (version "2.0.0")
6869 (source
6870 (origin
6871 (method url-fetch)
6872 (uri (pypi-uri "hawkauthlib" version))
6873 (sha256
6874 (base32
6875 "03ai47s4h8nfnrf25shbfvkm1b9n1ccd4nmmj280sg1fayi69zgg"))))
6876 (build-system python-build-system)
6877 (propagated-inputs
6878 (list python-requests python-webob))
6879 (home-page "https://github.com/mozilla-services/hawkauthlib")
6880 (synopsis "Hawk Access Authentication protocol")
6881 (description
6882 "This is a low-level Python library for implementing Hawk Access Authentication,
6883a simple HTTP request-signing scheme.")
6884 (license license:mpl2.0)))
6885
6886(define-public python-pybrowserid
6887 (package
6888 (name "python-pybrowserid")
6889 (version "0.14.0")
6890 (source
6891 (origin
6892 (method url-fetch)
6893 (uri (pypi-uri "PyBrowserID" version))
6894 (sha256
6895 (base32
6896 "1qvi79kfb8x9kxkm5lw2mp42hm82cpps1xknmsb5ghkwx1lpc8kc"))))
6897 (build-system python-build-system)
6898 (propagated-inputs
6899 (list python-requests))
6900 (native-inputs
6901 (list python-mock))
6902 (home-page "https://github.com/mozilla/PyBrowserID")
6903 (synopsis "Python library for the BrowserID protocol")
6904 (description
6905 "This is a Python client library for the BrowserID protocol that
6906underlies Mozilla Persona.")
6907 (license license:mpl2.0)))
6908
6909(define-public python-pyfxa
6910 (package
6911 (name "python-pyfxa")
6912 (version "0.6.0")
6913 (source
6914 (origin
6915 (method url-fetch)
6916 (uri (pypi-uri "PyFxA" version))
6917 (sha256
6918 (base32
6919 "0axl16fyrz2r88gnw4b12mk7dpkqscv8c4wsc1y5hicl7bsbc4fm"))))
6920 (build-system python-build-system)
6921 (arguments '(#:tests? #f)) ; 17 tests require network access
6922 (propagated-inputs
6923 (list python-cryptography python-hawkauthlib python-pybrowserid
6924 python-requests python-six))
6925 (native-inputs
6926 (list python-grequests python-mock python-responses python-unittest2))
6927 (home-page "https://github.com/mozilla/PyFxA")
6928 (synopsis "Firefox Accounts client library for Python")
6929 (description
6930 "This is a Python library for interacting with the Firefox Accounts
6931ecosystem.")
6932 (license license:mpl2.0)))
6933
6934(define-public python-hyperlink
6935 (package
6936 (name "python-hyperlink")
6937 (version "21.0.0")
6938 (source
6939 (origin
6940 (method url-fetch)
6941 (uri (pypi-uri "hyperlink" version))
6942 (sha256
6943 (base32
6944 "0sx50lkivsfjxx9zr4yh7l9gll2l9kvl0v0w8w4wk2x5v9bzjyj2"))))
6945 (build-system pyproject-build-system)
6946 (arguments
6947 (list #:phases
6948 #~(modify-phases %standard-phases
6949 (add-before 'check 'pretend-to-be-CI
6950 (lambda _
6951 ;; Pretend to be a CI system to skip flaky tests.
6952 (setenv "CI" "true"))))))
6953 (native-inputs
6954 (list python-pytest python-setuptools python-wheel))
6955 (propagated-inputs
6956 (list python-idna))
6957 (home-page "https://github.com/python-hyper/hyperlink")
6958 (synopsis "Python module to create immutable URLs according to spec")
6959 (description "This package provides a Python module to create immutable, and
6960correct URLs for Python according to RFCs 3986 and 3987.")
6961 (license license:expat)))
6962
6963(define-public python-treq
6964 (package
6965 (name "python-treq")
6966 (version "24.9.1")
6967 (source
6968 (origin
6969 (method url-fetch)
6970 (uri (pypi-uri "treq" version))
6971 (sha256
6972 (base32
6973 "1a7yrq2m7hf77fia4fc0c6zanvwnykpgirdbs1cyvr7k0k27znhm"))))
6974 (build-system pyproject-build-system)
6975 (native-inputs
6976 (list python-httpbin
6977 python-pytest
6978 python-service-identity
6979 python-setuptools
6980 python-wheel))
6981 (propagated-inputs
6982 (list python-attrs
6983 python-hyperlink
6984 python-incremental
6985 python-requests
6986 python-twisted
6987 python-typing-extensions))
6988 (home-page "https://github.com/twisted/treq")
6989 (synopsis "Requests-like API built on top of twisted.web's Agent")
6990 (description "This package provides an HTTP library inspired by
6991@code{requests} but written on top of Twisted's @code{Agents}. It offers a
6992high level API for making HTTP requests when using Twisted.")
6993 (license license:expat)))
6994
6995(define-public python-autobahn
6996 (package
6997 (name "python-autobahn")
6998 (version "19.2.1")
6999 (source
7000 (origin
7001 (method url-fetch)
7002 (uri (pypi-uri "autobahn" version))
7003 (sha256
7004 (base32
7005 "1mm7j24ls01c7jb1ad5p5cpyxvzgydiyf8b04ihykh2v8g98j0x7"))))
7006 (build-system python-build-system)
7007 (arguments
7008 ;; The tests fail to run:
7009 ;; https://github.com/crossbario/autobahn-python/issues/1117
7010 `(#:tests? #f))
7011 (propagated-inputs
7012 (list python-cffi python-twisted python-txaio))
7013 (home-page "https://crossbar.io/autobahn/")
7014 (synopsis "Web Application Messaging Protocol implementation")
7015 (description "This package provides an implementation of the @dfn{Web Application
7016Messaging Protocol} (WAMP). WAMP connects components in distributed
7017applications using Publish and Subscribe (PubSub) and routed Remote Procedure
7018Calls (rRPC). It is ideal for distributed, multi-client and server applications
7019such as IoT applications or multi-user database-driven business applications.")
7020 (license license:expat)))
7021
7022(define-public python-ws4py
7023 (package
7024 (name "python-ws4py")
7025 (version "0.5.1")
7026 (source
7027 (origin
7028 (method url-fetch)
7029 (uri (pypi-uri "ws4py" version))
7030 (sha256
7031 (base32
7032 "10slbbf2jm4hpr92jx7kh7mhf48sjl01v2w4d8z3f1p0ybbp7l19"))))
7033 (build-system python-build-system)
7034 (arguments
7035 `(#:phases
7036 (modify-phases %standard-phases
7037 (add-after 'unpack 'python3.7-compatibility
7038 (lambda _
7039 (substitute* '("ws4py/server/tulipserver.py"
7040 "ws4py/async_websocket.py")
7041 (("asyncio.async")
7042 "asyncio.ensure_future"))
7043 #t))
7044 ;; We don't have a package for cherrypy.
7045 (add-after 'unpack 'remove-cherrypy-support
7046 (lambda _
7047 (delete-file "ws4py/server/cherrypyserver.py")
7048 #t)))))
7049 (propagated-inputs
7050 (list python-gevent python-tornado))
7051 (home-page "https://github.com/Lawouach/WebSocket-for-Python")
7052 (synopsis "WebSocket client and server library")
7053 (description
7054 "This package provides a WebSocket client and server library for
7055Python.")
7056 (license license:bsd-3)))
7057
7058(define-public python-slowapi
7059 (package
7060 (name "python-slowapi")
7061 (version "0.1.9")
7062 (source
7063 (origin
7064 (method git-fetch)
7065 (uri (git-reference
7066 (url "https://github.com/laurents/slowapi")
7067 (commit (string-append "v" version))))
7068 (file-name (git-file-name name version))
7069 (sha256
7070 (base32 "1lc1n6lvh01dhhrc507qri9rz1w72l2riii03ixh7n7n1gwjpws7"))))
7071 (build-system pyproject-build-system)
7072 (arguments
7073 (list
7074 #:test-flags
7075 ;; These tests fail because the timestamp contains more decimal points
7076 ;; than expected, so a simple equality comparison fails.
7077 '(list "-k" (string-append "not test_headers_no_breach"
7078 " and not test_headers_breach"))))
7079 (propagated-inputs (list python-limits python-redis))
7080 (native-inputs
7081 (list python-fastapi
7082 python-hiro
7083 python-mock
7084 python-poetry-core
7085 python-pytest))
7086 (home-page "https://github.com/laurents/slowapi")
7087 (synopsis "Rate limiting extension for Starlette and Fastapi")
7088 (description
7089 "This package provides a rate limiting extension for Starlette and
7090Fastapi.")
7091 (license license:expat)))
7092
7093(define-public python-slugify
7094 (package
7095 (name "python-slugify")
7096 (version "5.0.2")
7097 (source
7098 (origin
7099 (method url-fetch)
7100 (uri (pypi-uri "python-slugify" version))
7101 (sha256
7102 (base32 "1aww2ncglyii4jkbfjxqhinivawf9zmwifcj32d69gpwp6h86czi"))))
7103 (propagated-inputs
7104 (list python-unidecode python-text-unidecode))
7105 (arguments
7106 `(#:phases
7107 (modify-phases %standard-phases
7108 (replace 'check
7109 (lambda* (#:key tests? #:allow-other-keys)
7110 (when tests?
7111 (invoke "python" "test.py")))))))
7112 (build-system python-build-system)
7113 (home-page "https://github.com/un33k/python-slugify")
7114 (synopsis "Python Slugify application that handles Unicode")
7115 (description "This package provides a @command{slufigy} command and
7116library to create slugs from unicode strings while keeping it DRY.")
7117 (license license:expat)))
7118
7119(define-public python-branca
7120 (package
7121 (name "python-branca")
7122 (version "0.7.2")
7123 (source
7124 (origin
7125 (method git-fetch) ; no tests in PyPI
7126 (uri (git-reference
7127 (url "https://github.com/python-visualization/branca")
7128 (commit (string-append "v" version))))
7129 (file-name (git-file-name name version))
7130 (sha256
7131 (base32 "1vs94nqa7r6iwm8mj3m29hg090gmgz4ywnayxh8qiz9ij8jv96wa"))))
7132 (build-system pyproject-build-system)
7133 (arguments
7134 ;; This file requires Selenium.
7135 (list #:test-flags #~(list "--ignore" "tests/test_iframe.py"
7136 ;; This test passes but is very slow.
7137 "-k" "not test_color_brewer_extendability")
7138 #:phases
7139 #~(modify-phases %standard-phases
7140 (add-before 'build 'pretend-version
7141 ;; The version string is usually derived via setuptools-scm,
7142 ;; but without the git metadata available, the version string
7143 ;; is set to '0.0.0'.
7144 (lambda _
7145 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION"
7146 #$(package-version this-package)))))))
7147 (propagated-inputs (list python-jinja2))
7148 (native-inputs
7149 (list python-numpy
7150 python-pytest
7151 python-setuptools
7152 python-setuptools-scm
7153 python-wheel))
7154 (home-page "https://github.com/python-visualization/branca")
7155 (synopsis "Generate complex HTML+JS pages with Python")
7156 (description "This library is a spinoff from @code{folium} that would host
7157the non-map-specific features. It can be used to generate HTML + JS.")
7158 (license license:expat)))
7159
7160(define-public python-tinycss2
7161 (package
7162 (name "python-tinycss2")
7163 (version "1.4.0")
7164 (source
7165 (origin
7166 (method git-fetch)
7167 (uri (git-reference
7168 (url "https://github.com/Kozea/tinycss2")
7169 (commit (string-append "v" version))
7170 (recursive? #true)))
7171 (file-name (git-file-name name version))
7172 (sha256
7173 (base32 "11m5vhpdz6zlzq2lqqklkhd0h4jxblpvcrdf9cc4s06nhr9acp0r"))))
7174 (build-system pyproject-build-system)
7175 (native-inputs
7176 (list python-flit
7177 python-pytest
7178 python-pytest-cov))
7179 (propagated-inputs
7180 (list python-webencodings))
7181 (home-page "https://tinycss2.readthedocs.io/")
7182 (synopsis "Low-level CSS parser for Python")
7183 (description "@code{tinycss2} can parse strings, return Python objects
7184representing tokens and blocks, and generate CSS strings corresponding to
7185these objects.
7186
7187Based on the CSS Syntax Level 3 specification, @code{tinycss2} knows the
7188grammar of CSS but doesn’t know specific rules, properties or values supported
7189in various CSS modules.")
7190 (license license:bsd-3)))
7191
7192(define-public python-cssselect2
7193 (package
7194 (name "python-cssselect2")
7195 (version "0.4.1")
7196 (source
7197 (origin
7198 (method url-fetch)
7199 (uri (pypi-uri "cssselect2" version))
7200 (sha256
7201 (base32 "1j2fcr217rsvkipsg6zjq03rl64rxnvb5hqqpx0dv58fhspvkywk"))))
7202 (build-system pyproject-build-system)
7203 (arguments
7204 `(#:phases
7205 (modify-phases %standard-phases
7206 (add-after 'unpack 'disable-linters
7207 ;; Their check fails; none of our business.
7208 (lambda _
7209 (substitute* '("setup.py" "pyproject.toml")
7210 (("'pytest-flake8',") "")
7211 (("'pytest-isort',") "")
7212 (("--flake8") "")
7213 (("--isort") "")))))))
7214 (propagated-inputs
7215 (list python-tinycss2))
7216 (native-inputs
7217 (list python-flit python-pytest-cov python-pytest-runner))
7218 (home-page "https://cssselect2.readthedocs.io/")
7219 (synopsis "CSS selectors for Python ElementTree")
7220 (description "@code{cssselect2} is a straightforward implementation of
7221CSS3 Selectors for markup documents (HTML, XML, etc.) that can be read by
7222ElementTree-like parsers (including cElementTree, lxml, html5lib, etc.).
7223
7224Unlike the Python package @code{cssselect}, it does not translate selectors to
7225XPath and therefore does not have all the correctness corner cases that are
7226hard or impossible to fix in cssselect.")
7227 (license license:bsd-3)))
7228
7229(define-public python-uvloop
7230 (package
7231 (name "python-uvloop")
7232 (version "0.21.0")
7233 (source
7234 (origin
7235 (method url-fetch)
7236 (uri (pypi-uri "uvloop" version))
7237 (sha256
7238 (base32 "1qq46ym3ymzfn4j6fnykfmr1f4qnb7x7p15dlw37hi38v87jpw9v"))
7239 (modules '((guix build utils)))
7240 (snippet
7241 '(begin (delete-file-recursively "vendor")
7242 (delete-file "uvloop/loop.c")))))
7243 (build-system pyproject-build-system)
7244 (arguments
7245 `(#:phases
7246 (modify-phases %standard-phases
7247 (add-after 'unpack 'preparations
7248 (lambda _
7249 ;; Use packaged libuv.
7250 (substitute* "setup.py" (("self.use_system_libuv = False")
7251 "self.use_system_libuv = True"))
7252 ;; Replace hardcoded shell command.
7253 (substitute* "uvloop/loop.pyx"
7254 (("b'/bin/sh'") (string-append "b'" (which "sh") "'")))
7255 #t))
7256 ,@(if (target-riscv64?)
7257 `((add-after 'unpack 'adjust-test-timeouts
7258 (lambda _
7259 (substitute* '("tests/test_tcp.py"
7260 "tests/test_unix.py")
7261 (("SSL_HANDSHAKE_TIMEOUT = 15\\.0")
7262 "SSL_HANDSHAKE_TIMEOUT = 30.0")))))
7263 '())
7264 (replace 'check
7265 (lambda* (#:key tests? #:allow-other-keys)
7266 (when tests?
7267 ;; Remove Python module, which conflicts with the installed version,
7268 ;; but lacks the built C module.
7269 (delete-file-recursively "uvloop")
7270 ;; The tests are prone to get stuck. Use pytest-timeout’s --timeout
7271 ;; flag to get a meaningful idea about where.
7272 (invoke "pytest" "-vv" "--timeout=300"
7273 "--timeout-method=thread"
7274 "-k" (string-append
7275 ;; Timeout, because SIGINT cannot be sent to child.
7276 "not test_signals_sigint_pycode_continue "
7277 "and not test_signals_sigint_pycode_stop "
7278 "and not test_signals_sigint_uvcode "
7279 "and not test_signals_sigint_uvcode_two_loop_runs "
7280 ;; This test is racy and prone to get stuck on
7281 ;; various platforms, possibly a aiohttp issue:
7282 ;; https://github.com/MagicStack/uvloop/issues/412
7283 "and not test_remote_shutdown_receives_trailing_data "
7284 ;; It looks like pytest is preventing
7285 ;; custom stdout/stderr redirection,
7286 ;; even with -s.
7287 "and not test_process_streams_redirect "
7288 ;; FileNotFoundError: [Errno 2] No such file or
7289 ;; directory
7290 "and not test_process_env_2"
7291 ,@(if (target-riscv64?)
7292 `(" and not test_renegotiation"
7293 " and not test_getaddrinfo_21")
7294 `())))))))))
7295 (native-inputs
7296 (list python-aiohttp
7297 python-cython-3
7298 python-psutil
7299 python-pyopenssl
7300 python-pytest
7301 python-pytest-timeout
7302 python-setuptools
7303 python-wheel))
7304 (inputs
7305 (list libuv))
7306 (home-page "https://github.com/MagicStack/uvloop")
7307 (synopsis "Fast implementation of asyncio event loop on top of libuv")
7308 (description
7309 "@code{uvloop} is a fast, drop-in replacement of the built-in asyncio
7310event loop. It is implemented in Cython and uses libuv under the hood.")
7311 (license license:expat)))
7312
7313(define-public gunicorn
7314 (package
7315 (name "gunicorn")
7316 (version "21.2.0")
7317 (source
7318 (origin
7319 (method url-fetch)
7320 (uri (pypi-uri "gunicorn" version))
7321 (sha256
7322 (base32 "0cqhr2g880snpi45qvvch288m4fdyd5vqrcz3gk9hkv33pzqpv48"))))
7323 (outputs '("out" "doc"))
7324 (build-system pyproject-build-system)
7325 (arguments
7326 `(#:phases
7327 (modify-phases %standard-phases
7328 (add-after 'build 'build-doc
7329 (lambda _
7330 (invoke "make" "-C" "docs" "PAPER=a4" "html" "info")
7331 (delete-file "docs/build/texinfo/Makefile")
7332 (delete-file "docs/build/texinfo/Gunicorn.texi")))
7333 (replace 'check
7334 (lambda* (#:key tests? #:allow-other-keys)
7335 (if tests?
7336 (begin
7337 (invoke "pytest" "-vv"
7338 ;; Disable the geventlet tests because eventlet uses
7339 ;; dnspython, which does not work in the build
7340 ;; container due to lack of /etc/resolv.conf, etc.
7341 "--ignore=tests/workers/test_geventlet.py"))
7342 (format #t "test suite not run~%"))))
7343 (add-after 'install 'install-doc
7344 (lambda* (#:key outputs #:allow-other-keys)
7345 (let* ((doc (string-append (assoc-ref outputs "doc")
7346 "/share/doc/" ,name "-" ,version))
7347 (html (string-append doc "/html"))
7348 (info (string-append doc "/info"))
7349 (examples (string-append doc "/examples")))
7350 (mkdir-p html)
7351 (mkdir-p info)
7352 (mkdir-p examples)
7353 (copy-recursively "docs/build/html" html)
7354 (copy-recursively "docs/build/texinfo" info)
7355 (copy-recursively "examples" examples)
7356 (for-each (lambda (file)
7357 (copy-file file (string-append doc "/" file)))
7358 '("README.rst" "NOTICE" "LICENSE" "THANKS")))))
7359 ;; XXX: The wrap phase includes native inputs on PYTHONPATH, (see
7360 ;; <https://bugs.gnu.org/25235>), leading to an inflated closure
7361 ;; size. Override it to only add the essential entries.
7362 (replace 'wrap
7363 (lambda* (#:key native-inputs inputs outputs #:allow-other-keys)
7364 (let* ((out (assoc-ref outputs "out"))
7365 (python (assoc-ref (or native-inputs inputs) "python"))
7366 (sitedir (string-append "/lib/python"
7367 (python-version python)
7368 "/site-packages")))
7369 (wrap-program (string-append out "/bin/gunicorn")
7370 `("PYTHONPATH" ":" prefix
7371 ,(map (lambda (output)
7372 (string-append output sitedir))
7373 (list python out))))))))))
7374 (inputs (list bash-minimal))
7375 (native-inputs
7376 (list binutils ;; for ctypes.util.find_library()
7377 python-aiohttp
7378 python-gevent
7379 python-pytest
7380 python-pytest-cov
7381 python-sphinx
7382 texinfo))
7383 (propagated-inputs (list python-packaging python-setuptools python-wheel))
7384 (home-page "https://gunicorn.org/")
7385 (synopsis "Python WSGI HTTP Server for UNIX")
7386 (description "Gunicorn ‘Green Unicorn’ is a Python WSGI HTTP
7387Server for UNIX. It’s a pre-fork worker model ported from Ruby’s
7388Unicorn project. The Gunicorn server is broadly compatible with
7389various web frameworks, simply implemented, light on server resources,
7390and fairly speedy.")
7391 (license license:expat)))
7392
7393(define-public gunicorn-next
7394 (package
7395 (inherit gunicorn)
7396 (name "gunicorn")
7397 (version "22.0.0")
7398 (source
7399 (origin
7400 (method url-fetch)
7401 (uri (pypi-uri "gunicorn" version))
7402 (sha256
7403 (base32
7404 "0qzc3ghayc137hlwrqqwkkhaf8f5h9ja21qwy4rznxpz75i462sa"))))
7405 ;; CVE-2024-1135 is fixed in version 22.0.0.
7406 (properties `((lint-hidden-cve . ("CVE-2024-1135"))))))
7407
7408;; break cyclic dependency for python-aiohttp, which depends on gunicorn for
7409;; its tests
7410(define-public gunicorn-bootstrap
7411 (package
7412 (inherit gunicorn)
7413 (name "gunicorn")
7414 (arguments `(#:tests? #f))
7415 (properties '((hidden? . #t)))
7416 (native-inputs `())))
7417
7418(define-public python-httptools
7419 (package
7420 (name "python-httptools")
7421 (version "0.1.1")
7422 (source
7423 (origin
7424 ;; PyPI tarball comes with a vendored http-parser and no tests.
7425 (method git-fetch)
7426 (uri (git-reference
7427 (url "https://github.com/MagicStack/httptools")
7428 (commit (string-append "v" version))))
7429 (file-name (git-file-name name version))
7430 (sha256
7431 (base32 "0g08128x2ixsiwrzskxc6c8ymgzs39wbzr5mhy0mjk30q9pqqv77"))))
7432 (build-system python-build-system)
7433 (arguments
7434 '(#:phases
7435 (modify-phases %standard-phases
7436 (add-after 'unpack 'preparations
7437 (lambda _
7438 ;; Skip a failing test (AssertionError). Bug report:
7439 ;; https://github.com/MagicStack/httptools/issues/10.
7440 (substitute* "tests/test_parser.py"
7441 ((" def test_parser_response_1")
7442 (string-append
7443 " @unittest.skip(\"Disabled.\")\n"
7444 " def test_parser_response_1")))
7445 ;; Use packaged http-parser.
7446 (substitute* "setup.py" (("self.use_system_http_parser = False")
7447 "self.use_system_http_parser = True"))
7448 ;; This path is hardcoded. Hardcode our own.
7449 (substitute* "httptools/parser/cparser.pxd"
7450 (("../../vendor/http-parser")
7451 (string-append (assoc-ref %build-inputs "http-parser")
7452 "/include")))
7453 ;; Don't force Cython version.
7454 (substitute* "setup.py" (("Cython==") "Cython>="))
7455 #t)))))
7456 (native-inputs
7457 (list python-cython python-pytest))
7458 (inputs
7459 (list http-parser))
7460 (home-page "https://github.com/MagicStack/httptools")
7461 (synopsis "Collection of framework independent HTTP protocol utils")
7462 (description
7463 "@code{httptools} is a Python binding for the nodejs HTTP parser.")
7464 (license license:expat)))
7465
7466(define-public python-uvicorn
7467 (package
7468 (name "python-uvicorn")
7469 (version "0.34.0")
7470 (source
7471 (origin
7472 ;; PyPI tarball has no tests.
7473 (method git-fetch)
7474 (uri (git-reference
7475 (url "https://github.com/encode/uvicorn")
7476 (commit version)))
7477 (file-name (git-file-name name version))
7478 (sha256
7479 (base32 "05lkxnpzmr0kik81kdcvavjvvc4d1lgmw88mr4vbwsqk147wgqbc"))))
7480 (build-system pyproject-build-system)
7481 (arguments
7482 (list
7483 #:test-flags
7484 #~(list "-o" "asyncio_mode=auto"
7485 ;; For some reason tests stacked in infinity re-invocation loop:
7486 ;; AssertionError where is_alive =
7487 ;; <uvicorn.supervisors.multiprocess.Process object at
7488 ;; 0x7ffff39b6110>.is_alive.
7489 ;; Maybe this <https://github.com/encode/uvicorn/issues/2466>.
7490 "--ignore=tests/supervisors/test_multiprocess.py"
7491
7492 #$@(cond
7493 ((or (target-aarch64?)
7494 (target-riscv64?))
7495 '("-k not test_send_binary_data_to_server_bigger_than_default_on_websockets"))
7496 (#t '())))))
7497 (native-inputs
7498 (list nss-certs-for-test
7499 python-a2wsgi
7500 python-hatchling
7501 python-httpx-bootstrap
7502 python-pytest
7503 python-pytest-asyncio
7504 python-pytest-mock
7505 python-requests
7506 python-trustme
7507 python-wsproto))
7508 (propagated-inputs
7509 (list python-click
7510 python-dotenv
7511 python-h11
7512 python-httptools
7513 python-pyyaml
7514 python-uvloop
7515 python-watchgod
7516 python-websockets))
7517 (home-page "https://github.com/encode/uvicorn")
7518 (synopsis "Fast ASGI server implementation")
7519 (description
7520 "@code{uvicorn} is a fast ASGI server implementation, using @code{uvloop}
7521and @code{httptools}. It currently supports HTTP/1.1 and WebSockets. Support
7522for HTTP/2 is planned.")
7523 (license license:bsd-3)))
7524
7525(define-public python-translation-finder
7526 (package
7527 (name "python-translation-finder")
7528 (version "1.7")
7529 (source
7530 (origin
7531 (method url-fetch)
7532 (uri (pypi-uri "translation-finder" version))
7533 (sha256
7534 (base32
7535 "1pcy9z8gmb8x41gjhw9x0lkr0d2mv5mdxcs2hwg6q8mxs857j589"))))
7536 (build-system python-build-system)
7537 (arguments
7538 `(#:phases
7539 (modify-phases %standard-phases
7540 (add-before 'build 'remove-failing-test
7541 (lambda _
7542 (delete-file "translation_finder/test_api.py")
7543 #t)))))
7544 (propagated-inputs
7545 (list python-chardet python-pathlib2 python-ruamel.yaml python-six))
7546 (native-inputs
7547 (list python-codecov python-codacy-coverage python-pytest-cov
7548 python-pytest-runner python-twine))
7549 (home-page "https://weblate.org/")
7550 (synopsis "Translation file finder for Weblate")
7551 (description "This package provides a function to find translation file in
7552the source code of a project. It supports many translation file formats and
7553is part of the Weblate translation platform.")
7554 (license license:gpl3+)))
7555
7556(define-public python-gitlab
7557 (package
7558 (name "python-gitlab")
7559 (version "3.2.0")
7560 (source (origin
7561 (method url-fetch)
7562 (uri (pypi-uri "python-gitlab" version))
7563 (sha256
7564 (base32
7565 "1gi4lp2g4k99zqcx2bgqx940bpmpbc1w9qkl5gy33hpy148yhvlg"))))
7566 (build-system python-build-system)
7567 (arguments
7568 `(#:tests? #f)) ;tests require network access
7569 (propagated-inputs (list python-requests python-requests-toolbelt))
7570 (home-page "https://github.com/python-gitlab/python-gitlab")
7571 (synopsis "Interact with GitLab API")
7572 (description "This package provides an extended library for interacting
7573with GitLab instances through their API.")
7574 (license license:lgpl3+)))
7575
7576(define-public python-path-and-address
7577 (package
7578 (name "python-path-and-address")
7579 (version "2.0.1")
7580 (source
7581 (origin
7582 ;; The source distributed on PyPI doesn't include tests.
7583 (method git-fetch)
7584 (uri (git-reference
7585 (url "https://github.com/joeyespo/path-and-address")
7586 (commit (string-append "v" version))))
7587 (file-name (git-file-name name version))
7588 (sha256
7589 (base32
7590 "0b0afpsaim06mv3lhbpm8fmawcraggc11jhzr6h72kdj1cqjk5h6"))))
7591 (build-system python-build-system)
7592 (arguments
7593 `(#:phases
7594 (modify-phases %standard-phases
7595 (replace 'check
7596 (lambda* (#:key inputs outputs #:allow-other-keys)
7597 (add-installed-pythonpath inputs outputs)
7598 (invoke "py.test"))))))
7599 (native-inputs
7600 (list python-pytest))
7601 (home-page "https://github.com/joeyespo/path-and-address")
7602 (synopsis "Functions for command-line server tools used by humans")
7603 (description "Path-and-address resolves ambiguities of command-line
7604interfaces, inferring which argument is the path, and which is the address.")
7605 (license license:expat)))
7606
7607(define-public grip
7608 (package
7609 (name "grip")
7610 (version "4.6.1")
7611 (source (origin
7612 (method git-fetch)
7613 (uri (git-reference
7614 (url "https://github.com/joeyespo/grip")
7615 (commit (string-append "v" version))))
7616 (file-name (git-file-name name version))
7617 (sha256
7618 (base32
7619 "0vhimd99zw7s1fihwr6yfij6ywahv9gdrfcf5qljvzh75mvzcwh8"))))
7620 (build-system python-build-system)
7621 (propagated-inputs (list python-docopt
7622 python-flask
7623 python-markdown
7624 python-path-and-address
7625 python-pygments
7626 python-requests))
7627 (native-inputs (list python-pytest python-responses))
7628 (arguments
7629 (list #:phases
7630 #~(modify-phases %standard-phases
7631 (replace 'check
7632 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
7633 (when tests?
7634 (add-installed-pythonpath inputs outputs)
7635 (setenv "PATH"
7636 (string-append (getenv "PATH") ":"
7637 #$output "/bin"))
7638 (invoke "py.test" "-m" "not assumption")))))))
7639 (home-page "https://github.com/joeyespo/grip")
7640 (synopsis "Preview Markdown files using the GitHub API")
7641 (description
7642 "Grip is a command-line server application written in Python
7643that uses the GitHub Markdown API to render a local Markdown file. The styles
7644and rendering come directly from GitHub, so you'll know exactly how it will
7645appear. Changes you make to the file will be instantly reflected in the browser
7646without requiring a page refresh.")
7647 (license license:expat)))
7648
7649(define-public python-port-for
7650 (package
7651 (name "python-port-for")
7652 (version "0.4")
7653 (source
7654 (origin
7655 (method url-fetch)
7656 (uri (pypi-uri "port-for" version))
7657 (sha256
7658 (base32
7659 "1pncxlj25ggw99r0ijfbkq70gd7cbhqdx5ivsxy4jdp0z14cpda7"))))
7660 (build-system python-build-system)
7661 (arguments
7662 `(#:phases
7663 (modify-phases %standard-phases
7664 (add-after 'unpack 'use-urllib3
7665 (lambda _
7666 (substitute* "port_for/_download_ranges.py"
7667 (("urllib2") "urllib3")))))))
7668 (propagated-inputs
7669 (list python-urllib3))
7670 (native-inputs
7671 (list python-mock))
7672 (home-page "https://github.com/kmike/port-for/")
7673 (synopsis "TCP localhost port finder and association manager")
7674 (description
7675 "This package provides a utility that helps with local TCP ports
7676management. It can find an unused TCP localhost port and remember the
7677association.")
7678 (license license:expat)))
7679
7680(define-public python-livereload
7681 (package
7682 (name "python-livereload")
7683 (version "2.6.3")
7684 (source
7685 (origin
7686 (method url-fetch)
7687 (uri (pypi-uri "livereload" version))
7688 (sha256
7689 (base32
7690 "0scqjnhg3ap81v36ghp0pik774dnfdkwqsx5j1jfbzarbs32yvvp"))))
7691 (build-system python-build-system)
7692 (propagated-inputs
7693 (list python-six python-tornado))
7694 (home-page "https://github.com/lepture/python-livereload")
7695 (synopsis "Python LiveReload")
7696 (description
7697 "Python LiveReload provides a command line utility, @command{livereload},
7698for starting a web server in a directory. It can trigger arbitrary commands
7699and serve updated contents upon changes to the directory.")
7700 (license license:bsd-3)))
7701
7702(define-public python-vf-1
7703 (package
7704 (name "python-vf-1")
7705 (version "0.0.11")
7706 (source
7707 (origin
7708 (method url-fetch)
7709 (uri (pypi-uri "VF-1" version))
7710 (sha256
7711 (base32
7712 "0xlqsaxsiayk1sd07kpz8abbcnab582y29a1y4882fq6j4gma5xi"))))
7713 (build-system python-build-system)
7714 (home-page "https://github.com/solderpunk/VF-1")
7715 (synopsis "Command line gopher client")
7716 (description "@code{VF-1} is a command line gopher client with
7717@acronym{TLS, Transport Layer Security} support.")
7718 (license license:bsd-2)))
7719
7720(define-public python-httpcore
7721 (package
7722 (name "python-httpcore")
7723 (version "1.0.7")
7724 (source
7725 (origin
7726 ;; PyPI tarball does not contain tests.
7727 (method git-fetch)
7728 (uri (git-reference
7729 (url "https://github.com/encode/httpcore")
7730 (commit version)))
7731 (file-name (git-file-name name version))
7732 (sha256
7733 (base32 "1wz54snks59m1mz2mv0i4p37zz2rrzd99gpg8sh3qkpck5h8lhc4"))))
7734 (build-system pyproject-build-system)
7735 (native-inputs
7736 (list nss-certs-for-test
7737 python-hatch-fancy-pypi-readme
7738 python-hatchling
7739 python-pytest
7740 python-pytest-asyncio
7741 python-pytest-cov
7742 python-pytest-httpbin
7743 python-pytest-trio
7744 python-uvicorn
7745 python-trustme))
7746 (propagated-inputs
7747 (list python-anyio
7748 python-certifi
7749 python-h11
7750 python-h2
7751 python-sniffio
7752 python-socksio
7753 python-trio
7754 python-trio-typing))
7755 (home-page "https://github.com/encode/httpcore")
7756 (synopsis "Minimal, low-level HTTP client")
7757 (description
7758 "HTTP Core provides a minimal and low-level HTTP client, which does one
7759thing only: send HTTP requests.
7760
7761Some things HTTP Core does do:
7762
7763@itemize
7764@item Sending HTTP requests.
7765@item Provides both sync and async interfaces.
7766@item Supports HTTP/1.1 and HTTP/2.
7767@item Async backend support for asyncio and trio.
7768@item Automatic connection pooling.
7769@item HTTP(S) proxy support.
7770@end itemize")
7771 (license license:bsd-3)))
7772
7773;;; Variant used to break a cycle between python-httpx and python-uvicorn.
7774(define-public python-httpcore-bootstrap
7775 (hidden-package
7776 (package/inherit python-httpcore
7777 (name "python-httpcore-bootstrap")
7778 (arguments (list #:tests? #f))
7779 (native-inputs (list python-hatchling
7780 python-hatch-fancy-pypi-readme)))))
7781
7782(define-public python-httpx
7783 (package
7784 (name "python-httpx")
7785 (version "0.28.1")
7786 (source
7787 (origin
7788 ;; PyPI tarball does not contain tests.
7789 (method git-fetch)
7790 (uri (git-reference
7791 (url "https://github.com/encode/httpx")
7792 (commit version)))
7793 (file-name (git-file-name name version))
7794 (sha256
7795 (base32 "00d6rb21xwazwb0sj68zhra0qxxcwkd0vv7bg3k1jg94dmk2w7xl"))))
7796 (build-system pyproject-build-system)
7797 (arguments
7798 (list
7799 #:test-flags
7800 '(list "-vv" "-o" "asyncio_mode=auto"
7801 "-k"
7802 ;; These tests try to open an outgoing connection.
7803 (string-append
7804 "not test_connect_timeout"
7805 " and not test_that_send_cause_async_client_to_be_not_closed"
7806 " and not test_that_async_client_caused_warning_when_being_deleted"
7807 " and not test_that_send_cause_client_to_be_not_closed"
7808 " and not test_async_proxy_close"
7809 " and not test_sync_proxy_close"
7810 ;; This test is apparently incompatible with
7811 ;; python-click 8, fails with " AttributeError:
7812 ;; 'function' object has no attribute 'name'".
7813 " and not test_main"))))
7814 (native-inputs
7815 (list nss-certs-for-test
7816 python-cryptography
7817 python-hatchling
7818 python-hatch-fancy-pypi-readme
7819 python-pytest
7820 python-pytest-asyncio
7821 python-pytest-trio
7822 python-trio
7823 python-trio-typing
7824 python-trustme
7825 python-uvicorn
7826 python-setuptools
7827 python-wheel
7828 python-zstandard))
7829 (propagated-inputs
7830 (list python-charset-normalizer
7831 python-brotli
7832 python-certifi
7833 python-chardet
7834 python-httpcore
7835 python-idna
7836 python-rfc3986
7837 python-sniffio))
7838 (home-page "https://www.python-httpx.org/")
7839 (synopsis "HTTP client for Python")
7840 (description
7841 "HTTPX is a fully featured HTTP client for Python 3, which provides sync
7842and async APIs, and support for both HTTP/1.1 and HTTP/2.
7843
7844HTTPX builds on the well-established usability of requests, and gives you:
7845
7846@itemize
7847@item A broadly requests-compatible API.
7848@item Standard synchronous interface, but with async support if you need it.
7849@item HTTP/1.1 and HTTP/2 support.
7850@item Ability to make requests directly to WSGI applications or ASGI applications.
7851@item Strict timeouts everywhere.
7852@item Fully type annotated.
7853@item 99% test coverage.
7854@end itemize
7855
7856Plus all the standard features of requests:
7857
7858@itemize
7859@item International Domains and URLs
7860@item Keep-Alive & Connection Pooling
7861@item Sessions with Cookie Persistence
7862@item Browser-style SSL Verification
7863@item Basic/Digest Authentication
7864@item Elegant Key/Value Cookies
7865@item Automatic Decompression
7866@item Automatic Content Decoding
7867@item Unicode Response Bodies
7868@item Multipart File Uploads
7869@item HTTP(S) Proxy Support
7870@item Connection Timeouts
7871@item Streaming Downloads
7872@item .netrc Support
7873@item Chunked Requests
7874@end itemize")
7875 (license license:bsd-3)))
7876
7877;;; Variant used to break a cycle with python-uvicorn.
7878(define-public python-httpx-bootstrap
7879 (hidden-package
7880 (package/inherit python-httpx
7881 (name "python-httpx-bootstrap")
7882 (arguments (list #:tests? #f))
7883 (native-inputs
7884 (list python-hatchling
7885 python-hatch-fancy-pypi-readme))
7886 (propagated-inputs
7887 (modify-inputs (package-propagated-inputs python-httpx)
7888 (replace "python-httpcore" python-httpcore-bootstrap))))))
7889
7890(define-public python-wsgiprox
7891 (package
7892 (name "python-wsgiprox")
7893 (version "1.5.2")
7894 (source
7895 (origin
7896 (method url-fetch)
7897 (uri (pypi-uri "wsgiprox" version))
7898 (sha256
7899 (base32
7900 "11fsm199pvwbmqx2lccznvws65aam1rqqv0w79gal8hispwgd5rs"))))
7901 (build-system python-build-system)
7902 (arguments
7903 ;; The test suite hangs (see:
7904 ;; https://github.com/webrecorder/wsgiprox/issues/6).
7905 `(#:tests? #f
7906 #:phases
7907 (modify-phases %standard-phases
7908 (add-after 'unpack 'fix-pytest-argument
7909 (lambda _
7910 ;; See: https://github.com/webrecorder/wsgiprox/issues/7.
7911 (substitute* "setup.py"
7912 (("--doctest-module")
7913 "--doctest-modules")))))))
7914 (propagated-inputs
7915 (list python-certauth python-gevent python-websocket-client))
7916 (native-inputs
7917 (list python-mock python-pytest-cov python-waitress))
7918 (home-page "https://github.com/webrecorder/wsgiprox")
7919 (synopsis "HTTP/S proxy with WebSockets over WSGI")
7920 (description "@code{wsgiprox} is a Python WSGI (Web Server Gateway
7921Interface) middle-ware for adding HTTP and HTTPS proxy support to a WSGI
7922application. The library accepts HTTP and HTTPS proxy connections, and routes
7923them to a designated prefix.")
7924 (license license:asl2.0)))
7925
7926(define-public python-warcio
7927 ;; The PyPI release is missing some test support files (see:
7928 ;; https://github.com/webrecorder/warcio/issues/132).
7929 (package
7930 (name "python-warcio")
7931 (version "1.7.5")
7932 (source
7933 (origin
7934 (method git-fetch)
7935 (uri (git-reference
7936 (url "https://github.com/webrecorder/warcio")
7937 (commit (string-append "v" version))))
7938 (file-name (git-file-name name version))
7939 (sha256
7940 (base32
7941 "0r3kijsm8wsbipi5pxsrqpg5nn4w8iaw5i8010b0ligmfxnxamlb"))))
7942 (build-system pyproject-build-system)
7943 (arguments
7944 (list
7945 #:test-flags ; These tests fail due to networking requirements.
7946 '(list "-k" (format #f "not ~a"
7947 (string-join
7948 '("test_post_chunked"
7949 "test_remote"
7950 "test_capture_http_proxy"
7951 "test_capture_https_proxy"
7952 "test_capture_https_proxy_same_session")
7953 " and not "))
7954 ; The following test requires the hookdns package.
7955 "--ignore=test/test_capture_http_proxy.py")))
7956 (native-inputs
7957 ;; These inputs are required for the test suite.
7958 (list python-httpbin
7959 python-pytest-cov
7960 python-requests
7961 python-setuptools
7962 python-wheel
7963 python-wsgiprox))
7964 (home-page "https://github.com/webrecorder/warcio")
7965 (synopsis "Streaming web archival archive (WARC) library")
7966 (description "warcio is a Python library to read and write the WARC format
7967commonly used in Web archives. It is designed for fast, low-level access to
7968web archival content, oriented around a stream of WARC records rather than
7969files.")
7970 (license license:asl2.0)))
7971
7972(define-public python-websockets
7973 (package
7974 (name "python-websockets")
7975 (version "13.1")
7976 (source
7977 (origin
7978 (method git-fetch)
7979 (uri (git-reference
7980 (url "https://github.com/aaugustin/websockets")
7981 (commit version)))
7982 (file-name (git-file-name name version))
7983 (sha256
7984 (base32
7985 "1dx3rf6fmg4ir9cfcn1fil446qz879cwrjq2rcz5zvl71xkw6hb3"))))
7986 (build-system pyproject-build-system)
7987 (arguments
7988 (list #:phases
7989 #~(modify-phases %standard-phases
7990 (add-before 'check 'extend-test-timeout
7991 (lambda _
7992 ;; Some architectures need an even longer timeout. Make it
7993 ;; long enough that it should never fail due to timeout.
7994 #$@(if (target-riscv64?)
7995 #~((setenv "WEBSOCKETS_TESTS_TIMEOUT_FACTOR" "100"))
7996 #~((setenv "WEBSOCKETS_TESTS_TIMEOUT_FACTOR" "10"))))))))
7997 (native-inputs
7998 (list python-setuptools
7999 python-wheel))
8000 (home-page "https://github.com/aaugustin/websockets")
8001 (synopsis
8002 "Python implementation of the WebSocket Protocol (RFC 6455 & 7692)")
8003 (description
8004 "@code{websockets} is a library for building WebSocket servers and clients
8005in Python with a focus on correctness and simplicity.
8006
8007Built on top of @code{asyncio}, Python's standard asynchronous I/O framework,
8008it provides an elegant coroutine-based API.")
8009 (license license:bsd-3)))
8010
8011(define-public python-selenium
8012 (package
8013 (name "python-selenium")
8014 (version "3.141.0")
8015 (source
8016 (origin
8017 (method url-fetch)
8018 (uri (pypi-uri "selenium" version))
8019 (sha256
8020 (base32
8021 "039hf9knvl4s3hp21bzwsp1g5ri9gxsh504dp48lc6nr1av35byy"))))
8022 (build-system python-build-system)
8023 (propagated-inputs
8024 (list python-urllib3))
8025 (home-page
8026 "https://github.com/SeleniumHQ/selenium/")
8027 (synopsis "Python bindings for Selenium")
8028 (description "Selenium enables web browser automation.
8029Selenium specifically provides infrastructure for the W3C WebDriver specification
8030— a platform and language-neutral coding interface compatible with all
8031major web browsers.")
8032 (license license:asl2.0)))
8033
8034(define-public python-rapidjson
8035 (package
8036 (name "python-rapidjson")
8037 (version "1.10")
8038 (source
8039 (origin
8040 (method url-fetch)
8041 (uri (pypi-uri "python-rapidjson" version))
8042 (sha256
8043 (base32
8044 "0h1m9m4a5rlf5hw6ak7z3qbgdhmqarzxw9d140mcf7mrxpswpzmc"))
8045 (modules '((guix build utils)))
8046 (snippet
8047 '(delete-file-recursively "rapidjson"))))
8048 (build-system pyproject-build-system)
8049 (arguments
8050 (list
8051 #:test-flags '(list "tests")
8052 #:phases
8053 #~(modify-phases %standard-phases
8054 ;; We cannot seem to use #:configure-flags with the
8055 ;; pyproject-build-system to override rj_include_dir.
8056 (add-after 'unpack 'override-rapidjson-sources
8057 (lambda _
8058 (substitute* "setup.py"
8059 (("^rj_include_dir =.*")
8060 (string-append "rj_include_dir = '"
8061 #$(this-package-native-input "rapidjson")
8062 "/include/rapidjson" "'"))
8063 (("if not os.path.isdir.*") "if False:")))))))
8064 (native-inputs
8065 (list rapidjson python-pytest python-pytz python-setuptools python-wheel))
8066 (home-page "https://github.com/python-rapidjson/python-rapidjson")
8067 (synopsis "Python wrapper around rapidjson")
8068 (description "This package provides a python wrapper around rapidjson.")
8069 (license license:expat)))
8070
8071(define-public python-venusian
8072 (package
8073 (name "python-venusian")
8074 (version "3.0.0")
8075 (source
8076 (origin
8077 (method url-fetch)
8078 (uri (pypi-uri "venusian" version))
8079 (sha256
8080 (base32 "0f7f67dkgxxcjfhpdd5frb9pszkf04lyzzpn5069q0xi89r2p17n"))))
8081 (build-system python-build-system)
8082 (native-inputs
8083 `(("python-pytest" ,python-pytest)
8084 ("python-runner" ,python-pytest-runner)
8085 ("python-pytest-cov" ,python-pytest-cov)))
8086 (arguments '(#:test-target "pytest"))
8087 (home-page "https://docs.pylonsproject.org/projects/venusian")
8088 (synopsis "Library for deferring decorator actions")
8089 (description
8090 "Venusian is a library which allows framework authors to defer decorator
8091actions. Instead of taking actions when a function (or class) decorator is
8092executed at import time, you can defer the action usually taken by the
8093decorator until a separate scan phase.")
8094 (license license:repoze)))
8095
8096(define-public python-zope-deprecation
8097 (package
8098 (name "python-zope-deprecation")
8099 (version "4.4.0")
8100 (source (origin
8101 (method url-fetch)
8102 (uri (pypi-uri "zope.deprecation" version))
8103 (sha256
8104 (base32
8105 "1pz2cv7gv9y1r3m0bdv7ks1alagmrn5msm5spwdzkb2by0w36i8d"))))
8106 (build-system python-build-system)
8107 (native-inputs `())
8108 (propagated-inputs `())
8109 (home-page "https://zopedeprecation.readthedocs.io/")
8110 (synopsis "Function for marking deprecations")
8111 (description "The @code{zope.deprecation} module provides a function for
8112marking modules, classes, functions, methods and properties as deprecated,
8113displaying warnings when usaged in application code.")
8114 (license license:zpl2.1)))
8115
8116(define-public python-translationstring
8117 (package
8118 (name "python-translationstring")
8119 (version "1.3")
8120 (source (origin
8121 (method url-fetch)
8122 (uri (pypi-uri "translationstring" version))
8123 (sha256
8124 (base32
8125 "0bdpcnd9pv0131dl08h4zbcwmgc45lyvq3pa224xwan5b3x4rr2f"))))
8126 (build-system python-build-system)
8127 (home-page "https://docs.pylonsproject.org/projects/translationstring")
8128 (synopsis "Internationalization tooling for the Pylons project")
8129 (description "This package provides a library used by various Pylons
8130project packages for internationalization (i18n) duties related to
8131translation.")
8132 (license license:repoze)))
8133
8134(define-public python-plaster
8135 (package
8136 (name "python-plaster")
8137 (version "1.0")
8138 (source (origin
8139 (method url-fetch)
8140 (uri (pypi-uri "plaster" version))
8141 (sha256
8142 (base32
8143 "1hy8k0nv2mxq94y5aysk6hjk9ryb4bsd13g83m60hcyzxz3wflc3"))))
8144 (build-system python-build-system)
8145 (native-inputs
8146 (list python-pytest))
8147 (home-page "https://docs.pylonsproject.org/projects/plaster/en/latest/")
8148 (synopsis "Configuration loader for multiple config file formats")
8149 (description
8150 "Plaster is a loader interface around multiple config file formats. It
8151exists to define a common API for applications to use when they wish to load
8152configuration. The library itself does not aim to handle anything except a
8153basic API that applications may use to find and load configuration settings.
8154Any specific constraints should be implemented in a pluggable loader which can
8155be registered via an entrypoint.")
8156 (license license:repoze)))
8157
8158(define-public python-plaster-pastedeploy
8159 (package
8160 (name "python-plaster-pastedeploy")
8161 (version "0.7")
8162 (source (origin
8163 (method url-fetch)
8164 (uri (pypi-uri "plaster_pastedeploy" version))
8165 (sha256
8166 (base32
8167 "1zg7gcsvc1kzay1ry5p699rg2qavfsxqwl17mqxzr0gzw6j9679r"))))
8168 (build-system python-build-system)
8169 (native-inputs
8170 (list python-pytest))
8171 (propagated-inputs
8172 (list python-plaster python-pastedeploy))
8173 (home-page "https://github.com/Pylons/plaster_pastedeploy")
8174 (synopsis "Plugin for python-plaster adding PasteDeploy syntax")
8175 (description
8176 "This plugin for @code{python-plaster} adds support for PasteDeploy
8177syntax, it provides a plaster @code{Loader} object that can parse ini files
8178according to the standard set by PasteDeploy")
8179 (license license:expat)))
8180
8181(define-public python-hupper
8182 (package
8183 (name "python-hupper")
8184 (version "1.10.3")
8185 (source (origin
8186 (method url-fetch)
8187 (uri (pypi-uri "hupper" version))
8188 (sha256
8189 (base32
8190 "1nbc648d110jx6ziji980cdmzsd14p8fqrcarsdvr1vm5jvm2vyd"))))
8191 (build-system python-build-system)
8192 (arguments '(#:test-target "pytest"))
8193 (native-inputs
8194 (list python-mock
8195 python-pytest
8196 python-pytest-cov
8197 python-pytest-runner
8198 python-setuptools
8199 python-watchdog
8200 python-wheel))
8201 (propagated-inputs
8202 (list python-pytz))
8203 (home-page "https://readthedocs.org/projects/hupper")
8204 (synopsis "Integrated process monitor tracking changes to imported Python files")
8205 (description
8206 "Hupper is an integrated process monitor that will track changes to any
8207imported Python files in sys.modules as well as custom paths. When files are
8208changed the process is restarted.")
8209 (license license:expat)))
8210
8211(define-public python-pyowm
8212 (package
8213 (name "python-pyowm")
8214 (version "3.3.0")
8215 (source
8216 (origin
8217 (method git-fetch)
8218 (uri (git-reference
8219 (url "https://github.com/csparpa/pyowm")
8220 (commit version)))
8221 (file-name (git-file-name name version))
8222 (sha256
8223 (base32
8224 "1ha4pp96y3jk33qnyir5851cnj4dc06q6wqn1b0w54l3fsds28vi"))))
8225 (build-system pyproject-build-system)
8226 (arguments (list #:test-flags #~(list "tests/unit")))
8227 (native-inputs (list python-pytest python-setuptools python-wheel))
8228 (propagated-inputs
8229 (list python-geojson-for-pyowm
8230 python-pysocks
8231 python-requests))
8232 (home-page "https://github.com/csparpa/pyowm")
8233 (synopsis "Python wrapper around OpenWeatherMap web APIs")
8234 (description
8235 "This package provides a Python wrapper around OpenWeatherMap web APIs.")
8236 (license license:expat)))
8237
8238(define-public python-pyramid
8239 (package
8240 (name "python-pyramid")
8241 (version "2.0.2")
8242 (source (origin
8243 (method url-fetch)
8244 (uri (pypi-uri "pyramid" version))
8245 (sha256
8246 (base32
8247 "1phqdz068hl3zda263qkjp5am8fmvmpcxp3nrhsna8g472kkh89p"))))
8248 (build-system pyproject-build-system)
8249 (propagated-inputs
8250 (list python-hupper
8251 python-plaster
8252 python-plaster-pastedeploy
8253 python-setuptools
8254 python-translationstring
8255 python-venusian
8256 python-webob
8257 python-zope-component
8258 python-zope-deprecation
8259 python-zope-interface))
8260 (native-inputs (list python-pytest python-webtest python-wheel))
8261 (home-page "https://trypyramid.com/")
8262 (synopsis "Python web-framework suitable for small and large sites")
8263 (description
8264 "Pyramid makes it easy to write web applications. From minimal
8265request/response web apps to larger, grown applications.")
8266 (license license:repoze)))
8267
8268(define-public python-random-user-agent
8269 (package
8270 (name "python-random-user-agent")
8271 (version "1.0.1")
8272 (source
8273 (origin
8274 (method url-fetch)
8275 (uri (pypi-uri "random_user_agent" version))
8276 (sha256
8277 (base32
8278 "04nhzdh2ki7ybhjrmghxci6hcm6i03vvin2q2ynj87fbr1pa534g"))))
8279 (build-system python-build-system)
8280 (home-page "https://github.com/Luqman-Ud-Din/random_user_agent")
8281 (synopsis "List of user agents")
8282 (description
8283 "This package provides a list of user agents, from a collection of more
8284than 326,000 known user-agents. Users can pick a random one, or select one
8285based on filters.")
8286 (license license:expat)))
8287
8288(define-public python-rangehttpserver
8289 (package
8290 (name "python-rangehttpserver")
8291 (version "1.4.0")
8292 (source
8293 (origin
8294 (method git-fetch)
8295 (uri (git-reference
8296 (url "https://github.com/danvk/RangeHTTPServer")
8297 (commit version)))
8298 (file-name (git-file-name name version))
8299 (sha256
8300 (base32 "1dx533fsbq1mbz3by7qkm5bh2c253nwvm8214pqbwbfq07kqkwf2"))))
8301 (build-system pyproject-build-system)
8302 (native-inputs (list python-coverage python-coveralls python-pytest
8303 python-setuptools python-wheel))
8304 (home-page "https://github.com/danvk/RangeHTTPServer")
8305 (synopsis "SimpleHTTPServer with support for range requests")
8306 (description
8307 "This tool provides a simple HTTP server with support for Range
8308requests.")
8309 (license license:asl2.0)))
8310
8311(define-public python-flask-restx
8312 (package
8313 (name "python-flask-restx")
8314 (version "1.3.0")
8315 (source
8316 ;; We fetch from the Git repo because there are no tests in the PyPI
8317 ;; archive.
8318 (origin
8319 (method git-fetch)
8320 (uri (git-reference
8321 (url "https://github.com/python-restx/flask-restx")
8322 (commit version)))
8323 (file-name (git-file-name name version))
8324 (sha256
8325 (base32 "1qmm3i1cdv0bvzsc1gn4ql2dsf1fbx85fk69vcmzpsdxzczmw508"))))
8326 (build-system python-build-system)
8327 (propagated-inputs
8328 (list python-aniso8601 python-flask python-jsonschema python-pytz))
8329 (native-inputs
8330 (list python-blinker
8331 python-faker
8332 python-pytest
8333 python-pytest-benchmark
8334 python-pytest-flask
8335 python-pytest-mock))
8336 (arguments
8337 `(#:phases
8338 (modify-phases %standard-phases
8339 (replace 'check
8340 (lambda _
8341 (invoke "pytest" "--benchmark-skip" "-k"
8342 ;; Those tests need internet access
8343 (string-join
8344 '("not test_check"
8345 "not test_valid_value_check"
8346 "not test_override_app_level"
8347 "not test_redirect"
8348 "not test_swagger")
8349 " and ")))))))
8350 (home-page "https://github.com/python-restx/flask-restx")
8351 (synopsis
8352 "Framework for fast, easy and documented API development with Flask")
8353 (description
8354 "Flask-RESTX is an extension for Flask that adds support for quickly building
8355REST APIs. Flask-RESTX encourages best practices with minimal setup. If you are familiar
8356 with Flask, Flask-RESTX should be easy to pick up. It provides a coherent collection of
8357decorators and tools to describe your API and expose its documentation properly using
8358Swagger.")
8359 (license license:bsd-3)))
8360
8361(define-public python-flask-restplus
8362 (deprecated-package "python-flask-restplus" python-flask-restx))
8363
8364(define-public python-flask-socketio
8365 (package
8366 (name "python-flask-socketio")
8367 (version "5.5.1")
8368 (source
8369 (origin
8370 (method url-fetch)
8371 (uri (pypi-uri "flask_socketio" version))
8372 (sha256
8373 (base32
8374 "1i0yqn39b4v4r2whppx47sg7iicvqzssd1clx7cclk07l52cjinr"))))
8375 (build-system pyproject-build-system)
8376 (propagated-inputs
8377 (list python-flask python-socketio))
8378 (native-inputs
8379 (list python-pytest python-redis python-setuptools python-wheel))
8380 (home-page "https://github.com/miguelgrinberg/Flask-SocketIO/")
8381 (synopsis "Socket.IO integration for Flask applications")
8382 (description "Socket.IO integration for Flask applications")
8383 (license license:expat)))
8384
8385(define-public python-manuel
8386 (package
8387 (name "python-manuel")
8388 (version "1.10.1")
8389 (source
8390 (origin
8391 (method url-fetch)
8392 (uri (pypi-uri "manuel" version))
8393 (sha256
8394 (base32
8395 "1bdzay7j70fly5fy6wbdi8fbrxjrrlxnxnw226rwry1c8a351rpy"))))
8396 (build-system python-build-system)
8397 (propagated-inputs
8398 (list python-six))
8399 (native-inputs
8400 (list python-zope-testing))
8401 (home-page "https://pypi.org/project/manuel/")
8402 (synopsis "Build tested documentation")
8403 (description
8404 "Manuel lets you mix and match traditional doctests with custom test syntax.")
8405 (license license:asl2.0)))
8406
8407(define-public python-pecan
8408 (package
8409 (name "python-pecan")
8410 (version "1.4.1")
8411 (source
8412 (origin
8413 (method git-fetch) ;no tests in pypi release
8414 (uri (git-reference
8415 (url "https://github.com/pecan/pecan")
8416 (commit version)))
8417 (file-name (git-file-name name version))
8418 (sha256
8419 (base32
8420 "10lz0cqafx3j24m52vv9ph0bxrzyx6wv2dgz7g9kfm60lhaskqkh"))))
8421 (build-system python-build-system)
8422 (arguments
8423 (list
8424 #:phases
8425 #~(modify-phases %standard-phases
8426 (add-after 'unpack 'relax-requirements
8427 (lambda _
8428 (substitute* "test-requirements.txt"
8429 ;; Drop extraneous virtualenv requirement.
8430 ((".*virtualenv.*") ""))))
8431 (replace 'check
8432 (lambda* (#:key tests? #:allow-other-keys)
8433 (when tests?
8434 (invoke "pytest" "-vv" "pecan")))))))
8435 (native-inputs
8436 (list gunicorn
8437 python-genshi
8438 python-jinja2
8439 python-pytest
8440 python-sqlalchemy
8441 uwsgi))
8442 (propagated-inputs
8443 (list python-logutils
8444 python-mako
8445 python-six
8446 python-webob
8447 python-webtest))
8448 (home-page "http://github.com/pecan/pecan")
8449 (synopsis "WSGI object-dispatching web framework")
8450 (description "This package provides a WSGI object-dispatching web
8451framework, designed to be lean and fast, with few dependencies.")
8452 (license license:bsd-3)))
8453
8454(define-public python-persistent
8455 (package
8456 (name "python-persistent")
8457 (version "4.6.4")
8458 (source
8459 (origin
8460 (method url-fetch)
8461 (uri (pypi-uri "persistent" version))
8462 (sha256
8463 (base32
8464 "0imm9ji03lhkpcfmhid7x5209ix8g2rlgki9ik1qxks4b8sm8gzq"))))
8465 (build-system python-build-system)
8466 (propagated-inputs
8467 (list python-cffi python-zope-interface))
8468 (native-inputs
8469 (list python-manuel python-zope-testrunner))
8470 (home-page "https://github.com/zopefoundation/persistent/")
8471 (synopsis "Translucent persistent objects")
8472 (description "This package contains a generic persistence implementation for
8473Python. It forms the core protocol for making objects interact
8474\"transparently\" with a database such as the ZODB.")
8475 (license license:zpl2.1)))
8476
8477(define-public python-btrees
8478 (package
8479 (name "python-btrees")
8480 (version "4.7.2")
8481 (source
8482 (origin
8483 (method url-fetch)
8484 (uri (pypi-uri "BTrees" version))
8485 (sha256
8486 (base32
8487 "0iiq0g9k1g6qgqq84q9h6639vlvzznk1rgdm0rfcnnqkbkmsbr3w"))))
8488 (build-system python-build-system)
8489 (propagated-inputs
8490 (list python-persistent python-zope-interface))
8491 (native-inputs
8492 (list python-persistent python-transaction python-zope-testrunner))
8493 (home-page "https://github.com/zopefoundation/BTrees")
8494 (synopsis "Scalable persistent object containers")
8495 (description
8496 "This package contains a set of persistent object containers built around a
8497modified BTree data structure. The trees are optimized for use inside ZODB's
8498\"optimistic concurrency\" paradigm, and include explicit resolution of
8499conflicts detected by that mechanism.")
8500 (license license:zpl2.1)))
8501
8502(define-public python-transaction
8503 (package
8504 (name "python-transaction")
8505 (version "3.0.0")
8506 (source
8507 (origin
8508 (method url-fetch)
8509 (uri (pypi-uri "transaction" version))
8510 (sha256
8511 (base32
8512 "0bdaks31bgfh78wnj3sij24bfysmqk25crsis6amz8kzrc0d82iv"))))
8513 (build-system python-build-system)
8514 (propagated-inputs
8515 (list python-zope-interface))
8516 (native-inputs
8517 (list python-coverage python-mock python-nose))
8518 (home-page "https://github.com/zopefoundation/transaction")
8519 (synopsis "Transaction management for Python")
8520 (description "This package contains a generic transaction implementation
8521for Python. It is mainly used by the ZODB.")
8522 (license license:zpl2.1)))
8523
8524(define-public python-robot-detection
8525 (package
8526 (name "python-robot-detection")
8527 (version "0.4")
8528 (source
8529 (origin
8530 (method url-fetch)
8531 (uri (pypi-uri "robot-detection" version))
8532 (sha256
8533 (base32
8534 "1xd2jm3yn31bnk1kqzggils2rxj26ylxsfz3ap7bhr3ilhnbg3rx"))))
8535 (build-system python-build-system)
8536 (arguments '(#:tests? #f)) ; Tests not shipped in pypi release.
8537 (propagated-inputs (list python-six))
8538 (home-page "https://github.com/rory/robot-detection")
8539 (synopsis "Detect web crawlers")
8540 (description
8541 "@code{robot_detection} is a python module to detect if a given HTTP User
8542Agent is a web crawler. It uses the list of registered robots from
8543@url{http://www.robotstxt.org}.")
8544 (license license:gpl3+)))
8545
8546(define-public python-robotframework-requests
8547 (package
8548 (name "python-robotframework-requests")
8549 (version "0.9.7")
8550 (source
8551 (origin
8552 (method git-fetch) ; no tests in PyPI release
8553 (uri (git-reference
8554 (url "https://github.com/MarketSquare/robotframework-requests")
8555 (commit (string-append "v" version))))
8556 (file-name (git-file-name name version))
8557 (sha256
8558 (base32 "077j8p5k41v53slyv8h32fcmqfi7m6z3r4gmyqqaawm5szfmy61m"))))
8559 (build-system pyproject-build-system)
8560 (native-inputs
8561 (list python-pytest
8562 python-setuptools
8563 python-wheel))
8564 (propagated-inputs
8565 (list python-requests
8566 python-robotframework))
8567 (home-page "https://github.com/MarketSquare/robotframework-requests")
8568 (synopsis "Robot Framework keyword library wrapper around requests")
8569 (description
8570 "@code{RequestsLibrary} is a @url{https://robotframework.org/, Robot
8571Framework} library aimed to provide HTTP API testing functionalities by
8572wrapping the @code{requests} Python library.")
8573 (license license:expat)))
8574
8575(define-public python-pysolr
8576 (package
8577 (name "python-pysolr")
8578 (version "3.10.0")
8579 (source
8580 (origin
8581 (method url-fetch)
8582 (uri (pypi-uri "pysolr" version))
8583 (sha256
8584 (base32 "02gl1sma5cnpd7srpri1g68lpsg3s5n3lr462p5ll8v9s4nllyqj"))))
8585 (build-system pyproject-build-system)
8586 (arguments
8587 '(#:tests? #f)) ; Tests require network access.
8588 (native-inputs
8589 (list python-setuptools
8590 python-setuptools-scm
8591 python-wheel))
8592 (propagated-inputs
8593 (list python-requests))
8594 (home-page "https://github.com/django-haystack/pysolr/")
8595 (synopsis "Lightweight python wrapper for Apache Solr")
8596 (description
8597 "This module provides an interface that queries the Apache Solr server
8598using a pure Python implementation.")
8599 (license license:bsd-3)))
8600
8601(define-public python-pyjsparser
8602 (package
8603 (name "python-pyjsparser")
8604 (version "2.7.1")
8605 (source
8606 (origin
8607 (method url-fetch)
8608 (uri (pypi-uri "pyjsparser" version))
8609 (sha256
8610 (base32 "0ycmf9fsvwliqmm1n6sfz7x71y7i2kbfgn39d8lsbiccfxmxlq5y"))))
8611 (build-system python-build-system)
8612 (home-page "https://github.com/PiotrDabkowski/pyjsparser")
8613 (synopsis "Fast JavaScript parser")
8614 (description "This package provides a fast JavaScript parser (based on
8615esprima.js)")
8616 (license license:expat)))
8617
8618(define-public python-js2py
8619 (package
8620 (name "python-js2py")
8621 (version "0.71")
8622 (source
8623 (origin
8624 (method url-fetch)
8625 (uri (pypi-uri "Js2Py" version))
8626 (sha256
8627 (base32 "1kkzkys6dfcbdv51vqxr9cmak350ab4mmykb8dysx60lvl4i06x4"))))
8628 (build-system python-build-system)
8629 (arguments '(#:tests? #false)) ; none included
8630 (propagated-inputs
8631 (list python-pyjsparser python-six python-tzlocal))
8632 (home-page "https://github.com/PiotrDabkowski/Js2Py")
8633 (synopsis "JavaScript to Python translator")
8634 (description
8635 "This package provides a JavaScript to Python translator and a JavaScript
8636interpreter written in pure Python.")
8637 (license license:expat)))
8638
8639(define-public python-http-ece
8640 (package
8641 (name "python-http-ece")
8642 (version "1.2.0")
8643 (source
8644 (origin
8645 (method git-fetch)
8646 (uri (git-reference
8647 (url "https://github.com/web-push-libs/encrypted-content-encoding")
8648 (commit (string-append "v" version))))
8649 (file-name (git-file-name name version))
8650 (sha256
8651 (base32
8652 "11v9cpmx4jc0nk25af96plzjz3mg1ysm1m001nx6jns06hil1gpy"))))
8653 (build-system python-build-system)
8654 (arguments
8655 `(#:phases
8656 (modify-phases %standard-phases
8657 (add-after 'unpack 'change-directory
8658 (lambda _ (chdir "python") #t)))))
8659 (propagated-inputs
8660 (list python-cryptography))
8661 (native-inputs
8662 (list python-coverage python-flake8 python-mock python-nose))
8663 (home-page "https://github.com/web-push-libs/encrypted-content-encoding")
8664 (synopsis "Encrypted Content Encoding for HTTP")
8665 (description
8666 "This package provides a simple implementation of Encrypted Content
8667Encoding for HTTP.")
8668 (license license:expat)))
8669
8670(define-public python-cloud-init
8671 (package
8672 (name "python-cloud-init")
8673 (version "24.2")
8674 (source
8675 (origin
8676 (method git-fetch)
8677 (uri (git-reference
8678 (url "https://github.com/canonical/cloud-init")
8679 (commit version)))
8680 (file-name (git-file-name name version))
8681 (sha256
8682 (base32 "18872z2y9wkh558y1bx5r0rksb4i584jbc8z4g8marwawhwxq506"))))
8683 (build-system pyproject-build-system)
8684 (arguments
8685 (list
8686 #:test-flags
8687 '(list
8688 ;; This requires usermod
8689 "--ignore=tests/unittests/distros/test_create_users.py"
8690 ;; This writes to /var
8691 "--ignore=tests/unittests/net/test_dhcp.py"
8692 "-k"
8693 (string-append
8694 ;; This test messes with PATH, so it cannot find mkdir
8695 "not test_path_env_gets_set_from_main"
8696 " and not test_apt_configure_sources_list_"
8697 ;; These all fail because /bin/sh doesn't exist. We cannot patch
8698 ;; this because the generated scripts must use /bin/sh as they are
8699 ;; supposed to be run on minimal systems.
8700 " and not test_handler_creates_and_runs_bootcmd_script_with_instance_id"
8701 " and not test_handler_runs_bootcmd_script_with_error"
8702 " and not test_subp_combined_stderr_stdout"
8703 " and not test_handle_part"))
8704 #:phases
8705 #~(modify-phases %standard-phases
8706 (add-after 'unpack 'patch-references
8707 (lambda _
8708 (substitute* "tests/unittests/cmd/test_clean.py"
8709 (("#!/bin/sh") (string-append "#!" (which "sh"))))))
8710 (add-after 'install 'move-files
8711 (lambda* (#:key inputs outputs #:allow-other-keys)
8712 (for-each (lambda (dir)
8713 (let ((source (string-append (site-packages inputs outputs) "/" dir))
8714 (target (string-append #$output "/" (basename dir))))
8715 (copy-recursively source target)
8716 (delete-file-recursively source)))
8717 (list "etc" "lib" "usr/lib" "usr/share")))))))
8718 (propagated-inputs
8719 (list python-configobj
8720 python-jinja2
8721 python-jsonpatch
8722 python-jsonschema
8723 python-netifaces
8724 python-oauthlib
8725 python-pyserial
8726 python-pyyaml
8727 python-responses))
8728 (native-inputs
8729 (list procps ;for ps when running tests
8730 python-pytest
8731 python-pytest-cov
8732 python-pytest-mock
8733 python-passlib
8734 python-setuptools
8735 python-wheel))
8736 (home-page "https://github.com/canonical/cloud-init")
8737 (synopsis "Cloud instance initialization tools")
8738 (description
8739 "Cloud-init is the multi-distribution method for cross-platform cloud
8740instance initialization. It is supported across all major public cloud
8741providers, provisioning systems for private cloud infrastructure, and
8742bare-metal installations.")
8743 ;; Either license can be chosen
8744 (license (list license:asl2.0 license:gpl3))))
8745
8746(define-public python-cloudscraper
8747 (package
8748 (name "python-cloudscraper")
8749 (version "1.2.60")
8750 (source
8751 (origin
8752 (method git-fetch)
8753 (uri (git-reference
8754 (url "https://github.com/VeNoMouS/cloudscraper")
8755 (commit version)))
8756 (file-name (git-file-name name version))
8757 (sha256
8758 (base32 "00cmxgwdm0x1j4a4ipwvpzih735hdzidljbijk1b3laj3dgvnvsm"))
8759 (modules '((guix build utils)))
8760 (snippet
8761 '(with-directory-excursion "cloudscraper"
8762 (for-each delete-file
8763 '("captcha/9kw.py"
8764 "captcha/anticaptcha.py"))
8765 (substitute* "__init__.py"
8766 ;; Perhaps it's a joke, but don't promote proprietary software.
8767 (("([Th]is feature is not available) in the .*'" _ prefix)
8768 (string-append prefix ".'")))))))
8769 (build-system python-build-system)
8770 (arguments
8771 `(#:phases
8772 (modify-phases %standard-phases
8773 ;; XXX: Dependencies, that have not yet been packaged
8774 ;; and cause an import error when included.
8775 (add-after 'unpack 'drop-unsupported-sources
8776 (lambda _
8777 (with-directory-excursion "cloudscraper"
8778 (for-each delete-file
8779 '("interpreters/v8.py")))))
8780 (add-after 'unpack 'fix-references
8781 (lambda _
8782 (substitute* "cloudscraper/interpreters/nodejs.py"
8783 (("'node'")
8784 (string-append "'" (which "node") "'")))))
8785 (replace 'check
8786 (lambda* (#:key tests? #:allow-other-keys)
8787 (when tests?
8788 (invoke "pytest" "-vv"
8789 "-k" "not test_getCookieString_challenge_js_challenge1_16_05_2020")))))))
8790 (inputs
8791 (list node-lts))
8792 (propagated-inputs
8793 (list python-js2py
8794 python-polling2
8795 python-requests
8796 python-requests-toolbelt
8797 python-responses
8798 python-pyparsing))
8799 (native-inputs
8800 (list python-pytest))
8801 (home-page "https://github.com/venomous/cloudscraper")
8802 (synopsis "Cloudflare anti-bot bypass")
8803 (description
8804 "This module acts as a webbrowser solving Cloudflare's Javascript
8805challenges.")
8806 (license license:expat)))
8807
8808(define-public python-imap-tools
8809 (package
8810 (name "python-imap-tools")
8811 (version "1.9.0")
8812 (source
8813 (origin
8814 (method git-fetch) ; no tests in PyPI release
8815 (uri (git-reference
8816 (url "https://github.com/ikvk/imap_tools")
8817 (commit (string-append "v" version))))
8818 (file-name (git-file-name name version))
8819 (sha256
8820 (base32 "0iawc6shxn8p0ysiqiahfic5rp1r16f7rfn11c8y2fl8falckynr"))))
8821 (arguments
8822 (list
8823 #:test-flags
8824 ;; Tests require a network connection
8825 #~(list "-k" (string-append "not test_action"
8826 " and not test_attributes"
8827 " and not test_connection"
8828 " and not test_folders"
8829 " and not test_idle"
8830 " and not test_live"))))
8831 (build-system pyproject-build-system)
8832 (native-inputs
8833 (list python-pytest python-setuptools python-wheel))
8834 (home-page "https://github.com/ikvk/imap_tools")
8835 (synopsis "Work with email and mailbox by IMAP")
8836 (description
8837 "This Python library provides tools to deal with email and mailboxes
8838over IMAP:
8839
8840@itemize
8841@item Parsed email message attributes
8842@item Query builder for searching emails
8843@item Work with emails in folders (copy, delete, flag, move, seen)
8844@item Work with mailbox folders (list, set, get, create, exists, rename, delete, status)
8845@end itemize")
8846 (license license:asl2.0)))
8847
8848(define-public python-giturlparse
8849 (package
8850 (name "python-giturlparse")
8851 (version "0.10.0")
8852 (source
8853 (origin
8854 (method url-fetch)
8855 (uri (pypi-uri "giturlparse" version))
8856 (sha256
8857 (base32 "0dxk7sqy8ibaqdl6jzxd0ac1p7shzp4p9f3lhkd7qw9h3llsp595"))))
8858 (build-system python-build-system)
8859 (home-page "https://github.com/nephila/giturlparse")
8860 (synopsis "Git URL parsing module")
8861 (description "This package provides a git URL parsing module which supports
8862parsing and rewriting of remote git URLs from various hosting providers.")
8863 (license license:asl2.0)))
8864
8865(define-public python-hstspreload
8866 (package
8867 (name "python-hstspreload")
8868 (version "2020.10.20")
8869 (source
8870 (origin
8871 (method url-fetch)
8872 (uri (pypi-uri "hstspreload" version))
8873 (sha256
8874 (base32
8875 "1qah80p2xlib1rhivvdj9v5y3girxrj7dwp1mnh8mwaj5wy32y8a"))))
8876 (build-system python-build-system)
8877 (home-page
8878 "https://github.com/sethmlarson/hstspreload")
8879 (synopsis
8880 "Chromium HSTS Preload list as a Python package")
8881 (description
8882 "@code{python-hstspreload} contains Chromium HSTS Preload list
8883as a Python package.")
8884 (license license:bsd-3)))
8885
8886(define-public python-sanic-routing
8887 (package
8888 (name "python-sanic-routing")
8889 (version "23.12.0")
8890 (source
8891 (origin
8892 (method url-fetch)
8893 (uri (pypi-uri "sanic-routing" version))
8894 (sha256
8895 (base32 "014bhkharcgyprdvlk7wjxhjp1pr0cva1nwj4f2qrr23qiidrjhx"))))
8896 (build-system pyproject-build-system)
8897 (arguments
8898 ;; PyPi sources does not contain tests, recursive dependency on
8899 ;; python-sanic.
8900 (list #:tests? #f))
8901 (native-inputs (list python-setuptools python-wheel))
8902 (home-page "https://github.com/sanic-org/sanic-routing/")
8903 (synopsis "Routing component for Sanic")
8904 (description "Internal package for @code{python-sanic}, which provides
8905the @code{BasicRouter}.")
8906 (license license:expat)))
8907
8908(define-public python-sanic-testing
8909 (package
8910 (name "python-sanic-testing")
8911 (version "23.12.0")
8912 (source
8913 (origin
8914 (method url-fetch)
8915 (uri (pypi-uri "sanic-testing" version))
8916 (sha256
8917 (base32 "0gqkzv90sbj9rw7yfly9c58lq9dq30g5hhcgjl3ihzjb66vm571b"))))
8918 (build-system pyproject-build-system)
8919 (arguments
8920 ;; PyPi sources does not contain tests, recursive dependency on
8921 ;; python-sanic.
8922 (list #:tests? #f))
8923 (propagated-inputs (list python-httpx python-sanic-bootstrap))
8924 (native-inputs (list python-setuptools python-wheel))
8925 (home-page "https://github.com/sanic-org/sanic-testing/")
8926 (synopsis "Test clients for Sanic")
8927 (description "Internal package for @code{python-sanic}, which is
8928meant to be the core testing utility and clients for testing Sanic
8929applications.")
8930 (license license:expat)))
8931
8932(define-public python-sanic
8933 (package
8934 (name "python-sanic")
8935 (version "23.12.1")
8936 (source
8937 (origin
8938 (method url-fetch)
8939 (uri (pypi-uri "sanic" version))
8940 (sha256
8941 (base32
8942 "115vnir4qijv89139g5h0i4l0n4w3bgh1ickgnk8xidxsa0wla15"))))
8943 (build-system pyproject-build-system)
8944 (arguments
8945 (list
8946 #:test-flags
8947 '(list "-k"
8948 (string-append
8949 ;; PyPi sources lack examples module.
8950 "not test_gunicorn_"
8951 ;; Does not expect brotli and reordered headers.
8952 " and not test_raw_headers"
8953 ;; These look like buggy testcases.
8954 " and not test_zero_downtime"
8955 " and not test_non_default_uvloop_config_raises_warning"
8956 " and not test_listeners_triggered"
8957 " and not test_keep_alive_connection_context"
8958 " and not test_keep_alive_client_timeout"
8959 ;; Unclear why they fail since core-updates merge.
8960 " and not test_missing_sni"
8961 " and not test_no_matching_cert"
8962 " and not test_wildcards"
8963 ;; These tests fail because subprotocols appear to be
8964 ;; parameterized as None
8965 " and not test_websocket_route_with_subprotocols"
8966 ;; AF_UNIX path too long
8967 " and not test_setup_and_teardown_unix"
8968 " and not test_configure_socket"
8969 ;; Freezes
8970 " and not test_server_run_with_repl"))
8971 #:phases
8972 #~(modify-phases %standard-phases
8973 (replace 'check
8974 (lambda* (#:key tests? test-flags #:allow-other-keys)
8975 (when tests?
8976 (apply invoke "pytest" "-vv" "./tests"
8977 test-flags)))))))
8978 (propagated-inputs
8979 (list python-aiofiles
8980 python-aioquic
8981 python-html5tagger
8982 python-httptools
8983 python-multidict
8984 python-sanic-routing
8985 python-tracerite
8986 python-typing-extensions
8987 python-ujson
8988 python-uvloop
8989 python-websockets))
8990 (native-inputs
8991 (list python-bandit
8992 python-beautifulsoup4
8993 python-chardet
8994 python-coverage
8995 python-cryptography
8996 python-docutils
8997 python-mypy
8998 python-pygments
8999 python-pytest
9000 python-pytest-benchmark
9001 python-pytest-sanic
9002 python-sanic-testing
9003 python-setuptools
9004 python-slotscheck
9005 python-towncrier
9006 python-tox
9007 python-types-ujson
9008 python-uvicorn
9009 python-wheel))
9010 (home-page "https://github.com/sanic-org/sanic/")
9011 (synopsis "Async Python web server/framework")
9012 (description
9013 "Sanic is a Python web server and web framework that's written to go
9014fast. It allows the usage of the @code{async/await} syntax added in Python
90153.5, which makes your code non-blocking and speedy.")
9016 (license license:expat)))
9017
9018(define-public python-sanic-bootstrap
9019 (package
9020 (inherit python-sanic)
9021 (name "python-sanic-bootstrap")
9022 (arguments (list #:tests? #f))
9023 (native-inputs (list python-setuptools python-wheel))))
9024
9025(define-public python-socketio
9026 (package
9027 (name "python-socketio")
9028 (version "5.12.1")
9029 (source
9030 (origin
9031 (method url-fetch)
9032 (uri (pypi-uri "python_socketio" version))
9033 (sha256
9034 (base32
9035 "175sd3fdld3s477i6b3v49yhf1alsbm1vaxzq44nqrqb8wgzz682"))))
9036 (build-system pyproject-build-system)
9037 (arguments
9038 (list #:test-flags
9039 '(list "--timeout=60"
9040 ;; These tests freeze.
9041 "--ignore-glob=tests/async/*")))
9042 (propagated-inputs
9043 (list python-bidict python-engineio python-msgpack))
9044 (native-inputs
9045 (list python-pytest
9046 python-pytest-asyncio
9047 python-pytest-timeout
9048 python-setuptools
9049 python-uvicorn
9050 python-wheel))
9051 (home-page "https://github.com/miguelgrinberg/python-socketio/")
9052 (synopsis "Python Socket.IO server")
9053 (description
9054 "This package provides a Python implementation of the @code{Socket.IO}
9055realtime client and server.")
9056 (license license:expat)))
9057
9058(define-public python-socks
9059 (package
9060 (name "python-socks")
9061 (version "2.6.1")
9062 (source
9063 (origin
9064 (method url-fetch)
9065 (uri (pypi-uri "python_socks" version))
9066 (sha256
9067 (base32
9068 "17pcyd1gg2a7k2i4lvnqi9095brhf7pbpkqfcjmhpzkgmfd94hwp"))))
9069 (build-system pyproject-build-system)
9070 (propagated-inputs
9071 (list python-trio))
9072 (native-inputs
9073 (list python-anyio
9074 python-async-timeout
9075 python-flask
9076 python-pytest
9077 python-pytest-asyncio
9078 python-setuptools
9079 python-tiny-proxy
9080 python-trustme
9081 python-wheel
9082 python-yarl))
9083 (home-page "https://github.com/romis2012/python-socks")
9084 (synopsis
9085 "Core proxy (SOCKS4, SOCKS5, HTTP tunneling) functionality for Python")
9086 (description
9087 "Socks is a library providing core proxy (SOCKS4, SOCKS5, HTTP tunneling)
9088 functionality.")
9089 (license license:asl2.0)))
9090
9091(define-public python-socksio
9092 (package
9093 (name "python-socksio")
9094 (version "1.0.0")
9095 (source
9096 (origin
9097 (method url-fetch)
9098 (uri (pypi-uri "socksio" version))
9099 (sha256
9100 (base32 "1b64j45w35jzhjhnq44bnyad9ydh1iyyd7a6j2c8phxmllyyp2zq"))))
9101 (build-system python-build-system)
9102 (home-page "https://github.com/sethmlarson/socksio")
9103 (synopsis "Sans-I/O implementation of SOCKS4, SOCKS4A, and SOCKS5")
9104 (description "The @code{socksio} Python module is a client-side sans-I/O
9105SOCKS proxy implementation. It supports SOCKS4, SOCKS4A, and SOCKS5.
9106@code{socksio} is a sans-I/O library similar to @code{h11} or @code{h2}; this
9107means the library itself does not handle the actual sending of the bytes
9108through the network, it only deals with the implementation details of the
9109SOCKS protocols. It can be paired with any I/O library.")
9110 (license license:expat)))
9111
9112(define-public python-simple-websocket
9113 (package
9114 (name "python-simple-websocket")
9115 (version "1.1.0")
9116 (source
9117 (origin
9118 (method url-fetch)
9119 (uri (pypi-uri "simple_websocket" version))
9120 (sha256
9121 (base32 "1r1all55d5dimiw3qwdhj53cxj9yjgnskcysmcscarx0g9726fbr"))))
9122 (build-system pyproject-build-system)
9123 (arguments
9124 ;; Requires Internet access to resolve example.com
9125 (list #:test-flags '(list "--ignore=tests/test_client.py")))
9126 (propagated-inputs (list python-wsproto))
9127 (native-inputs (list python-flake8
9128 python-pytest
9129 python-pytest-cov
9130 python-setuptools
9131 python-tox
9132 python-wheel))
9133 (home-page "https://github.com/miguelgrinberg/simple-websocket")
9134 (synopsis "Simple WebSocket server and client for Python")
9135 (description "This package provides a simple @code{WebSocket} server and
9136client for Python.")
9137 (license license:expat)))
9138
9139(define-public python-siosocks
9140 (package
9141 (name "python-siosocks")
9142 (version "0.3.0")
9143 (source (origin
9144 (method url-fetch)
9145 (uri (pypi-uri "siosocks" version))
9146 (sha256
9147 (base32
9148 "0qqxy8wl5mrmlkblzjq9nsg0cbm5jwgj409mhnhq6gd1ypvbndms"))))
9149 (build-system python-build-system)
9150 (arguments
9151 (list #:phases #~(modify-phases %standard-phases
9152 (replace 'check
9153 (lambda* (#:key tests? #:allow-other-keys)
9154 (when tests?
9155 (invoke "pytest" "-vvv")))))))
9156 (native-inputs (list python-pytest python-pytest-asyncio python-pytest-cov
9157 python-pytest-trio))
9158 (propagated-inputs (list python-trio))
9159 (home-page "https://github.com/pohmelie/siosocks")
9160 (synopsis "SOCKSv4 & SOCKSv5 TCP proxy protocol implementation in Python")
9161 (description
9162 "This package provides a Python module and framework for sans-io socks proxy
9163client/server with couple io backends.
9164
9165Features:
9166@itemize
9167@item Only TCP connect (no BIND, no UDP)
9168@item Both client and server
9169@item SOCKS versions: 4, 4a, 5
9170@item SOCKSv5 auth: no auth, username/password
9171@item Couple io backends: @code{asyncio}, @code{trio}, @code{socketserver}
9172@item One-shot socks server (@code{python -m siosocks})
9173@end itemize")
9174 (license license:expat)))
9175
9176(define-public python-tiny-proxy
9177 (package
9178 (name "python-tiny-proxy")
9179 (version "0.2.1")
9180 (source
9181 (origin
9182 (method url-fetch)
9183 (uri (pypi-uri "tiny_proxy" version))
9184 (sha256
9185 (base32 "05nq62fn3p7s1a6dkdvnrzmk39d9ddrzb3pqbbli025qs3m9j1bq"))))
9186 (build-system pyproject-build-system)
9187 ;; There are only a handful of tests and they require the as yet
9188 ;; unpackaged httpx_socks.
9189 (arguments (list #:tests? #false))
9190 (propagated-inputs (list python-anyio))
9191 (native-inputs
9192 (list python-httpx
9193 python-pytest
9194 python-setuptools
9195 python-wheel))
9196 (home-page "https://github.com/romis2012/tiny-proxy")
9197 (synopsis "Simple proxy server (SOCKS4(a), SOCKS5(h), HTTP tunnel)")
9198 (description "This package provides a simple proxy server (SOCKS4(a),
9199SOCKS5(h), HTTP tunnel).")
9200 (license license:asl2.0)))
9201
9202(define-public python-azure-nspkg
9203 (package
9204 (name "python-azure-nspkg")
9205 (version "3.0.2")
9206 (source
9207 (origin
9208 (method url-fetch)
9209 (uri (pypi-uri "azure-nspkg" version ".zip"))
9210 (sha256
9211 (base32
9212 "1l4xwdh0fcnvrv0mzig4g2kgqkfbsy64zjm1ggc6grk3mykcxlz7"))))
9213 (build-system python-build-system)
9214 (native-inputs (list unzip))
9215 (home-page "https://github.com/Azure/azure-sdk-for-python")
9216 (synopsis "Azure namespace internals")
9217 (description
9218 "This package is an internal Azure namespace package.")
9219 (license license:expat)))
9220
9221(define-public python-azure-storage-nspkg
9222 (package
9223 (name "python-azure-storage-nspkg")
9224 (version "3.1.0")
9225 (source
9226 (origin
9227 (method url-fetch)
9228 (uri (pypi-uri "azure-storage-nspkg" version))
9229 (sha256
9230 (base32
9231 "049qcmgshz7dj9yaqma0fwcgbxwddgwyfcw4gmv45xfmaa3bwfvg"))))
9232 (build-system python-build-system)
9233 (propagated-inputs
9234 (list python-azure-nspkg))
9235 (home-page "https://github.com/Azure/azure-storage-python")
9236 (synopsis "Microsoft Azure Storage Namespace package")
9237 (description
9238 "This project provides a client library in Python that makes it easy to
9239communicate with Microsoft Azure Storage services.")
9240 (license license:expat)))
9241
9242(define-public python-azure-common
9243 (package
9244 (name "python-azure-common")
9245 (version "1.1.28")
9246 (source
9247 (origin
9248 (method url-fetch)
9249 (uri (pypi-uri "azure-common" version ".zip"))
9250 (sha256
9251 (base32 "18q4cy1xl2zly3rk7a1sc14w932x59r8c9j4d8dnlsz32hrcvh2a"))))
9252 (build-system python-build-system)
9253 (propagated-inputs (list python-azure-nspkg))
9254 (native-inputs (list unzip))
9255 (home-page "https://github.com/Azure/azure-sdk-for-python")
9256 (synopsis "Microsoft Azure Client library for Python")
9257 (description "This package provides the Microsoft Azure Client library for
9258Python.")
9259 (license license:expat)))
9260
9261(define-public python-azure-core
9262 (package
9263 (name "python-azure-core")
9264 (version "1.32.0")
9265 (source
9266 (origin
9267 (method url-fetch)
9268 (uri (pypi-uri "azure_core" version))
9269 (sha256
9270 (base32 "1r9hqyqr5fxiiai0irr0n98gwgzj5f8y46vc1yci9bidddfw7cr2"))))
9271 (build-system pyproject-build-system)
9272 (arguments
9273 (list
9274 #:test-flags
9275 `(list ;; This fails because devtools_testutils doesn't exist.
9276 "--ignore=tests/test_connection_string_parsing.py"
9277 ;; These all need network access.
9278 "--ignore=samples"
9279 "--ignore=tests/async_tests/test_streaming_async.py"
9280 "--ignore=tests/test_streaming.py"
9281 "-m" "not asyncio and not live_test_only"
9282 "-k" ,(string-append
9283 "not test_decompress_plain_no_header"
9284 " and not test_compress_plain_no_header"
9285 " and not test_decompress_compressed_no_header"
9286 " and not test_requests_socket_timeout"))
9287 #:phases
9288 #~(modify-phases %standard-phases
9289 (add-before 'check 'add-test-pythonpath
9290 (lambda* (#:key tests? #:allow-other-keys)
9291 (when tests?
9292 (setenv "PYTHONPATH"
9293 (string-append
9294 (getcwd) "/tests/testserver_tests/coretestserver:"
9295 (getenv "GUIX_PYTHONPATH")))))))))
9296 (propagated-inputs
9297 (list python-aiohttp
9298 python-requests
9299 python-six
9300 python-typing-extensions))
9301 (native-inputs
9302 (list python-flask
9303 python-pytest
9304 python-pytest-aiohttp
9305 python-pytest-asyncio
9306 python-pytest-trio
9307 python-setuptools
9308 python-wheel))
9309 (home-page "https://github.com/Azure/azure-sdk-for-python")
9310 (synopsis "Microsoft Azure Core library for Python")
9311 (description "This package provides the Microsoft Azure Core library for
9312Python.")
9313 (license license:expat)))
9314
9315(define-public python-azure-storage-blob
9316 (package
9317 (name "python-azure-storage-blob")
9318 (version "12.22.0")
9319 (source
9320 (origin
9321 (method url-fetch)
9322 (uri (pypi-uri "azure-storage-blob" version))
9323 (sha256
9324 (base32 "0vkkngiybx5372j9vc9p4wn6hakpv99l0ipsf4kw7ccazss4p05k"))))
9325 (build-system pyproject-build-system)
9326 ;; To activate tests python-pytest is required and missing
9327 ;; <https://raw.githubusercontent.com/Azure/azure-sdk-for-python/refs/
9328 ;; heads/main/tools/azure-sdk-tools/devtools_testutils/README.md>
9329 (native-inputs
9330 (list python-setuptools
9331 python-wheel))
9332 (propagated-inputs
9333 (list python-azure-core
9334 python-cryptography
9335 python-isodate
9336 python-typing-extensions))
9337 (home-page "https://github.com/Azure/azure-sdk-for-python/")
9338 (synopsis "Microsoft Azure Blob Storage client library for Python")
9339 (description "This package provides the Microsoft Azure Blob Storage
9340Client Library for Python.")
9341 (license license:expat)))
9342
9343(define-public python-google-crc32c
9344 (package
9345 (name "python-google-crc32c")
9346 (version "1.3.0")
9347 (source
9348 (origin
9349 (method url-fetch)
9350 (uri (pypi-uri "google-crc32c" version))
9351 (sha256
9352 (base32 "1ps4qaccij6cixs91772y9f9r1n702yfzy4qqmds6x5h7qkycv97"))))
9353 (build-system python-build-system)
9354 (native-inputs (list python-pytest))
9355 (home-page "https://github.com/googleapis/python-crc32c")
9356 (synopsis "Python wrapper of Google CRC32C")
9357 (description
9358 "This package provides a Python wrapper of the C library implementation
9359of the CRC32C hashing algorithm.")
9360 (license license:asl2.0)))
9361
9362(define-public python-google-auth
9363 (package
9364 (name "python-google-auth")
9365 (version "2.37.0")
9366 (source
9367 (origin
9368 (method url-fetch)
9369 (uri (pypi-uri "google_auth" version))
9370 (sha256
9371 (base32 "002xvp1139lrw2c2s2yllg5499ghfxzg9lv35i4q770zpwx64m00"))))
9372 (build-system pyproject-build-system)
9373 (arguments
9374 (list
9375 #:test-flags
9376 ;; This one test uses crypto.sign with an outdated calling convention.
9377 '(list "--ignore=tests/transport/test__mtls_helper.py")))
9378 (propagated-inputs
9379 (list python-cachetools
9380 python-pyasn1-modules
9381 python-pyjwt
9382 python-rsa))
9383 (native-inputs
9384 (list nss-certs-for-test
9385 python-aioresponses
9386 python-cryptography
9387 python-flask
9388 python-freezegun
9389 python-mock
9390 python-pyopenssl
9391 python-pytest
9392 python-pytest-asyncio
9393 python-pytest-localserver
9394 python-pyu2f
9395 python-requests
9396 python-responses
9397 python-setuptools
9398 python-wheel))
9399 (home-page "https://github.com/googleapis/google-auth-library-python")
9400 (synopsis "Google Authentication Library")
9401 (description "This library simplifies using Google's various
9402server-to-server authentication mechanisms to access Google APIs.")
9403 (license license:asl2.0)))
9404
9405(define-public python-google-resumable-media
9406 (package
9407 (name "python-google-resumable-media")
9408 (version "2.3.2")
9409 (source
9410 (origin
9411 (method url-fetch)
9412 (uri (pypi-uri "google-resumable-media" version))
9413 (sha256
9414 (base32 "04qm6rd4mpbbym8ci5xrb6fymc3mmm8x2z9f43q5iwbr3s5lx4h6"))))
9415 (build-system python-build-system)
9416 (arguments
9417 `(#:phases
9418 (modify-phases %standard-phases
9419 (replace 'check
9420 (lambda* (#:key tests? #:allow-other-keys)
9421 (when tests?
9422 ;; The system tests fail to find test_utils.retry.
9423 (delete-file-recursively "tests/system/")
9424 (invoke "pytest")))))))
9425 (propagated-inputs (list python-google-crc32c))
9426 (native-inputs
9427 (list python-google-auth
9428 python-mock
9429 python-pytest
9430 python-requests
9431 python-test-utils))
9432 (home-page "https://github.com/googleapis/google-resumable-media-python")
9433 (synopsis "Utilities for Google Media Downloads and Resumable Uploads")
9434 (description "This package provides utilities for Google Media Downloads
9435and Resumable Uploads.")
9436 (license license:asl2.0)))
9437
9438(define-public python-googleapis-common-protos
9439 (package
9440 (name "python-googleapis-common-protos")
9441 (version "1.56.4")
9442 (source
9443 (origin
9444 (method url-fetch)
9445 (uri (pypi-uri "googleapis-common-protos" version))
9446 (sha256
9447 (base32 "05s4dszqd5pjwjh4bdic40v1v447k0a3dynsrgypqf3rfb276n62"))))
9448 (build-system python-build-system)
9449 (arguments
9450 `(#:phases
9451 (modify-phases %standard-phases
9452 (replace 'check
9453 (lambda* (#:key tests? #:allow-other-keys)
9454 (when tests?
9455 (invoke "pytest")))))))
9456 (propagated-inputs (list python-protobuf))
9457 (native-inputs
9458 (list python-pytest))
9459 (home-page "https://github.com/googleapis/python-api-common-protos")
9460 (synopsis "Common protobufs used in Google APIs")
9461 (description "This package contains Python classes generated from the
9462common protos in the @code{googleapis/api-common-protos} repository.")
9463 (license license:asl2.0)))
9464
9465(define-public python-google-api-core
9466 (package
9467 (name "python-google-api-core")
9468 (version "2.7.3")
9469 (source
9470 (origin
9471 (method url-fetch)
9472 (uri (pypi-uri "google-api-core" version))
9473 (sha256
9474 (base32 "0ydwvg9gzp75cd11s62db5w3jhj643yrw095rv95psfb0h3pz58p"))))
9475 (build-system python-build-system)
9476 (arguments
9477 `(#:phases
9478 (modify-phases %standard-phases
9479 (replace 'check
9480 (lambda* (#:key tests? #:allow-other-keys)
9481 (when tests?
9482 ;; These don't work because it doesn't find AsyncMock even when
9483 ;; we add it to the inputs.
9484 (for-each delete-file
9485 '("tests/asyncio/test_page_iterator_async.py"
9486 "tests/asyncio/test_retry_async.py"))
9487 (invoke "pytest")))))))
9488 (propagated-inputs
9489 (list python-google-auth
9490 python-googleapis-common-protos
9491 python-protobuf
9492 python-proto-plus
9493 python-requests))
9494 (native-inputs
9495 (list python-mock
9496 python-pytest
9497 python-pytest-asyncio))
9498 (home-page "https://github.com/googleapis/python-api-core")
9499 (synopsis "Google API client core library")
9500 (description "This library defines common helpers used by all Google API
9501clients.")
9502 (license license:asl2.0)))
9503
9504(define-public python-google-cloud-core
9505 (package
9506 (name "python-google-cloud-core")
9507 (version "2.3.0")
9508 (source
9509 (origin
9510 (method url-fetch)
9511 (uri (pypi-uri "google-cloud-core" version))
9512 (sha256
9513 (base32 "0sa66kidgr32dfq9ngha9l362xnqvnqqmssn5my1gd3lc6g65apx"))))
9514 (build-system python-build-system)
9515 (arguments
9516 `(#:phases
9517 (modify-phases %standard-phases
9518 (replace 'check
9519 (lambda* (#:key tests? #:allow-other-keys)
9520 (when tests?
9521 (invoke "pytest")))))))
9522 (propagated-inputs (list python-google-api-core python-google-auth))
9523 (native-inputs
9524 (list python-grpcio python-pytest))
9525 (home-page "https://github.com/googleapis/python-cloud-core")
9526 (synopsis "Google Cloud API client core library")
9527 (description "This library defines common helpers (e.g. base @code{Client}
9528classes) used by all of the @code{google-cloud-*} packages.")
9529 (license license:asl2.0)))
9530
9531(define-public python-google-cloud-storage
9532 (package
9533 (name "python-google-cloud-storage")
9534 (version "2.3.0")
9535 (source
9536 (origin
9537 (method url-fetch)
9538 (uri (pypi-uri "google-cloud-storage" version))
9539 (sha256
9540 (base32 "0nwg9ic29s70kpvi71gmjv1y4w5a3vc9gj6d16f8w8hpbvgb1jzl"))))
9541 (build-system python-build-system)
9542 (arguments
9543 `(#:phases
9544 (modify-phases %standard-phases
9545 (replace 'check
9546 (lambda* (#:key tests? #:allow-other-keys)
9547 (when tests?
9548 (for-each delete-file-recursively
9549 (list
9550 ;; The system tests fail to find test_utils.retry.
9551 "tests/system/"
9552 ;; Needs docker.
9553 "tests/conformance/"))
9554 (invoke "pytest")))))))
9555 (native-inputs
9556 (list python-mock python-pytest python-test-utils))
9557 (propagated-inputs
9558 (list python-google-api-core
9559 python-google-auth
9560 python-google-cloud-core
9561 python-google-resumable-media
9562 python-protobuf
9563 python-requests))
9564 (home-page "https://github.com/googleapis/python-storage")
9565 (synopsis "Google Cloud Storage API client library")
9566 (description "Google Cloud Storage allows you to store data on Google
9567infrastructure, and it can be used to distribute large data objects to users
9568via direct download. This package provides a Google Cloud Storage API client
9569library for Python.")
9570 (license license:asl2.0)))
9571
9572(define-public python-smart-open
9573 (package
9574 (name "python-smart-open")
9575 (version "6.0.0")
9576 (source
9577 (origin
9578 (method url-fetch)
9579 (uri (pypi-uri "smart_open" version))
9580 (sha256
9581 (base32 "1c12ilanx9hgpcc5chjkaqnx1hx14iazyindy7syvjhbdywhc0fn"))))
9582 (build-system python-build-system)
9583 (arguments
9584 `(#:tests? #false ;none included
9585 #:phases
9586 (modify-phases %standard-phases
9587 (replace 'check
9588 (lambda* (#:key tests? #:allow-other-keys)
9589 (when tests?
9590 (invoke "pytest")))))))
9591 (propagated-inputs
9592 (list python-azure-common
9593 python-azure-core
9594 python-azure-storage-blob
9595 python-boto3
9596 python-google-cloud-storage
9597 python-requests))
9598 (native-inputs
9599 (list python-flask
9600 python-flask-cors
9601 python-graphql-core
9602 python-moto
9603 python-paramiko
9604 python-pathlib2
9605 python-pytest
9606 python-pytest-rerunfailures
9607 python-responses))
9608 (home-page "https://github.com/piskvorky/smart_open")
9609 (synopsis "Utilities for streaming large files")
9610 (description
9611 "This package provides utilities for streaming large files (S3, HDFS,
9612GCS, Azure Blob Storage, gzip, bz2, etc.)")
9613 (license license:expat)))
9614
9615(define-public python-w3lib
9616 (package
9617 (name "python-w3lib")
9618 (version "2.1.2")
9619 (source
9620 (origin
9621 (method url-fetch)
9622 (uri (pypi-uri "w3lib" version))
9623 (sha256
9624 (base32
9625 "1cd4b3w5g3pfccsg79kjj27fwi216ip927rjq7isp8pfjzlp8nzd"))))
9626 (build-system pyproject-build-system)
9627 (native-inputs
9628 (list python-pytest python-setuptools python-wheel))
9629 (home-page "https://github.com/scrapy/w3lib")
9630 (synopsis "Python library of web-related functions")
9631 (description
9632 "This is a Python library of web-related functions, such as: remove
9633comments, or tags from HTML snippets, extract base url from HTML snippets,
9634translate entities on HTML strings, among other things.")
9635 (license license:bsd-3)))
9636
9637(define-public python-webcolors
9638 (package
9639 (name "python-webcolors")
9640 (version "24.11.1")
9641 (source
9642 (origin
9643 (method url-fetch)
9644 (uri (pypi-uri "webcolors" version))
9645 (sha256
9646 (base32 "1xl0vn4xa03vjwx6fj19q9kgb94g65gvdf3p0ivsy0i2ydldgczc"))))
9647 (build-system pyproject-build-system)
9648 (arguments
9649 (list
9650 #:phases
9651 '(modify-phases %standard-phases
9652 (add-after 'unpack 'patch-pyproject
9653 (lambda _
9654 ;; XXX Our version of python-pdm-backend does not recognize
9655 ;; "dependency-groups", but is fine with the bogus
9656 ;; "tool.whatever".
9657 (substitute* "pyproject.toml"
9658 (("\\[dependency-groups\\]") "[tool.whatever]")))))))
9659 (native-inputs
9660 (list python-pdm-backend python-pytest))
9661 (home-page "https://github.com/ubernostrum/webcolors")
9662 (synopsis "HTML/CSS color definitions library")
9663 (description "@code{python-webcolors} is a module for working with
9664HTML/CSS color definitions. Normalizing and converting between the following
9665formats is supported.
9666@itemize
9667@item Specification-defined color names
9668@item Six-digit hexadecimal
9669@item Three-digit hexadecimal
9670@item Integer rgb() triplet
9671@item Percentage rgb() triplet
9672@end itemize
9673Only the RGB colorspace is supported. Conversion to/from the HSL colorspace
9674can be handled by the @code{colorsys} module in the Python standard library.")
9675 (license license:bsd-3)))
9676
9677(define-public python-webcolors-24
9678 (package
9679 (inherit python-webcolors)
9680 (name "python-webcolors")
9681 (version "24.11.1")
9682 (source
9683 (origin
9684 (method url-fetch)
9685 (uri (pypi-uri "webcolors" version))
9686 (sha256
9687 (base32 "1xl0vn4xa03vjwx6fj19q9kgb94g65gvdf3p0ivsy0i2ydldgczc"))))
9688 (build-system pyproject-build-system)
9689 (arguments
9690 `(#:phases
9691 (modify-phases %standard-phases
9692 (add-after 'unpack 'fix-build-error
9693 (lambda _
9694 ;; pdm wants optional-dependencies instead of dependency-groups.
9695 ;; See <https://pdm-project.org/en/latest/usage/dependency/>.
9696 (substitute* "pyproject.toml"
9697 (("\\[dependency-groups\\]")
9698 "[project.optional-dependencies]"))))
9699 (replace 'check
9700 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
9701 (when tests?
9702 (add-installed-pythonpath inputs outputs)
9703 ;; Our python-nox version is incompatible,
9704 ;; so use pytest instead.
9705 (invoke "pytest")))))))
9706 (native-inputs (list python-pdm-backend python-pytest))
9707 (license license:bsd-3)))
9708
9709(define-public python-woob
9710 (package
9711 (name "python-woob")
9712 (version "3.0")
9713 (source
9714 (origin
9715 (method url-fetch)
9716 (uri (pypi-uri "woob" version))
9717 (sha256
9718 (base32 "09hpxy5zhn2b8li0xjf3zd7s46lawb0315p5mdcsci3bj3s4v1j7"))))
9719 (build-system python-build-system)
9720 ;; A small number of tests for optional applications fails due to missing
9721 ;; inputs.
9722 (arguments `(#:tests? #f))
9723 (propagated-inputs
9724 (list python-babel
9725 python-colorama
9726 python-cssselect
9727 python-dateutil
9728 python-feedparser
9729 python-html2text
9730 python-lxml
9731 python-pillow
9732 python-prettytable
9733 python-pyqt
9734 python-pyyaml
9735 python-requests
9736 python-six
9737 python-unidecode))
9738 (native-inputs
9739 (list python-coverage python-flake8 python-nose python-selenium
9740 python-xunitparser))
9741 (home-page "https://woob.tech/")
9742 (synopsis "Woob, Web Outside Of Browsers")
9743 (description "Woob is a collection of applications able to interact with
9744websites, without requiring the user to open them in a browser. It also
9745provides well-defined APIs to talk to websites lacking one.")
9746 (license license:lgpl3+)))
9747
9748(define-public python-flask-combo-jsonapi
9749 (package
9750 (name "python-flask-combo-jsonapi")
9751 (version "1.1.0")
9752 (source
9753 (origin
9754 (method git-fetch)
9755 (uri (git-reference
9756 (url "https://github.com/AdCombo/flask-combo-jsonapi")
9757 (commit version)))
9758 (file-name (git-file-name name version))
9759 (sha256
9760 (base32 "07fhcjiyif80z1vyh35za29sqx1mmqh568jrbrrs675j4a797sj1"))))
9761 (build-system python-build-system)
9762 (arguments
9763 '(#:phases
9764 (modify-phases %standard-phases
9765 (add-after 'unpack 'loosen-requirements
9766 (lambda _
9767 ;; Don't pin specific versions of dependencies.
9768 (substitute* "requirements.txt"
9769 (("^sqlalchemy[=<>].*") "sqlalchemy\n")
9770 (("^marshmallow[=<>].*") "marshmallow\n")
9771 (("^Flask[=<>].*") "Flask\n"))))
9772 (replace 'check
9773 (lambda _
9774 (invoke "pytest" "-vv" "-k"
9775 ;; The following test fails for unknown reasons (see:
9776 ;; https://github.com/AdCombo/flask-combo-jsonapi/issues/66).
9777 "not test_get_list_with_simple_filter_\
9778relationship_custom_qs_api"))))))
9779 (propagated-inputs
9780 (list python-flask
9781 python-marshmallow
9782 python-marshmallow-jsonapi
9783 python-simplejson
9784 python-sqlalchemy
9785 python-apispec
9786 python-simplejson
9787 python-six))
9788 (native-inputs
9789 (list python-coverage
9790 python-coveralls
9791 python-pytest
9792 python-pytest-runner))
9793 (home-page "https://github.com/AdCombo/flask-combo-jsonapi")
9794 (synopsis "Flask extension to quickly create JSON:API 1.0 REST Web APIs")
9795 (description
9796 "Flask-COMBO-JSONAPI is a Python Flask extension for building REST Web APIs
9797compliant with the @uref{https://jsonapi.org, JSON:API 1.0} specification.
9798
9799It tries to combine the power of Flask-Restless with the flexibility of
9800Flask-RESTful to quickly build APIs that fit the complexity of existing
9801real-life projects with legacy data and diverse storage providers.")
9802 (license license:expat)))
9803
9804(define-public python-mwparserfromhell
9805 (package
9806 (name "python-mwparserfromhell")
9807 (version "0.6.3")
9808 (source
9809 (origin
9810 (method url-fetch)
9811 (uri (pypi-uri "mwparserfromhell" version))
9812 (sha256
9813 (base32 "0zh9zaqbac18s7mivqk8am9xw97lfkgcj9hhxj0d4208pkqpkmqs"))))
9814 (build-system python-build-system)
9815 (native-inputs
9816 (list python-pytest python-pytest-runner))
9817 (home-page "https://github.com/earwig/mwparserfromhell")
9818 (synopsis "Python parser for MediaWiki wikicode")
9819 (description
9820 "The MediaWiki Parser From Hell is a python library package that provides
9821a parser for MediaWiki.
9822
9823It exposes parses as normal string objects with additional methods giving
9824access to the special Wikicode features it contains (hyperlinks, tags,
9825templates…). The parser doesn't interpolate strings at all, it remains at a
9826purely formal level.
9827
9828Full documentation may be found at
9829@uref{https://mwparserfromhell.readthedocs.io, ReadTheDocs}")
9830 (license license:expat)))
9831
9832(define-public python-tweepy
9833 (package
9834 (name "python-tweepy")
9835 (version "4.4.0")
9836 (source
9837 (origin
9838 (method git-fetch)
9839 (uri
9840 (git-reference
9841 (url "https://github.com/tweepy/tweepy")
9842 (commit (string-append "v" version))))
9843 (file-name (git-file-name name version))
9844 (sha256
9845 (base32
9846 "0jl3j20iqvzqqw5q5ldval5wrc2pdx94zff3b6b87j51yjx3qjhr"))))
9847 (build-system python-build-system)
9848 (arguments
9849 `(#:tests? #f ;XXX: need /etc/ssl/certs/ca-certificates.crt
9850 #:phases
9851 (modify-phases %standard-phases
9852 (replace 'check
9853 (lambda* (#:key tests? #:allow-other-keys)
9854 (when tests?
9855 (invoke "python" "-m" "unittest" "discover" "tests")))))))
9856 (propagated-inputs
9857 (list python-aiohttp python-requests python-requests-oauthlib))
9858 (native-inputs
9859 (list python-vcrpy))
9860 (home-page "https://www.tweepy.org/")
9861 (synopsis "Twitter library for Python")
9862 (description "This package provides @code{Tweepy}, an easy-to-use Python
9863library for accessing the Twitter API.")
9864 (license license:expat)))
9865
9866(define-public python-quart
9867 (package
9868 (name "python-quart")
9869 (version "0.19.9")
9870 (source
9871 (origin
9872 (method git-fetch) ; no tests in PyPI release
9873 (uri (git-reference
9874 (url "https://github.com/pallets/quart")
9875 (commit version)))
9876 (file-name (git-file-name name version))
9877 (sha256
9878 (base32 "1h5ifv8g9dc9m07vj4v7dfalam83v38545d845vvgys1gan1pscd"))))
9879 (build-system pyproject-build-system)
9880 (arguments
9881 (list
9882 #:phases
9883 #~(modify-phases %standard-phases
9884 (add-after 'unpack 'remove-coverage-pytest-options
9885 (lambda _
9886 (substitute* "pyproject.toml"
9887 (("--no-cov-on-fail") "")))))))
9888 (native-inputs
9889 (list python-poetry-core
9890 python-pytest
9891 python-pytest-asyncio))
9892 (propagated-inputs
9893 (list hypercorn
9894 python-aiofiles
9895 python-blinker
9896 python-click
9897 python-dotenv
9898 python-flask
9899 python-itsdangerous
9900 python-jinja2
9901 python-markupsafe
9902 python-toml
9903 python-werkzeug))
9904 (home-page "https://gitlab.com/pgjones/quart/")
9905 (synopsis "Python ASGI web microframework with the same API as Flask")
9906 (description
9907 "This package provides a Python ASGI web microframework with the same API
9908as Flask.")
9909 (license license:expat)))
9910
9911(define-public python-ajsonrpc
9912 (package
9913 (name "python-ajsonrpc")
9914 (version "1.2.0")
9915 (source
9916 (origin
9917 (method url-fetch)
9918 (uri (pypi-uri "ajsonrpc" version))
9919 (sha256
9920 (base32 "17x1a4r4l428mhwn53abki9gzdzq3halyr4lj48fw3dzy0caq6vr"))))
9921 (build-system python-build-system)
9922 (propagated-inputs
9923 (list python-quart
9924 python-sanic
9925 python-tornado))
9926 (home-page "https://github.com/pavlov99/ajsonrpc")
9927 (synopsis "Async JSON-RPC 2.0 protocol and server")
9928 (description
9929 "This package provides a Python JSON-RPC 2.0 protocol and server powered
9930by asyncio.")
9931 (license license:expat)))
9932
9933(define-public python-protego
9934 (package
9935 (name "python-protego")
9936 (version "0.2.1")
9937 (source
9938 (origin
9939 (method url-fetch)
9940 (uri (pypi-uri "Protego" version))
9941 (sha256
9942 (base32 "1wigcjyhz8zbk562zhgfbkm733dcn65j1swzvki79dys0i1nsrnz"))))
9943 (build-system python-build-system)
9944 (arguments
9945 `(#:phases
9946 (modify-phases %standard-phases
9947 (replace 'check
9948 (lambda* (#:key tests? #:allow-other-keys)
9949 (when tests?
9950 (invoke "pytest")))))))
9951 (propagated-inputs (list python-six))
9952 (native-inputs (list python-pytest))
9953 (home-page "https://github.com/scrapy/protego")
9954 (synopsis
9955 "Pure-Python robots.txt parser with support for modern conventions")
9956 (description
9957 "Pure-Python robots.txt parser with support for modern conventions.")
9958 (license license:bsd-3)))
9959
9960(define-public python-parsel
9961 (package
9962 (name "python-parsel")
9963 (version "1.8.1")
9964 (source
9965 (origin
9966 (method url-fetch)
9967 (uri (pypi-uri "parsel" version))
9968 (sha256
9969 (base32 "0f8yh30y3961a7kqwcnp4j3s7044ilakykiavc0skwdkr5l8xwmg"))))
9970 (build-system pyproject-build-system)
9971 (propagated-inputs
9972 (list python-cssselect
9973 python-jmespath
9974 python-lxml
9975 python-typing-extensions
9976 python-w3lib))
9977 (native-inputs
9978 (list python-psutil python-pytest python-setuptools python-wheel))
9979 (home-page "https://github.com/scrapy/parsel")
9980 (synopsis "Extract data from HTML and XML using XPath and CSS selectors")
9981 (description "Parsel is a library to extract and remove data from
9982HTML and XML using XPath and CSS selectors, optionally combined with
9983regular expressions.")
9984 (license license:bsd-3)))
9985
9986(define-public python-scrapy
9987 (package
9988 (name "python-scrapy")
9989 (version "2.12.0")
9990 (source
9991 (origin
9992 (method url-fetch)
9993 (uri (pypi-uri "scrapy" version))
9994 (sha256
9995 (base32 "13vqykvjv9d0hj02l0s025r107dncfj7as0r0iv484lv01v6wvfn"))))
9996 (build-system pyproject-build-system)
9997 (arguments
9998 (list #:test-flags
9999 ;; Tests requiring a display.
10000 #~(list "-k" (string-append
10001 "not " (string-join
10002 (list "test_pformat"
10003 "test_pformat_old_windows"
10004 "test_pformat_windows"
10005 ;; Connection refused.
10006 "test_persist")
10007 " and not "))
10008 ;; Connection refused to some local FTP server.
10009 "--ignore=tests/test_feedexport.py")
10010 #:phases
10011 #~(modify-phases %standard-phases
10012 (add-before 'check 'prepare-test-environment
10013 (lambda _
10014 (setenv "HOME" "/tmp"))))))
10015 (propagated-inputs
10016 (list python-cryptography
10017 python-cssselect
10018 python-defusedxml
10019 python-itemadapter
10020 python-itemloaders
10021 python-lxml
10022 python-packaging
10023 python-parsel
10024 python-protego
10025 python-pydispatcher
10026 python-pyopenssl
10027 python-queuelib
10028 python-service-identity
10029 python-tldextract
10030 python-typing-extensions
10031 python-twisted
10032 python-w3lib
10033 python-zope-interface))
10034 (native-inputs
10035 (list nss-certs-for-test
10036 python-mypy
10037 python-pexpect
10038 python-pytest
10039 python-pytest-xdist
10040 python-setuptools
10041 python-sybil
10042 python-testfixtures
10043 python-wheel))
10044 (home-page "https://scrapy.org")
10045 (synopsis "High-level Web crawling and Web scraping framework")
10046 (description "Scrapy is a fast high-level web crawling and web
10047scraping framework, used to crawl websites and extract structured data
10048from their pages. It can be used for a wide range of purposes, from data
10049mining to monitoring and automated testing.")
10050 (license license:bsd-3)))
10051
10052(define-public python-jstyleson
10053 (package
10054 (name "python-jstyleson")
10055 (version "0.0.2")
10056 (source
10057 (origin
10058 (method url-fetch)
10059 (uri (pypi-uri "jstyleson" version))
10060 (sha256
10061 (base32 "13ihw6jqwkg3ai4xb83kw39pvh73b2wg6ld3wvj5jaasn7rh6038"))))
10062 (build-system python-build-system)
10063 (arguments (list #:tests? #f)) ;no tests in pypi release
10064 (home-page "https://github.com/linjackson78/jstyleson")
10065 (synopsis "JSON parser supporting js-style comments")
10066 (description "@code{jstyleson} is a Python library to parse JSON.
10067Contrary to the standard Python @code{json} library, it understands js-style
10068comments. Trailing comma is also supported.")
10069 (license license:expat)))
10070
10071(define-public python-html-text
10072 (package
10073 (name "python-html-text")
10074 (version "0.5.2")
10075 (source
10076 (origin
10077 (method url-fetch)
10078 (uri (pypi-uri "html_text" version))
10079 (sha256
10080 (base32 "1v9x171l3bmyayc1144nrkn9410lp4lhlrrjii54j7b5f2xipmmg"))))
10081 (build-system python-build-system)
10082 (native-inputs (list python-pytest))
10083 (propagated-inputs (list python-lxml))
10084 (home-page "https://github.com/TeamHG-Memex/html-text")
10085 (synopsis "Extract text from HTML")
10086 (description "HTML to Text is a Python library for extract text from HTML.
10087Contrary to other solution such as LXML or Beautiful Soup, the text extracted
10088with @code{html_text} does not contain elements such as JavaScript or inline
10089styles not normally visible to users. It also normalizes white space
10090characters in a smarter, more visually pleasing style.")
10091 (license license:expat)))
10092
10093(define-public python-mf2py
10094 (package
10095 (name "python-mf2py")
10096 (version "1.1.2")
10097 (source (origin
10098 (method git-fetch)
10099 (uri (git-reference
10100 (url "https://github.com/microformats/mf2py")
10101 (commit version)))
10102 (file-name (git-file-name name version))
10103 (sha256
10104 (base32
10105 "00pzfc5sl6ywlcr6f2k37n3f2bb7w488p2k95ixzjwx6w3yh747n"))))
10106 (build-system python-build-system)
10107 (arguments
10108 (list
10109 #:phases
10110 #~(modify-phases %standard-phases
10111 (replace 'check
10112 (lambda* (#:key tests? #:allow-other-keys)
10113 (when tests?
10114 (invoke "pytest" "-vv" "test")))))))
10115 (native-inputs (list python-mock python-pytest))
10116 (propagated-inputs
10117 (list python-beautifulsoup4 python-html5lib python-requests))
10118 (home-page "https://github.com/microformats/mf2py")
10119 (synopsis "Python Microformats2 parser")
10120 (description "This Python library provides a Microformats2 parser
10121implementing the full Microformats2 (mf2) specification, including backward
10122compatibility with Microformats1 (mf1).")
10123 (license license:expat)))
10124
10125(define-public python-extruct
10126 (package
10127 (name "python-extruct")
10128 (version "0.16.0")
10129 (source (origin
10130 (method git-fetch) ;for tests
10131 (uri (git-reference
10132 (url "https://github.com/scrapinghub/extruct")
10133 (commit (string-append "v" version))))
10134 (file-name (git-file-name name version))
10135 (sha256
10136 (base32
10137 "1s05sz6nghrap1gjkg3vsqz6djld6lczd6w3r1542ir8n7binl7a"))))
10138 (build-system python-build-system)
10139 (arguments
10140 (list
10141 #:phases
10142 #~(modify-phases %standard-phases
10143 (replace 'check
10144 (lambda* (#:key tests? #:allow-other-keys)
10145 (when tests?
10146 (invoke "pytest" "-vv" "tests")))))))
10147 (native-inputs (list python-pytest))
10148 (propagated-inputs
10149 (list python-html-text
10150 python-jstyleson
10151 python-lxml
10152 python-mf2py
10153 python-pyrdfa3
10154 python-rdflib
10155 python-w3lib))
10156 (home-page "https://github.com/scrapinghub/extruct")
10157 (synopsis "Extract embedded metadata from HTML markup")
10158 (description "@code{extruct} is a Python library for extracting embedded
10159metadata from HTML markup. Currently, extruct supports:
10160@itemize
10161@item W3C's HTML Microdata
10162@item embedded JSON-LD
10163@item Microformat via mf2py
10164@item Facebook's Open Graph
10165@item (experimental) RDFa via rdflib
10166@item Dublin Core Metadata (DC-HTML-2003)
10167@end itemize")
10168 (license license:bsd-3)))
10169
10170(define-public python-wadllib
10171 (package
10172 (name "python-wadllib")
10173 (version "1.3.6")
10174 (source
10175 (origin
10176 (method url-fetch)
10177 (uri (pypi-uri "wadllib" version))
10178 (sha256
10179 (base32 "1z65crvdsjxh9nahz1g6q021ijmv85ixmq88l96d61qh5imavndc"))))
10180 (build-system python-build-system)
10181 (propagated-inputs (list python-lazr-uri))
10182 (home-page "https://launchpad.net/wadllib")
10183 (synopsis "Web Application Description Language (WADL) navigation library")
10184 (description "The @code{wadllib} Python library allows navigating HTTP
10185resources using Web Application Description Language (WADL) files as guides.")
10186 (license license:lgpl3)))
10187
10188(define-public python-zeep
10189 (package
10190 (name "python-zeep")
10191 (version "4.3.1")
10192 (source
10193 (origin
10194 (method url-fetch)
10195 (uri (pypi-uri "zeep" version))
10196 (sha256
10197 (base32 "0vm0asfak0pxfa9i753imcy72hk8gkxbj6pmw185b7dhw7lqalzl"))))
10198 (build-system pyproject-build-system)
10199 (arguments
10200 (list
10201 #:phases
10202 '(modify-phases %standard-phases
10203 (add-after 'unpack 'compatibility
10204 (lambda _
10205 ;; httpx removed the "proxies" keyword. It's now either "mounts"
10206 ;; or "proxy". See https://github.com/encode/httpx/pull/2879.
10207 (substitute* "src/zeep/transports.py"
10208 (("proxies=") "proxy="))))
10209 ;; One test requires write access
10210 (add-before 'check 'set-HOME
10211 (lambda _ (setenv "HOME" (getcwd)))))))
10212 (propagated-inputs
10213 (list python-attrs
10214 python-isodate
10215 python-lxml
10216 python-platformdirs
10217 python-pytz
10218 python-requests
10219 python-requests-file
10220 python-requests-toolbelt))
10221 (native-inputs
10222 (list nss-certs-for-test
10223 python-coverage
10224 python-flake8
10225 python-flake8-blind-except
10226 python-flake8-debugger
10227 python-freezegun
10228 python-isort
10229 python-pretend
10230 python-pytest
10231 python-pytest-asyncio
10232 python-pytest-cov
10233 python-pytest-httpx
10234 python-requests-mock
10235 python-setuptools
10236 python-wheel))
10237 (home-page "https://docs.python-zeep.org/en/stable/")
10238 (synopsis "Python SOAP client based on lxml / requests")
10239 (description "Zeep is a Python SOAP client. Highlights:
10240
10241@itemize
10242@item Build on top of @code{lxml} and @code{requests}.
10243@item Support for Soap 1.1, Soap 1.2 and HTTP bindings.
10244@item Support for WS-Addressing headers.
10245@item Support for WSSE (UserNameToken / x.509 signing).
10246@item Support for @code{asyncio} via @code{httpx}.
10247@item Experimental support for XOP messages.
10248@end itemize")
10249 (license license:expat)))
10250
10251(define-public python-pysimplesoap
10252 (package
10253 (name "python-pysimplesoap")
10254 (version "1.16.2")
10255 (source (origin
10256 (method url-fetch)
10257 (uri (pypi-uri "PySimpleSOAP" version))
10258 (sha256
10259 (base32
10260 "1qb7dn8m1cjwzql7vqj9i1hsscb7nyhimmlp45jrpzxds38g9fxi"))))
10261 (build-system python-build-system)
10262 (arguments
10263 (list #:tests? #f)) ;tests fail due to attempted web access
10264 (home-page "https://github.com/pysimplesoap/pysimplesoap")
10265 (synopsis "Simple and lightweight SOAP library for Python")
10266 (description
10267 "This package provides a simple and lightweight Python SOAP library for
10268client and server webservices interfaces, aimed to be as small and easy as
10269possible, supporting most common functionality.")
10270 (license license:lgpl3+)))
10271
10272(define-public python-http-client
10273 (package
10274 (name "python-http-client")
10275 (version "3.3.7")
10276 (home-page "https://github.com/sendgrid/python-http-client")
10277 (source (origin
10278 (method git-fetch)
10279 (uri (git-reference
10280 (url home-page)
10281 (commit version)))
10282 (file-name (git-file-name name version))
10283 (sha256
10284 (base32
10285 "0z0ziw3f4zw5fj4spiwhhs2x8qs3i5999ry2p6a5sc8b1lkkj2zi"))
10286 (snippet #~(begin
10287 (use-modules (guix build utils))
10288 (delete-file "tests/profile.py")))))
10289 (build-system python-build-system)
10290 (arguments
10291 (list #:phases
10292 #~(modify-phases %standard-phases
10293 (add-after 'unpack 'fix-tests
10294 (lambda _
10295 ;; The test expects the copyright to be updated each year.
10296 (substitute* "tests/test_daterange.py"
10297 (("time\\.strftime\\(\"%Y\"\\)") "2022")))))))
10298 (synopsis "HTTP REST client for Python")
10299 (description
10300 "This package provides access to any RESTful or RESTful-like API.")
10301 (license license:expat)))
10302
10303(define-public python-sendgrid
10304 (package
10305 (name "python-sendgrid")
10306 (version "6.9.7")
10307 (home-page "https://github.com/sendgrid/sendgrid-python/")
10308 (source (origin
10309 (method git-fetch)
10310 (uri (git-reference
10311 (url home-page)
10312 (commit version)))
10313 (file-name (git-file-name name version))
10314 (sha256
10315 (base32
10316 "0kvp4gm3bpcsj2mkv05pgvlcv1jlsfhcljcv61wz5kq9d273h7rg"))))
10317 (build-system python-build-system)
10318 (arguments
10319 (list #:tests? #f)) ;241/340 tests fail due to attempted web access
10320 (propagated-inputs (list python-http-client python-starkbank-ecdsa))
10321 (synopsis "SendGrid API library for Python")
10322 (description
10323 "The @code{sendgrid} Python library allows access to the
10324SendGrid Web API v3. Version 3+ of the library provides full support for all
10325SendGrid Web API v3 endpoints, including the new v3 /mail/send.")
10326 (license license:expat)))
10327
10328(define-public python-starlette
10329 (package
10330 (name "python-starlette")
10331 (version "0.42.0")
10332 (source (origin
10333 (method git-fetch)
10334 (uri (git-reference
10335 (url "https://github.com/encode/starlette")
10336 (commit version)))
10337 (file-name (git-file-name name version))
10338 (sha256
10339 (base32
10340 "0r46v6b687pqr4sjcv0rwd1ln248fnx0xkawbn945r04pg7c999q"))))
10341 (build-system pyproject-build-system)
10342 (propagated-inputs (list python-anyio
10343 python-typing-extensions
10344 ;; [all] extra dependencies:
10345 python-itsdangerous
10346 python-jinja2
10347 python-multipart
10348 python-pyyaml
10349 python-requests))
10350 (native-inputs (list python-hatchling
10351 python-httpx
10352 python-pytest
10353 python-typing-extensions))
10354 (home-page "https://github.com/encode/starlette")
10355 (synopsis "Little ASGI library")
10356 (description
10357 "Starlette is a lightweight ASGI (Asynchronous Server Gateway
10358Interface) framework/toolkit for building async web services in Python.")
10359 (license license:bsd-3)))
10360
10361(define-public python-starsessions
10362 (package
10363 (name "python-starsessions")
10364 (version "1.3.0")
10365 (source (origin
10366 (method git-fetch)
10367 (uri (git-reference
10368 (url "https://github.com/alex-oleshkevich/starsessions")
10369 (commit (string-append "v" version))))
10370 (file-name (git-file-name name version))
10371 (sha256
10372 (base32
10373 "00dkdhp22vfmcn0w4y7f2ii8m1xj5i7409x58g3l8lvk6v5ng2nf"))))
10374 (build-system pyproject-build-system)
10375 (arguments
10376 (list
10377 #:test-flags
10378 ;; These tests require a running redis server
10379 '(list "--ignore=tests/backends/test_redis.py"
10380 ;; XXX: this failure indicates a real compatibility problem, but
10381 ;; it seems restricted to the tests only.
10382 ;; AttributeError: 'Cookies' object has no attribute
10383 ;; 'clear_session_cookies'
10384 "-k"
10385 (string-append "not test_session_clears_on_tab_close"
10386 ;; This fails because an error is not raised.
10387 " and not test_session_wants_secret_key"))
10388 #:phases
10389 '(modify-phases %standard-phases
10390 (add-after 'unpack 'compatibilitiy
10391 (lambda _
10392 ;; aioredis has been renamed
10393 (substitute* "starsessions/backends/redis.py"
10394 (("aioredis") "redis")))))))
10395 (propagated-inputs
10396 (list python-redis
10397 python-itsdangerous
10398 python-starlette))
10399 (native-inputs
10400 (list python-black
10401 python-flake8
10402 python-httpx
10403 python-mypy
10404 python-poetry-core
10405 python-pytest
10406 python-pytest-asyncio
10407 python-requests))
10408 (home-page "https://github.com/alex-oleshkevich/starsessions")
10409 (synopsis "Pluggable session support for Starlette and FastAPI")
10410 (description
10411 "This package adds pluggable session backends and ships default
10412@code{InMemoryBackend} and @code{CookieBackend} implementations for Starlette
10413and FastAPI.")
10414 (license license:expat)))
10415
10416(define-public python-suds
10417 (package
10418 (name "python-suds")
10419 (version "1.2.0")
10420 (source
10421 (origin
10422 (method url-fetch)
10423 (uri (pypi-uri "suds" version))
10424 (sha256
10425 (base32 "1byyg7b2ixpr8hc849a6dd0qn5daxqawz6lb3php8lrmsb1n5cc3"))))
10426 (build-system pyproject-build-system)
10427 (native-inputs
10428 (list python-pytest
10429 python-setuptools
10430 python-wheel))
10431 (home-page "https://github.com/suds-community/suds")
10432 (synopsis "Lightweight SOAP python client for consuming Web Services")
10433 (description
10434 "Suds is a lightweight SOAP-based web service client for Python.")
10435 (license license:lgpl3+)))
10436
10437(define-public python-fastapi
10438 (package
10439 (name "python-fastapi")
10440 (version "0.115.6")
10441 (source (origin
10442 (method url-fetch)
10443 (uri (pypi-uri "fastapi" version))
10444 (sha256
10445 (base32
10446 "0m36nyldk0640mbsysm446bz6rfynpjsm5lajmra8kn1vmx6zi4y"))))
10447 (build-system pyproject-build-system)
10448 (arguments
10449 (list
10450 #:test-flags
10451 ;; Argument() missing 1 required positional argument: 'default'
10452 '(list "--ignore=tests/test_fastapi_cli.py"
10453 ;; cannot import name 'StaticPool' from 'sqlalchemy'
10454 "--ignore-glob=tests/test_tutorial/*"
10455 ;; FIXME: Unclear why these 8 tests fail.
10456 "--ignore=tests/test_dependency_contextmanager.py")
10457 #:phases
10458 '(modify-phases %standard-phases
10459 (add-after 'unpack 'relax-requirements
10460 (lambda _
10461 (substitute* "pyproject.toml"
10462 (("<0.42.0") "<=0.42.0")))))))
10463 (propagated-inputs (list python-email-validator
10464 python-fastapi-cli
10465 python-httpx
10466 python-itsdangerous
10467 python-jinja2
10468 python-multipart
10469 python-orjson
10470 python-pydantic-2
10471 python-pydantic-settings
10472 python-pyyaml
10473 python-starlette
10474 python-typing-extensions
10475 python-ujson
10476 python-uvicorn))
10477 (native-inputs
10478 (list python-dirty-equals
10479 python-flask
10480 python-inline-snapshot
10481 python-pdm-backend
10482 python-pyjwt
10483 python-pytest
10484 python-sqlalchemy))
10485 (home-page "https://github.com/tiangolo/fastapi")
10486 (synopsis "Web framework based on type hints")
10487 (description "FastAPI provides a web API framework based on pydantic and
10488starlette.")
10489 (license license:expat)))
10490
10491(define-public python-fastapi-csrf-protect
10492 (package
10493 (name "python-fastapi-csrf-protect")
10494 (version "0.3.3")
10495 (source (origin
10496 (method git-fetch)
10497 (uri (git-reference
10498 (url "https://github.com/aekasitt/fastapi-csrf-protect")
10499 (commit (string-append "v" version))))
10500 (file-name (git-file-name name version))
10501 (sha256
10502 (base32
10503 "181yawlbpd4709mamsradr9zj0jrbp4qvwfvmggs80pd36iiwyy8"))))
10504 (build-system pyproject-build-system)
10505 (propagated-inputs
10506 (list python-fastapi python-itsdangerous
10507 python-pydantic-2))
10508 (native-inputs
10509 (list python-poetry-core
10510 python-pytest))
10511 (home-page "https://github.com/aekasitt/fastapi-csrf-protect")
10512 (synopsis "Cross-Site Request Forgery (XSRF) protection")
10513 (description
10514 "This package provides a stateless implementation of @dfn{Cross-Site
10515Request Forgery} (XSRF) Protection by using the Double Submit Cookie mitigation
10516pattern.")
10517 (license license:expat)))
10518
10519(define-public python-fastapi-pagination-minimal
10520 (package
10521 (name "python-fastapi-pagination-minimal")
10522 (version "0.12.34")
10523 (source (origin
10524 (method git-fetch)
10525 (uri (git-reference
10526 (url "https://github.com/uriyyo/fastapi-pagination")
10527 (commit version)))
10528 (file-name (git-file-name name version))
10529 (sha256
10530 (base32
10531 "004w9h4ana0p766n7f0z0n06v1472yjci1hvbys9gncpclcc49gj"))))
10532 (build-system pyproject-build-system)
10533 ;; We run the tests in python-fastapi-pagination only.
10534 (arguments (list #:tests? #false))
10535 ;; These are the only required dependencies,
10536 ;; please add all optional dependencies to the
10537 ;; full python-fastapi-pagination below.
10538 (propagated-inputs (list python-fastapi python-pydantic-2))
10539 (native-inputs (list python-poetry-core))
10540 (home-page "https://github.com/uriyyo/fastapi-pagination")
10541 (synopsis "FastAPI pagination library")
10542 (description "@code{fastapi-pagination} is a Python library designed to
10543simplify pagination in FastAPI applications. It provides a set of utility
10544functions and data models to help you paginate your database queries and
10545return paginated responses to your clients.")
10546 (license license:expat)))
10547
10548(define-public python-fastapi-pagination
10549 (package
10550 (inherit python-fastapi-pagination-minimal)
10551 (name "python-fastapi-pagination")
10552 (arguments
10553 (list
10554 #:test-flags
10555 '(list "--unit-tests" "--ignore=tests/ext")
10556 #:phases
10557 '(modify-phases %standard-phases
10558 (add-after 'unpack 'patch-tests
10559 (lambda _
10560 ;; We don't have a package for python-cassandra or motor, but we
10561 ;; also don't need them as we only run the unit tests anyway.
10562 (substitute* "tests/conftest.py"
10563 (("from cassandra.cluster.*") "")
10564 (("from motor.*") "")))))))
10565 (propagated-inputs
10566 (modify-inputs (package-propagated-inputs
10567 python-fastapi-pagination-minimal)
10568 (prepend python-asyncpg
10569 python-databases
10570 python-django
10571 python-fastapi
10572 python-pydantic-2
10573 python-sqlalchemy
10574 (package
10575 (inherit python-tortoise-orm)
10576 (arguments
10577 (substitute-keyword-arguments (package-arguments
10578 python-tortoise-orm)
10579 ((#:phases phases '%standard-phases)
10580 `(modify-phases ,phases
10581 (delete 'sanity-check)))))
10582 (propagated-inputs
10583 (modify-inputs (package-propagated-inputs python-tortoise-orm)
10584 (replace "python-aiosqlite" python-aiosqlite)))))))
10585 (native-inputs
10586 (list python-aiosqlite
10587 python-asgi-lifespan
10588 python-asyncpg
10589 python-faker
10590 python-httpx
10591 python-poetry-core
10592 python-pytest
10593 python-pytest-asyncio
10594 python-sqlalchemy
10595 python-typing-extensions))
10596 (description
10597 (string-append (package-description python-fastapi-pagination-minimal)
10598 "
10599
10600This package, as opposed to @code{python-fastapi-pagination-minimal}, depends on
10601all available optional dependencies supported by mainline
10602@code{fastapi-pagination}."))))
10603
10604(define-public python-fastapi-cli
10605 (package
10606 (name "python-fastapi-cli")
10607 (version "0.0.7")
10608 (source
10609 (origin
10610 (method url-fetch)
10611 (uri (pypi-uri "fastapi_cli" version))
10612 (sha256
10613 (base32 "0pk0ldmymc25ys4v6mslzd5vsjh9r69hfylh2ljl29pmarcvdcq2"))))
10614 (build-system pyproject-build-system)
10615 ;; Tests require fastapi, which depends on this package.
10616 (arguments (list #:tests? #false))
10617 (propagated-inputs (list python-rich-toolkit python-typer python-uvicorn))
10618 (native-inputs
10619 (list python-inline-snapshot python-pdm-backend python-pytest))
10620 (home-page "https://pypi.org/project/fastapi-cli/")
10621 (synopsis
10622 "Run and manage FastAPI apps from the command line with FastAPI CLI")
10623 (description
10624 "FastAPI CLI is a command line program fastapi that you can use to serve
10625your FastAPI app, manage your FastAPI project, and more.")
10626 (license license:expat)))
10627
10628(define-public python-pyactiveresource
10629 (package
10630 (name "python-pyactiveresource")
10631 (version "2.2.2")
10632 (source (origin
10633 (method url-fetch)
10634 (uri (pypi-uri "pyactiveresource" version))
10635 (sha256
10636 (base32
10637 "1n7xvzh1j8fxal0gx9bgg1ayrp3q9mb1a2vb12d6s86wa93880rg"))))
10638 (build-system python-build-system)
10639 (native-inputs (list python-dateutil python-pyyaml))
10640 (propagated-inputs (list python-six))
10641 (home-page "https://github.com/Shopify/pyactiveresource/")
10642 (synopsis "ActiveResource for Python")
10643 (description "This package provides a Python port of the ActiveResource
10644project.
10645
10646Active Resource attempts to provide a coherent wrapper object-relational
10647mapping for REST web services. It follows the same philosophy as Active
10648Record, in that one of its prime aims is to reduce the amount of code needed
10649to map to these resources. This is made possible by relying on a number of
10650code- and protocol-based conventions that make it easy for Active Resource to
10651infer complex relations and structures.")
10652 (license license:expat)))
10653
10654(define-public python-shopifyapi
10655 (package
10656 (name "python-shopifyapi")
10657 (version "12.0.0")
10658 (source (origin
10659 (method url-fetch)
10660 (uri (pypi-uri "ShopifyAPI" version))
10661 (sha256
10662 (base32
10663 "03np9mkycqbw5l5vk0srmq353q3vmbycbbarzv0cg3z703p81gnb"))))
10664 (build-system python-build-system)
10665 (native-inputs (list python-mock))
10666 (propagated-inputs (list python-pyactiveresource python-pyjwt
10667 python-pyyaml python-six))
10668 (home-page "https://github.com/Shopify/shopify_python_api")
10669 (synopsis "Shopify API for Python")
10670 (description "This package provides the Shopify API for Python.
10671
10672The ShopifyAPI library allows Python developers to programmatically access the
10673admin section of stores using an ActiveResource-like interface similar the
10674ruby Shopify API gem. The library makes HTTP requests to Shopify in order to
10675list, create, update, or delete resources (e.g. Order, Product, Collection).")
10676 (license license:expat)))
10677
10678(define-public python-whatthepatch
10679 (package
10680 (name "python-whatthepatch")
10681 (version "1.0.2")
10682 (source (origin
10683 (method url-fetch)
10684 (uri (pypi-uri "whatthepatch" version))
10685 (sha256
10686 (base32
10687 "17zspm5sxhvggkdhwq4s0fzf4mkc825xshn734g2j2iy2xcylh65"))))
10688 (build-system python-build-system)
10689 (home-page "https://github.com/cscorley/whatthepatch")
10690 (synopsis "Patch parsing and application")
10691 (description
10692 "This package provides a library to parse and apply patches.")
10693 (license license:expat)))
10694
10695(define-public python-pybadges
10696 (package
10697 (name "python-pybadges")
10698 (version "3.0.1")
10699 (source (origin
10700 (method git-fetch)
10701 (uri (git-reference
10702 (url "https://github.com/google/pybadges")
10703 (commit version)))
10704 (file-name (git-file-name name version))
10705 (sha256
10706 "1zgb9idz7m3mzf8wvik0gwmyrxp753axqjv2pab326cr5myj1s4b")))
10707 (build-system pyproject-build-system)
10708 (arguments
10709 (list
10710 #:test-flags
10711 #~'("-k"
10712 ;; Disable network dependent tests.
10713 "not test_changes and not test_not_image_url and not test_http_url")))
10714 (propagated-inputs (list python-jinja2 python-requests))
10715 (native-inputs (list python-flask
10716 python-fonttools
10717 python-nox
10718 python-pillow
10719 python-pytest
10720 python-xmldiff))
10721 (home-page "https://github.com/google/pybadges")
10722 (synopsis "Generate Github-style badges on the command-line")
10723 (description
10724 "This package provides @code{python-pybadges}: a library and command-line
10725tool for generating Github-style badges as SVG images.")
10726 (license license:asl2.0)))
10727
10728(define-public python-grid5000
10729 (package
10730 (name "python-grid5000")
10731 (version "1.2.3")
10732 (source (origin
10733 (method git-fetch)
10734 (uri (git-reference
10735 (url "https://gitlab.inria.fr/msimonin/python-grid5000")
10736 (commit (string-append "v" version))))
10737 (file-name (git-file-name name version))
10738 (sha256
10739 "097pm8b68ihk29xz9zv29b1x0bhgjb4lfj8zxk2grbsh7wr9dipg")))
10740 (build-system python-build-system)
10741 (native-inputs (list python-wheel))
10742 (propagated-inputs (list python-requests python-ipython python-pyyaml))
10743 (arguments
10744 (list #:tests? #f)) ; No tests.
10745 (home-page "https://pypi.org/project/python-grid5000/")
10746 (synopsis "Grid5000 python client")
10747 (description
10748 "python-grid5000 is a python package wrapping the Grid5000 REST API.
10749You can use it as a library in your python project or you can explore the
10750Grid5000 resources interactively using the embedded shell.")
10751 (license license:gpl3+)))
10752
10753(define-public python-enoslib
10754 (package
10755 (name "python-enoslib")
10756 (version "8.0.1")
10757 (source (origin
10758 (method git-fetch)
10759 (uri (git-reference
10760 (url "https://gitlab.inria.fr/discovery/enoslib")
10761 (commit (string-append "v" version))))
10762 (file-name (git-file-name name version))
10763 (sha256
10764 "0vs6b0bnlv95mzv0rjbxqwrhzkgjkn91gqipgwdf7y4ffpz8nybg")))
10765 (build-system python-build-system)
10766 (native-inputs (list python-wheel python-pytest python-ddt
10767 python-freezegun))
10768 (propagated-inputs (list ansible
10769 python-cryptography
10770 python-grid5000
10771 python-jsonschema
10772 python-netaddr
10773 python-packaging
10774 python-requests
10775 python-rich
10776 python-sshtunnel
10777 python-pytz))
10778 (arguments
10779 '(#:phases (modify-phases %standard-phases
10780 (replace 'check
10781 (lambda* (#:key tests? #:allow-other-keys)
10782 (when tests?
10783 ;; Otherwise Ansible fails to create its config directory.
10784 (setenv "HOME" "/tmp")
10785 ;; Ignoring the tests requiring an extra dependency (iotlabcli)
10786 (invoke "pytest" "enoslib/tests/unit"
10787 "--ignore"
10788 "enoslib/tests/unit/infra/test_utils.py"
10789 "--ignore-glob"
10790 "enoslib/tests/unit/infra/enos_iotlab/*"))))
10791 ;; Disable the sanity check, which fails with the following error:
10792 ;;
10793 ;; ContextualVersionConflict(rich 12.4.1
10794 ;; (/gnu/store/...-python-rich-12.4.1/lib/python3.9/site-packages),
10795 ;; Requirement.parse('rich[jupyter]~=12.0.0'), {'enoslib'})
10796 ;;
10797 ;; The optional jupyter dependency of rich isn't critical for
10798 ;; EnOSlib to work
10799 (delete 'sanity-check))))
10800
10801 (home-page "https://discovery.gitlabpages.inria.fr/enoslib/index.html")
10802 (synopsis "Deploy distributed testbeds on a variety of platforms")
10803 (description
10804 "EnOSlib is a library to build experimental frameworks on various
10805scientific testbeds. It lets you deploy networks of machines on actual
10806hardware on Grid'5000 or via OpenStack, to Vagrant, Chameleon, and more.")
10807 (license license:gpl3+)))
10808
10809(define-public python-pynetbox
10810 (package
10811 (name "python-pynetbox")
10812 (version "7.4.1")
10813 (source (origin
10814 (method url-fetch)
10815 (uri (pypi-uri "pynetbox" version))
10816 (sha256
10817 (base32
10818 "1hq0mqykwdsmcrj61fxxzdkpc7wnld4grhkcxy560ym79jbbb0iz"))))
10819 (build-system pyproject-build-system)
10820 (arguments
10821 (list
10822 #:test-flags
10823 ;; Integration tests depend on docker.
10824 '(list "--ignore=tests/integration")))
10825 (propagated-inputs (list python-packaging python-requests))
10826 (native-inputs
10827 (list python-pytest
10828 python-setuptools
10829 python-setuptools-scm
10830 python-wheel))
10831 (home-page "https://github.com/netbox-community/pynetbox")
10832 (synopsis "NetBox API client library")
10833 (description "Python module to query and edit data stored in a
10834@url{https://netbox.dev,NetBox} instance.")
10835 (license license:asl2.0)))
10836
10837(define-public python-waybackpack
10838 (package
10839 (name "python-waybackpack")
10840 (version "0.6.4")
10841 (source
10842 (origin
10843 (method url-fetch)
10844 (uri (pypi-uri "waybackpack" version))
10845 (sha256
10846 (base32 "16lcr2hv7gmp199fh3psrnv68j20pfxria8v6gchrpl1jqx9f923"))))
10847 (build-system pyproject-build-system)
10848 (arguments
10849 (list #:tests? #f)) ; would require network (and SSL certificates)
10850 (propagated-inputs (list python-requests))
10851 (native-inputs (list python-pytest python-setuptools python-wheel))
10852 (home-page "https://github.com/jsvine/waybackpack")
10853 (synopsis
10854 "Download the entire Wayback Machine archive for a given URL")
10855 (description
10856 "This package provides a library and a command-line tool that lets
10857you download the entire Wayback Machine archive for a given URL.")
10858 (license license:expat)))