projects/guix·blob dexed · refs

42200 lines · 1.5 MiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2013 Nikita Karetnikov <[email protected]>
3;;; Copyright © 2013-2025 Ludovic Courtès <[email protected]>
4;;; Copyright © 2013, 2014, 2015, 2016, 2019, 2023 Andreas Enge <[email protected]>
5;;; Copyright © 2014, 2015 Mark H Weaver <[email protected]>
6;;; Copyright © 2014, 2017, 2021, 2022, 2024 Eric Bavier <[email protected]>
7;;; Copyright © 2014, 2015 Federico Beffa <[email protected]>
8;;; Copyright © 2015 Omar Radwan <[email protected]>
9;;; Copyright © 2015 Pierre-Antoine Rault <[email protected]>
10;;; Copyright © 2015-2026 Ricardo Wurmus <[email protected]>
11;;; Copyright © 2015, 2016, 2020 Christine Lemmer-Webber <[email protected]>
12;;; Copyright © 2015 Eric Dvorsak <[email protected]>
13;;; Copyright © 2015, 2016 David Thompson <[email protected]>
14;;; Copyright © 2015, 2016, 2017, 2019, 2022 Leo Famulari <[email protected]>
15;;; Copyright © 2015, 2017 Ben Woodcroft <[email protected]>
16;;; Copyright © 2015, 2016 Erik Edrosa <[email protected]>
17;;; Copyright © 2015-2026 Efraim Flashner <[email protected]>
18;;; Copyright © 2015, 2017, 2020 Kyle Meyer <[email protected]>
19;;; Copyright © 2015, 2016 Chris Marusich <[email protected]>
20;;; Copyright © 2016 Danny Milosavljevic <[email protected]>
21;;; Copyright © 2016 Lukas Gradl <[email protected]>
22;;; Copyright © 2016, 2018, 2019, 2021 Hartmut Goebel <[email protected]>
23;;; Copyright © 2016 Daniel Pimentel <[email protected]>
24;;; Copyright © 2016 Sou Bunnbu <[email protected]>
25;;; Copyright © 2016, 2017 Troy Sankey <[email protected]>
26;;; Copyright © 2016, 2017 Nikita <[email protected]>
27;;; Copyright © 2016 Dylan Jeffers <sapientech@[email protected]>
28;;; Copyright © 2016 David Craven <[email protected]>
29;;; Copyright © 2016-2023 Marius Bakke <[email protected]>
30;;; Copyright © 2016, 2017, 2021, 2022 Stefan Reichör <[email protected]>
31;;; Copyright © 2016, 2017, 2019 Alex Vong <[email protected]>
32;;; Copyright © 2016–2018, 2021–2024 Arun Isaac <[email protected]>
33;;; Copyright © 2016, 2017, 2018, 2020, 2021 Julien Lepiller <[email protected]>
34;;; Copyright © 2016–2022 Tobias Geerinckx-Rice <[email protected]>
35;;; Copyright © 2016, 2017 Thomas Danckaert <[email protected]>
36;;; Copyright © 2017 Carlo Zancanaro <[email protected]>
37;;; Copyright © 2017 Frederick M. Muriithi <[email protected]>
38;;; Copyright © 2017, 2018 Adriano Peluso <[email protected]>
39;;; Copyright © 2017 Ben Sturmfels <[email protected]>
40;;; Copyright © 2017, 2018, 2019, 2021, 2022 Mathieu Othacehe <[email protected]>
41;;; Copyright © 2017 José Miguel Sánchez García <[email protected]>
42;;; Copyright © 2017, 2020, 2021 Roel Janssen <[email protected]>
43;;; Copyright © 2017, 2018, 2019 Kei Kebreau <[email protected]>
44;;; Copyright © 2017 Rutger Helling <[email protected]>
45;;; Copyright © 2017, 2019, 2021, 2025 Brendan Tildesley <[email protected]>
46;;; Copyright © 2018 Ethan R. Jones <[email protected]
47;;; Copyright © 2018 Fis Trivial <[email protected]>
48;;; Copyright © 2018 Vijayalakshmi Vedantham <[email protected]>
49;;; Copyright © 2018 Mathieu Lirzin <[email protected]>
50;;; Copyright © 2018 Adam Massmann <[email protected]>
51;;; Copyright © 2016, 2018 Tomáš Čech <[email protected]>
52;;; Copyright © 2018-2025 Nicolas Goaziou <[email protected]>
53;;; Copyright © 2018 Oleg Pykhalov <[email protected]>
54;;; Copyright © 2018, 2019, 2021, 2023 Clément Lassieur <[email protected]>
55;;; Copyright © 2018-2025 Maxim Cournoyer <[email protected]>
56;;; Copyright © 2018 Luther Thompson <[email protected]>
57;;; Copyright © 2018 Vagrant Cascadian <[email protected]>
58;;; Copyright © 2015, 2018 Pjotr Prins <[email protected]>
59;;; Copyright © 2019 [email protected] <[email protected]>
60;;; Copyright © 2019, 2020 Brett Gilio <[email protected]>
61;;; Copyright © 2019 Sam <[email protected]>
62;;; Copyright © 2019, 2023 Jack Hill <[email protected]>
63;;; Copyright © 2019-2023, Guillaume Le Vaillant <[email protected]>
64;;; Copyright © 2019, 2020 Alex Griffin <[email protected]>
65;;; Copyright © 2019, 2020, 2021, 2022, 2023 Pierre Langlois <[email protected]>
66;;; Copyright © 2019 Jacob MacDonald <[email protected]>
67;;; Copyright © 2019-2021, 2023, 2024, 2026 Giacomo Leidi <[email protected]>
68;;; Copyright © 2019 Wiktor Żelazny <[email protected]>
69;;; Copyright © 2019, 2020, 2021, 2022 Tanguy Le Carrour <[email protected]>
70;;; Copyright © 2019, 2021-2023 Mădălin Ionel Patrașcu <[email protected]>
71;;; Copyright © 2020 Riku Viitanen <[email protected]>
72;;; Copyright © 2020 Jakub Kądziołka <[email protected]>
73;;; Copyright © 2020 sirgazil <[email protected]>
74;;; Copyright © 2020 Sebastian Schott <[email protected]>
75;;; Copyright © 2020, 2021 Alexandros Theodotou <[email protected]>
76;;; Copyright © 2020 Josh Marshall <[email protected]>
77;;; Copyright © 2020 Lars-Dominik Braun <[email protected]>
78;;; Copyright © 2020 Alex ter Weele <[email protected]>
79;;; Copyright © 2020, 2022 Matthew James Kraai <[email protected]>
80;;; Copyright © 2020 Ryan Prior <[email protected]>
81;;; Copyright © 2020 Josh Holland <[email protected]>
82;;; Copyright © 2020 Yuval Kogman <[email protected]>
83;;; Copyright © 2020, 2022 Michael Rohleder <[email protected]>
84;;; Copyright © 2020, 2021, 2022, 2023, 2024, 2025 Vinicius Monego <[email protected]>
85;;; Copyright © 2020 Guy Fleury Iteriteka <[email protected]>
86;;; Copyright © 2020 Hendursaga <[email protected]>
87;;; Copyright © 2020 Malte Frank Gerdes <[email protected]>
88;;; Copyright © 2020 Joseph LaFreniere <[email protected]>
89;;; Copyright © 2020 Tim Gesthuizen <[email protected]>
90;;; Copyright © 2020, 2021 Bonface Munyoki Kilyungi <[email protected]>
91;;; Copyright © 2020 Ekaitz Zarraga <[email protected]>
92;;; Copyright © 2020 Diego N. Barbato <[email protected]>
93;;; Copyright © 2020 Liliana Marie Prikler <[email protected]>
94;;; Copyright © 2019 Kristian Trandem <[email protected]>
95;;; Copyright © 2020, 2021, 2024, 2025 Zheng Junjie <[email protected]>
96;;; Copyright © 2020 EuAndreh <[email protected]>
97;;; Copyright © 2021, 2022 Morgan Smith <[email protected]>
98;;; Copyright © 2021-2026 Sharlatan Hellseher <[email protected]>
99;;; Copyright © 2021 Ellis Kenyő <[email protected]>
100;;; Copyright © 2021 LibreMiami <[email protected]>
101;;; Copyright © 2021 Mathieu Othacehe <[email protected]>
102;;; Copyright © 2021 Xinglu Chen <[email protected]>
103;;; Copyright © 2021 Raghav Gururajan <[email protected]>
104;;; Copyright © 2021, 2023-2025 jgart <[email protected]>
105;;; Copyright © 2021 Danial Behzadi <[email protected]>
106;;; Copyright © 2021 Maxime Devos <[email protected]>
107;;; Copyright © 2021 Hugo Lecomte <[email protected]>
108;;; Copyright © 2021 Franck Pérignon <[email protected]>
109;;; Copyright © 2021, 2022 Petr Hodina <[email protected]>
110;;; Copyright © 2021 Simon Streit <[email protected]>
111;;; Copyright © 2021 Stefan Reichör <[email protected]>
112;;; Copyright © 2021, 2022, 2023 Daniel Meißner <[email protected]>
113;;; Copyright © 2021, 2022 Pradana Aumars <[email protected]>
114;;; Copyright © 2021–2024 Felix Gruber <[email protected]>
115;;; Copyright © 2021 Sébastien Lerique <[email protected]>
116;;; Copyright © 2021 Raphaël Mélotte <[email protected]>
117;;; Copyright © 2021 ZmnSCPxj <[email protected]>
118;;; Copyright © 2021 Filip Lajszczak <[email protected]>
119;;; Copyright © 2021 Greg Hogan <[email protected]>
120;;; Copyright © 2022, 2023 John Kehayias <[email protected]>
121;;; Copyright © 2022 Aleksandr Vityazev <[email protected]>
122;;; Copyright © 2022, 2024, 2025 Evgeny Pisemsky <[email protected]>
123;;; Copyright © 2022 drozdov <[email protected]>
124;;; Copyright © 2022 Peter Polidoro <[email protected]>
125;;; Copyright © 2022, 2023 Wamm K. D. <[email protected]>
126;;; Copyright © 2022 Jai Vetrivelan <[email protected]>
127;;; Copyright © 2022-2025 Artyom V. Poptsov <[email protected]>
128;;; Copyright © 2022, 2023 Paul A. Patience <[email protected]>
129;;; Copyright © 2022 Jean-Pierre De Jesus DIAZ <[email protected]>
130;;; Copyright © 2022 Philip McGrath <[email protected]>
131;;; Copyright © 2022 Marek Felšöci <[email protected]>
132;;; Copyright © 2022 Hilton Chain <[email protected]>
133;;; Copyright © 2022 Tomasz Jeneralczyk <[email protected]>
134;;; Copyright © 2022 Mathieu Laparie <[email protected]>
135;;; Copyright © 2022 Garek Dyszel <[email protected]>
136;;; Copyright © 2022 Baptiste Strazzulla <[email protected]>
137;;; Copyright © 2022-2025 Nicolas Graves <[email protected]>
138;;; Copyright © 2023 Gabriel Wicki <[email protected]>
139;;; Copyright © 2023 Amade Nemes <[email protected]>
140;;; Copyright © 2023 Bruno Victal <[email protected]>
141;;; Copyright © 2023 Lu Hui <[email protected]>
142;;; Copyright © 2023 Jean-Pierre De Jesus DIAZ <[email protected]>
143;;; Copyright © 2023 Kaelyn Takata <[email protected]>
144;;; Copyright © 2023 dan <[email protected]>
145;;; Copyright © 2023 Dominik Delgado Steuter <[email protected]>
146;;; Copyright © 2023 Ivan Vilata-i-Balaguer <[email protected]>
147;;; Copyright © 2023 Ontje Lünsdorf <[email protected]>
148;;; Copyright © 2023, 2025 gemmaro <[email protected]>
149;;; Copyright © 2023 Parnikkapore <[email protected]>
150;;; Copyright © 2023 Foundation Devices, Inc. <[email protected]>
151;;; Copyright © c4droid <[email protected]>
152;;; Copyright © 2023, 2024, 2025 Janneke Nieuwenhuizen <[email protected]>
153;;; Copyright © 2023 Attila Lendvai <[email protected]>
154;;; Copyright © 2023, 2024 Troy Figiel <[email protected]>
155;;; Copyright © 2023 Adam Faiz <[email protected]>
156;;; Copyright © 2023 Wiktor Żelazny <[email protected]>
157;;; Copyright © 2024 Timothee Mathieu <[email protected]>
158;;; Copyright © 2024 Ian Eure <[email protected]>
159;;; Copyright © 2024 Adriel Dumas--Jondeau <[email protected]>
160;;; Copyright © 2024 Navid Afkhami <[email protected]>
161;;; Copyright © 2024 TakeV <[email protected]>
162;;; Copyright © 2024, 2025 David Elsing <[email protected]>
163;;; Copyright © 2024 Rick Huijzer <[email protected]>
164;;; Copyright © 2024 Peter Kannewitz <[email protected]>
165;;; Copyright © 2024 Aaron Covrig <[email protected]>
166;;; Copyright © 2024 Markku Korkeala <[email protected]>
167;;; Copyright © 2025 Jordan Moore <[email protected]>
168;;; Copyright © 2025 Dariqq <[email protected]>
169;;; Copyright © 2025 Nguyễn Gia Phong <[email protected]>
170;;; Copyright © 2025, Cayetano Santos <[email protected]>
171;;; Copyright © 2025 Jake Forster <[email protected]>
172;;; Copyright © 2025 Luis Felipe López Acevedo <[email protected]>
173;;; Copyright © 2025 Josep Bigorra <[email protected]>
174;;; Copyright © 2025 Matthias Riße <[email protected]>
175;;; Copyright © 2025 Ghislain Vaillant <[email protected]>
176;;; Copyright © 2025 Allan Adair <[email protected]>
177;;; Copyright © 2025-2026 Hennadii Stepanov <[email protected]>
178;;; Copyright © 2025 Luca Kredel <[email protected]>
179;;; Copyright © 2025 Isidor Zeuner <[email protected]>
180;;; Copyright © 2025 Andy Tai <[email protected]>
181;;;
182;;; This file is part of GNU Guix.
183;;;
184;;; GNU Guix is free software; you can redistribute it and/or modify it
185;;; under the terms of the GNU General Public License as published by
186;;; the Free Software Foundation; either version 3 of the License, or (at
187;;; your option) any later version.
188;;;
189;;; GNU Guix is distributed in the hope that it will be useful, but
190;;; WITHOUT ANY WARRANTY; without even the implied warranty of
191;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
192;;; GNU General Public License for more details.
193;;;
194;;; You should have received a copy of the GNU General Public License
195;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
196
197(define-module (gnu packages python-xyz)
198 #:use-module ((guix licenses) #:prefix license:)
199 #:use-module (gnu packages)
200 #:use-module (gnu packages adns)
201 #:use-module (gnu packages algebra)
202 #:use-module (gnu packages attr)
203 #:use-module (gnu packages autotools)
204 #:use-module (gnu packages backup)
205 #:use-module (gnu packages base)
206 #:use-module (gnu packages bash)
207 #:use-module (gnu packages bdw-gc)
208 #:use-module (gnu packages bioinformatics)
209 #:use-module (gnu packages build-tools)
210 #:use-module (gnu packages nss)
211 #:use-module (gnu packages check)
212 #:use-module (gnu packages cmake)
213 #:use-module (gnu packages compression)
214 #:use-module (gnu packages c)
215 #:use-module (gnu packages cpp)
216 #:use-module (gnu packages crypto)
217 #:use-module (gnu packages databases)
218 #:use-module (gnu packages dbm)
219 #:use-module (gnu packages dictionaries)
220 #:use-module (gnu packages digest)
221 #:use-module (gnu packages django)
222 #:use-module (gnu packages djvu)
223 #:use-module (gnu packages documentation)
224 #:use-module (gnu packages duckdb)
225 #:use-module (gnu packages elf)
226 #:use-module (gnu packages emulators)
227 #:use-module (gnu packages enchant)
228 #:use-module (gnu packages file)
229 #:use-module (gnu packages fonts)
230 #:use-module (gnu packages fontutils)
231 #:use-module (gnu packages freedesktop)
232 #:use-module (gnu packages gcc)
233 #:use-module (gnu packages gdb)
234 #:use-module (gnu packages geo)
235 #:use-module (gnu packages ghostscript)
236 #:use-module (gnu packages glib)
237 #:use-module (gnu packages gnome)
238 #:use-module (gnu packages gnupg)
239 #:use-module (gnu packages graphviz)
240 #:use-module (gnu packages gsasl)
241 #:use-module (gnu packages gtk)
242 #:use-module (gnu packages guile-xyz)
243 #:use-module (gnu packages haskell-xyz)
244 #:use-module (gnu packages icu4c)
245 #:use-module (gnu packages image)
246 #:use-module (gnu packages image-processing)
247 #:use-module (gnu packages imagemagick)
248 #:use-module (gnu packages inkscape)
249 #:use-module (gnu packages iso-codes)
250 #:use-module (gnu packages java)
251 #:use-module (gnu packages javascript)
252 #:use-module (gnu packages jupyter)
253 #:use-module (gnu packages kerberos)
254 #:use-module (gnu packages less)
255 #:use-module (gnu packages libevent)
256 #:use-module (gnu packages libffi)
257 #:use-module (gnu packages libusb)
258 #:use-module (gnu packages linux)
259 #:use-module (gnu packages llvm)
260 #:use-module (gnu packages machine-learning)
261 #:use-module (gnu packages man)
262 #:use-module (gnu packages markup)
263 #:use-module (gnu packages maths)
264 #:use-module (gnu packages messaging)
265 #:use-module (gnu packages monitoring)
266 #:use-module (gnu packages multiprecision)
267 #:use-module (gnu packages ncurses)
268 #:use-module (gnu packages networking)
269 #:use-module (gnu packages ninja)
270 #:use-module (gnu packages node)
271 #:use-module (gnu packages openstack)
272 #:use-module (gnu packages pcre)
273 #:use-module (gnu packages pdf)
274 #:use-module (gnu packages perl)
275 #:use-module (gnu packages photo)
276 #:use-module (gnu packages pkg-config)
277 #:use-module (gnu packages protobuf)
278 #:use-module (gnu packages python)
279 #:use-module (gnu packages python-build)
280 #:use-module (gnu packages python-check)
281 #:use-module (gnu packages python-compression)
282 #:use-module (gnu packages python-crypto)
283 #:use-module (gnu packages python-science)
284 #:use-module (gnu packages python-web)
285 #:use-module (gnu packages qt)
286 #:use-module (gnu packages rdf)
287 #:use-module (gnu packages readline)
288 #:use-module (gnu packages regex)
289 #:use-module (gnu packages rpc)
290 #:use-module (gnu packages rust)
291 #:use-module (gnu packages rust-apps)
292 #:use-module (gnu packages scanner)
293 #:use-module (gnu packages search)
294 #:use-module (gnu packages serialization)
295 #:use-module (gnu packages shells)
296 #:use-module (gnu packages sphinx)
297 #:use-module (gnu packages ssh)
298 #:use-module (gnu packages statistics)
299 #:use-module (gnu packages tcl)
300 #:use-module (gnu packages tex)
301 #:use-module (gnu packages texinfo)
302 #:use-module (gnu packages time)
303 #:use-module (gnu packages tls)
304 #:use-module (gnu packages tree-sitter)
305 #:use-module (gnu packages version-control)
306 #:use-module (gnu packages video)
307 #:use-module (gnu packages web)
308 #:use-module (gnu packages wxwidgets)
309 #:use-module (gnu packages xml)
310 #:use-module (gnu packages xdisorg)
311 #:use-module (gnu packages xorg)
312 #:use-module (guix packages)
313 #:use-module (guix build-system cargo)
314 #:use-module (guix build-system cmake)
315 #:use-module (guix build-system copy)
316 #:use-module (guix build-system gnu)
317 #:use-module (guix build-system meson)
318 #:use-module (guix build-system pyproject)
319 #:use-module (guix build-system python)
320 #:use-module (guix deprecation)
321 #:use-module (guix download)
322 #:use-module (guix hg-download)
323 #:use-module (guix git-download)
324 #:use-module (guix gexp)
325 #:use-module (guix utils)
326 #:use-module (ice-9 match)
327 #:use-module (srfi srfi-1)
328 #:use-module (srfi srfi-26))
329
330(define-public python-anaconda-cli-base
331 (package
332 (name "python-anaconda-cli-base")
333 (version "0.5.4")
334 (source
335 (origin
336 (method url-fetch)
337 (uri (pypi-uri "anaconda_cli_base" version))
338 (sha256
339 (base32 "01kspqfyqhzlb3hkxrvdlasch5ai87lizn6yz4g25ff4x7k5b4qx"))))
340 (build-system pyproject-build-system)
341 (arguments
342 (list
343 #:phases
344 #~(modify-phases %standard-phases
345 (add-after 'unpack 'fix-pytest-config
346 (lambda _
347 (substitute* "pyproject.toml"
348 ((".*--cov.*") "")))))))
349 (native-inputs
350 (list python-hatch-vcs
351 python-hatchling
352 python-pytest
353 python-pytest-mock
354 python-setuptools-scm))
355 (propagated-inputs
356 (list python-click
357 python-packaging
358 python-pydantic-settings
359 python-readchar
360 python-rich
361 python-tomli
362 python-typer))
363 (home-page "https://anaconda.github.io/anaconda-cli-base/")
364 (synopsis "Base CLI entrypoint Anaconda CLI plugins")
365 (description
366 "This package provides a base CLI entrypoint supporting Anaconda CLI plugins.")
367 (license license:bsd-3)))
368
369(define-public python-annexremote
370 (package
371 (name "python-annexremote")
372 (version "1.6.6")
373 (source
374 (origin
375 (method git-fetch)
376 (uri (git-reference
377 (url "https://github.com/Lykos153/AnnexRemote")
378 (commit (string-append "v" version))))
379 (file-name (git-file-name name version))
380 (sha256
381 (base32 "0fhd712z143mvsidlwhnq951cvkbfcpybbim3fiyn6r3l1r46a25"))))
382 (build-system pyproject-build-system)
383 (native-inputs
384 (list python-pytest
385 python-setuptools
386 python-setuptools-scm))
387 (home-page "https://github.com/Lykos153/AnnexRemote")
388 (synopsis "Helper module to easily develop git-annex special remotes")
389 (description
390 "This package provides a helper module to develop special remotes for
391git-annex. AnnexRemote implements the line-based external special remote
392protocol of git-annex, while leaving the behavior of the remote up to the
393user.")
394 (license license:gpl3)))
395
396(define-public python-annotated-doc
397 (package
398 (name "python-annotated-doc")
399 (version "0.0.4")
400 (source
401 (origin
402 (method git-fetch)
403 (uri (git-reference
404 (url "https://github.com/fastapi/annotated-doc")
405 (commit version)))
406 (file-name (git-file-name name version))
407 (sha256
408 (base32 "13fh58q1a8kvrx1kjgr6qmd09jhikxc7wlyccajpfz657ipjif9v"))))
409 (build-system pyproject-build-system)
410 (native-inputs
411 (list python-pytest
412 python-pdm-backend))
413 (home-page "https://github.com/fastapi/annotated-doc")
414 (synopsis "Annotated for some Python objects")
415 (description
416 "This package implements a funtionality for document parameters, class
417attributes, return types, and variables inline, with
418Annotated.")
419 (license license:expat)))
420
421(define-public python-archspec
422 (package
423 (name "python-archspec")
424 (version "0.2.5")
425 (source
426 (origin
427 (method git-fetch)
428 (uri (git-reference
429 (url "https://github.com/archspec/archspec")
430 (commit (string-append "v" version))
431 (recursive? #t)))
432 (file-name (git-file-name name version))
433 (sha256
434 (base32 "0pdqdyzwy75fmcv4ncvar57r3zvfbnqgsya6dgfkzjfd0wvwby05"))))
435 (build-system pyproject-build-system)
436 (native-inputs
437 (list python-jsonschema
438 python-poetry-core
439 python-pytest))
440 (home-page "https://github.com/archspec/archspec")
441 (synopsis "Library to query system architecture")
442 (description
443 "Archspec offers human-readable labels for system architecture aspects.
444These aspects include CPU, network fabrics, etc. In addition, it offers
445APIs to detect, query, and compare them.")
446 (license license:expat)))
447
448(define-public python-asyncclick
449 (package
450 (name "python-asyncclick")
451 (version "8.3.0.3")
452 (source
453 (origin
454 (method url-fetch)
455 (uri (pypi-uri "asyncclick" version))
456 (sha256
457 (base32 "1i8jb2mir9gflw9pram720diq6fb2yn8pjja1m1q3arzq64zl993"))))
458 (build-system pyproject-build-system)
459 ;; tests: 1418 passed, 21 skipped, 1 xfailed
460 (native-inputs
461 (list less
462 python-flit-core
463 python-pytest
464 python-trio))
465 (propagated-inputs
466 (list python-anyio))
467 (home-page "https://github.com/python-trio/asyncclick")
468 (synopsis "Python composable command line utility, trio-compatible version ")
469 (description
470 "AsyncClick is a fork of Click that works well with anyio, Trio, or
471asyncio.")
472 (license license:bsd-3)))
473
474(define-public python-asyncstdlib
475 (package
476 (name "python-asyncstdlib")
477 (version "3.13.0")
478 (source
479 (origin
480 (method url-fetch)
481 (uri (pypi-uri "asyncstdlib" version))
482 (sha256
483 (base32 "0cxms50gygrvp4n4rk5xxhnl6k7nsrhhixdyk6xk70hi9ysgz9pj"))))
484 (build-system pyproject-build-system)
485 (native-inputs (list python-flit-core python-pytest))
486 (home-page "https://asyncstdlib.readthedocs.io")
487 (synopsis "Compatibility layer between the Python stdlib and @code{async}
488callables")
489 (description
490 "The @code{asyncstdlib} library re-implements functions and classes of
491the Python standard library to make them compatible with @code{async}
492callables, iterables and context managers. It is fully agnostic to
493@code{async} event loops and seamlessly works with @code{asyncio}, third-party
494libraries such as @code{trio}, as well as any custom @code{async} event
495loop.")
496 (license license:expat)))
497
498(define-public python-awesomeversion
499 (package
500 (name "python-awesomeversion")
501 (version "24.6.0")
502 (source
503 (origin
504 (method git-fetch)
505 (uri (git-reference
506 (url "https://github.com/ludeeus/awesomeversion")
507 (commit version)))
508 (file-name (git-file-name name version))
509 (sha256
510 (base32 "1kvzhhd2ah0sadlsp5xs3qbiknixq4xwhk3yb6kmhcdl2zcbi4cn"))
511 (modules '((guix build utils)))
512 (snippet #~(substitute* "pyproject.toml"
513 (("version = \"0\"")
514 (format #f "version = \"~a\"" #$version))))))
515 (build-system pyproject-build-system)
516 (native-inputs
517 (list python-poetry-core
518 python-pytest
519 python-pytest-snapshot))
520 (home-page "https://github.com/ludeeus/awesomeversion")
521 (synopsis "Create and compare version objects")
522 (description
523 "This package provides a way to make anything a version object, and
524compare against a vast section of other version formats.")
525 (license license:expat)))
526
527(define-public python-awkward-cpp
528 (package
529 (name "python-awkward-cpp")
530 ;; TODO: any higher versions need pybind11 >= 3, see:
531 ;; <https://codeberg.org/guix/guix/pulls/4696>.
532 (version "47")
533 (source
534 (origin
535 (method url-fetch)
536 (uri (pypi-uri "awkward_cpp" version))
537 (sha256
538 (base32 "03wm649lzr1vgp99d303p53m1ybaf655mpvy30rapv8hd2bz8v37"))))
539 (build-system pyproject-build-system)
540 ;; tests: 22304 passed, 524 skipped
541 (native-inputs
542 (list cmake-minimal
543 pybind11
544 python-pytest
545 python-scikit-build-core))
546 (propagated-inputs
547 (list python-numpy))
548 (home-page "https://awkward-array.org/")
549 (synopsis "CPU kernels and compiled extensions for Awkward Array")
550 (description "Awkward CPP provides precompiled routines for the awkward
551package. It is not useful on its own, only as a dependency for awkward.")
552 (license license:bsd-3)))
553
554(define-public python-awkward
555 (package
556 (name "python-awkward")
557 (version "2.8.5")
558 (source
559 (origin
560 (method url-fetch)
561 (uri (pypi-uri "awkward" version))
562 (sha256
563 (base32 "12bw8hkxnx4pkwamih933c5syrjg1pyql288b7h190mr1d24k42b"))))
564 (build-system pyproject-build-system)
565 (arguments
566 (list
567 ;; tests: 2798 passed, 156 skipped
568 #:test-flags
569 ;; CUDA is and requires proprietary software.
570 #~(list "--ignore=tests-cuda-kernels/"
571 "--ignore=tests-cuda/")))
572 (native-inputs
573 (list python-hatch-fancy-pypi-readme
574 python-hatchling
575 python-pytest))
576 (propagated-inputs
577 (list python-awkward-cpp
578 python-fsspec
579 python-importlib-metadata
580 python-numpy
581 python-packaging))
582 (home-page "https://awkward-array.org/")
583 (synopsis "Manipulate JSON-like data with NumPy-like idioms")
584 (description "Awkward Array is a library for nested, variable-sized data,
585including arbitrary-length lists, records, mixed types, and missing data,
586using NumPy-like idioms.")
587 (license license:bsd-3)))
588
589(define-public python-backports-tarfile
590 (package
591 (name "python-backports-tarfile")
592 (version "1.2.0")
593 (source
594 (origin
595 (method url-fetch)
596 (uri (pypi-uri "backports_tarfile" version))
597 (sha256
598 (base32 "14d9xibla5aahjqf9y0nmpk5vs4qds5rfy628j0invkld3104pnp"))))
599 (build-system pyproject-build-system)
600 (arguments
601 (list #:tests? #f)) ;XXX: Cycles with python-jaraco-context
602 (native-inputs
603 (list python-setuptools
604 python-setuptools-scm
605 python-wheel))
606 (home-page "https://github.com/jaraco/backports.tarfile")
607 (synopsis "Backport of CPython tarfile module")
608 (description "This package provides a backport of CPython tarfile module.")
609 (license license:expat)))
610
611(define-public python-bresenham
612 (package
613 (name "python-bresenham")
614 (version "0.2.1")
615 (source
616 (origin
617 (method git-fetch)
618 (uri (git-reference
619 (url "https://github.com/encukou/bresenham")
620 (commit (string-append "v" version))))
621 (file-name (git-file-name name version))
622 (sha256
623 (base32 "07h04l50y35rhp13mqis61d1dkd7426q1gdfy5hd6rcgcfv15kxd"))))
624 (build-system pyproject-build-system)
625 (native-inputs
626 (list python-pytest
627 python-setuptools
628 python-wheel))
629 (home-page "https://github.com/encukou/bresenham")
630 (synopsis "Implementation of Bresenham's line drawing algorithm")
631 (description
632 "This package provides a Python implementation of
633@url{https://en.wikipedia.org/wiki/Bresenham's_line_algorithm, Bresenham's
634line drawing algorithm}.")
635 (license license:expat)))
636
637(define-public python-calmjs-parse
638 (package
639 (name "python-calmjs-parse")
640 (version "1.3.3")
641 (source
642 (origin
643 (method git-fetch)
644 (uri (git-reference
645 (url "https://github.com/calmjs/calmjs.parse/")
646 (commit version)))
647 (file-name (git-file-name name version))
648 (sha256
649 (base32 "08dmi4chamk5dbdpvrc0nb09iybfhj3wqwxgffiqnkj7030qhqb8"))))
650 (build-system pyproject-build-system)
651 ;; tests: 797 passed, 1 warning
652 (native-inputs (list python-pytest python-setuptools))
653 (propagated-inputs (list python-ply))
654 (home-page "https://github.com/calmjs/calmjs.parse/")
655 (synopsis "Parsers for ECMA standards")
656 (description
657 "@code{Calmjs-parse} is a collection of helper libraries for
658understanding ECMA script.")
659 (license license:expat)))
660
661(define-public python-chameleon
662 (package
663 (name "python-chameleon")
664 (version "4.6.0")
665 (source
666 (origin
667 (method url-fetch)
668 (uri (pypi-uri "Chameleon" version))
669 (sha256
670 (base32 "06qwg3sk26m53b1sl8b798scik7klkx53vijs7d8mwzpyqlxf34i"))))
671 (build-system pyproject-build-system)
672 (native-inputs
673 (list python-pytest
674 python-setuptools))
675 (home-page "https://chameleon.readthedocs.io")
676 (synopsis "Fast HTML/XML Template Compiler")
677 (description
678 "Chameleon is an HTML/XML template engine for Python. It uses the page
679templates language.")
680 ;; Project is duo licensed, see: LICENSE.txt.
681 (license (list license:zpl2.1
682 license:psfl))))
683
684(define-public python-conda-content-trust
685 (package
686 (name "python-conda-content-trust")
687 (version "0.2.0")
688 (source
689 (origin
690 (method git-fetch)
691 (uri (git-reference
692 (url "https://github.com/conda/conda-content-trust")
693 (commit version)))
694 (file-name (git-file-name name version))
695 (sha256
696 (base32 "1yvfwm7i18sfvgdasibdgnghvj5w5p4hr6i37v0cspwmkczgna7z"))))
697 (build-system pyproject-build-system)
698 (arguments
699 (list
700 #:test-flags
701 ;; XXX: Not packaged yet:
702 ;; <https://github.com/secure-systems-lab/securesystemslib>.
703 ;;
704 ;; ImportError: The securesystemslib library is required, which appears
705 ;; to be unavailable.
706 #~(list #$@(map (lambda (test) (string-append "--deselect="
707 "tests/test_root.py::"
708 test))
709 (list "test_sign_root_metadata_dict_via_gpg"
710 "test_sign_root_metadata_via_gpg"
711 "test_gpg_pubkey_in_ssl_format")))
712 #:phases
713 #~(modify-phases %standard-phases
714 (add-after 'unpack 'fix-pytest-config
715 (lambda _
716 (substitute* "setup.cfg"
717 (("--cov.*") ""))))
718 (add-before 'build 'set-version
719 (lambda _
720 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
721 (native-inputs
722 (list python-hatch-vcs
723 python-hatchling
724 python-pytest))
725 (propagated-inputs
726 (list python-cryptography))
727 (home-page "https://github.com/conda/conda-content-trust")
728 (synopsis "Signing and verification tools for Conda")
729 (description
730 "This package implements a functionalit of signing and verification tools
731for Conda. @url{https://theupdateframework.io/, Based on The Update
732Framework (TUF)}, conda-content-trust is intended to ensure that when users in
733the conda ecosystem obtain a package or data about that package, they can know
734whether or not it is trustworthy (e.g. originally comes from a reliable source
735and has not been tampered with). A basic library and basic CLI are included
736to provide signing, verification, and trust delegation functionality.")
737 (license license:bsd-3)))
738
739(define-public python-conda-inject
740 (package
741 (name "python-conda-inject")
742 (version "1.3.2")
743 (source
744 (origin
745 (method git-fetch)
746 (uri (git-reference
747 (url "https://github.com/koesterlab/conda-inject")
748 (commit (string-append "v" version))))
749 (file-name (git-file-name name version))
750 (sha256
751 (base32 "1aig9l676wc2sjb20y7rdqf0hfcfjhh92yfiy82mf7kfnv7rp3rk"))))
752 (build-system pyproject-build-system)
753 (arguments
754 (list #:tests? #f)) ; tests require setting up Conda
755 (native-inputs
756 (list python-poetry-core))
757 (propagated-inputs
758 (list python-pyyaml))
759 (home-page "https://github.com/koesterlab/conda-inject")
760 (synopsis "Inject a conda environment into the current python environment")
761 (description
762 "This package provides helper functions for injecting a conda
763environment into the current python environment (by modifying @code{sys.path},
764without actually changing the current python environment).")
765 (license license:expat)))
766
767(define-public python-copydetect
768 (package
769 (name "python-copydetect")
770 (version "0.5.0")
771 (source
772 (origin
773 (method git-fetch)
774 (uri (git-reference
775 (url "https://github.com/blingenf/copydetect")
776 (commit version)))
777 (sha256
778 (base32 "0hp9994bbnzp79xxprgwsbgc0w06sb4n82nghl90w1z9zbvwn6gz"))))
779 (build-system pyproject-build-system)
780 (propagated-inputs (list python-jinja2
781 python-matplotlib
782 python-numpy
783 python-pygments
784 python-tqdm))
785 (native-inputs (list python-setuptools
786 python-pytest
787 python-wheel))
788 (home-page "https://github.com/blingenf/copydetect")
789 (synopsis "Code plagiarism detection tool")
790 (description "Copydetect is a tool to detect likely instances of plagiarism
791based on the winnowing algorithm. It takes a list of directories as input and
792generates an HTML report displaying copied slices as output.")
793 (license license:expat)))
794
795(define-public python-couleur
796 (package
797 (name "python-couleur")
798 (version "0.7.4")
799 (source
800 (origin
801 (method url-fetch)
802 (uri (pypi-uri "couleur" version))
803 (sha256
804 (base32 "1fk175k6l8isx43jmh7n7xyzb18ysdixzr74dxqqhpyd5sbsb5hy"))))
805 (build-system pyproject-build-system)
806 (arguments (list #:tests? #f)) ;no tests in PyPI, tests depend on Nose
807 (native-inputs
808 (list python-setuptools
809 python-wheel))
810 (home-page "https://github.com/gabrielfalcao/couleur")
811 (synopsis "ANSI terminal tool for Python")
812 (description
813 "This package provides an ANSI terminal tool for Python, colored shell
814and other handy fancy features.")
815 (license license:lgpl3+)))
816
817(define-public python-crc
818 (package
819 (name "python-crc")
820 (version "7.1.0")
821 (source
822 (origin
823 (method git-fetch)
824 (uri (git-reference
825 (url "https://github.com/Nicoretti/crc/")
826 (commit version)))
827 (file-name (git-file-name name version))
828 (sha256
829 (base32 "1b9164z6v3ng5s8564a0gjdzqws6zf5aqvk6mnzw7ysk6d5rbb9r"))))
830 (build-system pyproject-build-system)
831 (native-inputs
832 (list python-poetry-core
833 python-pytest
834 python-wheel))
835 (home-page "https://nicoretti.github.io/crc/")
836 (synopsis "Pure Python CRC library")
837 (description
838 "This library computes and verifies @acronym{Cyclic Redundancy Check,
839CRC} checksums, using predefined and custom CRC configurations.
840
841Configurations:
842@table @asis
843@item CRC8
844 CCITT AUTOSAR SAEJ1850 SAEJ1850_ZERO BLUETOOTH MAXIM-DOW
845@item CRC16
846 XMODEM GSM PROFIBUS MODBUS IBM-3740 KERMIT
847@item CRC32
848 CRC32 AUTOSAR BZIP2 POSIX
849@item CRC64
850 CRC64
851@end table")
852 (license license:bsd-2)))
853
854(define-public python-cron-converter
855 (package
856 (name "python-cron-converter")
857 (version "1.3.1")
858 (source
859 (origin
860 (method git-fetch)
861 (uri (git-reference
862 (url "https://github.com/Sonic0/cron-converter")
863 (commit (string-append "v" version))))
864 (file-name (git-file-name name version))
865 (sha256
866 (base32 "0k5svwh9g6fxjx567iwjysq8x07cmy8qfwpk0pm0jjrgr42w9l6c"))))
867 (build-system pyproject-build-system)
868 (arguments
869 (list #:test-backend #~'unittest
870 #:test-flags #~(list "discover" "--verbose" "tests/unit")))
871 (native-inputs
872 (list python-dateutil
873 python-setuptools))
874 (propagated-inputs
875 (list python-dateutil))
876 (home-page "https://github.com/Sonic0/cron-converter")
877 (synopsis "Cron string parser and scheduler for Python")
878 (description
879 "Cron-converter provides a Cron string parser (from string/lists to
880string/lists) and iteration for the datetime object with a cron like format.")
881 (license license:expat)))
882
883(define-public python-curtsies
884 (package
885 (name "python-curtsies")
886 (version "0.4.3")
887 (source
888 (origin
889 (method url-fetch)
890 (uri (pypi-uri "curtsies" version))
891 (sha256
892 (base32 "09c8c4vssm2zkq017xj99vhcrisfva4nkz92w8dly4jjz7xhyahh"))))
893 (build-system pyproject-build-system)
894 (native-inputs
895 (list python-pyte
896 python-pytest
897 python-setuptools
898 python-wheel))
899 (propagated-inputs
900 (list python-blessed
901 python-cwcwidth))
902 (home-page "https://github.com/bpython/curtsies")
903 (synopsis "Library for curses-like terminal interaction with colored strings")
904 (description
905 "Curtsies is a Python library for interacting with the terminal. It
906features string-like objects which carry formatting information, per-line
907fullscreen terminal rendering, and keyboard input event reporting.")
908 (license license:expat)))
909
910(define-public python-customtkinter
911 (package
912 (name "python-customtkinter")
913 (version "5.2.2")
914 (source
915 (origin
916 (method git-fetch)
917 (uri (git-reference
918 (url "https://github.com/TomSchimansky/CustomTkinter")
919 (commit (string-append "v" version))))
920 (file-name (git-file-name name version))
921 (sha256
922 (base32 "0vma6x8zg7d5h2ggphi6m7bnqzskxysi9rcpkr6rrgylfrsv03fn"))))
923 (build-system pyproject-build-system)
924 (arguments
925 (list
926 #:phases
927 #~(modify-phases %standard-phases
928 (add-before 'check 'start-xorg-server
929 (lambda _
930 (setenv "HOME" "/tmp")
931 ;; The test suite requires a running X server.
932 (system "Xvfb :99 -screen 0 1024x768x24 &")
933 (setenv "DISPLAY" ":99.0")))
934 (replace 'check
935 (lambda* (#:key tests? #:allow-other-keys)
936 (when tests?
937 (with-directory-excursion "test"
938 (invoke "python" "unit_tests/test_all.py"))))))))
939 (propagated-inputs
940 (list (list python "tk")
941 python-darkdetect
942 python-packaging))
943 (native-inputs
944 (list python-setuptools
945 xorg-server-for-tests))
946 (home-page "https://customtkinter.tomschimansky.com")
947 (synopsis
948 "Python @acronym{User Interface, UI} library based on Tkinter")
949 (description
950 "CustomTkinter provides fully customizable widgets, created and used
951like normal Tkinter widgets, which can also be used in combination with normal
952Tkinter elements.")
953 (license license:expat)))
954
955(define-public python-darkdetect
956 (package
957 (name "python-darkdetect")
958 (version "0.8.0")
959 (source
960 (origin
961 (method url-fetch)
962 (uri (pypi-uri "darkdetect" version))
963 (sha256
964 (base32 "1cgqgpz36dfn7hsqc29ha9pmxmzdjlwdq9aclkgbagi6f08qwhmm"))))
965 (build-system pyproject-build-system)
966 (arguments
967 (list
968 #:tests? #f)) ;no tests in PyPI or Git.
969 (native-inputs (list python-setuptools))
970 (home-page "https://github.com/albertosottile/darkdetect")
971 (synopsis "Detect OS dark mode from Python")
972 (description
973 "This package allows to detect if the user is using Dark Mode.")
974 (license license:bsd-3)))
975
976(define-public python-decopatch
977 (package
978 (name "python-decopatch")
979 (version "1.4.10")
980 (source
981 (origin
982 (method url-fetch)
983 (uri (pypi-uri "decopatch" version))
984 (sha256
985 (base32 "082pnnc7a1d7rk40k7m72w7kw8dk7g8m3yzq4cn1hl217z4ljzwm"))))
986 (build-system pyproject-build-system)
987 (arguments
988 (list #:tests? #f)) ;XXX: cycles with python-pytest-cases
989 (native-inputs
990 (list python-setuptools
991 python-setuptools-scm))
992 (propagated-inputs
993 (list python-makefun))
994 (home-page "https://github.com/smarie/python-decopatch")
995 (synopsis "Create decorators easily in Python")
996 (description
997 "This package provide implements a functionality to simplify writing
998decorators in Python.")
999 (license license:bsd-3)))
1000
1001(define-public python-distance
1002 (let ((commit "ad7f9dc7e9b0e88a08d0cefd1442f4ab1dd1779b")
1003 (revision "0"))
1004 (package
1005 (name "python-distance")
1006 (version (git-version "0.1.3" revision commit))
1007 (source
1008 (origin
1009 (method git-fetch)
1010 (uri (git-reference
1011 (url "https://github.com/doukremt/distance")
1012 (commit commit)))
1013 (file-name (git-file-name name version))
1014 (sha256
1015 (base32 "1vcn0506dy68xyjxdjsl75zzc4b8lmg2yxjgak4i35l7a97yzvwy"))))
1016 (build-system pyproject-build-system)
1017 (arguments
1018 (list #:test-backend #~'custom
1019 #:test-flags #~(list "tests/tests.py")))
1020 (native-inputs (list python-setuptools))
1021 (home-page "https://github.com/doukremt/distance")
1022 (synopsis "Utilities for comparing sequences")
1023 (description
1024 "This package provides helpers for computing similarities between
1025arbitrary sequences. Included metrics are Levenshtein, Hamming, Jaccard, and
1026Sorensen distance, plus some bonuses. All distance computations are
1027implemented in pure Python, and most of them are also implemented in C.")
1028 (license license:gpl2+))))
1029
1030(define-public python-domdf-python-tools
1031 (package
1032 (name "python-domdf-python-tools")
1033 (version "3.10.0")
1034 (source
1035 (origin
1036 (method url-fetch)
1037 (uri (pypi-uri "domdf_python_tools" version))
1038 (sha256
1039 (base32 "16727afn92bp6hj4hvp27scc5ldz1y27z9abbxgi9sgiyk90iqra"))))
1040 (build-system pyproject-build-system)
1041 (native-inputs (list python-hatch-requirements-txt))
1042 (arguments (list #:tests? #f)) ;no tests in PyPI archive
1043 (propagated-inputs
1044 (list python-natsort
1045 python-typing-extensions))
1046 (home-page "https://github.com/domdfcoding/domdf_python_tools")
1047 (synopsis "Helpful functions for Python")
1048 (description
1049 "This package provide helpfull functions for Python's testing and
1050packaging tasks.")
1051 (license license:expat)))
1052
1053(define-public python-envs
1054 (package
1055 (name "python-envs")
1056 (version "1.4")
1057 (source
1058 (origin
1059 (method url-fetch)
1060 (uri (pypi-uri "envs" version))
1061 (sha256
1062 (base32 "160358zskyg6g606lndjcv7yd2nv5f7ca14y55lds72xk333b14x"))))
1063 (build-system pyproject-build-system)
1064 (arguments
1065 (list #:test-backend #~'unittest))
1066 (native-inputs
1067 (list python-poetry-core))
1068 (home-page "https://github.com/capless/envs")
1069 (synopsis "Easy access of environment variables from Python")
1070 (description
1071 "This package implements a functionality to access of environment
1072variables from Python with support for strings, booleans, list, tuples, and
1073dicts.")
1074 (license license:asl2.0)))
1075
1076(define-public python-exitcode
1077 (package
1078 (name "python-exitcode")
1079 (version "0.1.0")
1080 (source
1081 (origin
1082 (method url-fetch)
1083 (uri (pypi-uri "exitcode" version))
1084 (sha256
1085 (base32 "01yybyi4pkvvf4382p28gh4lkxrcyl5vcx2xk95nbsb8011f37mw"))))
1086 (build-system pyproject-build-system)
1087 (arguments
1088 (list #:tests? #f)) ; no tests in PyPI or Git
1089 (native-inputs
1090 (list python-poetry-core
1091 python-setuptools))
1092 (home-page "https://github.com/rumpelsepp/exitcode")
1093 (synopsis "Preferred system exit codes as defined by sysexits.h")
1094 (description
1095 "This package implements a preferred system exit codes as defined by
1096@url{https://man.openbsd.org/sysexits, sysexits.h}. This library is inspired by
1097Rust's @url{https://docs.rs/exitcode, exitcode}.")
1098 (license license:expat)))
1099
1100(define-public python-fastnumbers
1101 (package
1102 (name "python-fastnumbers")
1103 (version "5.1.1")
1104 (source
1105 (origin
1106 (method url-fetch)
1107 (uri (pypi-uri "fastnumbers" version))
1108 (sha256
1109 (base32 "0jzsylarbckivx762rxmc9syn7a6hqq3xhp5xnpfsln0rlhs0gqq"))))
1110 (build-system pyproject-build-system)
1111 (native-inputs
1112 (list python-numpy
1113 python-pytest
1114 python-setuptools
1115 python-setuptools-scm))
1116 (home-page "https://github.com/SethMMorton/fastnumbers")
1117 (synopsis "Super-fast and clean conversions to numbers")
1118 (description
1119 "This package provides provides drop-in replacements for the Python
1120built-in @code{int} and @code{float} that are on par or faster with the Python
1121equivalents.")
1122 (license license:expat)))
1123
1124(define-public python-findpython
1125 (package
1126 (name "python-findpython")
1127 (version "0.7.0")
1128 (source
1129 (origin
1130 (method url-fetch)
1131 (uri (pypi-uri "findpython" version))
1132 (sha256
1133 (base32 "1p3kqr00sym0yaddsbaw1gf7nslfnscnd050q6ipj9rmfry68ccb"))))
1134 (build-system pyproject-build-system)
1135 (native-inputs
1136 (list python-pdm-backend
1137 python-pytest))
1138 (propagated-inputs
1139 (list python-packaging
1140 python-platformdirs))
1141 (home-page "https://github.com/frostming/findpython")
1142 (synopsis "Find Python versions the system")
1143 (description
1144 "This package provides a utility to find Python versions on the current
1145system.")
1146 (license license:expat)))
1147
1148(define-public python-flexcache
1149 (package
1150 (name "python-flexcache")
1151 (version "0.3")
1152 (source
1153 (origin
1154 (method url-fetch)
1155 (uri (pypi-uri "flexcache" version))
1156 (sha256
1157 (base32 "0mh6c3s0ykmnnhzys72xq5ls4myzpz1y86fmz0ngw6v2l3aknx0q"))))
1158 (build-system pyproject-build-system)
1159 (native-inputs
1160 (list python-pytest
1161 python-pytest-cov
1162 python-pytest-mpl
1163 python-pytest-subtests
1164 python-setuptools
1165 python-setuptools-scm
1166 python-wheel))
1167 (propagated-inputs
1168 (list python-typing-extensions))
1169 (home-page "https://github.com/hgrecco/flexcache")
1170 (synopsis "Caching transformed versions of a source object")
1171 (description
1172 "This package implements a functionality to cache on disk the result of
1173expensive calculations. It was started as part of
1174@url{https://github.com/hgrecco/pint, Pint}, the Python units package.")
1175 (license license:bsd-3)))
1176
1177(define-public python-flexparser
1178 (package
1179 (name "python-flexparser")
1180 (version "0.4")
1181 (source
1182 (origin
1183 (method url-fetch)
1184 (uri (pypi-uri "flexparser" version))
1185 (sha256
1186 (base32 "1cpn5scxnxbd2jrnany4znzzn9im5h5gwr59bp62rglman89hv96"))))
1187 (build-system pyproject-build-system)
1188 (native-inputs
1189 (list python-pytest
1190 python-pytest-cov
1191 python-pytest-mpl
1192 python-pytest-subtests
1193 python-setuptools
1194 python-setuptools-scm
1195 python-wheel))
1196 (propagated-inputs
1197 (list python-typing-extensions))
1198 (home-page "https://github.com/hgrecco/flexparser")
1199 (synopsis "Parsing made fun ... using typing")
1200 (description "This project provides a typed parser. It was started as
1201part of @url{https://github.com/hgrecco/pint, Pint}, the Python units
1202package. ")
1203 (license license:bsd-3)))
1204
1205(define-public python-grapheme
1206 ;; 0.6.0 has not git tag, PyPI has no tests. use the latest commit on master
1207 ;; branch.
1208 (let ((commit "66f07ca02fc64a9ea2f9b4ad66593b226d473adb")
1209 (revision "0"))
1210 (package
1211 (name "python-grapheme")
1212 (version (git-version "0.6.0" revision commit))
1213 (source
1214 (origin
1215 (method git-fetch)
1216 (uri (git-reference
1217 (url "https://github.com/alvinlindstam/grapheme")
1218 (commit commit)))
1219 (file-name (git-file-name name version))
1220 (sha256
1221 (base32 "0fqw6iymg7s8q1pfwijx0awcj1j55jppx7hfa5ci7y0c7x4jc8v9"))))
1222 (build-system pyproject-build-system)
1223 (native-inputs
1224 (list python-pytest
1225 python-setuptools))
1226 (home-page "https://github.com/alvinlindstam/grapheme")
1227 (synopsis "Unicode grapheme helpers")
1228 (description
1229 "This package provides a functionality for working with user perceived
1230characters. More specifically, string manipulation and calculation functions
1231for working with grapheme cluster groups (graphemes) as defined by the
1232@url{http://unicode.org/reports/tr29/, Unicode Standard Annex #29}.")
1233 (license license:expat))))
1234
1235(define-public python-halo
1236 (package
1237 (name "python-halo")
1238 (version "0.0.31")
1239 (source
1240 (origin
1241 (method url-fetch)
1242 (uri (pypi-uri "halo" version))
1243 (sha256
1244 (base32 "1mn97h370ggbc9vi6x8r6akd5q8i512y6kid2nvm67g93r9a6rvv"))))
1245 (build-system pyproject-build-system)
1246 (arguments
1247 (list #:tests? #f)) ;no tests in PyPI archive, no tags in Git
1248 (native-inputs
1249 (list python-setuptools))
1250 (propagated-inputs
1251 (list python-colorama
1252 python-log-symbols
1253 python-six
1254 python-spinners
1255 python-termcolor))
1256 (home-page "https://github.com/manrajgrover/halo")
1257 (synopsis "Python library to display graphical spinners in the terminal")
1258 (description
1259 "Halo is a Python library to display graphical spinners in the terminal.
1260It also supports IPython/Jupyter.")
1261 (license license:expat)))
1262
1263(define-public python-hatch-argparse-manpage
1264 (package
1265 (name "python-hatch-argparse-manpage")
1266 (version "1.0.0")
1267 (source
1268 (origin
1269 (method url-fetch)
1270 (uri (pypi-uri "hatch_argparse_manpage" version))
1271 (sha256
1272 (base32 "1zbbww9akz1lca3br67zik80ql774xpfg22njxdxjiw4kpz5alb6"))))
1273 (build-system pyproject-build-system)
1274 (native-inputs (list python-hatchling))
1275 (propagated-inputs (list python-argparse-manpage python-rich))
1276 (home-page "https://github.com/damonlynch/hatch-argparse-manpage")
1277 (synopsis "Hatch build hook plugin to generate manual pages")
1278 (description
1279 "This package provides a build hook plugin for Hatch to automatically
1280 bs generate a manual page from an ArgumentParser object, using argparse-manpage
1281by Pavel Raiskup.")
1282 (license license:gpl3+)))
1283
1284(define-public python-hatch-gettext
1285 (package
1286 (name "python-hatch-gettext")
1287 (version "1.1.0")
1288 (source
1289 (origin
1290 (method url-fetch)
1291 (uri (pypi-uri "hatch_gettext" version))
1292 (sha256
1293 (base32 "05sh574p1c4wdf9gky965km3f5n904hxkyils07f1b0jyswlm3nh"))))
1294 (build-system pyproject-build-system)
1295 (native-inputs (list python-hatchling))
1296 (propagated-inputs (list python-rich))
1297 (home-page "https://github.com/damonlynch/hatch-gettext")
1298 (synopsis "Hatch build hook plugin for GNU gettext")
1299 (description
1300 "This package provides a build hook plugin for Hatch that compiles
1301 bsmulti-lingual messages with GNU gettext's tools msgfmt.")
1302 (license license:gpl3+)))
1303
1304;; TODO: Move to ci or task-runners, see:
1305;; <https://codeberg.org/guix/guix/issues/3096>.
1306(define-public python-huey
1307 (package
1308 (name "python-huey")
1309 (version "2.5.3")
1310 (source
1311 (origin
1312 (method git-fetch)
1313 (uri (git-reference
1314 (url "https://github.com/coleifer/huey")
1315 (commit version)))
1316 (file-name (git-file-name name version))
1317 (sha256
1318 (base32 "189sin0k9imiddm10xa5llql3953p1jv6dqgxm78hy18qrlbkz02"))))
1319 (build-system pyproject-build-system)
1320 (arguments
1321 (list
1322 #:phases
1323 #~(modify-phases %standard-phases
1324 (add-after 'unpack 'remove-which
1325 (lambda _
1326 (substitute* "huey/tests/test_kt_huey.py"
1327 (("^has_ktserver = sp.call\\(\\['which', 'ktserver'\\].*$")
1328 "has_ktserver = False"))))
1329 (replace 'check
1330 (lambda* (#:key tests? #:allow-other-keys)
1331 (when tests?
1332 (spawn "redis-server" '("redis-server"))
1333 (invoke "python3" "-m" "runtests" "--verbosity" "2")))))))
1334 (native-inputs (list python-setuptools redis tzdata-for-tests))
1335 (propagated-inputs (list python-redis))
1336 (home-page "https://huey.readthedocs.io")
1337 (synopsis "Lightweight task queue for Python")
1338 (description
1339 "Huey is a lightweight task queue for Python applications. Huey
1340supports:
1341@itemize
1342@item Redis, SQLite, file-system, or in-memory storage
1343@item multi-process, multi-thread or greenlet task execution models
1344@item scheduling tasks to execute at a given time, or after a given delay
1345@item scheduling recurring tasks, like a crontab
1346@item automatically retrying tasks that fail
1347@item task prioritization
1348@item task result storage
1349@item task expiration
1350@item task locking
1351@item task pipelines and chains
1352@end itemize")
1353 (license license:expat)))
1354
1355(define-public python-id
1356 (package
1357 (name "python-id")
1358 (version "1.5.0")
1359 (source
1360 (origin
1361 (method url-fetch)
1362 (uri (pypi-uri "id" version))
1363 (sha256
1364 (base32 "07acfgq7vmbz94p5axn9d40m8qjcgfllfkr4jz7dpfxcksjbhb19"))))
1365 (build-system pyproject-build-system)
1366 (native-inputs
1367 (list python-flit-core
1368 python-pretend
1369 python-pytest))
1370 (propagated-inputs
1371 (list python-requests))
1372 (home-page "https://github.com/di/id")
1373 (synopsis "Tool for generating OIDC identities")
1374 (description
1375 "This package provides a tool for generating @code{OIDC, OpenID Connect}
1376identities.")
1377 (license license:asl2.0)))
1378
1379(define-public python-iniparse
1380 (package
1381 (name "python-iniparse")
1382 (version "0.5.1")
1383 (source
1384 (origin
1385 (method git-fetch)
1386 (uri (git-reference
1387 (url "https://github.com/candlepin/python-iniparse")
1388 (commit version)))
1389 (file-name (git-file-name name version))
1390 (sha256
1391 (base32 "0hh676j1yw7krwmzpaxl59bhl5g04dbbzbr84qryrw420npy2prp"))))
1392 (build-system pyproject-build-system)
1393 (arguments
1394 (list
1395 #:test-backend #~'custom
1396 #:test-flags #~(list "runtests.py")
1397 #:phases
1398 #~(modify-phases %standard-phases
1399 (add-before 'check 'disable-tests
1400 (lambda _
1401 ;; XXX: Three tests failed to compare lists.
1402 (substitute* "tests/test_compat.py"
1403 (("test_read_returns_file_list")
1404 "disabled_test_read_returns_file_list")))))))
1405 (native-inputs
1406 (list python-setuptools))
1407 (home-page "https://github.com/candlepin/python-iniparse")
1408 (synopsis "Accessing and Modifying INI files")
1409 (description
1410 "iniparse is a INI parser for Python which is:
1411@itemize
1412@item Compatible with ConfigParser: Backward compatible implementations of
1413ConfigParser, RawConfigParser, and SafeConfigParser are included that are
1414API-compatible with the Python standard library.
1415@item Preserves structure of INI files: Order of sections & options,
1416indentation, comments, and blank lines are preserved as far as possible when
1417data is updated.
1418@item More convenient: Values can be accessed using dotted notation
1419(@code{cfg.user.name}), or using container syntax
1420(@code{cfg['user']['name']}).
1421@end itemize")
1422 (license license:expat)))
1423
1424(define-public python-inotify
1425 (package
1426 (name "python-inotify")
1427 (version "0.2.12")
1428 (source
1429 (origin
1430 (method git-fetch)
1431 (uri (git-reference
1432 (url "https://github.com/dsoprea/PyInotify")
1433 (commit version)))
1434 (file-name (git-file-name name version))
1435 (sha256
1436 (base32 "1n1rqpzk70ap2i4zk2k0znz407i909y2001v65agy7y30apjzb67"))))
1437 (build-system pyproject-build-system)
1438 (arguments
1439 (list
1440 #:phases
1441 #~(modify-phases %standard-phases
1442 (add-after 'unpack 'fix-requirements
1443 (lambda _
1444 (substitute* "inotify/resources/requirements.txt"
1445 (("build")
1446 "")))))))
1447 (native-inputs (list python-pytest python-setuptools))
1448 (home-page "https://github.com/dsoprea/PyInotify")
1449 (synopsis "Linux filesystem activity monitor library for Python")
1450 (description
1451 "This package provides an efficient and elegant inotify (Linux filesystem
1452activity monitor) library for Python.")
1453 (license license:gpl2)))
1454
1455(define-public python-intervaltree
1456 (package
1457 (name "python-intervaltree")
1458 (version "3.1.0")
1459 (source
1460 (origin
1461 (method url-fetch)
1462 (uri (pypi-uri "intervaltree" version))
1463 (sha256
1464 (base32
1465 "0bcm6c6r4ck9nfj9xwz4rm2swc5lrjvmw3lyl6rgj639jf41nawh"))))
1466 (build-system pyproject-build-system)
1467 (arguments
1468 `(#:phases
1469 (modify-phases %standard-phases
1470 ;; pytest seems to have a check to make sure the user is testing
1471 ;; their checked-out code and not an installed, potentially
1472 ;; out-of-date copy. This is harmless here, since we just installed
1473 ;; the package, so we disable the check to avoid skipping tests
1474 ;; entirely.
1475 (add-before 'check 'import-mismatch-error-workaround
1476 (lambda _
1477 (setenv "PY_IGNORE_IMPORTMISMATCH" "1")
1478 #t)))))
1479 (propagated-inputs
1480 (list python-sortedcontainers))
1481 (native-inputs
1482 (list python-setuptools python-pytest))
1483 (home-page "https://github.com/chaimleib/intervaltree")
1484 (synopsis "Editable interval tree data structure")
1485 (description
1486 "This package provides a mutable, self-balancing interval tree
1487implementation for Python. Queries may be by point, by range overlap, or by
1488range envelopment. This library was designed to allow tagging text and time
1489intervals, where the intervals include the lower bound but not the upper
1490bound.")
1491 (license license:asl2.0)))
1492
1493(define-public python-jschon
1494 (package
1495 (name "python-jschon")
1496 (version "0.11.1")
1497 (source
1498 (origin
1499 (method git-fetch)
1500 (uri (git-reference
1501 (url "https://github.com/marksparkza/jschon/")
1502 (commit (string-append "v" version))
1503 (recursive? #t))) ;required for tests
1504 (sha256
1505 (base32 "0javlbq83ffy98kinhl7i17ja00917856yg55qlbn8048lhc9sxq"))
1506 (file-name (git-file-name name version))))
1507 (build-system pyproject-build-system)
1508 (propagated-inputs
1509 (list python-rfc3986))
1510 (native-inputs
1511 (list python-coverage
1512 python-hypothesis
1513 python-pytest
1514 python-pytest-benchmark
1515 python-pytest-httpserver
1516 python-requests
1517 python-setuptools))
1518 (home-page "https://jschon.readthedocs.io/")
1519 (synopsis "Object-oriented JSON Schema implementation for Python")
1520 (description
1521 "This package provides a JSON toolkit for Python developers.")
1522 (license license:expat)))
1523
1524(define-public python-jsonpath-ng
1525 (package
1526 (name "python-jsonpath-ng")
1527 (version "1.7.0" )
1528 (source
1529 (origin
1530 (method url-fetch)
1531 (uri (pypi-uri "jsonpath-ng" version))
1532 (sha256
1533 (base32 "0g5bpq02pl9mv7mbqixvnagq8f9v0jab6wqmbxw9rxsz9vyzgxgn"))))
1534 (build-system pyproject-build-system)
1535 (native-inputs
1536 (list python-pytest
1537 python-setuptools
1538 python-wheel))
1539 (propagated-inputs
1540 (list python-ply))
1541 (home-page "https://github.com/h2non/jsonpath-ng")
1542 (synopsis "JSONPath Next-Generation")
1543 (description
1544 "This package provides a final implementation of @code{JSONPath} for
1545Python that aims to be standard compliant, including arithmetic and binary
1546comparison operators, as defined in the original
1547@url{http://goessner.net/articles/JsonPath/, JSONPath} proposal.")
1548 (license license:asl2.0)))
1549
1550(define-public python-json-log-formatter
1551 (package
1552 (name "python-json-log-formatter")
1553 (version "1.1.1")
1554 (source
1555 (origin
1556 (method git-fetch)
1557 (uri (git-reference
1558 (url "https://github.com/marselester/json-log-formatter")
1559 (commit (string-append "v" version))))
1560 (file-name (git-file-name name version))
1561 (sha256
1562 (base32 "04zs938mjf131h0lfrkm3c2dfh0x5f8rmaks0i29nlxb71zpg0f2"))))
1563 (build-system pyproject-build-system)
1564 (arguments
1565 (list
1566 #:phases
1567 #~(modify-phases %standard-phases
1568 (replace 'check
1569 (lambda* (#:key tests? #:allow-other-keys)
1570 (when tests?
1571 (invoke "pytest" "-s" "tests.py")))))))
1572 (native-inputs (list python-django
1573 python-pytest
1574 python-setuptools
1575 python-simplejson
1576 python-ujson
1577 python-wheel))
1578 (home-page "https://github.com/marselester/json-log-formatter")
1579 (synopsis "JSON log formatter")
1580 (description "The library helps you to store logs in JSON format.")
1581 (license license:expat)))
1582
1583(define-public python-keeper-secrets-manager-core
1584 ;; released from a monorepo with other packages following various versioning
1585 ;; schemes. This commit was selected because some failing tests were fixed
1586 ;; since the most recent release of the Python SDK packages.
1587 (let ((commit "2c9a63d433721dee129a3647077d59bb243b52ec")
1588 (revision "0"))
1589 (package
1590 (name "python-keeper-secrets-manager-core")
1591 (version (git-version "17.0.0" revision commit))
1592 (source
1593 (origin
1594 (method git-fetch)
1595 (uri (git-reference
1596 (url "https://github.com/Keeper-Security/secrets-manager")
1597 (commit commit)))
1598 (file-name (git-file-name name version))
1599 (sha256
1600 (base32 "1mqx0xv28xyljd4s7wwi154h8v22ayi8k337afhhw0pg2c8150pp"))))
1601 (build-system pyproject-build-system)
1602 (arguments
1603 (list
1604 #:phases
1605 #~(modify-phases %standard-phases
1606 (add-after 'unpack 'chdir
1607 (lambda _
1608 (chdir "sdk/python/core"))))))
1609 (propagated-inputs
1610 (list python-cryptography
1611 python-importlib-metadata
1612 python-requests))
1613 (native-inputs
1614 (list python-pytest
1615 python-setuptools))
1616 (home-page "https://github.com/Keeper-Security/secrets-manager")
1617 (synopsis "Keeper Secrets Manager for Python SDK")
1618 (description
1619 "The Keeper Secrets Manager Python SDK provides access to
1620@url{https://www.keepersecurity.com/secrets-manager.html, Keeper Secrets
1621Management} services.")
1622 (license license:expat))))
1623
1624(define-public python-keeper-secrets-manager-helper
1625 ;; released alongside keeper-secrets-manager-core, but with a different
1626 ;; versioning scheme.
1627 (let ((commit "2c9a63d433721dee129a3647077d59bb243b52ec")
1628 (revision "0"))
1629 (package
1630 (name "python-keeper-secrets-manager-helper")
1631 (version (git-version "1.0.6" revision commit))
1632 (source
1633 (origin
1634 (method git-fetch)
1635 (uri (git-reference
1636 (url "https://github.com/Keeper-Security/secrets-manager")
1637 (commit commit)))
1638 (file-name (git-file-name name version))
1639 (sha256
1640 (base32 "1mqx0xv28xyljd4s7wwi154h8v22ayi8k337afhhw0pg2c8150pp"))))
1641 (build-system pyproject-build-system)
1642 (arguments
1643 (list
1644 #:phases
1645 #~(modify-phases %standard-phases
1646 (add-after 'unpack 'chdir
1647 (lambda _
1648 (chdir "sdk/python/helper"))))))
1649 (propagated-inputs
1650 (list python-iso8601
1651 python-keeper-secrets-manager-core
1652 python-pyyaml))
1653 (native-inputs
1654 (list python-pytest
1655 python-setuptools))
1656 (home-page "https://github.com/Keeper-Security/secrets-manager")
1657 (synopsis "Keeper Secrets Manager for Python SDK helper for managing records")
1658 (description
1659 "Keeper Secrets Manager SDK helper is for creating and managing secret
1660records. It is intended to be used with @code{keeper-secrets-manager-core}.")
1661 (license license:expat))))
1662
1663(define-public python-language-data
1664 (package
1665 (name "python-language-data")
1666 (version "1.3.0")
1667 (source
1668 (origin
1669 (method url-fetch)
1670 (uri (pypi-uri "language_data" version))
1671 (sha256
1672 (base32 "1v6pp8z2wxj3hafl62hbx8sbinpp9cr0r7y80rfi8mcmlf5fy03n"))))
1673 (build-system pyproject-build-system)
1674 (native-inputs
1675 (list python-pytest
1676 python-setuptools
1677 python-setuptools-scm))
1678 (propagated-inputs
1679 (list python-marisa-trie))
1680 (home-page "https://github.com/georgkrause/language_data")
1681 (synopsis "Supplementary data about languages used by the langcodes module")
1682 (description
1683 "language_data is a supplement to the langcodes module, for working with
1684standardized codes for human languages. It stores the more bulky and
1685hard-to-index data about languages, particularly what they are named in
1686various languages.")
1687 (license license:expat)))
1688
1689(define-public python-log-symbols
1690 (package
1691 (name "python-log-symbols")
1692 (version "0.0.14")
1693 (source
1694 (origin
1695 (method url-fetch)
1696 (uri (pypi-uri "log_symbols" version))
1697 (sha256
1698 (base32 "0mh5d0igw33libfmbsr1ri1p1y644p36nwaa2w6kzrd8w5pvq2yg"))))
1699 (build-system pyproject-build-system)
1700 (arguments
1701 (list #:tests? #f)) ;no tests in PyPI archive, tests depend on Nose
1702 (native-inputs
1703 (list python-setuptools))
1704 (propagated-inputs
1705 (list python-colorama))
1706 (home-page "https://github.com/manrajgrover/py-log-symbols")
1707 (synopsis "Python library with graphical symbols for logging on the terminal")
1708 (description
1709 "This package provides a Python library with graphical symbols that can
1710be displayed on the terminal, with color if possible, for logging purposes.")
1711 (license license:expat)))
1712
1713(define-public python-lsprotocol
1714 (package
1715 (name "python-lsprotocol")
1716 (version "2025.0.0")
1717 (source
1718 (origin
1719 (method git-fetch)
1720 (uri (git-reference
1721 (url "https://github.com/microsoft/lsprotocol")
1722 (commit version)))
1723 (file-name (git-file-name name version))
1724 (sha256
1725 (base32 "0m5c2wd7f3i1ipdf0lqhfmgi7d9jw6sa49pvx8828r83r0f9gd8f"))))
1726 (build-system pyproject-build-system)
1727 (arguments
1728 (list
1729 #:tests? #f ;no tests for Python package
1730 #:phases
1731 #~(modify-phases %standard-phases
1732 (add-after 'unpack 'cd-packages-python
1733 (lambda _
1734 (chdir "packages/python"))))))
1735 (native-inputs
1736 (list python-flit-core))
1737 (propagated-inputs
1738 (list python-attrs
1739 python-cattrs))
1740 (home-page "https://github.com/microsoft/lsprotocol")
1741 (synopsis "Python types for Language Server Protocol.")
1742 (description
1743 "@code{lsprotocol} is a Python implementation of object types used in
1744the Language Server Protocol (LSP). This repository contains the code
1745generator and the generated types for LSP.")
1746 (license license:expat)))
1747
1748(define-public python-marisa-trie
1749 (package
1750 (name "python-marisa-trie")
1751 (version "1.3.1")
1752 (source
1753 (origin
1754 (method url-fetch)
1755 (uri (pypi-uri "marisa_trie" version))
1756 (sha256
1757 (base32 "0nzq9yc3qdpnnvhi9zlp6vcpk6id5lx3943pm7zgir1h5z8py44p"))))
1758 (build-system pyproject-build-system)
1759 (native-inputs
1760 (list python-cython
1761 python-hypothesis
1762 python-pytest
1763 python-readme-renderer
1764 python-setuptools))
1765 (home-page "https://github.com/pytries/marisa-trie")
1766 (synopsis "Static memory-efficient Trie-like structures for Python")
1767 (description
1768 "This package provides static memory-efficient and fast Trie-like structures
1769for Python.")
1770 (license license:expat)))
1771
1772(define-public python-menuinst
1773 (package
1774 (name "python-menuinst")
1775 (version "2.4.1")
1776 (source
1777 (origin
1778 (method git-fetch)
1779 (uri (git-reference
1780 (url "https://github.com/conda/menuinst")
1781 (commit version)))
1782 (file-name (git-file-name name version))
1783 (sha256
1784 (base32 "0606j3mwpcj4rqj8mifnrdqqhp8dqf802kagqkp7mmi2wffly27w"))))
1785 (build-system pyproject-build-system)
1786 (arguments
1787 (list
1788 #:tests? #f ;tests need conda
1789 #:phases
1790 #~(modify-phases %standard-phases
1791 (add-before 'build 'pretend-version
1792 (lambda _
1793 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
1794 (native-inputs
1795 (list python-setuptools
1796 python-setuptools-scm))
1797 (home-page "https://conda.github.io/menuinst/")
1798 (synopsis "Cross platform menu item installation")
1799 (description
1800 "This package provides cross platform menu item installation for conda
1801packages.")
1802 (license license:bsd-3)))
1803
1804(define-public python-multiplex
1805 (package
1806 (name "python-multiplex")
1807 (version "0.6.1")
1808 (source
1809 (origin
1810 (method git-fetch) ;no tests in PyPI archive
1811 (uri (git-reference
1812 (url "https://github.com/dankilman/multiplex")
1813 (commit version)))
1814 (file-name (git-file-name name version))
1815 (sha256
1816 (base32 "1a662liqhiya47i6vrz3q03w08viqg3wj5j3g58mz175hcdcmmmv"))))
1817 (build-system pyproject-build-system)
1818 (native-inputs
1819 (list python-poetry-core
1820 python-pytest
1821 python-pytest-asyncio))
1822 (propagated-inputs
1823 (list python-aiofiles
1824 python-aiostream
1825 python-click
1826 python-easy-ansi-0.3
1827 python-pyte))
1828 (home-page "https://github.com/dankilman/multiplex")
1829 (synopsis "Parallel stream of outputs from multiple processes")
1830 (description
1831 "This package provides a functionality to view output of multiple
1832processes, in parallel, in the console, with an interactive TUI.")
1833 (license license:expat)))
1834
1835(define-public python-num2words
1836 (package
1837 (name "python-num2words")
1838 (version "0.5.14")
1839 (source
1840 (origin
1841 (method git-fetch)
1842 (uri (git-reference
1843 (url "https://github.com/savoirfairelinux/num2words")
1844 (commit (string-append "v" version))))
1845 (file-name (git-file-name name version))
1846 (sha256
1847 (base32 "1h52kgh1h4q9nkkplpwix2xs6f6wwvlxq09clznr2589xv39iqlz"))))
1848 (build-system pyproject-build-system)
1849 (arguments
1850 (list
1851 #:test-flags
1852 #~(list "--ignore" "tests/test_cli.py"))) ;Requires delegator.py.
1853 (native-inputs (list python-pytest python-setuptools))
1854 (propagated-inputs (list python-docopt))
1855 (home-page "https://github.com/savoirfairelinux/num2words")
1856 (synopsis "Convert numbers to words in multiple languages")
1857 (description
1858 "@code{num2words} is a library that converts numbers like 42 to words like
1859forty-two. It supports multiple languages, and can even generate ordinal
1860numbers like forty-second.")
1861 (license license:lgpl2.1)))
1862
1863(define-public python-orderly-set
1864 (package
1865 (name "python-orderly-set")
1866 (version "5.5.0")
1867 (source
1868 (origin
1869 (method url-fetch)
1870 (uri (pypi-uri "orderly_set" version))
1871 (sha256
1872 (base32 "1kp64m0nabhhb0zxr4f8idrmniraahnfwq41gx7adbyqwk48awg8"))))
1873 (build-system pyproject-build-system)
1874 (native-inputs (list python-flit-core python-pytest))
1875 (home-page "https://github.com/seperman/orderly-set")
1876 (synopsis "Multiple implementations of Ordered Set")
1877 (description "Orderly Set is a package containing multiple implementations
1878of Ordered Set.")
1879 (license license:expat)))
1880
1881(define-public python-pandocfilters
1882 (package
1883 (name "python-pandocfilters")
1884 (version "1.5.1")
1885 (source
1886 (origin
1887 (method url-fetch)
1888 (uri (pypi-uri "pandocfilters" version))
1889 (sha256
1890 (base32 "17lknixjja23jczlv8afgfky94m4gwl7wc36iczw1sz4brallaq0"))))
1891 (build-system pyproject-build-system)
1892 (arguments
1893 (list #:tests? #f)) ;require pandoc to run tests
1894 (native-inputs
1895 (list python-setuptools))
1896 (home-page "https://github.com/jgm/pandocfilters")
1897 (synopsis "Python module for writing Pandoc filters")
1898 (description "Pandoc is a powerful utility to transform various
1899input formats into a wide range of output formats. To alter the
1900exported output document, Pandoc allows the usage of filters, which
1901are pipes that read a JSON serialization of the Pandoc AST from stdin,
1902transform it in some way, and write it to stdout. It allows therefore
1903to alter the processing of Pandoc's supported input formats, for
1904instance one can add new syntax elements to markdown, etc.
1905
1906This package provides Python bindings.")
1907 (license license:bsd-3)))
1908
1909(define-public python-panflute
1910 (package
1911 (name "python-panflute")
1912 (version "2.3.1")
1913 (source
1914 (origin
1915 (method url-fetch)
1916 (uri (pypi-uri "panflute" version))
1917 (sha256
1918 (base32 "07wg5md93jcdkpiqljwr3p1xzvm6nf7vbiay0bp84fgg6hmd06sz"))))
1919 (build-system pyproject-build-system)
1920 (arguments
1921 (list #:tests? #f)) ;require pandoc to run tests
1922 (native-inputs
1923 (list python-setuptools))
1924 (propagated-inputs
1925 (list python-click
1926 python-pyyaml))
1927 (home-page "http://scorreia.com/software/panflute/")
1928 (synopsis "Pythonic Pandoc filters")
1929 (description
1930 "Panflute is a Python package that makes Pandoc filters fun to write.
1931It is a pythonic alternative to John MacFarlane's pandocfilters, from which it
1932is heavily inspired.")
1933 (license license:bsd-3)))
1934
1935(define-public python-pastel
1936 (package
1937 (name "python-pastel")
1938 (version "0.2.1")
1939 (source
1940 (origin
1941 (method git-fetch)
1942 (uri (git-reference
1943 (url "https://github.com/sdispater/pastel")
1944 (commit version)))
1945 (file-name (git-file-name name version))
1946 (sha256
1947 (base32 "1lwip9qaqfacgwnl5ykr0846y1nky228k7h7vzrgyqj1viapprsv"))))
1948 (build-system pyproject-build-system)
1949 (arguments
1950 (list
1951 #:test-flags
1952 #~(list "pastel" "tests/")
1953 #:phases
1954 #~(modify-phases %standard-phases
1955 (add-after 'unpack 'use-poetry-core
1956 (lambda _
1957 ;; Patch to use the core poetry API.
1958 (substitute* "pyproject.toml"
1959 (("poetry.masonry.api") "poetry.core.masonry.api")))))))
1960 (native-inputs (list python-poetry-core python-pytest))
1961 (home-page "https://github.com/sdispater/pastel")
1962 (synopsis "Library to colorize strings in your terminal")
1963 (description
1964 "Pastel is a simple library to help you colorize strings in your
1965terminal.")
1966 (license license:expat)))
1967
1968(define-public python-pathlib-abc
1969 (package
1970 (name "python-pathlib-abc")
1971 (version "0.5.0")
1972 (source
1973 (origin
1974 (method url-fetch)
1975 (uri (pypi-uri "pathlib_abc" version))
1976 (sha256
1977 (base32 "1hy2rscq3msbpjs17jbhsqjs800kcnv2w1n425yh1ly609a9x726"))))
1978 (build-system pyproject-build-system)
1979 (native-inputs (list python-pytest python-hatchling))
1980 (home-page "https://github.com/barneygale/pathlib-abc")
1981 (synopsis "Python base classes for rich path objects")
1982 (description
1983 "This package is a preview of pathlib functionality planned for a future
1984release of Python; specifically, it provides three ABCs that can be used to
1985implement path classes for non-local filesystems")
1986 (license license:psfl)))
1987
1988;; XXX: It's for [email protected], remove when no longer required.
1989(define-public python-pathlib-abc-for-python-pathy
1990 (hidden-package
1991 (package
1992 (inherit python-pathlib-abc)
1993 (version "0.1.1")
1994 (source
1995 (origin
1996 (method url-fetch)
1997 (uri (pypi-uri "pathlib_abc" version))
1998 (sha256
1999 (base32 "1gjsj7r331i54kbisy0zz1h9icx1hv6n97jaj5s7f3wvj7fpnkh8")))))))
2000
2001(define-public python-pbs-installer
2002 (package
2003 (name "python-pbs-installer")
2004 (version "2025.09.18")
2005 (source
2006 (origin
2007 (method git-fetch)
2008 (uri (git-reference
2009 (url "https://github.com/frostming/pbs-installer")
2010 (commit version)))
2011 (file-name (git-file-name name version))
2012 (sha256
2013 (base32 "0f5gpr4xp71d46vk2ggbb31bhagj4drf1ijl1lg1jd1apimr0jkf"))))
2014 (build-system pyproject-build-system)
2015 (arguments
2016 (list
2017 #:tests? #f ;no tests provided
2018 #:phases
2019 #~(modify-phases %standard-phases
2020 (add-before 'build 'set-version
2021 (lambda _
2022 (setenv "PDM_BUILD_SCM_VERSION" #$version))))))
2023 (native-inputs
2024 (list python-pdm-backend
2025 python-pytest))
2026 (propagated-inputs
2027 (list python-httpx
2028 python-zstandard))
2029 (home-page "https://github.com/frostming/pbs-installer")
2030 (synopsis "Installer for Python Build Standalone")
2031 (description
2032 "This package implements an installer for
2033@url{https://github.com/astral-sh/python-build-standalone, Python Build
2034Standalone}.")
2035 (license license:expat)))
2036
2037(define-public python-phply
2038 (package
2039 (name "python-phply")
2040 (version "1.2.6")
2041 (source
2042 (origin
2043 (method url-fetch)
2044 (uri (pypi-uri "phply" version))
2045 (sha256
2046 (base32 "05s9v2q6b2r0i65zfw4jf1nzb619zgw0anl08ls7ll2z516pf9qb"))))
2047 (build-system pyproject-build-system)
2048 (native-inputs
2049 (list python-pytest
2050 python-setuptools))
2051 (propagated-inputs
2052 (list python-ply))
2053 (home-page "https://github.com/viraptor/phply")
2054 (synopsis "PHP parser written in Python using PLY")
2055 (description
2056 "@code{phply} is a parser for the PHP programming language written using
2057PLY,a Lex/YACC-style parser generator toolkit for Python.")
2058 (license license:bsd-3)))
2059
2060(define-public python-puccinialin
2061 (package
2062 (name "python-puccinialin")
2063 (version "0.1.5")
2064 (source
2065 (origin
2066 (method url-fetch)
2067 (uri (pypi-uri "puccinialin" version))
2068 (sha256
2069 (base32 "00nnqcvvyn10zxkhgzcfn8czwvdzm0vh5z16plb0dxspccd69dmv"))))
2070 (build-system pyproject-build-system)
2071 (arguments
2072 (list #:tests? #f)) ;no tests in PyPI or Git
2073 (native-inputs
2074 (list python-hatchling))
2075 (propagated-inputs
2076 (list python-httpx
2077 python-platformdirs
2078 python-tqdm))
2079 (home-page "https://github.com/konstin/puccinialin")
2080 (synopsis "Helper for bootstrapping Rust-based build back-ends for Python")
2081 (description
2082 "This tool helps to install Rust into a temporary directory, allowing
2083support of Rust-based Python builds. Cargo and rustc are installed into a
2084cache directory, to avoid modifying the host's environment, and further
2085activated using a set of environment variables.")
2086 (license (list license:expat license:asl2.0))))
2087
2088(define-public python-pygls
2089 (package
2090 (name "python-pygls")
2091 (version "2.0.0")
2092 (source
2093 (origin
2094 (method git-fetch)
2095 (uri (git-reference
2096 (url "https://github.com/openlawlibrary/pygls")
2097 (commit (string-append "v" version))))
2098 (file-name (git-file-name name version))
2099 (sha256
2100 (base32 "1y1adnmr4w4c3zk1lzk21fdz9ab9c1az7acm1rz262h0q7bwl0km"))))
2101 (build-system pyproject-build-system)
2102 ;; tests: 265 passed, 8 skipped
2103 (native-inputs
2104 (list python-pytest
2105 python-pytest-asyncio
2106 python-poetry-core))
2107 (propagated-inputs
2108 (list python-attrs
2109 python-cattrs
2110 python-lsprotocol))
2111 (home-page "https://github.com/openlawlibrary/pygls")
2112 (synopsis "Pythonic generic language server")
2113 (description
2114 "This package provides a pythonic generic language server (pronounced
2115like pie glass').")
2116 (license license:asl2.0)))
2117
2118(define-public python-pypydispatcher
2119 (package
2120 (name "python-pypydispatcher")
2121 (version "2.1.2")
2122 (source
2123 (origin
2124 (method url-fetch)
2125 (uri (pypi-uri "PyPyDispatcher" version))
2126 (sha256
2127 (base32 "1wihj7xgq5fk91li0id6a311lyrnmq7ch8rbr9dm7lprrzgwbgmn"))))
2128 (build-system pyproject-build-system)
2129 (native-inputs
2130 (list python-pytest
2131 python-setuptools
2132 python-setuptools-scm))
2133 (home-page "https://github.com/scrapy/pypydispatcher")
2134 (synopsis "Multi-producer-multi-consumer signal dispatching mechanism")
2135 (description
2136 "This package implements a functionality of pulti-producer-multi-consumer
2137signal dispatching mechanism. It's a fork of
2138http://pydispatcher.sourceforge.net/ with PyPy support.")
2139 (license license:bsd-3)))
2140
2141(define-public python-pyread-eagle
2142 (package
2143 (name "python-pyread-eagle")
2144 (version "1.0.3")
2145 (source
2146 (origin
2147 (method git-fetch)
2148 (uri (git-reference
2149 (url "https://github.com/kyleaoman/pyread_eagle")
2150 (commit version)))
2151 (file-name (git-file-name name version))
2152 (sha256
2153 (base32 "0x8j5wkp46hbfccm88c7dmf8ak488llv1748i2g94npic2rx8yd4"))))
2154 (build-system pyproject-build-system)
2155 (arguments
2156 ;; TODO: Tests need additional test data, see tests/test_regions.py.
2157 (list #:tests? #f))
2158 (native-inputs
2159 (list python-setuptools))
2160 (propagated-inputs
2161 (list python-h5py
2162 python-numpy))
2163 (home-page "https://github.com/kyleaoman/pyread_eagle")
2164 (synopsis "Read routines for Eagle HDF5 snapshots for Python")
2165 (description
2166 "This package provides a pure-python port of
2167@url{https://github.com/jchelly/read_eagle, J. Helly's read_eagle}.")
2168 (license license:gpl3)))
2169
2170(define-public python-pyte
2171 (package
2172 (name "python-pyte")
2173 (version "0.8.2")
2174 (source
2175 (origin
2176 (method git-fetch)
2177 (uri (git-reference
2178 (url "https://github.com/selectel/pyte")
2179 (commit version)))
2180 (file-name (git-file-name name version))
2181 (sha256
2182 (base32 "1cdhnl6rp4kcbs3s766519k80pf5ma18mgv6cyidf4nbgysjavmv"))))
2183 (build-system pyproject-build-system)
2184 (propagated-inputs (list python-wcwidth))
2185 (native-inputs (list python-pytest python-setuptools python-wheel))
2186 (home-page "https://pyte.readthedocs.io/")
2187 (synopsis "Simple VTXXX-compatible terminal emulator")
2188 (description "@code{pyte} is an in-memory VTxxx-compatible terminal
2189emulator. @var{VTxxx} stands for a series of video terminals, developed by
2190DEC between 1970 and 1995. The first and probably most famous one was the
2191VT100 terminal, which is now a de-facto standard for all virtual terminal
2192emulators.
2193
2194pyte is a fork of vt102, which was an incomplete pure Python implementation
2195of VT100 terminal.")
2196 (license license:lgpl3+)))
2197
2198(define-public python-pyxdameraulevenshtein
2199 (package
2200 (name "python-pyxdameraulevenshtein")
2201 (version "1.8.0")
2202 (source
2203 (origin
2204 (method git-fetch)
2205 (uri (git-reference
2206 (url "https://github.com/lanl/pyxDamerauLevenshtein")
2207 (commit (string-append "v" version))))
2208 (file-name (git-file-name name version))
2209 (sha256
2210 (base32 "1qmmpgf8qxv5pfnqp328qqsj34jvyc63w8659xx18d8405agcjdr"))))
2211 (build-system pyproject-build-system)
2212 (native-inputs (list python-cython python-pytest python-setuptools))
2213 (home-page "https://github.com/lanl/pyxDamerauLevenshtein")
2214 (synopsis "Damerau-Levenshtein edit distance algorithm")
2215 (description
2216 "@code{pyxDamerauLevenshtein} implements the Damerau-Levenshtein (DL)
2217edit distance algorithm for Python in Cython for high performance.")
2218 (license license:bsd-3)))
2219
2220(define-public python-represent
2221 (package
2222 (name "python-represent")
2223 (version "2.1")
2224 (source
2225 (origin
2226 (method url-fetch)
2227 (uri (pypi-uri "Represent" version))
2228 (sha256
2229 (base32 "1b5wbnkjirscfqwcb6ik8klky0ajm4qs2yvabqxnpfp72if02b8b"))))
2230 (build-system pyproject-build-system)
2231 (native-inputs
2232 ;; XXX This might be too much for testing, maybe switch them off as it's
2233 ;; a simple middleware library.
2234 (list python-ipython
2235 python-pytest
2236 python-rich
2237 python-setuptools))
2238 (home-page "https://github.com/RazerM/represent")
2239 (synopsis "Create @code{__repr__} automatically or declaratively for Python")
2240 (description
2241 "This package implements a functionality to generate Python
2242@code{__repr__} methods automatically or declaratively.")
2243 (license license:expat)))
2244
2245(define-public python-rich-argparse
2246 (package
2247 (name "python-rich-argparse")
2248 (version "1.7.1")
2249 (source
2250 (origin
2251 (method git-fetch)
2252 (uri (git-reference
2253 (url "https://github.com/hamdanal/rich-argparse")
2254 (commit (string-append "v" version))))
2255 (file-name (git-file-name name version))
2256 (sha256
2257 (base32
2258 "0wydhy1167yv7lm07iy3aysyhxyixc24ma1wdna36c06d24wbdc0"))))
2259 (build-system pyproject-build-system)
2260 (native-inputs
2261 (list python-pytest
2262 python-hatchling))
2263 (propagated-inputs
2264 (list python-rich))
2265 (home-page "https://github.com/hamdanal/rich-argparse")
2266 (synopsis "Format argparse and optparse help using rich")
2267 (description
2268 "This package improves the look and readability of argparse's help while
2269requiring minimal changes to the code.")
2270 (license license:expat)))
2271
2272(define-public python-rush
2273 (package
2274 (name "python-rush")
2275 (version "2021.04.0")
2276 (source
2277 (origin
2278 (method git-fetch)
2279 (uri (git-reference
2280 (url "https://github.com/sigmavirus24/rush")
2281 (commit version)))
2282 (file-name (git-file-name name version))
2283 (sha256
2284 (base32 "0brqjw34n14rij58giwyqlagjnp11npvsrlwrqj5pbn7rmgd2mhx"))))
2285 (build-system pyproject-build-system)
2286 (arguments
2287 (list
2288 #:test-flags
2289 ;; E ValueError: Redis URL must specify one of the following schemes
2290 ;; (redis://, rediss://, unix://)
2291 #~(list "-k" (string-append "not test_valid_url[redis://]"
2292 " and not test_valid_url[rediss://]"))))
2293 (native-inputs
2294 (list python-mock
2295 python-redis
2296 python-rfc3986
2297 python-pytest
2298 python-setuptools))
2299 (propagated-inputs
2300 (list python-attrs))
2301 (home-page "https://github.com/sigmavirus24/rush")
2302 (synopsis "Throttling and rate-limiting algorithms for Python")
2303 (description
2304 "This package provides is a small collection of algorithms that can be
2305reused when throttling user interactions with a resource (e.g., an API).")
2306 (license license:expat)))
2307
2308(define-public python-safety-schemas
2309 (package
2310 (name "python-safety-schemas")
2311 (version "0.0.14")
2312 (source
2313 (origin
2314 (method url-fetch)
2315 (uri (pypi-uri "safety_schemas" version))
2316 (sha256
2317 (base32 "0smgszbd3nb7jh61cgpycqhcvfwwdyaai5amw8mmf6g9b5x3z5a9"))))
2318 (build-system pyproject-build-system)
2319 (arguments
2320 (list
2321 #:test-flags
2322 #~(list "-k" (string-join
2323 ;; These tests are failing for unknown reasons.
2324 ;; (AssertionError).
2325 (list "not test_model[ConfigModel-ConfigModel]"
2326 "test_model[MetadataModel-MetadataModel]"
2327 "test_model[PolicyFileModel-PolicyFileModel]"
2328 "test_model[ProjectModel-ProjectModel]"
2329 "test_model[ReportModel-ReportModel]")
2330 " and not "))))
2331 (propagated-inputs (list python-dparse
2332 python-packaging
2333 python-pydantic
2334 python-ruamel.yaml
2335 python-typing-extensions))
2336 (native-inputs (list python-deepdiff python-hatchling python-pytest))
2337 ;; Source code is not yet published outside of PyPI:
2338 ;; https://github.com/pyupio/safety/issues/494
2339 (home-page "https://pypi.org/project/safety-schemas/")
2340 (synopsis "Schemas for Safety tools")
2341 (description "This package contains models and schemas used by Safety.")
2342 (license license:expat)))
2343
2344(define-public python-senf
2345 (package
2346 (name "python-senf")
2347 (version "1.5.0")
2348 (source
2349 (origin
2350 (method url-fetch)
2351 (uri (pypi-uri "senf" version))
2352 (sha256
2353 (base32 "1lcccdb4hrfksbr8vy4nljial85six1w39l5xlw16m4qx884anch"))))
2354 (build-system pyproject-build-system)
2355 (arguments
2356 (list
2357 #:test-flags
2358 '(list "--deselect" "tests/test_api.py::test_getuserdir"
2359 "--deselect" "tests/test_api.py::test_expanduser_user")))
2360 (native-inputs (list python-setuptools python-wheel python-pytest))
2361 (home-page "https://github.com/quodlibet/senf")
2362 (synopsis "Text, bytes and paths conversion functions for Python")
2363 (description "Senf introduces a new platform native string type called
2364fsnative. It adds functions to convert text, bytes and paths to and from that
2365new type and helper functions to integrate it nicely with the Python
2366stdlib.")
2367 (license license:expat)))
2368
2369(define-public python-session-info2
2370 (package
2371 (name "python-session-info2")
2372 (version "0.2")
2373 (source
2374 (origin
2375 (method url-fetch)
2376 (uri (pypi-uri "session_info2" version))
2377 (sha256
2378 (base32 "0xs1mcdz0hf626m3421ryv4f7b5rixz2hm8x88czx2i9196x69g9"))))
2379 (build-system pyproject-build-system)
2380 (arguments
2381 (list
2382 #:test-flags
2383 #~(list "--deselect=tests/test_synthetic.py::test_gpu"
2384 ;; Tests require Jupyter Client.
2385 "--ignore=tests/test_subprocess.py")))
2386 (native-inputs
2387 (list python-hatch-docstring-description
2388 python-hatch-vcs
2389 python-hatchling
2390 python-pytest
2391 python-pytest-asyncio))
2392 (home-page "https://session-info2.readthedocs.io/")
2393 (synopsis "Print versions of imported packages")
2394 (description
2395 "This package implements a functionality to print versions of imported
2396Python packages.")
2397 (license license:mpl2.0)))
2398
2399(define-public python-show-in-file-manager
2400 (package
2401 (name "python-show-in-file-manager")
2402 (version "1.1.5")
2403 (source
2404 (origin
2405 (method url-fetch)
2406 (uri (pypi-uri "show-in-file-manager" version))
2407 (sha256
2408 (base32 "111d363i7m0lr295301q39j6h0l6nfybyn2cvn7xi3yll60a24zd"))))
2409 (build-system pyproject-build-system)
2410 (native-inputs
2411 (list python-argparse-manpage
2412 python-setuptools))
2413 (propagated-inputs
2414 (list python-packaging
2415 ;; python-pywin32
2416 python-pyxdg))
2417 (home-page "https://github.com/damonlynch/showinfilemanager")
2418 (synopsis "Open the system file manager and select files in it")
2419 (description
2420 "Show in File Manager is a Python package to open the system file manager
2421and optionally select files in it. The point is not to open the files, but to
2422select them in the file manager, thereby highlighting the files and allowing
2423the user to quickly do something with them.")
2424 (license license:expat)))
2425
2426(define-public python-shxparser
2427 (package
2428 (name "python-shxparser")
2429 (version "0.0.2")
2430 (source
2431 (origin
2432 (method url-fetch)
2433 (uri (pypi-uri "shxparser" version))
2434 (sha256
2435 (base32 "0w7j5ywskandp91v74966pw1pvq9d5zrx5gkjcn84xi8wsyf8hc5"))))
2436 (build-system pyproject-build-system)
2437 (arguments (list #:test-backend #~'unittest))
2438 (native-inputs
2439 (list python-svgelements python-setuptools))
2440 (home-page "https://github.com/tatarize/shxparser")
2441 (synopsis "SHX line font parser")
2442 (description
2443 "This is a pure python parser for SHX Hershey font files that are an
2444AutoCad format which can encode single line fonts. This format is used for
2445many CNC and laser operations.")
2446 (license license:expat)))
2447
2448(define-public python-simplify-polyline
2449 (package
2450 (name "python-simplify-polyline")
2451 (version "0.1.0")
2452 (source
2453 (origin
2454 (method url-fetch)
2455 (uri (pypi-uri "simplify_polyline" version))
2456 (sha256
2457 (base32 "08f6bvwbg04z19pirq4ynsiq89yhbzqh9g6zbnp9fvdnmics7hgw"))))
2458 (build-system pyproject-build-system)
2459 (native-inputs
2460 (list python-pytest
2461 python-setuptools
2462 python-setuptools-scm
2463 python-wheel))
2464 (propagated-inputs
2465 (list python-numpy))
2466 (home-page "https://github.com/ShayHill/simplify_polyline")
2467 (synopsis "Simplify an open or closed polyline")
2468 (description
2469 "This package implements functionality to work with plyline.
2470Features:
2471@itemize
2472@item Visvalingham-Whyatt - removes the smallest triangles formed by
2473three consecutive points in a polyline or polygon
2474@item Douglas-Peucker - gives a better representation of the convex hull
2475@end itemize")
2476 (license license:expat)))
2477
2478(define-public python-siphash24
2479 (package
2480 (name "python-siphash24")
2481 (version "1.8")
2482 (source
2483 (origin
2484 (method git-fetch)
2485 (uri (git-reference
2486 (url "https://github.com/dnicolodi/python-siphash24/")
2487 (commit (string-append "v" version))))
2488 (file-name (git-file-name name version))
2489 (sha256
2490 (base32 "0i75mrm2w10njxqb3g1kp9v8r5d22a0v8vc68v0k8c7l3ncf0lp7"))))
2491 (build-system pyproject-build-system)
2492 (arguments
2493 (list
2494 #:test-backend #~'custom
2495 #:test-flags #~(list "test.py")
2496 #:phases
2497 #~(modify-phases %standard-phases
2498 (add-after 'unpack 'patch-pyproject
2499 (lambda _
2500 (substitute* "pyproject.toml"
2501 ;; meson-python: error: Field `project.license` has an invalid
2502 ;; type, expecting a dictionary of strings (got `Apache-2.0 OR
2503 ;; LGPL-2.1-or-later`)
2504 (("^license = .*")
2505 "license = {text = \"Apache-2.0 OR LGPL-2.1-or-later\"}\n")))))))
2506 (native-inputs
2507 (list meson-python
2508 pkg-config
2509 python-cython
2510 python-pytest))
2511 (inputs
2512 (list c-siphash))
2513 (home-page "https://github.com/dnicolodi/python-siphash24/")
2514 (synopsis "Streaming-capable SipHash-1-3 and SipHash-2-4 Implementation")
2515 (description
2516 "This package provides a C-based implementation of
2517@url{https://cr.yp.to/siphash/siphash-20120918.pdf, SipHash} with an interface
2518compatible with the hash functions provided by the hashlib standard library
2519module. SipHash-1-3 and SipHash-2-4 variants are currently implemented.")
2520 ;; They are in LICENSES directory:
2521 (license (list license:asl2.0
2522 license:lgpl2.1+))))
2523
2524(define-public python-snakesay
2525 (package
2526 (name "python-snakesay")
2527 (version "0.10.4")
2528 (source
2529 (origin
2530 (method git-fetch)
2531 (uri (git-reference
2532 (url "https://github.com/pythonanywhere/snakesay")
2533 (commit (string-append "v" version))))
2534 (file-name (git-file-name name version))
2535 (sha256
2536 (base32 "06p776nf2v5r9643i6f7hv8z984bjiz0k6z9whzla6b2y637mk93"))))
2537 (build-system pyproject-build-system)
2538 (arguments
2539 ;; XXX: We don't have python-uv-build yet.
2540 (list #:build-backend "setuptools.build_meta"))
2541 (native-inputs (list python-pytest python-setuptools))
2542 (home-page "https://github.com/pythonanywhere/snakesay")
2543 (synopsis "Like @command{cowsay} but with Python flavor")
2544 (description
2545 "This package provides a simple ASCII art pictures generator of a
2546Snake with a message.")
2547 (license license:expat)))
2548
2549(define-public python-jaconv
2550 (package
2551 (name "python-jaconv")
2552 ;; Last release is not tagged.
2553 (properties '((commit . "d4273468279536adb5375ffbfcd34578c6a95b70")
2554 (revision . "0")))
2555 (version (git-version "0.4.0"
2556 (assoc-ref properties 'revision)
2557 (assoc-ref properties 'commit)))
2558 (source
2559 (origin
2560 (method git-fetch)
2561 (uri (git-reference
2562 (url "https://github.com/ikegami-yukino/jaconv")
2563 (commit (assoc-ref properties 'commit))))
2564 (file-name (git-file-name name version))
2565 (sha256
2566 (base32 "00lvkr6jsm2h70658hly5w81ybkfp3x0rmgzpcn0s52d4n4m21fb"))))
2567 (build-system pyproject-build-system)
2568 (native-inputs (list python-setuptools python-pynose))
2569 (home-page "https://github.com/ikegami-yukino/jaconv")
2570 (synopsis
2571 "Pure-Python Japanese character interconverter for Hiragana, Katakana,
2572Hankaku, Zenkaku")
2573 (description
2574 "jaconv (Japanese Converter) is interconverter for Hiragana, Katakana,
2575Hankaku (half-width character) and Zenkaku (full-width character)")
2576 (license license:expat)))
2577
2578(define-public python-janus
2579 (package
2580 (name "python-janus")
2581 (version "1.0.0")
2582 (source
2583 (origin
2584 (method url-fetch)
2585 (uri (pypi-uri "janus" version))
2586 (sha256
2587 (base32 "04hnrdcf03g1s0x3sr72sh9gnszz6kyfsl9dg8a4n0zvvhn6z5yz"))))
2588 (build-system pyproject-build-system)
2589 (native-inputs
2590 (list python-pytest python-pytest-cov python-pytest-asyncio
2591 python-setuptools python-wheel))
2592 (propagated-inputs (list python-typing-extensions))
2593 (home-page "https://github.com/aio-libs/janus/")
2594 (synopsis
2595 "Sync-async queue to interoperate between asyncio tasks and classic threads")
2596 (description
2597 "Mixed sync-async queue, supposed to be used for communicating between
2598classic synchronous (threaded) code and asynchronous (in terms of
2599@url{https://docs.python.org/3/library/asyncio.html,asyncio}) one. Like
2600@url{https://en.wikipedia.org/wiki/Janus,Janus god} the queue object from the
2601library has two faces: synchronous and asynchronous interface. Synchronous is
2602fully compatible with
2603@url{https://docs.python.org/3/library/queue.html,standard queue},
2604asynchronous one follows
2605@url{https://docs.python.org/3/library/asyncio-queue.html,asyncio queue
2606design}.")
2607 (license license:asl2.0)))
2608
2609(define-public python-concurrent-log-handler
2610 (package
2611 (name "python-concurrent-log-handler")
2612 (version "0.9.25")
2613 ;; No tests in the PyPI tarball.
2614 (source
2615 (origin
2616 (method git-fetch)
2617 (uri (git-reference
2618 (url "https://github.com/Preston-Landers/concurrent-log-handler")
2619 (commit version)))
2620 (file-name (git-file-name name version))
2621 (sha256
2622 (base32 "0jp4zkm0idfdsrq3jzb52iqfkh6xzm7sacz1sa34ffnkyqdk3xzh"))))
2623 (build-system pyproject-build-system)
2624 (arguments
2625 (list
2626 ;; XXX: Tests are broken, no new version fixing them yet.
2627 #:tests? #f))
2628 (native-inputs
2629 (list python-hatchling))
2630 (propagated-inputs
2631 (list python-portalocker))
2632 (home-page "https://github.com/Preston-Landers/concurrent-log-handler")
2633 (synopsis
2634 "Additional log handler for Python's standard @code{logging} package")
2635 (description
2636 "This package provides an additional log handler for Python's standard
2637@code{logging} package (PEP 282). This handler will write log events to a log
2638file which is rotated when the log file reaches a certain size. Multiple
2639processes can safely write to the same log file concurrently and rotated logs
2640can be gzipped if desired. An optional threaded queue logging handler is
2641provided to perform logging in the background.")
2642 (license license:asl2.0)))
2643
2644(define-public python-lazy
2645 (package
2646 (name "python-lazy")
2647 (version "1.6")
2648 (source
2649 (origin
2650 (method url-fetch)
2651 (uri (pypi-uri "lazy" version))
2652 (sha256
2653 (base32 "1sfk1v54dyjxvilcxf9vlnypc5z0mg0i2inb117k5s09qx7349vi"))))
2654 (build-system pyproject-build-system)
2655 (native-inputs (list python-pytest python-setuptools python-wheel))
2656 (home-page "https://github.com/stefanholek/lazy")
2657 (synopsis "Lazy attributes for Python objects")
2658 (description "This package provides a decorator to create lazy
2659attributes.")
2660 (license license:bsd-2)))
2661
2662(define-public python-logfury
2663 (package
2664 (name "python-logfury")
2665 (version "1.0.1")
2666 (source
2667 (origin
2668 (method url-fetch)
2669 (uri (pypi-uri "logfury" version))
2670 (sha256
2671 (base32 "09kanw1iv61hgmd858xkc9kck8ia91qdyb954i4m7bdrxan5s2hk"))))
2672 (build-system pyproject-build-system)
2673 (native-inputs
2674 (list python-pytest
2675 python-setuptools
2676 python-setuptools-scm
2677 python-testfixtures
2678 python-wheel))
2679 (home-page "https://github.com/reef-technologies/logfury/")
2680 (synopsis "Logging of method calls for python libraries")
2681 (description
2682 "Logfury is a tool for python library maintainers. It allows for
2683responsible, low-boilerplate logging of method calls.")
2684 (license license:bsd-3)))
2685
2686(define-public python-logzero
2687 (package
2688 (name "python-logzero")
2689 (version "1.7.0")
2690 (source
2691 (origin
2692 (method git-fetch)
2693 (uri (git-reference
2694 (url "https://github.com/metachris/logzero")
2695 (commit (string-append "v" version))))
2696 (file-name (git-file-name name version))
2697 (sha256
2698 (base32 "1i9c0kynyjws5c24ga0sbidyfww3w5fy98gs67xsyfz4nr7w84b3"))))
2699 (build-system pyproject-build-system)
2700 (native-inputs (list python-pytest python-setuptools))
2701 (home-page "https://github.com/metachris/logzero")
2702 (synopsis "Robust and effective logging for Python")
2703 (description
2704 "@code{logzero} provides a fully configured Python logger object for
2705easy logging and rotating to a console or a file.")
2706 (license license:expat)))
2707
2708(define-public python-logbook
2709 (package
2710 (name "python-logbook")
2711 (version "1.8.2")
2712 (source
2713 (origin
2714 (method url-fetch)
2715 (uri (pypi-uri "logbook" version))
2716 (sha256
2717 (base32 "0afk1nmvj9fp3igzmxa4a048fm21sa4aw1z2ix8jzvs62ry7j6bd"))))
2718 (build-system pyproject-build-system)
2719 (native-inputs
2720 (list python-brotli
2721 python-cython
2722 python-pytest
2723 python-setuptools
2724 python-wheel))
2725 (home-page "https://github.com/getlogbook/logbook")
2726 (synopsis "Logbook is a logging replacement for Python")
2727 (description
2728 "Logbook is a logging system for Python that replaces the standard
2729library’s logging module. It was designed with both complex and simple
2730applications in mind and the idea to make logging fun.")
2731 (license license:bsd-3)))
2732
2733(define-public python-databind-core
2734 (package
2735 (name "python-databind-core")
2736 (version "4.4.2")
2737 (source
2738 (origin
2739 (method url-fetch)
2740 (uri (pypi-uri "databind.core" version))
2741 (sha256
2742 (base32 "130hr19kbzizx9n2q7cwfzfk20ii3cqmqjrzb16psnafll303k2d"))
2743 (snippet
2744 #~(begin (use-modules (guix build utils))
2745 ;; The problem with python-typing-extensions >= 4.7 is only
2746 ;; with python-3.7.
2747 (substitute* "pyproject.toml"
2748 ((",<4.7.*") "\"\n"))))))
2749 (build-system pyproject-build-system)
2750 (arguments
2751 (list
2752 #:phases
2753 #~(modify-phases %standard-phases
2754 (add-after 'install 'fix-name
2755 (lambda* (#:key inputs outputs #:allow-other-keys)
2756 (let* ((sitedir (site-packages inputs outputs))
2757 (dist-info
2758 (string-append sitedir "/databind_core-" #$version ".dist-info")))
2759 (substitute* (string-append dist-info "/METADATA")
2760 (("Name: databind-core")
2761 "Name: databind.core"))
2762 (substitute* (string-append dist-info "/RECORD")
2763 (("databind_core") "databind.core"))
2764 (rename-file dist-info
2765 (string-append sitedir
2766 "/databind.core-"
2767 #$version ".dist-info"))))))))
2768 (propagated-inputs
2769 (list python-deprecated
2770 python-nr-date
2771 python-nr-stream
2772 python-typeapi
2773 python-typing-extensions))
2774 (native-inputs
2775 (list python-poetry-core python-pytest))
2776 (home-page "https://niklasrosenstein.github.io/python-databind/core/")
2777 (synopsis
2778 "Library for de-/serializing Python dataclasses")
2779 (description
2780 "Databind is a library inspired by jackson-databind to de-/serialize
2781Python dataclasses.")
2782 (license license:expat)))
2783
2784(define-public python-databind-json
2785 (package
2786 (name "python-databind-json")
2787 (version "4.4.2")
2788 (source
2789 (origin
2790 (method url-fetch)
2791 (uri (pypi-uri "databind.json" version))
2792 (sha256
2793 (base32 "1lm864d7arfq0pw64hyc83bwn1z94wjg7a22q1xf0qkjynqs70gg"))
2794 (snippet
2795 #~(begin (use-modules (guix build utils))
2796 ;; The problem with python-typing-extensions >= 4.7 is only
2797 ;; with python-3.7.
2798 (substitute* "pyproject.toml"
2799 ((",<4.7.*") "\"\n"))))))
2800 (build-system pyproject-build-system)
2801 (arguments
2802 (list
2803 #:phases
2804 #~(modify-phases %standard-phases
2805 (add-after 'install 'fix-name
2806 (lambda* (#:key inputs outputs #:allow-other-keys)
2807 (let* ((sitedir (site-packages inputs outputs))
2808 (dist-info
2809 (string-append sitedir "/databind_json-" #$version ".dist-info")))
2810 (substitute* (string-append dist-info "/METADATA")
2811 (("Name: databind-json")
2812 "Name: databind.json"))
2813 (substitute* (string-append dist-info "/RECORD")
2814 (("databind_json") "databind.json"))
2815 (rename-file dist-info
2816 (string-append sitedir
2817 "/databind.json-"
2818 #$version ".dist-info"))))))))
2819 (propagated-inputs
2820 (list python-databind-core python-nr-date
2821 python-typeapi python-typing-extensions))
2822 (native-inputs (list python-poetry-core python-pytest))
2823 (home-page "https://niklasrosenstein.github.io/python-databind/json/")
2824 (synopsis
2825 "De-/serialize Python dataclasses to or from JSON payloads")
2826 (description
2827 "The @code{databind.json} package implements the de-/serialization to or
2828from JSON payloads using the @code{databind.core} framework.")
2829 (license license:expat)))
2830
2831(define-public python-dlmanager
2832 (package
2833 (name "python-dlmanager")
2834 (version "0.1.1")
2835 (source (origin
2836 (method git-fetch)
2837 (uri (git-reference
2838 (url "https://github.com/parkouss/dlmanager")
2839 (commit version)))
2840 (file-name (git-file-name name version))
2841 (sha256
2842 (base32
2843 "0f2j7d396z50yd5r86jx8m5bxyv2i0cw967j68xcwpcg3b216zmr"))
2844 (modules '((guix build utils)))
2845 (snippet
2846 #~(begin
2847 (substitute* "setup.py"
2848 (("pytest.main.self.pytest_args.")
2849 "pytest.main(self.pytest_args.split(' '))"))))))
2850 (build-system python-build-system)
2851 (native-inputs
2852 (list python-pytest python-mock))
2853 (propagated-inputs
2854 (list python-requests python-six))
2855 (home-page "https://github.com/parkouss/dlmanager")
2856 (synopsis "Download manager library")
2857 (description
2858 "Dlmanager is a download manager library. It can download files in
2859background and in parallel, and cancel downloads. It stores downloads in
2860a given directory, avoiding re-downloading files and limits the size of this
2861directory, removing oldest files.")
2862 (license license:gpl3+)))
2863
2864(define-public python-docspec
2865 (package
2866 (name "python-docspec")
2867 (version "2.2.1")
2868 (source
2869 (origin
2870 (method url-fetch)
2871 (uri (pypi-uri "docspec" version))
2872 (sha256
2873 (base32 "1zqmdrc6k8pprra8p3wpzq2ml2gph1cfjmsyg07f8b8fvizffm28"))))
2874 (build-system pyproject-build-system)
2875 (arguments (list #:tests? #false)) ;there are none
2876 (propagated-inputs
2877 (list python-databind-core
2878 python-databind-json
2879 python-deprecated))
2880 (native-inputs
2881 (list python-poetry-core))
2882 (home-page "https://github.com/NiklasRosenstein/python-docspec")
2883 (synopsis "Represent API documentation of programming languages")
2884 (description
2885 "Docspec is a JSON object specification for representing API
2886documentation of programming languages.")
2887 (license license:expat)))
2888
2889(define-public python-docspec-python
2890 (package
2891 (name "python-docspec-python")
2892 (version "2.2.1")
2893 (source
2894 (origin
2895 (method url-fetch)
2896 (uri (pypi-uri "docspec_python" version))
2897 (sha256
2898 (base32 "0n8m52vxmlvkj7p5jmd4rfdks65rrp4q4vzak44y6kbg9l5qa6y4"))))
2899 (build-system pyproject-build-system)
2900 (arguments
2901 (list #:tests? #false)) ;there are none
2902 (propagated-inputs (list python-docspec python-nr-util))
2903 (native-inputs (list python-poetry-core))
2904 (home-page "https://github.com/NiklasRosenstein/docspec/")
2905 (synopsis "Produce docspec data from Python source code")
2906 (description
2907 "This package provides a parser based on @code{lib2to3} producing
2908@code{docspec} data from Python source code.")
2909 (license license:expat)))
2910
2911(define-public python-fqdn
2912 (package
2913 (name "python-fqdn")
2914 (version "1.5.1")
2915 (source
2916 (origin
2917 (method url-fetch)
2918 (uri (pypi-uri "fqdn" version))
2919 (sha256
2920 (base32 "17yqckhymnamszhg06751c83rg3fnr5iy33a135bazvngrkx6phh"))))
2921 (build-system pyproject-build-system)
2922 (arguments (list #:tests? #false)) ;there are none
2923 (propagated-inputs (list python-cached-property))
2924 (native-inputs (list python-setuptools python-wheel))
2925 (home-page "https://github.com/ypcrts/fqdn")
2926 (synopsis "Validate domain names against RFC 1123")
2927 (description
2928 "This package validates fully-qualified domain names against RFC 1123, so
2929that they are acceptable to modern bowsers")
2930 (license license:mpl2.0)))
2931
2932(define-public python-fire
2933 (package
2934 (name "python-fire")
2935 (version "0.7.0")
2936 (source
2937 (origin
2938 (method url-fetch)
2939 (uri (pypi-uri "fire" version))
2940 (sha256
2941 (base32 "1pswm79gi51p596zmfvaskx0i15znbr610yws5dgdsing7q505cn"))))
2942 (build-system pyproject-build-system)
2943 (propagated-inputs (list python-termcolor))
2944 (native-inputs (list python-pytest python-setuptools python-wheel))
2945 (synopsis "Library for automatically generating command line interfaces")
2946 (description
2947 "Fire is a library for automatically generating command line interfaces
2948from absolutely any Python object. The following are the advantages:
2949@itemize
2950@item A simple way to create a CLI in Python.
2951@item A helpful tool for developing and debugging Python code.
2952@item Helps with exploring existing code or turning other people's code into a
2953command line interface.
2954@item Makes transitioning between Bash and Python easier.
2955@item Makes using a Python REPL easier by setting up the REPL with the modules
2956and variables you'll need already imported and created.
2957@end itemize")
2958 (home-page "https://github.com/google/python-fire")
2959 (license license:asl2.0)))
2960
2961(define-public python-fit-nbinom
2962 (package
2963 (name "python-fit-nbinom")
2964 (version "1.1")
2965 (source (origin
2966 (method url-fetch)
2967 (uri (pypi-uri "fit_nbinom" version))
2968 (sha256
2969 (base32
2970 "12v8l5i35vjbpvh5i4lw29ys6vpr3z7pysyrx33hxaq09zr015mx"))))
2971 (build-system pyproject-build-system)
2972 (arguments
2973 (list
2974 #:tests? #false ;there are none
2975 #:phases
2976 '(modify-phases %standard-phases
2977 (add-after 'unpack 'remove-invalid-syntax
2978 (lambda _
2979 (substitute* "setup.py"
2980 ((".\\*\"") "\"")))))))
2981 (propagated-inputs (list python-numpy python-scipy))
2982 (native-inputs (list python-setuptools python-wheel))
2983 (home-page "https://github.com/joachimwolff/fit_nbinom")
2984 (synopsis "Negative binomial maximum likelihood estimator")
2985 (description "This package provides an implementation in Python using
2986scipy and numpy of negative binomial maximum likelihood estimation.")
2987 (license license:gpl3+)))
2988
2989(define-public python-docrep
2990 (package
2991 (name "python-docrep")
2992 (version "0.3.2")
2993 (source (origin
2994 (method url-fetch)
2995 (uri (pypi-uri "docrep" version))
2996 (sha256
2997 (base32
2998 "0523jrzjj29kxpdllmfhrfj9kysi9mphp2m7ippjkn5b07i1g2pd"))))
2999 (build-system pyproject-build-system)
3000 (propagated-inputs (list python-six))
3001 (native-inputs (list python-pytest python-pytest-runner
3002 python-setuptools python-wheel))
3003 (home-page "https://github.com/Chilipp/docrep")
3004 (synopsis "Python package for docstring repetition")
3005 (description "Docrep is the documentation repetition module. This module
3006targets developers that develop complex and nested Python APIs and helps them
3007to create a well-documented piece of software.")
3008 (license license:asl2.0)))
3009
3010(define-public python-dotmap
3011 (package
3012 (name "python-dotmap")
3013 (version "1.3.30")
3014 (source
3015 (origin
3016 (method url-fetch)
3017 (uri (pypi-uri "dotmap" version))
3018 (sha256
3019 (base32 "0s5kb2v7jd0narz6m6jcicak3h5pw290wz21cdsv8pq77y9sf8aq"))))
3020 (build-system pyproject-build-system)
3021 (arguments (list #:test-backend #~'unittest))
3022 (native-inputs (list python-setuptools))
3023 (home-page "https://github.com/drgrib/dotmap")
3024 (synopsis "Ordered, dynamically-expandable dot-access dictionary")
3025 (description
3026 "DotMap is a dot-access dictionary subclass that has dynamic
3027hierarchy creation, can be initialized with keys, can be initialized from a
3028dictionary, can be convert to a dictionary, and is ordered by insertion.")
3029 (license license:expat)))
3030
3031(define-public python-dotty-dict
3032 (package
3033 (name "python-dotty-dict")
3034 (version "1.3.1")
3035 (source
3036 (origin
3037 (method git-fetch)
3038 (uri (git-reference
3039 (url "https://github.com/pawelzny/dotty_dict")
3040 (commit (string-append "v" version))))
3041 (sha256
3042 (base32 "0rs83pglkgb4sfnk09rskg8c53hvl7mkjw4vfgl5xc8z13vyi3li"))))
3043 (build-system pyproject-build-system)
3044 (native-inputs
3045 (list python-poetry-core
3046 python-pytest
3047 python-setuptools))
3048 (home-page "https://github.com/pawelzny/dotty_dict")
3049 (synopsis "Python library for accessing dictionaries using a dot syntax")
3050 (description "This package provides a library that wraps the traditional
3051Python dictionaries and provides a syntax to access nested dictionaries values
3052using a dot syntax, for example: @code{dictionary['deeply.nested.key']}.")
3053 (license license:expat)))
3054
3055(define-public python-affine
3056 (package
3057 (name "python-affine")
3058 (version "2.4.0")
3059 (source (origin
3060 (method url-fetch)
3061 (uri (pypi-uri "affine" version))
3062 (sha256
3063 (base32
3064 "1shyvajayyzbkp9dihb4mz835jnkp0kqqbyjfqci6v43da6q2kd2"))))
3065 (build-system pyproject-build-system)
3066 (propagated-inputs (list python-coveralls python-flake8 python-pydocstyle
3067 python-pytest python-pytest-cov))
3068 (native-inputs (list python-flit-core))
3069 (home-page "https://github.com/rasterio/affine")
3070 (synopsis "Matrices describing affine transformation of the plane")
3071 (description "This is a package for matrices describing the affine
3072transformation of the plane.")
3073 (license license:bsd-3)))
3074
3075(define-public python-argopt
3076 (package
3077 (name "python-argopt")
3078 (version "0.9.1")
3079 (source
3080 (origin
3081 (method url-fetch)
3082 (uri (pypi-uri "argopt" version))
3083 (sha256
3084 (base32 "03kpzdz8ib3szq8dpbr63jv0za4rpwal9iwpr3xhyqpzyiwhcy19"))))
3085 (build-system pyproject-build-system)
3086 (native-inputs
3087 (list python-pytest
3088 python-pytest-timeout
3089 python-setuptools
3090 python-setuptools-scm
3091 python-wheel))
3092 (home-page "https://github.com/casperdcl/argopt")
3093 (synopsis "Generate a command-line interface from a docstring")
3094 (description
3095 "This package provides tools to define a command line interface
3096from a docstring rather than the other way around.")
3097 (license license:mpl2.0)))
3098
3099(define-public python-array-api-compat
3100 (package
3101 (name "python-array-api-compat")
3102 (version "1.12.0")
3103 (source
3104 (origin
3105 (method url-fetch)
3106 (uri (pypi-uri "array_api_compat" version))
3107 (sha256
3108 (base32 "0x7r1ni9zpg68yz76dfza07q3pgwxjx15h5p4jn57pjhyqawcnsq"))))
3109 (build-system pyproject-build-system)
3110 ;; Tests would require all supported array libraries, including pytorch
3111 (arguments (list #:tests? #false))
3112 (native-inputs
3113 (list python-setuptools))
3114 (home-page "https://data-apis.org/array-api-compat/")
3115 (synopsis "Array API compatibility wrapper for NumPy et al")
3116 (description
3117 "This package provides a wrapper around @code{NumPy} and other array
3118libraries to make them compatible with the Array API standard")
3119 (license license:expat)))
3120
3121(define-public python-array-api-strict
3122 (package
3123 (name "python-array-api-strict")
3124 (version "2.4.1")
3125 (source
3126 (origin
3127 (method url-fetch)
3128 (uri (pypi-uri "array_api_strict" version))
3129 (sha256
3130 (base32 "0k1v3h54y1yny8mhgwjk6p51zf87farfk1xn9842g5lcrfhxqxvc"))))
3131 (build-system pyproject-build-system)
3132 (arguments
3133 (list
3134 ;; tests: 584 passed, 1 skipped, 2 deselected
3135 #:test-flags
3136 ;; ModuleNotFoundError: No module named 'numpy', not sure why?
3137 #~(list "-k" (string-append "not test_disabled_extensions"
3138 " and not test_environment_variables"))))
3139 (native-inputs
3140 (list python-pytest
3141 python-setuptools
3142 python-setuptools-scm))
3143 (propagated-inputs
3144 (list python-numpy))
3145 (home-page "https://data-apis.org/array-api-strict/")
3146 (synopsis "Strict implementation of the Python array API")
3147 (description
3148 "@code{array_api_strict} is a strict, minimal implementation of the
3149@url{https://data-apis.org/array-api/latest/, Python array API}.
3150
3151The purpose of array-api-strict is to provide an implementation of the array
3152API for consuming libraries to test against so they can be completely sure
3153their usage of the array API is portable.")
3154 (license license:bsd-3)))
3155
3156(define-public python-cachetools
3157 (package
3158 (name "python-cachetools")
3159 (version "6.1.0")
3160 (source
3161 (origin
3162 (method url-fetch)
3163 (uri (pypi-uri "cachetools" version))
3164 (sha256
3165 (base32 "11s5ajy31r08228nd2sbv9jdir3vs584khxawwydnj18742g9i5l"))))
3166 (build-system pyproject-build-system)
3167 (native-inputs
3168 (list python-pytest
3169 python-setuptools
3170 python-wheel))
3171 (home-page "https://github.com/tkem/cachetools/")
3172 (synopsis "Extensible memoizing collections and decorators")
3173 (description "This module provides various memoizing collections and
3174decorators, including variants of the Python standard library's
3175@code{lru_cache} function decorator.")
3176 (license license:expat)))
3177
3178(define-public python-cachetools-5
3179 (package
3180 (inherit python-cachetools)
3181 (version "5.5.2")
3182 (source
3183 (origin
3184 (method url-fetch)
3185 (uri (pypi-uri "cachetools" version))
3186 (sha256
3187 (base32 "1m20wqipm50zvcgs3z2xksb96qwx1xc1jbhvaxcnglkmj6m1qrhs"))))))
3188
3189(define-public python-colorclass
3190 (package
3191 (name "python-colorclass")
3192 (version "2.2.2")
3193 (source
3194 (origin
3195 (method git-fetch)
3196 (uri (git-reference
3197 (url "https://github.com/matthewdeanmartin/colorclass")
3198 (commit (string-append "v" version))))
3199 (file-name (git-file-name name version))
3200 (sha256
3201 (base32 "1ylj167lfh8yzms30qrkiznv6737hdxra5lk8mhijcjm3hi1cl9l"))))
3202 (build-system pyproject-build-system)
3203 (arguments
3204 (list
3205 #:test-flags
3206 #~(list "-k" "not test_piped") ; Unclear why this test fails.
3207 #:phases
3208 #~(modify-phases %standard-phases
3209 (add-after 'unpack 'use-poetry-core
3210 (lambda _
3211 ;; Patch to use the core poetry API.
3212 (substitute* "pyproject.toml"
3213 (("poetry.masonry.api") "poetry.core.masonry.api")))))))
3214 (native-inputs (list python-poetry-core python-pytest))
3215 (home-page "https://github.com/matthewdeanmartin/colorclass")
3216 (synopsis "Colorful console applications with Python")
3217 (description
3218 "This package provides an ANSI color text library for Python. It
3219provides automatic coloring for dark or light terminals.")
3220 (license license:expat)))
3221
3222(define-public python-colorcet
3223 (package
3224 (name "python-colorcet")
3225 (version "3.1.1a1")
3226 (source
3227 (origin
3228 (method url-fetch)
3229 (uri (pypi-uri "colorcet" version))
3230 (sha256
3231 (base32 "1h15wdgha1cpj5a9p2dy9d8qdqnl5j1a0ylc7wilcfhvnfzcgp08"))))
3232 (build-system pyproject-build-system)
3233 (native-inputs (list python-nbval
3234 python-packaging
3235 python-pytest
3236 python-pytest-mpl
3237 python-setuptools
3238 python-setuptools-scm))
3239 (home-page "https://colorcet.holoviz.org/")
3240 (synopsis "Collection of perceptually uniform colormaps")
3241 (description "Colorcet is a collection of perceptually accurate 256-color
3242colormaps for use with Python plotting programs like Bokeh, Matplotlib,
3243HoloViews, and Datashader.")
3244 (license license:cc-by4.0)))
3245
3246(define-public python-colored
3247 (package
3248 (name "python-colored")
3249 (version "2.3.0")
3250 (source (origin
3251 (method git-fetch)
3252 (uri (git-reference
3253 (url "https://gitlab.com/dslackw/colored")
3254 (commit version)))
3255 (file-name (git-file-name name version))
3256 (sha256
3257 (base32
3258 "00332xdjw5fcj5wx848693355nvlgcf8qmpwkvz3rngfg1q5bxa6"))))
3259 (build-system pyproject-build-system)
3260 (arguments
3261 (list
3262 #:phases
3263 #~(modify-phases %standard-phases
3264 (add-before 'check 'pre-check
3265 (lambda _
3266 ;; Tests expect ANSI escape codes for colors.
3267 (setenv "FORCE_COLOR" "1"))))))
3268 (native-inputs (list python-flit-core python-pytest))
3269 (home-page "https://gitlab.com/dslackw/colored")
3270 (synopsis "Simple library for color and formatting to terminal")
3271 (description "This is a very simple Python library for color and
3272formatting in the terminal. It comes with a collection of color codes and
3273names for 256 color terminal setups.")
3274 (license license:expat)))
3275
3276(define-public python-colored-traceback
3277 ;; No tags in upstream repository.
3278 (let ((commit "98e6dea7111f7681db823c518f18026374a832b9")
3279 (revision "0"))
3280 (package
3281 (name "python-colored-traceback")
3282 (version (git-version "0.4.2" revision commit))
3283 (source
3284 (origin
3285 (method git-fetch)
3286 (uri (git-reference
3287 (url "https://github.com/staticshock/colored-traceback.py")
3288 (commit commit)))
3289 (file-name (git-file-name name version))
3290 (sha256
3291 (base32 "19d5mpwk7398b8fjh6abnr96wz70vf5vb4p207r8sny748rwx451"))))
3292 (build-system pyproject-build-system)
3293 (arguments
3294 ;; Tests are incompatible with current python version.
3295 (list #:tests? #f))
3296 (propagated-inputs (list python-colorama python-pygments))
3297 (native-inputs (list python-setuptools python-wheel))
3298 (home-page "https://github.com/staticshock/colored-traceback.py")
3299 (synopsis "Automatically color uncaught exception tracebacks")
3300 (description "This package provides python utilities to automatically
3301color uncaught exception tracebacks.")
3302 (license license:isc))))
3303
3304(define-public python-colorful
3305 (package
3306 (name "python-colorful")
3307 (version "0.5.8")
3308 (source
3309 (origin
3310 (method git-fetch)
3311 (uri (git-reference
3312 (url "https://github.com/timofurrer/colorful")
3313 (commit (string-append "v" version))))
3314 (file-name (git-file-name name version))
3315 (sha256
3316 (base32 "00ag7h9g4v06japcva70sqibb9k49jrxq97nq3bi16b2y16mafwz"))))
3317 (build-system pyproject-build-system)
3318 (native-inputs
3319 (list python-pytest
3320 python-setuptools))
3321 (propagated-inputs
3322 (list python-colorama))
3323 (home-page "http://github.com/timofurrer/colorful")
3324 (synopsis "Terminal string styling")
3325 (description "Colorful provides an array of text styles, that can be used
3326as functions or string constants to form colored terminal output.")
3327 (license license:expat)))
3328
3329(define-public python-colorthief
3330 (package
3331 (name "python-colorthief")
3332 (version "0.2.1")
3333 (source
3334 (origin
3335 (method url-fetch)
3336 (uri (pypi-uri "colorthief" version))
3337 (sha256
3338 (base32 "08bjsmmkihyksms2vgndslln02rvw56lkxz28d39qrnxbg4v1707"))))
3339 (build-system pyproject-build-system)
3340 (arguments
3341 (list #:tests? #f)) ;no tests in PyPI or Git
3342 (native-inputs (list python-setuptools))
3343 (propagated-inputs (list python-pillow))
3344 (home-page "https://github.com/fengsp/color-thief-py")
3345 (synopsis "Grab the color palette of an image")
3346 (description
3347 "This package provides methods to determine the dominant color
3348of an image, as well as constructing a representative color palette.")
3349 (license license:bsd-3)))
3350
3351(define-public python-construct-classes
3352 (package
3353 (name "python-construct-classes")
3354 (version "0.1.2")
3355 (source
3356 (origin
3357 (method git-fetch)
3358 (uri (git-reference
3359 (url "https://github.com/matejcik/construct-classes")
3360 (commit (string-append "v" version))))
3361 (file-name (git-file-name name version))
3362 (sha256
3363 (base32 "0fmr8nfg543lyqk4164a52jb6lwpq98radicbkhhdfckq9lib2wp"))))
3364 (build-system pyproject-build-system)
3365 (propagated-inputs
3366 (list python-construct))
3367 (native-inputs
3368 (list python-poetry-core
3369 python-pytest))
3370 (home-page "https://github.com/matejcik/construct-classes")
3371 (synopsis "Parse binary structs into dataclasses")
3372 (description "This package provides a parser to parse binary structs
3373into dataclasses.")
3374 (license license:expat)))
3375
3376(define-public python-contourpy
3377 (package
3378 (name "python-contourpy")
3379 (version "1.3.3")
3380 (source
3381 (origin
3382 (method url-fetch)
3383 (uri (pypi-uri "contourpy" version))
3384 (sha256
3385 (base32 "1078vg1lha4z8adrfnpr68sdqmjdn0ml74d4pk804191bcai4gh8"))))
3386 (build-system pyproject-build-system)
3387 (arguments
3388 (list
3389 ;; tests: 1746 passed, 17 skipped, 8 warnings
3390 #:test-flags
3391 ;; To prevent adding Matplotlib reducing closure size, and break cycle.
3392 #~(list "-m" "not image"
3393 ;; Tests that pass but avoided for load reasons.
3394 "-k" "not test_filled_random_big and not test_lines_random_big")))
3395 (native-inputs
3396 (list cmake-minimal
3397 meson-python
3398 pkg-config
3399 pybind11
3400 python-pytest
3401 python-wurlitzer))
3402 (propagated-inputs
3403 (list python-numpy))
3404 (home-page "https://contourpy.readthedocs.io/")
3405 (synopsis
3406 "Python library for calculating contours of 2D quadrilateral grids")
3407 (description
3408 "ContourPy is a Python library for calculating contours of 2D
3409quadrilateral grids. It is written in C++11 and wrapped using pybind11.")
3410 (license license:bsd-3)))
3411
3412(define-public python-lunr
3413 (package
3414 (name "python-lunr")
3415 (version "0.8.0")
3416 (source
3417 (origin
3418 (method url-fetch)
3419 (uri
3420 (pypi-uri "lunr" version))
3421 (sha256
3422 (base32 "0a426nngs8h2mhqm60rwywxh2vb6snrip47w9fhpglkqjl2zav5l"))))
3423 (build-system pyproject-build-system)
3424 (arguments
3425 (list
3426 #:test-flags
3427 '(list "-k" "not TestLanguageSupport"
3428 "--ignore-glob=tests/acceptance_tests/*")))
3429 (native-inputs
3430 (list python-hatch-fancy-pypi-readme
3431 python-hatchling
3432 python-pytest
3433 python-pytest-timeout))
3434 (propagated-inputs
3435 (list python-nltk))
3436 (home-page "https://github.com/yeraydiazdiaz/lunr.py")
3437 (synopsis "Full-text search library")
3438 (description "This package provides python library for full-text search.
3439It indexes documents and provides a search interface for retrieving documents
3440that best match text queries.")
3441 (license license:expat)))
3442
3443(define-public python-mdit-py-plugins
3444 (package
3445 (name "python-mdit-py-plugins")
3446 (version "0.4.2")
3447 (source (origin
3448 (method git-fetch) ;for tests
3449 (uri (git-reference
3450 (url "https://github.com/executablebooks/mdit-py-plugins")
3451 (commit (string-append "v" version))))
3452 (file-name (git-file-name name version))
3453 (sha256
3454 (base32
3455 "0lyv8k3sdm9i9am47z6zx96l9bbd9g8xp06yf2alafkmp0q873b9"))))
3456 (build-system pyproject-build-system)
3457 (propagated-inputs
3458 (list python-markdown-it-py
3459 python-attrs))
3460 (native-inputs
3461 (list python-flit-core
3462 python-pytest
3463 python-pytest-regressions))
3464 (home-page "https://github.com/executablebooks/mdit-py-plugins")
3465 (synopsis "Collection of plugins for markdown-it-py")
3466 (description "This package contains a collection of plugins for
3467@code{markdown-it-py} like:
3468@enumerate
3469@item amsmath,
3470@item attrs,
3471@item container,
3472@item definition list,
3473@item dollarmath,
3474@item field list,
3475@item footnote,
3476@item textmath, and
3477@item wordcount.
3478@end enumerate")
3479 (license license:expat)))
3480
3481(define-public python-mdurl
3482 (package
3483 (name "python-mdurl")
3484 (version "0.1.2")
3485 (source
3486 (origin
3487 (method git-fetch) ; no tests data in PyPi package
3488 (uri (git-reference
3489 (url "https://github.com/executablebooks/mdurl")
3490 (commit version)))
3491 (file-name (git-file-name name version))
3492 (sha256
3493 (base32 "0csc777q42jzv4zgdzxmwp8xqlb92ws1jvj09m2smh4klw67q5f3"))))
3494 (build-system pyproject-build-system)
3495 (native-inputs (list python-flit python-pytest))
3496 (home-page "https://github.com/executablebooks/mdurl")
3497 (synopsis "Markdown URL utilities")
3498 (description
3499 "This package implements a Python port of the JavaScript @code{mdurl}.")
3500 (license license:expat)))
3501
3502(define-public python-mkdocs
3503 (package
3504 (name "python-mkdocs")
3505 (version "1.3.0")
3506 (source
3507 (origin
3508 (method git-fetch)
3509 (uri (git-reference
3510 (url "https://github.com/mkdocs/mkdocs")
3511 (commit version)))
3512 (file-name (git-file-name name version))
3513 (sha256
3514 (base32 "1n5rdllrxvhnxmdrddf55p3s86dakx0rq2gg6bj6pr6jg2pn932b"))))
3515 (build-system pyproject-build-system)
3516 (arguments
3517 (list
3518 #:test-backend #~'unittest
3519 #:test-flags
3520 #~(list "discover" "-p" "*tests.py" "mkdocs" "--top-level-directory" ".")
3521 #:phases
3522 #~(modify-phases %standard-phases
3523 ;; Requirements refer to a specific version of dependencies,
3524 ;; which are too old. So we patch to refer to any later version.
3525 (add-after 'unpack 'patch-requirements
3526 (lambda _
3527 (substitute* "setup.py"
3528 (("==") ">=")))))))
3529 (native-inputs (list python-setuptools))
3530 (propagated-inputs
3531 (list python-babel
3532 python-click
3533 python-ghp-import
3534 python-importlib-metadata
3535 python-jinja2
3536 python-markdown
3537 python-markupsafe
3538 python-mdx-gh-links
3539 python-mergedeep
3540 python-packaging
3541 python-pyyaml
3542 python-pyyaml-env-tag
3543 python-watchdog))
3544 (home-page "https://www.mkdocs.org")
3545 (synopsis "Project documentation with Markdown")
3546 (description
3547 "MkDocs is a static site generator geared towards building project
3548documentation. Documentation source files are written in Markdown, and
3549configured with a single YAML configuration file.")
3550 (license license:bsd-3)))
3551
3552(define-public python-mkdocs-markdownextradata-plugin
3553 (package
3554 (name "python-mkdocs-markdownextradata-plugin")
3555 (version "0.2.5")
3556 (source
3557 (origin
3558 (method git-fetch)
3559 (uri (git-reference
3560 (url "https://github.com/rosscdh/mkdocs-markdownextradata-plugin")
3561 (commit version)))
3562 (file-name (git-file-name name version))
3563 (sha256
3564 (base32 "1a3868s9m7pzyfncpjbjsa9vw5nihssl2v47pxj7h6qa67kvlk3g"))))
3565 (build-system pyproject-build-system)
3566 (native-inputs (list python-pytest python-setuptools))
3567 (propagated-inputs (list python-mkdocs python-pyyaml))
3568 (home-page "https://github.com/rosscdh/mkdocs-markdownextradata-plugin/")
3569 (synopsis "Inject extra variables into the MkDocs markdown template")
3570 (description
3571 "This package provides a MkDocs plugin that injects the mkdocs.yml extra
3572variables into the markdown template.")
3573 (license license:expat)))
3574
3575(define-public python-docstring-to-markdown
3576 (package
3577 (name "python-docstring-to-markdown")
3578 (version "0.15")
3579 (source
3580 (origin
3581 (method url-fetch)
3582 (uri (pypi-uri "docstring-to-markdown" version))
3583 (sha256
3584 (base32 "0gdpabnyl1kyy0cjrnph6xl4fyhgim50a1amsaqq3hahki6i2ip1"))))
3585 (build-system pyproject-build-system)
3586 (arguments
3587 (list
3588 #:phases
3589 #~(modify-phases %standard-phases
3590 (add-after 'unpack 'reduce-test-coverage-since-failing
3591 (lambda _
3592 (substitute* "setup.cfg"
3593 (("(^.*cov.*$|^.*flake8.*$)") "")))))))
3594 (native-inputs
3595 (list python-pytest
3596 python-pytest-cov
3597 python-pytest-flake8
3598 python-setuptools
3599 python-wheel))
3600 (home-page "https://github.com/python-lsp/docstring-to-markdown")
3601 (synopsis "On the fly conversion of Python docstrings to markdown")
3602 (description
3603 "This module can convert Python docstrings to Markdown. It can recognise
3604reStructuredText inside docstrings and convert multiple of its features to
3605Markdown. It also includes initial support for Google-formatted docstrings.")
3606 (license license:lgpl2.1+)))
3607
3608(define-public python-mysql-connector-python
3609 (package
3610 (name "python-mysql-connector-python")
3611 (version "8.0.33")
3612 ;; The archive on PyPi does not contain a build system
3613 (source (origin
3614 (method url-fetch)
3615 (uri (string-append "https://cdn.mysql.com/Downloads/"
3616 "Connector-Python/mysql-connector-python-"
3617 version "-src.tar.gz"))
3618 (sha256
3619 (base32
3620 "00j9xgd43yzx5yiijnlmpaqpa58m5lscjglsgzg48dibhr69br0l"))))
3621 (build-system python-build-system)
3622 (arguments
3623 (list
3624 ;; tests: 1371 passed
3625 #:configure-flags
3626 #~(list (string-append "--with-mysql-capi="
3627 #$(this-package-input "mysql"))
3628 (string-append "--with-protobuf-include-dir="
3629 #$(this-package-input "protobuf")
3630 "/include/google/protobuf")
3631 (string-append "--with-protobuf-lib-dir="
3632 #$(this-package-input "protobuf")
3633 "/lib")
3634 (string-append "--with-protoc="
3635 #$(this-package-input "protobuf")
3636 "/bin/protoc"))
3637 #:phases
3638 #~(modify-phases %standard-phases
3639 (add-after 'unpack 'compatibility
3640 (lambda _
3641 (substitute* "src/mysql_capi.c"
3642 (("res = mysql_options\\(&self->session, MYSQL_OPT_LOAD_DATA_LOCAL_DIR.*")
3643 "res = 0;")
3644 (("mysql_options\\(&self->session, MYSQL_OPT_LOAD_DATA_LOCAL_DIR.*")
3645 "")
3646 (("mysql_options\\(&self->session, MYSQL_OPT_TLS_CIPHERSUITES.*")
3647 "")
3648 ;; The C API does not have mysql_bind_param, so we produce an
3649 ;; error here.
3650 (("status = mysql_bind_param.*") "status = 1;"))
3651 ;; See https://github.com/protocolbuffers/protobuf/issues/9943
3652 (substitute* "src/mysqlxpb/mysqlxpb.cc"
3653 (("google::protobuf::string") "std::string"))))
3654 (replace 'check
3655 (lambda* (#:key tests? #:allow-other-keys)
3656 (when tests?
3657 ;; Some of these tests might be failing due to the build
3658 ;; container's restrictions, others are due to the version
3659 ;; mismatch.
3660 (substitute* "tests/cext/test_cext_api.py"
3661 (("def test_change_user") "def _do_not_test_change_user")
3662 (("def test_get_character_set_info")
3663 "def _do_not_test_get_character_set_info"))
3664 (substitute* "tests/test_bugs.py"
3665 (("def test_change_user") "def _do_not_test_change_user")
3666 (("def test_lost_connection") "def _do_not_test_lost_connection")
3667 (("def test_kill_query") "def _do_not_test_kill_query")
3668 ;; These all fail because of expired certificates.
3669 (("def test_cext_verify_server_certificate")
3670 "def _do_not_test_cext_verify_server_certificate")
3671 (("def test_pure_verify_server_certificate")
3672 "def _do_not_test_pure_verify_server_certificate")
3673 (("def test_verify_server_name_cext_cnx")
3674 "def _do_not_test_verify_server_name_cext_cnx")
3675 (("def test_verify_server_name_pure_cnx")
3676 "def _do_not_test_verify_server_name_pure_cnx"))
3677 (substitute* "tests/test_connection.py"
3678 (("def test_allow_local_infile_in_path")
3679 "def _do_not_test_allow_local_infile_in_path")
3680 ;; This fails because of expired certificates.
3681 (("def test_connect_with_unix_socket")
3682 "def _do_not_test_connect_with_unix_socket"))
3683 (substitute* "tests/test_mysqlx_connection.py"
3684 ;; This fails because of expired certificates.
3685 (("def test_ssl_connection")
3686 "def _do_not_test_ssl_connection")
3687 ;; ValueError: Invalid IPv6 URL
3688 (("def test_connection_uri")
3689 "def _do_not_test_connection_uri"))
3690 (substitute* "tests/test_constants.py"
3691 (("def test_deprecated")
3692 "def _do_not_test_deprecated"))
3693 (mkdir-p "/tmp/datadir")
3694 (invoke "python3" "unittests.py"
3695 "--verbosity=3"
3696 (string-append "--with-mysql=" #$(this-package-input "mysql"))
3697 "--keep"
3698 "--mysql-topdir=/tmp/datadir"
3699 "--unix-socket=/tmp/datadir")))))))
3700 (propagated-inputs (list python-protobuf))
3701 (inputs (list mysql protobuf-3.20 openssl-1.1 zlib))
3702 (home-page "https://dev.mysql.com/doc/connector-python/en/index.html")
3703 (synopsis "MySQL driver written in Python")
3704 (description "MySQL Connector/Python enables Python programs to access
3705MySQL databases, using an API that is compliant with the Python Database API
3706Specification v2.0 (PEP 249).")
3707 (license license:gpl2)))
3708
3709(define-public python-pdoc
3710 (package
3711 (name "python-pdoc")
3712 (version "13.0.1")
3713 (source (origin
3714 (method git-fetch)
3715 (uri (git-reference
3716 (url "https://github.com/mitmproxy/pdoc")
3717 (commit (string-append "v" version))))
3718 (file-name (git-file-name name version))
3719 (sha256
3720 (base32
3721 "0gxkw607nrd67ck4w8jri9vfrm5g60qvp8b134m8zkiphbxjnx0l"))))
3722 (build-system pyproject-build-system)
3723 (native-inputs (list python-pytest python-jinja2 python-pygments
3724 python-setuptools python-wheel))
3725 (arguments
3726 (list
3727 ;; Some tests fail, presumably because of slight version mismatches of
3728 ;; the dependencies.
3729 #:test-flags
3730 '(list "-k" (string-append "not test_var_with_raising_repr and "
3731 "not test_smoke[mock] and "
3732 "not test_snapshots[html"))))
3733 (home-page "https://pdoc.dev/")
3734 (synopsis "API documentation for Python projects")
3735 (description "pdoc auto-generates API documentation that follows your
3736project's Python module hierarchy. It requires no configuration, has
3737first-class support for type annotations, cross-links between identifiers,
3738comes with an integrated live-reloading web server, uses customizable HTML
3739templates, understands numpydoc and Google-style docstrings.")
3740 (license license:unlicense)))
3741
3742(define-public python-py4j
3743 (package
3744 (name "python-py4j")
3745 (version "0.10.9.7")
3746 (source (origin
3747 (method url-fetch)
3748 (uri (pypi-uri "py4j" version))
3749 (sha256
3750 (base32
3751 "1fwdx92cdaiviradksfyygg05g1fpc3x2lf65bv5rnispcam6vhb"))))
3752 (build-system pyproject-build-system)
3753 (arguments (list #:tests? #f)) ; Requires a running JVM?
3754 (native-inputs (list python-setuptools))
3755 (home-page "https://www.py4j.org/")
3756 (synopsis "Dynamically access arbitrary Java objects from Python")
3757 (description
3758 "This package enables Python programs to dynamically access arbitrary
3759Java objects.")
3760 (license license:bsd-3)))
3761
3762(define-public python-pymdown-extensions
3763 (package
3764 (name "python-pymdown-extensions")
3765 (version "10.16.1")
3766 (source
3767 (origin
3768 (method git-fetch)
3769 (uri (git-reference
3770 (url "https://github.com/facelessuser/pymdown-extensions")
3771 (commit version)))
3772 (file-name (git-file-name name version))
3773 (sha256
3774 (base32 "0r36nk1ppq1wrgb1lcy9asp9872xr0gbhxrjw7dpa8lp6m7nqb9k"))))
3775 (build-system pyproject-build-system)
3776 ;; XXX: A lot of HTML tests fail with negligible discrepancies.
3777 (arguments
3778 (list #:tests? #f))
3779 (native-inputs (list python-hatchling python-pytest python-pyyaml))
3780 (propagated-inputs (list python-markdown))
3781 (home-page "https://github.com/facelessuser/pymdown-extensions")
3782 (synopsis "Extension pack for Python Markdown")
3783 (description
3784 "PyMdown Extensions is a collection of extensions for Python Markdown.
3785All extensions are found under the module namespace of pymdownx.")
3786 (license license:expat)))
3787
3788(define-public python-plotext
3789 (package
3790 (name "python-plotext")
3791 (version "5.2.8")
3792 (source (origin
3793 (method url-fetch)
3794 (uri (pypi-uri "plotext" version))
3795 (sha256
3796 (base32
3797 "1gpy1z2i4vq1mcrhysxahz4339pbl9rzk58rf5m5gf5ym9xji6ii"))))
3798 (build-system pyproject-build-system)
3799 (arguments (list #:tests? #false)) ;there are none
3800 (native-inputs (list python-setuptools python-wheel))
3801 (home-page "https://github.com/piccolomo/plotext")
3802 (synopsis "Plots in the terminal")
3803 (description "Plotext lets you plot directly to the terminal.")
3804 (license license:expat)))
3805
3806(define-public python-plotille
3807 (package
3808 (name "python-plotille")
3809 (version "5.0.0")
3810 (source
3811 (origin
3812 (method git-fetch)
3813 (uri (git-reference
3814 (url "https://github.com/tammoippen/plotille")
3815 (commit (string-append "v" version))))
3816 (file-name (git-file-name name version))
3817 (sha256
3818 (base32 "0ys8ivsbiv58c8rsrk2m2n3sh2rq6qqaa2mhq0hacsgrvmvv0siz"))
3819 (modules '((guix build utils)))
3820 (snippet
3821 #~(begin
3822 ;; Without deleting ./imgs setuptools complains as follows: error:
3823 ;; Multiple top-level packages discovered in a flat-layout:
3824 ;; ['imgs', 'plotille'].
3825 (delete-file-recursively "./imgs")))))
3826 (build-system pyproject-build-system)
3827 (native-inputs
3828 (list python-pytest
3829 python-mock
3830 python-pendulum
3831 python-pytest-cov
3832 python-pytest-mock
3833 python-setuptools
3834 python-wheel))
3835 (home-page "https://github.com/tammoippen/plotille")
3836 (synopsis "Plot in the terminal using braille dots")
3837 (description
3838 "Plotille provides a figure class and graphing functions to create plots,
3839scatter plots, histograms and heatmaps in the terminal using braille dots.")
3840 (license license:expat)))
3841
3842(define-public python-poetry-dynamic-versioning
3843 (package
3844 (name "python-poetry-dynamic-versioning")
3845 (version "1.9.1")
3846 (source
3847 (origin
3848 (method url-fetch)
3849 (uri (pypi-uri "poetry_dynamic_versioning" version))
3850 (sha256
3851 (base32 "0j6sm60x0w31kf5003v4dhp9sdz1i5n5qsfd8r4wm8ksh7gvkryn"))))
3852 (build-system pyproject-build-system)
3853 (arguments
3854 (list
3855 #:test-flags
3856 #~(list "--ignore=tests/test_integration.py"
3857 "-k" (string-join
3858 ;; Tests searching for VCS back end.
3859 (list "not test__get_version__defaults"
3860 "test__enable_in_doc__project_with_dynamic"
3861 "test__enable_in_doc__project_with_version"
3862 "test__get_version__format_jinja"
3863 "test__get_version__format_jinja_imports_with_module_and_item"
3864 "test__get_version__format_jinja_imports_with_module_only"
3865 "test__get_version__format_jinja_with_enforced_style")
3866 " and not "))))
3867 (native-inputs
3868 (list python-poetry-core
3869 python-pytest))
3870 (propagated-inputs
3871 (list python-dunamai
3872 python-jinja2
3873 python-tomlkit))
3874 (home-page "https://github.com/mtkennerly/poetry-dynamic-versioning")
3875 (synopsis "Poetry plugin enabling VCS tags dynamic versioning")
3876 (description
3877 "This package provides a build backend that patches Poetry Core to enable
3878the versioning system in PEP 517 build frontends.")
3879 (license license:expat)))
3880
3881(define-public python-poetry-plugin-export
3882 (package
3883 (name "python-poetry-plugin-export")
3884 (version "1.8.0")
3885 (source
3886 (origin
3887 (method url-fetch)
3888 (uri (pypi-uri "poetry_plugin_export" version))
3889 (sha256
3890 (base32 "0qgw6w4xaw7cz9ykw376c5hcg9v2k30lnmna6pc9b4ymhn51d9hz"))))
3891 (build-system pyproject-build-system)
3892 (arguments
3893 (list
3894 #:tests? #f)) ;tests cycle with poetry
3895 (native-inputs
3896 (list python-poetry-core))
3897 (propagated-inputs
3898 (list python-pendulum))
3899 (home-page "https://python-poetry.org/")
3900 (synopsis "Poetry plugin to export the dependencies to various formats")
3901 (description
3902 "Poetry plugin to export the dependencies to various formats.")
3903 (license license:expat)))
3904
3905(define-public python-portpicker
3906 (package
3907 (name "python-portpicker")
3908 (version "1.6.0")
3909 (source
3910 (origin
3911 (method url-fetch)
3912 (uri (pypi-uri "portpicker" version))
3913 (sha256
3914 (base32 "1yiisk4h8qliwf99khz3lszrpjf6km76fbhzg01fwrbgz7b7yl5x"))))
3915 (build-system pyproject-build-system)
3916 (arguments
3917 (list
3918 #:test-flags
3919 ;; This fails because portserver ends up in bin, not site-packages
3920 '(list "--ignore=src/tests/portserver_test.py")))
3921 (propagated-inputs (list python-psutil))
3922 (native-inputs (list python-pytest python-setuptools python-wheel
3923 net-tools))
3924 (home-page "https://github.com/google/python_portpicker")
3925 (synopsis "Choose unique available network ports")
3926 (description
3927 "This package provides a library to choose unique available network
3928ports.")
3929 (license license:asl2.0)))
3930
3931(define-public python-md-ulb-pwrap
3932 (package
3933 (name "python-md-ulb-pwrap")
3934 (version "0.1.3")
3935 (source
3936 (origin
3937 (method git-fetch)
3938 (uri (git-reference
3939 (url "https://github.com/mondeja/md-ulb-pwrap")
3940 (commit (string-append "v" version))))
3941 (file-name (git-file-name name version))
3942 (sha256
3943 (base32 "08zqms8mz3m4kfsnjqapc8sjyjcaz82pq45lix6rjag67s0dhcn6"))))
3944 (build-system pyproject-build-system)
3945 (arguments
3946 (list
3947 #:imported-modules `(,@%cargo-build-system-modules
3948 ,@%pyproject-build-system-modules)
3949 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
3950 (guix build pyproject-build-system)
3951 (guix build utils))
3952 #:test-backend #~'custom
3953 #:test-flags #~(list "test.py")
3954 #:phases
3955 #~(modify-phases %standard-phases
3956 (add-after 'unpack 'prepare-cargo-build-system
3957 (lambda args
3958 (for-each
3959 (lambda (phase)
3960 (format #t "Running cargo phase: ~a~%" phase)
3961 (apply (assoc-ref cargo:%standard-phases phase)
3962 #:cargo-target #$(cargo-triplet)
3963 args))
3964 '(unpack-rust-crates
3965 configure
3966 check-for-pregenerated-files
3967 patch-cargo-checksums))))
3968 (add-after 'prepare-cargo-build-system 'chdir
3969 (lambda _
3970 (chdir "python"))))))
3971 (native-inputs
3972 (append
3973 (list maturin
3974 python-pytest
3975 python-unicode-linebreak
3976 rust
3977 `(,rust "cargo"))
3978 (or (and=> (%current-target-system)
3979 (compose list make-rust-sysroot))
3980 '())))
3981 (inputs (cargo-inputs 'md_ulb_pwrap))
3982 (home-page "https://github.com/mondeja/md-ulb-pwrap")
3983 (synopsis "Markdown paragraph wrapper")
3984 (description
3985 "This package provides a Markdown paragraph wrapper using Unicode Line
3986Breaking Algorithm written in Rust with Python bindings.")
3987 (license license:expat)))
3988
3989(define-public python-mdx-gh-links
3990 (package
3991 (name "python-mdx-gh-links")
3992 (version "0.4")
3993 (source
3994 (origin
3995 (method url-fetch)
3996 (uri (pypi-uri "mdx_gh_links" version))
3997 (sha256
3998 (base32 "11inr9azx6c174yfikysbw0mx7mpjm03qdqr1am2a510mg1amma1"))))
3999 (build-system pyproject-build-system)
4000 (arguments (list #:tests? #f)) ;tests connect github
4001 (native-inputs (list python-setuptools))
4002 (propagated-inputs (list python-markdown))
4003 (home-page "https://github.com/Python-Markdown/github-links/")
4004 (synopsis "Python-Markdown extension adding support for shorthand links")
4005 (description "This package is an extension to Python-Markdown which adds
4006support for shorthand links to GitHub users, repositories, issues and
4007commits.")
4008 (license license:bsd-3)))
4009
4010(define-public python-mkdocs-material
4011 (package
4012 (name "python-mkdocs-material")
4013 (version "7.1.3")
4014 (source
4015 (origin
4016 (method url-fetch)
4017 (uri
4018 (pypi-uri "mkdocs-material" version))
4019 (sha256
4020 (base32 "0ci9xiasq9nfn09v11m7p49vzazdbgslw7rpzjd6y3hsmn9vljz3"))
4021 (modules '((guix build utils)))
4022 (snippet
4023 ;; TODO There are still bundled assets and minified JS.
4024 #~(delete-file-recursively "material/assets/javascripts/lunr/min"))))
4025 (build-system pyproject-build-system)
4026 (arguments
4027 (list
4028 #:tests? #f ; No tests.
4029 #:phases
4030 #~(let ((symlink-js
4031 (lambda (inputs)
4032 (for-each
4033 (lambda (lang)
4034 (let* ((filename (string-append "lunr." lang ".min.js"))
4035 (file (string-append "share/javascript/" filename)))
4036 (symlink (search-input-file inputs file) filename)))
4037 (list "ar" "da" "de" "es" "fi" "fr" "hu" "it" "ja" "multi"
4038 "nl" "no" "pt" "ro" "ru" "stemmer.support" "sv" "tr"
4039 "vi")))))
4040 (modify-phases %standard-phases
4041 ;; Requirement mkdocs-material-extensions
4042 ;; in-turn requires mkdocs-material. This causes
4043 ;; circular dependency, so we remove this requirement.
4044 (add-after 'unpack 'patch-requirements
4045 (lambda _
4046 (substitute* "requirements.txt"
4047 (("mkdocs-material-extensions.*$")
4048 ""))))
4049 (add-after 'ensure-no-mtimes-pre-1980 'inject-javascript-assets
4050 (lambda* (#:key inputs #:allow-other-keys)
4051 (mkdir-p "material/assets/javascripts/min/")
4052 (with-directory-excursion "material/assets/javascripts/min/"
4053 (symlink-js inputs))))
4054 (add-after 'wrap 'replace-javascript-assets
4055 (lambda* (#:key inputs outputs #:allow-other-keys)
4056 (let* ((site (site-packages inputs outputs))
4057 (js-assets (string-append site "/material/"
4058 "assets/javascripts")))
4059 (with-directory-excursion js-assets
4060 (delete-file-recursively "min")
4061 (mkdir-p "min")
4062 (with-directory-excursion "min"
4063 (symlink-js inputs))))))))))
4064 (native-inputs (list python-setuptools))
4065 (inputs (list js-lunr-ar
4066 js-lunr-da
4067 js-lunr-de
4068 js-lunr-es
4069 js-lunr-fi
4070 js-lunr-fr
4071 js-lunr-hu
4072 js-lunr-it
4073 js-lunr-ja
4074 js-lunr-nl
4075 js-lunr-no
4076 js-lunr-pt
4077 js-lunr-ro
4078 js-lunr-ru
4079 js-lunr-sv
4080 js-lunr-tr
4081 js-lunr-vi
4082 js-lunr-multi
4083 js-lunr-stemmer-support))
4084 (propagated-inputs
4085 (list python-markdown python-mkdocs python-pygments
4086 python-pymdown-extensions))
4087 (home-page "https://squidfunk.github.io/mkdocs-material/")
4088 (synopsis "Material Design theme for MkDocs")
4089 (description "This package provides a theme plugin for the static site
4090generator MkDocs.")
4091 (license license:expat)))
4092
4093(define-public python-nanobind
4094 (package
4095 (name "python-nanobind")
4096 (version "2.10.2")
4097 (source
4098 (origin
4099 (method url-fetch)
4100 (uri (pypi-uri "nanobind" version))
4101 (sha256
4102 (base32 "0sscrair34s1nj7vvybakirpgjsg9l6qic4wsvpas7vdrq89jl08"))))
4103 (build-system pyproject-build-system)
4104 (arguments
4105 (list
4106 ;; tests: 466 passed, 27 skipped
4107 #:phases
4108 #~(modify-phases %standard-phases
4109 (add-before 'build 'configure-cmake
4110 (lambda _
4111 (invoke "cmake" "-S" "." "-B" "build" "-DNB_TEST_STABLE_ABI=ON")))
4112 (add-after 'configure-cmake 'build-c++
4113 (lambda _
4114 (invoke "cmake" "--build" "build" "-j" "2")))
4115 (add-before 'check 'pre-check
4116 (lambda _ (chdir "build"))))))
4117 (native-inputs
4118 (list cmake-minimal
4119 python-numpy
4120 python-pathspec
4121 python-pytest
4122 python-scikit-build-core
4123 python-scipy))
4124 (inputs
4125 (list eigen))
4126 (home-page "https://github.com/wjakob/nanobind/")
4127 (synopsis "Tiny and efficient C++/Python bindings")
4128 (description "Nanobind is a small binding library that exposes C++ types
4129in Python and vice versa. It is reminiscent of @code{Boost.Python} and
4130@code{pybind11} and uses near-identical syntax. In contrast to these existing
4131tools, @code{nanobind} is more efficient: bindings compile in a shorter amount
4132of time, produce smaller binaries, and have better runtime performance.")
4133 (license license:bsd-3)))
4134
4135(define-public python-nr-date
4136 (package
4137 (name "python-nr-date")
4138 (version "2.1.0")
4139 (source
4140 (origin
4141 (method url-fetch)
4142 (uri (pypi-uri "nr_date" version))
4143 (sha256
4144 (base32 "1rnjyykjp41mqz6h1vx18jblq97gi5m5x7dgasyaihnd7fhswhq6"))))
4145 (build-system pyproject-build-system)
4146 (arguments (list #:tests? #false)) ;there are none
4147 (native-inputs (list python-poetry-core))
4148 (home-page "https://github.com/NiklasRosenstein/python-nr.date")
4149 (synopsis "Fast, regex-based date parsing library in plain Python")
4150 (description "This package provides a fast, regex-based date parsing
4151library in pure Python.")
4152 (license license:expat)))
4153
4154(define-public python-nr-stream
4155 (package
4156 (name "python-nr-stream")
4157 (version "1.1.5")
4158 (source
4159 (origin
4160 (method url-fetch)
4161 (uri (pypi-uri "nr_stream" version))
4162 (sha256
4163 (base32 "0rag4vbjnalkyfcarx6yipn11ih2hmc3pfldava4c6n6pz31c0pb"))))
4164 (build-system pyproject-build-system)
4165 (arguments (list #:tests? #false)) ;there are none
4166 (native-inputs (list python-poetry-core))
4167 (home-page "https://github.com/NiklasRosenstein/python-nr.stream")
4168 (synopsis "Stream and Optional classes for Python")
4169 (description "This package provides a @code{Stream} and @code{Optional}
4170class.")
4171 (license license:expat)))
4172
4173(define-public python-nr-util
4174 (package
4175 (name "python-nr-util")
4176 (version "0.8.12")
4177 (source
4178 (origin
4179 (method url-fetch)
4180 (uri (pypi-uri "nr.util" version))
4181 (sha256
4182 (base32 "1x0l4811dskwrk83l2xzdcldx2iazlrx5wxkg41jz7fr6ch9qm54"))))
4183 (build-system pyproject-build-system)
4184 (arguments
4185 (list
4186 #:tests? #false ;there are none
4187 #:phases
4188 #~(modify-phases %standard-phases
4189 (add-after 'unpack 'patch-build-system
4190 (lambda _
4191 (substitute* "pyproject.toml"
4192 (("^config =.*") "config = []\n"))))
4193 (add-after 'install 'fix-name
4194 (lambda* (#:key inputs outputs #:allow-other-keys)
4195 (let* ((sitedir (site-packages inputs outputs))
4196 (dist-info
4197 (string-append sitedir "/nr_util-" #$version ".dist-info")))
4198 (substitute* (string-append dist-info "/METADATA")
4199 (("Name: nr-util")
4200 "Name: nr.util"))
4201 (substitute* (string-append dist-info "/RECORD")
4202 (("nr_util") "nr.util"))
4203 (rename-file dist-info
4204 (string-append sitedir
4205 "/nr.util-"
4206 #$version ".dist-info"))))))))
4207 (propagated-inputs (list python-deprecated python-typing-extensions))
4208 (native-inputs (list python-poetry-core))
4209 (home-page "https://github.com/NiklasRosenstein/python-nr.util")
4210 (synopsis "General purpose Python utility library")
4211 (description "This package provides a general purpose Python utility
4212library.")
4213 (license license:expat)))
4214
4215(define-public python-slicerator
4216 (package
4217 (name "python-slicerator")
4218 (version "1.1.0")
4219 (source
4220 (origin
4221 (method url-fetch)
4222 (uri (pypi-uri "slicerator" version))
4223 (sha256
4224 (base32 "0ik0bmh18zgffd9kx53254jp3yyih6zcmd8kfb080xnqbizhl0a4"))))
4225 (build-system pyproject-build-system)
4226 (native-inputs
4227 (list python-numpy
4228 python-pytest
4229 python-setuptools))
4230 (home-page "https://github.com/soft-matter/slicerator")
4231 (synopsis "Lazy-loading, fancy-sliceable iterable")
4232 (description
4233 "This package provides a lazy-loading, fancy-sliceable iterable. Think
4234of it like a generator that is \"reusable\" and has a length.")
4235 (license license:bsd-3)))
4236
4237(define-public python-pytelegrambotapi
4238 (package
4239 (name "python-pytelegrambotapi")
4240 (version "4.22.0")
4241 (source
4242 (origin
4243 (method git-fetch)
4244 (uri (git-reference
4245 (url "https://github.com/eternnoir/pyTelegramBotAPI")
4246 (commit version)))
4247 (file-name (git-file-name name version))
4248 (sha256
4249 (base32 "0mic9wk6xg7p2ca7b03fc19l86yc9bkciq7kp8l9xvzzzmg4rzw4"))))
4250 (build-system pyproject-build-system)
4251 (arguments
4252 (list
4253 #:phases
4254 #~(modify-phases %standard-phases
4255 (replace 'check
4256 (lambda* (#:key tests? #:allow-other-keys)
4257 (when tests?
4258 (with-directory-excursion "tests"
4259 (invoke "py.test"))))))))
4260 (propagated-inputs
4261 (list python-requests))
4262 (native-inputs
4263 (list python-hatchling python-pytest))
4264 (home-page "https://github.com/eternnoir/pyTelegramBotAPI")
4265 (synopsis "Python Telegram bot api")
4266 (description "This package provides a simple, but extensible Python
4267implementation for the Telegram Bot API.")
4268 (license license:gpl2)))
4269
4270(define-public python-pytoolconfig
4271 (package
4272 (name "python-pytoolconfig")
4273 (version "1.3.1")
4274 (source
4275 (origin
4276 (method url-fetch)
4277 (uri (pypi-uri "pytoolconfig" version))
4278 (sha256
4279 (base32 "1bnvg9yiwp2fn0lvzhp1dd2mvrymxvjnasmbdap3i0hhdwdbvrji"))))
4280 (build-system pyproject-build-system)
4281 (arguments
4282 (list
4283 #:test-flags
4284 ;; Requires Sphinx.
4285 #~(list "--ignore=tests/test_documentation.py")))
4286 (native-inputs
4287 (list python-pdm-backend
4288 python-pytest))
4289 (propagated-inputs
4290 (list python-tomli
4291 python-packaging
4292 python-platformdirs))
4293 (home-page "https://pypi.org/project/pytoolconfig/")
4294 (synopsis "Python tool configuration")
4295 (description "The goal of this project is to manage configuration for
4296Python tools, such as rope and add support for a @file{pyproject.toml}
4297configuration file.")
4298 (license license:lgpl3+)))
4299
4300(define-public python-pytooling
4301 (package
4302 (name "python-pytooling")
4303 (version "8.7.6")
4304 (source
4305 (origin
4306 (method git-fetch)
4307 (uri (git-reference
4308 (url "https://github.com/pyTooling/pyTooling/")
4309 (commit (string-append "v" version))))
4310 (file-name (git-file-name name version))
4311 (sha256
4312 (base32 "1n0idfiwcsssvy3kfwkgdpwx7zmvzp44mv0285d8argdy6rd48p0"))))
4313 (build-system pyproject-build-system)
4314 (arguments
4315 (list
4316 ;; Tests do not support linux-i686 system: Exception: Unknown
4317 ;; architecture 'linux-i686' for a native Linux.
4318 #:tests? (not (or (%current-target-system)
4319 (target-x86-32?)))
4320 #:test-flags
4321 #~(list "tests/unit"
4322 "-k" (string-join
4323 ;; Tests checking in /usr/bin and /usr/bin/git paths.
4324 (list "not test_BinaryDirectory"
4325 "test_ExecutablePath"
4326 "test_VersionFlag")
4327 " and not "))))
4328 (native-inputs
4329 (list git-minimal/pinned
4330 python-colorama
4331 python-pytest
4332 python-ruamel.yaml
4333 python-setuptools))
4334 (home-page "https://pytooling.github.io/pyTooling/")
4335 (synopsis "Miscellaneous Python tools")
4336 (description
4337 "pyTooling is a collection of (abstract) data models, lacking classes,
4338decorators, a new performance boosting meta-class, and enhanced exceptions.
4339It also provides lots of helper functions---e.g., to ease the handling of
4340package descriptions or to unify multiple existing APIs into a single API.")
4341 (license license:asl2.0)))
4342
4343(define-public python-colorlog
4344 (package
4345 (name "python-colorlog")
4346 (version "6.9.0")
4347 (source
4348 (origin
4349 (method url-fetch)
4350 (uri (pypi-uri "colorlog" version))
4351 (sha256
4352 (base32 "1hka1kf6p53hppv05xsa5byr4gasfaaq7r2g3x7gb51vp6hm9fmz"))))
4353 (build-system pyproject-build-system)
4354 (native-inputs
4355 (list python-pytest
4356 python-setuptools))
4357 (home-page "https://github.com/borntyping/python-colorlog")
4358 (synopsis "Log formatting with colors for python")
4359 (description "The @code{colorlog.ColoredFormatter} is a formatter for use
4360with Python's logging module that outputs records using terminal colors.")
4361 (license license:expat)))
4362
4363(define-public python-pyprind
4364 (package
4365 (name "python-pyprind")
4366 (version "2.11.3")
4367 (source
4368 (origin
4369 (method url-fetch)
4370 (uri (pypi-uri "PyPrind" version))
4371 (sha256
4372 (base32 "1gscnlvj37m421ch3akm3kddxqkrgbg5zrpwy2ky1j59w6vclzg3"))))
4373 (build-system pyproject-build-system)
4374 (native-inputs (list python-pytest python-setuptools))
4375 (propagated-inputs (list python-psutil))
4376 (home-page "https://github.com/rasbt/pyprind")
4377 (synopsis "Python Progress Bar and Percent Indicator Utility")
4378 (description
4379 "The PyPrind (Python Progress Indicator) module provides a progress bar
4380and a percentage indicator object that let you track the progress of a loop
4381structure or other iterative computation.")
4382 (license license:bsd-3)))
4383
4384(define-public python-gh-md-to-html
4385 (package
4386 (name "python-gh-md-to-html")
4387 (version "1.21.2")
4388 (source
4389 (origin
4390 (method url-fetch)
4391 (uri (pypi-uri "gh_md_to_html" version))
4392 (sha256
4393 (base32 "1cnaqnckpcrpc4b8ba18s5ds05w1yfiszcp7ql7pmx0jnrj25qax"))))
4394 (build-system pyproject-build-system)
4395 (arguments
4396 (list
4397 #:tests? #false ;there are none
4398 #:phases
4399 #~(modify-phases %standard-phases
4400 (add-after 'unpack 'relax-shellescape-requirement
4401 (lambda _
4402 (substitute* "src/__init__.py"
4403 (("import shellescape")
4404 "import shlex")
4405 (("shellescape\\.quote")
4406 "shlex.quote"))
4407 (substitute* "setup.py"
4408 (("\"shellescape\",")
4409 "")))))))
4410 (propagated-inputs
4411 (list python-beautifulsoup4
4412 python-emoji-for-gh-md-to-html
4413 python-pillow
4414 python-requests
4415 python-webcolors))
4416 (native-inputs (list python-setuptools))
4417 (home-page "https://github.com/phseiff/github-flavored-markdown-to-html/")
4418 (synopsis "Github-flavored Markdown")
4419 (description
4420 "This package provides a feature-rich Github-flavored Markdown to HTML
4421Python library and command line interface.")
4422 (license license:expat)))
4423
4424(define-public python-gfloat
4425 (package
4426 (name "python-gfloat")
4427 (version "0.5.2")
4428 (source
4429 (origin
4430 (method url-fetch)
4431 (uri (pypi-uri "gfloat" version))
4432 (sha256
4433 (base32 "143424fqap9bxxybj8l48a00kqqh7vih67ycy7cmkd38kb31zcai"))))
4434 (build-system pyproject-build-system)
4435 (arguments
4436 (list
4437 #:test-flags
4438 #~(list
4439 "--ignore=test/test_array_api.py" ;requires array_api_strict
4440 "--ignore=test/test_jax.py" ;requires python-jax
4441 "--ignore=test/test_microxcaling.py" ;requires torchao
4442 ;; Jupyter.
4443 "--ignore-glob=docs/source/*.ipynb")))
4444 (propagated-inputs
4445 (list python-array-api-compat python-more-itertools python-numpy))
4446 (native-inputs (list python-nbval
4447 python-ml-dtypes
4448 python-pytest
4449 python-pytorch
4450 python-setuptools
4451 openssl))
4452 (home-page "https://github.com/graphcore-research/gfloat")
4453 (synopsis "Generic floating point handling in Python")
4454 (description
4455 "This package provides an implementation of generic floating point encode
4456and decode logic in Python. It handles various current and proposed floating
4457point types:
4458
4459@itemize
4460@item IEEE 754: Binary16, Binary32
4461@item OCP Float8: E5M2, E4M3
4462@item IEEE WG P3109
4463@item OCP MX Formats: E2M1, M2M3, E3M2, E8M0, INT8, and the MX block formats.
4464@end itemize")
4465 (license license:expat)))
4466
4467(define-public python-glymur
4468 (package
4469 (name "python-glymur")
4470 (version "0.14.3")
4471 (source
4472 (origin
4473 (method git-fetch) ; no tests data in PyPi package
4474 (uri (git-reference
4475 (url "https://github.com/quintusdias/glymur")
4476 (commit (string-append "v" version))))
4477 (file-name (git-file-name name version))
4478 (sha256
4479 (base32 "0266gj8a2p8jkbgb34lgk8dwin7ib2g38vdh04b2p6yhqx8w3xg8"))))
4480 (build-system pyproject-build-system)
4481 (arguments
4482 (list
4483 #:test-flags
4484 #~(list "--numprocesses" (number->string (parallel-job-count))
4485 ;; Failing test due to inability of ctypes.util.find_library()
4486 ;; to determine library path, which is patched above.
4487 "--ignore=tests/test_config.py")
4488 #:phases
4489 #~(modify-phases %standard-phases
4490 (add-after 'unpack 'patch-library-locations
4491 (lambda* (#:key inputs #:allow-other-keys)
4492 ;; XXX: It's a workaround for Python inability to find the
4493 ;; .so libraries with ctypes.util.find_library()
4494 (substitute* '("glymur/config.py")
4495 (("path = find_library\\(libname\\)")
4496 (string-append
4497 "if libname == \"openjp2\":\n"
4498 " path = \""
4499 (search-input-file inputs "/lib/libopenjp2.so") "\"\n"
4500 " elif libname == \"tiff\":\n"
4501 " path = \""
4502 (search-input-file inputs "/lib/libtiff.so") "\"\n"
4503 " elif libname == \"c\":\n"
4504 " path = \""
4505 (search-input-file inputs "/lib/libc.so.6") "\"\n"))))))))
4506 (native-inputs
4507 (list python-pytest
4508 python-pytest-xdist
4509 python-scikit-image
4510 python-setuptools))
4511 (inputs
4512 (list openjpeg ; glymur/lib/openjp2.py
4513 libtiff)) ; glymur/lib/tiff.py
4514 (propagated-inputs
4515 (list python-lxml
4516 python-numpy
4517 python-pillow ))
4518 (home-page "https://github.com/quintusdias/glymur")
4519 (synopsis "Python interface to OpenJPEG and LibTIFF")
4520 (description
4521 "This package provides Python interface to the OpenJPEG library which
4522allows one to read and write JPEG 2000 files")
4523 (license license:expat)))
4524
4525(define-public python-gphoto2
4526 (package
4527 (name "python-gphoto2")
4528 (version "2.6.1")
4529 (source
4530 (origin
4531 (method git-fetch) ; no tests in PyPI
4532 (uri (git-reference
4533 (url "https://github.com/jim-easterbrook/python-gphoto2")
4534 (commit (string-append "v" version))))
4535 (file-name (git-file-name name version))
4536 (sha256
4537 (base32 "08zwznl3f8j329db747jl2zrpqj58ml39in5gl2gqghw82ssi3gk"))))
4538 (build-system pyproject-build-system)
4539 (native-inputs
4540 (list pkg-config python-pytest python-setuptools python-wheel))
4541 (inputs
4542 (list libgphoto2))
4543 (home-page "https://github.com/jim-easterbrook/python-gphoto2")
4544 (synopsis "Python interface to libgphoto2")
4545 (description "@code{python-gphoto2} is a comprehensive Python interface
4546(or binding) to @code{libgphoto2}. It is built using @code{SWIG} to
4547automatically generate the interface code.")
4548 (license license:lgpl3+)))
4549
4550(define-public python-colour
4551 (package
4552 (name "python-colour")
4553 (version "0.1.5")
4554 (source
4555 (origin
4556 (method git-fetch)
4557 (uri (git-reference
4558 (url "https://github.com/vaab/colour")
4559 (commit version)))
4560 (file-name (git-file-name name version))
4561 (sha256
4562 (base32 "01k2n3zp6j0bws78vdy7i9d6m4lz3bm8z7d7lv1czks1d4aamnr2"))
4563 (patches (search-patches "python-colour-remove-d2to1.patch"))))
4564 (build-system pyproject-build-system)
4565 (arguments
4566 (list
4567 #:tests? #f ; No tests.
4568 #:phases
4569 #~(modify-phases %standard-phases
4570 (add-after 'unpack 'set-version
4571 (lambda _
4572 (substitute* "autogen.sh"
4573 (("if ! \"\\$git\".*")
4574 "if false ; then\n")
4575 (("depends git grep")
4576 "depends grep")
4577 (("version=\\$\\(\"\\$git\" describe --tags\\)")
4578 (format #f "version=~s" #$version))))))))
4579 (native-inputs (list python-setuptools))
4580 (home-page "https://github.com/vaab/colour")
4581 (synopsis "Convert and manipulate various color representations")
4582 (description
4583 "This package provides a pythonic way to manipulate color representations
4584(HSL, RVB,web, X11, ...).")
4585 (license license:expat)))
4586
4587(define-public python-rapidfuzz
4588 (package
4589 (name "python-rapidfuzz")
4590 (version "3.14.1")
4591 (source
4592 (origin
4593 (method git-fetch)
4594 (uri (git-reference
4595 (url "https://github.com/rapidfuzz/RapidFuzz")
4596 (commit (string-append "v" version))))
4597 (file-name (git-file-name name version))
4598 (sha256
4599 (base32 "1kqy9paxri1ih47mwmsxwz7a222sn2si5n8qd7gxhdf1wdrpdrm7"))))
4600 (build-system pyproject-build-system)
4601 (native-inputs
4602 (list cmake-minimal
4603 python-cython
4604 python-pytest
4605 python-scikit-build-core
4606 rapidfuzz-cpp
4607 taskflow))
4608 (home-page "https://github.com/rapidfuzz/RapidFuzz")
4609 (synopsis "Rapid fuzzy string matching")
4610 (description
4611 "RapidFuzz is a fast string matching library for Python and
4612C++, which is using the string similarity calculations from FuzzyWuzzy.")
4613 (license license:expat)))
4614
4615(define-public python-easygui
4616 (package
4617 (name "python-easygui")
4618 (version "0.98.1")
4619 (source
4620 (origin
4621 (method git-fetch)
4622 (uri (git-reference
4623 (url "https://github.com/robertlugg/easygui")
4624 (commit version)))
4625 (file-name (git-file-name name version))
4626 (sha256
4627 (base32 "1vwd0dvldl993sp7b24h5yn269vykq7mmp9khdssqryfchfbajx6"))))
4628 (build-system pyproject-build-system)
4629 (arguments
4630 ;; XXX: There seem to be no tests upstream, although the package itself
4631 ;; seems to provide a lot of demo elements.
4632 (list #:tests? #f))
4633 (native-inputs (list python-pytest python-setuptools))
4634 (propagated-inputs (list `(,python "tk")))
4635 (home-page "https://github.com/robertlugg/easygui")
4636 (synopsis "GUI programming module for Python")
4637 (description
4638 "EasyGUI is a module for easy GUI programming in Python. EasyGUI is
4639different from other GUI generators in that EasyGUI is NOT event-driven.
4640Instead, all GUI interactions are invoked by simple function calls.")
4641 (license license:bsd-3)))
4642
4643(define-public python-echo
4644 (package
4645 (name "python-echo")
4646 (version "0.8.0")
4647 (source
4648 (origin
4649 (method url-fetch)
4650 (uri (pypi-uri "echo" version))
4651 (sha256
4652 (base32 "1hr2kgjmf5gcjbg1mry03ca1dayfwy8mi8as42jfg0apsa3bfvvj"))))
4653 (build-system pyproject-build-system)
4654 (arguments
4655 (list
4656 #:phases
4657 #~(modify-phases %standard-phases
4658 (add-before 'check 'start-xorg-server
4659 (lambda _
4660 ;; The test suite requires a running X server.
4661 (system "Xvfb :99 -screen 0 1024x768x24 &")
4662 (setenv "DISPLAY" ":99.0"))))))
4663 (propagated-inputs
4664 (list python-numpy
4665 python-qtpy
4666 python-pyqt-6))
4667 (native-inputs
4668 (list python-pytest
4669 python-pytest-cov
4670 python-setuptools
4671 python-setuptools-scm
4672 python-wheel
4673 xorg-server-for-tests))
4674 (home-page "https://github.com/glue-viz/echo")
4675 (synopsis "Callback Properties in Python")
4676 (description
4677 "Echo is a small library for attaching callback functions to property
4678state changes.")
4679 (license license:expat)))
4680
4681(define-public python-pymd4c
4682 (package
4683 (name "python-pymd4c")
4684 (version "1.3.0")
4685 (source
4686 (origin
4687 (method git-fetch)
4688 (uri (git-reference
4689 (url "https://github.com/dominickpastore/pymd4c")
4690 (commit (string-append "v" version))))
4691 (file-name (git-file-name name version))
4692 (sha256
4693 (base32 "1pv8k2nfxnlwgmx13rl5vq9v64s564skpk0qnw41c2rhn13rxl4f"))))
4694 (build-system pyproject-build-system)
4695 (arguments (list #:test-flags #~(list "test")))
4696 (inputs (list md4c))
4697 (native-inputs
4698 (list pkg-config python-pkgconfig python-pytest python-setuptools))
4699 (home-page "https://github.com/dominickpastore/pymd4c")
4700 (synopsis "Python bindings for MD4C")
4701 (description
4702 "PyMD4C provides Python bindings for MD4c, a C Markdown parser, compliant
4703to CommonMark.")
4704 (license license:expat)))
4705
4706(define-public python-pymediainfo
4707 (package
4708 (name "python-pymediainfo")
4709 (version "4.1")
4710 (source
4711 (origin
4712 (method url-fetch)
4713 (uri (pypi-uri "pymediainfo" version))
4714 (sha256
4715 (base32 "0mhpxs7vlqx8w75z93dy7nnvx89kwfdjkla03l19an15rlyqyspd"))))
4716 (build-system pyproject-build-system)
4717 (arguments
4718 (list
4719 ;; The only failing test requires internet access.
4720 #:test-flags
4721 #~(list "-k" "not test_parse_url")
4722 #:phases
4723 #~(modify-phases %standard-phases
4724 (add-after 'unpack 'patch-libmediainfo
4725 (lambda* (#:key inputs #:allow-other-keys)
4726 (substitute* "pymediainfo/__init__.py"
4727 (("libmediainfo.so.0")
4728 (search-input-file inputs "/lib/libmediainfo.so.0"))))))))
4729 (native-inputs (list python-pytest python-setuptools))
4730 (inputs (list libmediainfo))
4731 (home-page "https://github.com/sbraz/pymediainfo")
4732 (synopsis "Python wrapper for the mediainfo library")
4733 (description
4734 "This package provides a Python wrapper for the mediainfo library to
4735access the technical and tag data for video and audio files.")
4736 (license license:expat)))
4737
4738(define-public python-psutil
4739 (package
4740 (name "python-psutil")
4741 (version "7.0.0")
4742 (source
4743 (origin
4744 (method url-fetch)
4745 (uri (pypi-uri "psutil" version))
4746 (sha256
4747 (base32 "0mn42p9pzh0wynhk9i18iyvp8h54hbcsyczajmjcpv4blgmw7sbv"))))
4748 (build-system pyproject-build-system)
4749 (arguments
4750 ;; FIXME: some tests do not return and time out. Some tests fail because
4751 ;; some processes survive kill().
4752 '(#:tests? #f))
4753 (native-inputs
4754 (list python-setuptools))
4755 (home-page "https://github.com/giampaolo/psutil")
4756 (synopsis "Library for retrieving information on running processes")
4757 (description
4758 "@code{psutil} (Python system and process utilities) is a library for
4759retrieving information on running processes and system utilization (CPU,
4760memory, disks, network) in Python. It is useful mainly for system monitoring,
4761profiling and limiting process resources and management of running processes.
4762It implements many functionalities offered by command line tools such as: ps,
4763top, lsof, netstat, ifconfig, who, df, kill, free, nice, ionice, iostat,
4764iotop, uptime, pidof, tty, taskset, pmap.")
4765 (license license:bsd-3)))
4766
4767(define-public python-scapy
4768 (package
4769 (name "python-scapy")
4770 (version "2.6.1")
4771 (source (origin
4772 (method url-fetch)
4773 (uri (pypi-uri "scapy" version))
4774 (sha256
4775 (base32
4776 "1ig6qv1kpk7z9n8xf41y5fzywfv42xzd61bf79f3x19w73idf03n"))))
4777 (arguments
4778 '(#:tests? #f)) ; There is a test directory, but apparently no
4779 ; automatic testing framework.
4780 ;; The package has more optional dependencies such as ipython and
4781 ;; matplotlib. If functionality is missing, these should be added.
4782 ;; See
4783 ;; https://scapy.readthedocs.io/en/latest/installation.html#optional-dependencies
4784 (build-system pyproject-build-system)
4785 (native-inputs (list python-setuptools python-wheel))
4786 (home-page "https://scapy.net")
4787 (synopsis "Python network packet crafting library")
4788 (description
4789 "Scapy is a Python library and executable for interactively
4790manipulating network packets. It can forge or decode packets of a number
4791of protocols, send them on the wire, capture them, store or read them
4792using pcap files, match requests and replies, and so on.
4793It can handle tasks such as scanning, tracerouting, probing, unit tests,
4794attacks or network discovery.")
4795 (license license:gpl2)))
4796
4797(define-public python-icmplib
4798 (package
4799 (name "python-icmplib")
4800 (version "3.0.4")
4801 (source
4802 (origin
4803 (method git-fetch)
4804 (uri (git-reference
4805 (url "https://github.com/ValentinBELYN/icmplib")
4806 (commit (string-append "v" version))))
4807 (file-name (git-file-name name version))
4808 (sha256
4809 (base32 "04h877ryg22vsgvq35dqwpf0b1v8hvfl2gc857zxqzig4ld5qw1y"))))
4810 (build-system pyproject-build-system)
4811 (arguments (list #:tests? #f)) ; No tests.
4812 (native-inputs (list python-setuptools))
4813 (home-page "https://github.com/ValentinBELYN/icmplib")
4814 (synopsis
4815 "Python implementation of the Internet Control Message Protocol (ICMP)")
4816 (description
4817 "@code{icmplib} is a supporting library for both IPv4 and IPv6 networks.
4818ICMP is typically used for diagnostic or control purposes - well known from
4819utilities such as ping(1).")
4820 (license license:lgpl3)))
4821
4822(define-public python-iron-core
4823 (let ((commit "5a5f3011da09769a812c6a1c44781ef852abc19b")
4824 (revision "0"))
4825 (package
4826 (name "python-iron-core")
4827 (version (git-version "1.2.1" revision commit))
4828 (source
4829 (origin
4830 (method git-fetch)
4831 (uri (git-reference
4832 (url "https://www.github.com/iron-io/iron_core_python")
4833 (commit commit)))
4834 (file-name (git-file-name name version))
4835 (sha256
4836 (base32 "030ibimgqvc6hywh7g3k7qn147ckagi0wbdiqcpdf1c85xqrj5zq"))))
4837 (build-system pyproject-build-system)
4838 (arguments
4839 (list
4840 ;; XXX: Tests are run, but they seem too old/not updated.
4841 #:tests? #f
4842 #:test-backend #~'unittest))
4843 (propagated-inputs (list python-dateutil python-requests))
4844 (native-inputs (list python-setuptools))
4845 (home-page "https://www.github.com/iron-io/iron_core_python")
4846 (synopsis "Universal classes and methods for Iron.io API wrappers")
4847 (description
4848 "This package provides universal classes and methods for the Iron.io
4849API wrappers to build on.")
4850 (license license:bsd-2))))
4851
4852(define-public python-iron-mq
4853 (let ((commit "e6ff76ac0068c3184d9003e3163b94ffc839dbe8")
4854 (revision "0"))
4855 (package
4856 (name "python-iron-mq")
4857 (version (git-version "0.9" revision commit))
4858 (source
4859 (origin
4860 (method git-fetch)
4861 (uri (git-reference
4862 (url "https://github.com/iron-io/iron_mq_python")
4863 (commit commit)))
4864 (file-name (git-file-name name version))
4865 (sha256
4866 (base32 "0bb8gpzb3jr2r6i367jspwcxrz5ygdf40a67nl9aj5n79hg1aq8x"))))
4867 (build-system pyproject-build-system)
4868 (arguments
4869 (list
4870 ;; XXX: Tests are broken and require network access.
4871 #:tests? #f
4872 #:test-backend #~'unittest))
4873 (propagated-inputs (list python-iron-core))
4874 (native-inputs (list python-setuptools))
4875 (home-page "https://github.com/iron-io/iron_mq_python")
4876 (synopsis "Client library for IronMQ, a message queue in the cloud")
4877 (description
4878 "This package provides Python language bindings for IronMQ. IronMQ is an
4879elastic message queue for managing data and event flow within cloud
4880applications and between systems.")
4881 (license license:bsd-2))))
4882
4883(define-public python-rasterio
4884 (package
4885 (name "python-rasterio")
4886 (version "1.3.7")
4887 (source (origin
4888 (method url-fetch)
4889 (uri (pypi-uri "rasterio" version))
4890 (sha256
4891 (base32
4892 "012341c1rlcdr9rkg97lbhxrwzn4sr2xah4zjfnqy2r1227wpzdb"))))
4893 (properties
4894 '((updater-ignored-native-inputs . ("gdal" "python-cython"))))
4895 (build-system pyproject-build-system)
4896 (arguments
4897 (list
4898 #:tests? #false ;test data not present
4899 #:phases
4900 '(modify-phases %standard-phases
4901 (add-before 'check 'build-extensions
4902 (lambda _
4903 ;; Cython extensions have to be built before running the tests.
4904 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
4905 (propagated-inputs (list python-affine
4906 python-attrs
4907 python-certifi
4908 python-click
4909 python-click-plugins
4910 python-cligj
4911 python-numpy
4912 python-setuptools ; For pkg_resources.
4913 python-snuggs))
4914 (native-inputs (list gdal
4915 python-boto3
4916 python-cython
4917 python-hypothesis
4918 python-packaging
4919 python-pytest
4920 python-pytest-cov
4921 python-shapely
4922 python-wheel))
4923 (home-page "https://github.com/rasterio/rasterio")
4924 (synopsis "Fast and direct raster I/O for use with Numpy and SciPy")
4925 (description "This package implements fast and direct raster I/O for use
4926with Numpy and SciPy.")
4927 (license license:bsd-3)))
4928
4929(define-public python-rich-tables
4930 (package
4931 (name "python-rich-tables")
4932 (version "0.8.0")
4933 (source
4934 (origin
4935 (method git-fetch) ; no tests data in PyPi package
4936 (uri (git-reference
4937 (url "https://github.com/snejus/rich-tables")
4938 (commit version)))
4939 (file-name (git-file-name name version))
4940 (sha256
4941 (base32 "1gkwgxcjnghn0alqw53kgb4ixf047dnb49kc0af3blvcwnmfmb5f"))))
4942 (build-system pyproject-build-system)
4943 (arguments
4944 (list
4945 #:test-flags
4946 ;; TypeError: can't subtract offset-naive and offset-aware datetimes
4947 #~(list "--deselect=tests/test_outputs.py::test_outputs[tests/json/album.json]")))
4948 (native-inputs
4949 (list python-freezegun
4950 python-poetry-core
4951 python-pytest
4952 python-pytest-cov))
4953 (propagated-inputs
4954 (list python-funcy
4955 python-humanize
4956 python-multimethod
4957 python-platformdirs
4958 python-rgbxy
4959 python-rich
4960 python-sqlparse))
4961 (home-page "https://github.com/snejus/rich-tables")
4962 (synopsis "Ready-made rich tables for various purposes")
4963 (description
4964 "This package implements rich tables for various purposes, it's JSON
4965human-prettifier based on the @code{rich} Python library.")
4966 (license license:expat)))
4967
4968(define-public python-rich-toolkit
4969 (package
4970 (name "python-rich-toolkit")
4971 (version "0.12.0")
4972 (source
4973 (origin
4974 (method url-fetch)
4975 (uri (pypi-uri "rich_toolkit" version))
4976 (sha256
4977 (base32 "0h3cda068xc0v8jqcp7fyrb6d4xlhcjlxm5bfygk04408500pjzs"))))
4978 (build-system pyproject-build-system)
4979 (propagated-inputs (list python-click python-rich python-typing-extensions))
4980 (native-inputs (list python-hatchling python-inline-snapshot python-pytest))
4981 (home-page "https://pypi.org/project/rich-toolkit/")
4982 (synopsis "Rich toolkit for building command-line applications")
4983 (description "This package provides the Rich toolkit for building
4984command-line applications.")
4985 (license license:expat)))
4986
4987(define-public python-shapely
4988 (package
4989 (name "python-shapely")
4990 (version "2.1.1")
4991 (source
4992 (origin
4993 (method url-fetch)
4994 (uri (pypi-uri "shapely" version))
4995 (sha256
4996 (base32 "0wi71vyjyb04lbw6kkl9vcsmn7n28j8002288m19dziggyb221jh"))))
4997 (build-system pyproject-build-system)
4998 (arguments
4999 (list
5000 #:phases
5001 '(modify-phases %standard-phases
5002 (add-before 'check 'build-extensions
5003 (lambda _
5004 ;; Cython extensions have to be built before running the tests.
5005 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
5006 (native-inputs
5007 (list python-cython python-matplotlib python-pytest python-setuptools python-wheel))
5008 (inputs
5009 (list geos))
5010 (propagated-inputs
5011 (list python-numpy))
5012 (home-page "https://github.com/shapely/shapely")
5013 (synopsis "Library for the manipulation and analysis of geometric objects")
5014 (description "Shapely is a Python package for manipulation and analysis of
5015planar geometric objects. It is based on the @code{GEOS} library.")
5016 (license license:bsd-3)))
5017
5018(define-public python-shortuuid
5019 (package
5020 (name "python-shortuuid")
5021 (version "1.0.13")
5022 (source
5023 (origin
5024 (method url-fetch)
5025 (uri (pypi-uri "shortuuid" version))
5026 (sha256
5027 (base32
5028 "0wjygiwk07irgqmr29bv7rvq9pc71ff3jinzn620a9h6yq3wzf9v"))))
5029 (build-system pyproject-build-system)
5030 (native-inputs
5031 (list python-poetry-core python-pytest))
5032 (home-page "https://github.com/skorokithakis/shortuuid")
5033 (synopsis "Generator library for concise, unambiguous and URL-safe UUIDs")
5034 (description
5035 "@code{shortuuid} is a Python library for generating concise, unambiguous
5036and URL-safe UUIDs. UUIDs are generated using the built-in Python @code{uuid}
5037module and then similar looking characters are removed.")
5038 (license license:bsd-3)))
5039
5040(define-public python-logwrap
5041 (package
5042 (name "python-logwrap")
5043 (version "11.1.1")
5044 (source
5045 (origin
5046 (method git-fetch) ; no tests in PyPI release
5047 (uri (git-reference
5048 (url "https://github.com/python-useful-helpers/logwrap")
5049 (commit version)))
5050 (file-name (git-file-name name version))
5051 (sha256
5052 (base32 "07m4c87pavpdak1lx4bvdz43y2wwzm6fc54x947cssgwqz8mw3zp"))))
5053 (build-system pyproject-build-system)
5054 (arguments
5055 (list
5056 #:phases
5057 #~(modify-phases %standard-phases
5058 (add-before 'build 'pretend-version
5059 ;; Indicate version to setuptools-scm
5060 (lambda _
5061 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION"
5062 #$(package-version this-package)))))))
5063 (native-inputs (list python-pytest
5064 python-setuptools
5065 python-setuptools-scm
5066 python-wheel))
5067 (home-page "https://github.com/python-useful-helpers/logwrap")
5068 (synopsis "Decorator for logging function arguments")
5069 (description "This package provides a decorator to log function arguments
5070and function call return values in a human-readable way.")
5071 (license license:asl2.0)))
5072
5073(define-public python-clyent
5074 (package
5075 (name "python-clyent")
5076 (version "1.2.2")
5077 (source
5078 (origin
5079 (method git-fetch)
5080 (uri (git-reference
5081 (url "https://github.com/Anaconda-Platform/clyent")
5082 (commit version)))
5083 (file-name (git-file-name name version))
5084 (sha256
5085 (base32 "0vi9nkd4hnvycwwpz9xip1drc5zn7bdwff1pz3azmyvh8v4hsias"))))
5086 (build-system pyproject-build-system)
5087 (arguments
5088 (list
5089 #:test-backend #~'unittest
5090 #:phases
5091 #~(modify-phases %standard-phases
5092 ;; Replace version manually because clyent uses
5093 ;; versioneer, which requires git metadata.
5094 (add-after 'unpack 'versioneer
5095 (lambda _
5096 (invoke "versioneer" "install")
5097 (substitute* "setup.py"
5098 (("version=versioneer.get_version\\(),")
5099 (string-append "version='" #$version "',"))))))))
5100 (native-inputs
5101 (list python-mock
5102 python-setuptools
5103 python-versioneer))
5104 (home-page "https://github.com/Anaconda-Platform/clyent")
5105 (synopsis "Command line client library")
5106 (description
5107 "Clyent is a Python command line utility library. It is used by
5108@code{binstar}, @code{binstar-build}, and @code{chalmers}.")
5109 (license license:bsd-3)))
5110
5111(define-public python-babel
5112 (package
5113 (name "python-babel")
5114 (version "2.16.0")
5115 (source
5116 (origin
5117 (method url-fetch)
5118 (uri (pypi-uri "babel" version))
5119 (sha256
5120 (base32 "05p3k0i5h8v4vqsg36s94kwl4nhgfmgwdq1x7wbzw1b6l965bwyi"))))
5121 (build-system pyproject-build-system)
5122 (native-inputs
5123 (list python-freezegun
5124 python-pytest
5125 python-setuptools
5126 tzdata-for-tests))
5127 (propagated-inputs
5128 (list python-pytz))
5129 (home-page "https://babel.pocoo.org/")
5130 (synopsis
5131 "Tools for internationalizing Python applications")
5132 (description
5133 "Babel is composed of two major parts:
5134- tools to build and work with gettext message catalogs
5135- a Python interface to the CLDR (Common Locale Data Repository), providing
5136access to various locale display names, localized number and date formatting,
5137etc.")
5138 (license license:bsd-3)))
5139
5140(define-public python-bidict
5141 (package
5142 (name "python-bidict")
5143 (version "0.23.1")
5144 (source
5145 (origin
5146 (method git-fetch) ; no tests in PyPI.
5147 (uri (git-reference
5148 (url "https://github.com/jab/bidict")
5149 (commit (string-append "v" version))))
5150 (file-name (git-file-name name version))
5151 (sha256
5152 (base32 "1qsbxjjsrks3icyq19afr5y47zdrfb0cvaadpprgcszq2ilihkaq"))))
5153 (build-system pyproject-build-system)
5154 (native-inputs
5155 (list python-pytest
5156 python-pytest-benchmark
5157 python-pytest-xdist
5158 python-setuptools
5159 python-sortedcollections
5160 python-wheel))
5161 (home-page "https://bidict.readthedocs.io")
5162 (synopsis "Bidirectional mapping library")
5163 (description "The @code{bidict} library provides several data structures
5164for working with bidirectional mappings in Python.")
5165 (license license:mpl2.0)))
5166
5167(define-public python-bip39
5168 (package
5169 (name "python-bip39")
5170 (version "0.0.2")
5171 (source
5172 (origin
5173 (method url-fetch)
5174 (uri (pypi-uri "bip39" version))
5175 (sha256
5176 (base32 "18m7d3gi7vj2zi0bl1z7m0nhcj6i8j9vj4vil276siagnpkv64ry"))))
5177 (build-system pyproject-build-system)
5178 (native-inputs (list python-pytest python-setuptools))
5179 (home-page "https://github.com/de-centralized-systems/python-bip39/")
5180 (synopsis "Self-contained and simple BIP39 implementation in Python")
5181 (description
5182 "This package provides a self-contained and simple BIP39
5183implementation written in Python. It includes a @code{bip39.py} executable.
5184
5185BIP39 is a standardized mapping between binary data (the @emph{entropy}),
5186and a list of words that are easier to remember for humans (the
5187@emph{mnemonic}).")
5188 (license license:expat)))
5189
5190(define-public python-bitarray
5191 (package
5192 (name "python-bitarray")
5193 (version "3.4.3")
5194 (source (origin
5195 (method url-fetch)
5196 (uri (pypi-uri "bitarray" version))
5197 (sha256
5198 (base32
5199 "1w32bybj7qx99pkwyhb4g9c1y5mp89kc838iq30swrkb12zv5pyx"))))
5200 (build-system pyproject-build-system)
5201 (arguments
5202 (list #:phases
5203 #~(modify-phases %standard-phases
5204 (replace 'check
5205 (lambda* (#:key tests? #:allow-other-keys)
5206 (when tests?
5207 ;; Step out of the source directory to avoid interference.
5208 (with-directory-excursion "/tmp"
5209 (invoke "python" "-c"
5210 "import bitarray; bitarray.test()"))))))))
5211 (native-inputs (list python-setuptools python-wheel))
5212 (home-page "https://github.com/ilanschnell/bitarray")
5213 (synopsis "Efficient arrays of booleans")
5214 (description "This package provides an object type which efficiently
5215represents an array of booleans. Bitarrays are sequence types and behave very
5216much like usual lists. Eight bits are represented by one byte in a contiguous
5217block of memory. The user can select between two representations:
5218little-endian and big-endian. All of the functionality is implemented in C.
5219Methods for accessing the machine representation are provided. This can be
5220useful when bit level access to binary files is required, such as portable
5221bitmap image files. Also, when dealing with compressed data which uses
5222variable bit length encoding, you may find this module useful.")
5223 (license license:psfl)))
5224
5225(define-public python-bitarray-2
5226 (package
5227 (inherit python-bitarray)
5228 (version "2.8.1")
5229 (source (origin
5230 (method url-fetch)
5231 (uri (pypi-uri "bitarray" version))
5232 (sha256
5233 (base32
5234 "1wy80bmhg33bpzn28g1n7s8r8f4drj7pcl4m2qb5sql8bbryx376"))))))
5235
5236(define-public python-boolean.py
5237 (package
5238 (name "python-boolean.py")
5239 (version "5.0")
5240 (source
5241 (origin
5242 (method url-fetch)
5243 (uri (pypi-uri "boolean_py" version))
5244 (sha256
5245 (base32 "15cd64x2m1cbcnjasw0m2977ab1n0mam8j96schkfxbrs2xc9jv0"))))
5246 (build-system pyproject-build-system)
5247 (native-inputs (list python-pytest python-setuptools python-wheel))
5248 (home-page "https://github.com/bastikr/boolean.py")
5249 (synopsis "Boolean algebra in one Python module")
5250 (description
5251 "This is a small Python library that implements boolean algebra.
5252It defines two base elements, @code{TRUE} and @code{FALSE}, and a
5253@code{Symbol} class that can take on one of these two values. Calculations
5254are done only in terms of @code{AND}, @code{OR}, and @code{NOT}---other
5255compositions like @code{XOR} and @code{NAND} are emulated on top of them.
5256Expressions are constructed from parsed strings or directly in Python.")
5257 (license license:bsd-2)))
5258
5259(define-public python-h5netcdf
5260 (package
5261 (name "python-h5netcdf")
5262 (version "1.3.0")
5263 (source
5264 (origin
5265 (method url-fetch)
5266 (uri (pypi-uri "h5netcdf" version))
5267 (sha256
5268 (base32 "1kw3cf01kziwxmb84x0cy6vbpsmqjm0k1dm34i6b4d7bv8kw0wd1"))))
5269 (build-system pyproject-build-system)
5270 (native-inputs
5271 (list python-netcdf4
5272 python-pytest
5273 python-setuptools
5274 python-setuptools-scm
5275 python-wheel))
5276 (propagated-inputs
5277 (list python-h5py python-packaging))
5278 (home-page "https://h5netcdf.org")
5279 (synopsis "Python interface for the netCDF4 file-format based on h5py")
5280 (description "This package provides a Python interface for the netCDF4
5281file-format that reads and writes local or remote HDF5 files directly via
5282@url{h5py, https://www.h5py.org/} or @url{h5pyd,
5283https://github.com/HDFGroup/h5pyd}, without relying on the Unidata netCDF
5284library.")
5285 (license license:bsd-3)))
5286
5287(define-public python-h5py
5288 (package
5289 (name "python-h5py")
5290 (version "3.15.1")
5291 (source
5292 (origin
5293 (method url-fetch)
5294 (uri (pypi-uri "h5py" version))
5295 (sha256
5296 (base32 "0sbbw9100f2763czngbpg1jxisp5r5pkpa2swm6mcws4bka3wvn8"))))
5297 (build-system pyproject-build-system)
5298 (arguments
5299 (list
5300 ;; tests: 800 passed, 18 skipped, 4 deselected, 12 warnings
5301 #:test-flags
5302 ;; Tests requiring the build with MPI.
5303 #~(list "-k" (string-append "not test_mpio"
5304 " and not test_mpio_append"
5305 " and not test_mpi_atomic"
5306 " and not test_close_multiple_mpio_driver"))
5307 #:phases
5308 #~(modify-phases %standard-phases
5309 (add-after 'unpack 'fix-hdf5-paths
5310 (lambda _
5311 (setenv "HDF5_DIR" #$(this-package-input "hdf5"))))
5312 (replace 'check
5313 (lambda* (#:key tests? test-flags #:allow-other-keys)
5314 (when tests?
5315 (setenv "H5PY_TEST_CHECK_FILTERS" "1")
5316 (with-directory-excursion #$output
5317 (apply invoke "pytest" "-vv" test-flags))))))))
5318 (native-inputs
5319 (list pkg-config
5320 python-cython
5321 python-pkgconfig
5322 python-pytest
5323 python-setuptools))
5324 (inputs
5325 (list hdf5))
5326 (propagated-inputs
5327 (list python-numpy))
5328 (home-page "https://www.h5py.org/")
5329 (synopsis "Read and write HDF5 files from Python")
5330 (description
5331 "The h5py package provides both a high- and low-level interface to the
5332HDF5 library from Python. The low-level interface is intended to be a
5333complete wrapping of the HDF5 API, while the high-level component supports
5334access to HDF5 files, datasets and groups using established Python and NumPy
5335concepts.")
5336 (license license:bsd-3)))
5337
5338(define-public python-hdf5storage
5339 ;; XXX: Use the latest commit containing compatability with Pytest and Python
5340 ;; 3.11, see: <https://github.com/frejanordsiek/hdf5storage/issues/135>.
5341 ;;
5342 ;; This package probably is sun setting, consider to remove when stops
5343 ;; building, see: <https://github.com/frejanordsiek/hdf5storage/issues/136>.
5344 (let ((commit "7ee2a96de134b44beaa79c3a11c559f9ac87c5a6")
5345 (revision "0"))
5346 (package
5347 (name "python-hdf5storage")
5348 (version (git-version "0.1.19" revision commit))
5349 (source
5350 (origin
5351 (method git-fetch)
5352 (uri (git-reference
5353 (url "https://github.com/frejanordsiek/hdf5storage")
5354 (commit commit)))
5355 (file-name (git-file-name name version))
5356 (sha256
5357 (base32 "0xq0rg8vwk35yc3jvv2fyf7bl189viq0fywch53g57hxrahv5k02"))))
5358 (build-system pyproject-build-system)
5359 (native-inputs
5360 (list python-pytest
5361 python-setuptools))
5362 (propagated-inputs
5363 (list python-h5py
5364 python-numpy-1))
5365 (home-page "https://github.com/frejanordsiek/hdf5storage")
5366 (synopsis "Read and write Python data types from and to HDF5 files")
5367 (description
5368 "This Python package provides high-level utilities to read and write a
5369variety of Python types from and to @acronym{HDF5, Hierarchical Data Format}
5370formatted files. This package also provides support for MATLAB MAT v7.3
5371formatted files, which are HDF5 files with a different extension and some
5372extra metadata. Because HDF5 and MAT files might need to be read from
5373untrusted sources, pickling is avoided in this package.")
5374 (license license:bsd-2))))
5375
5376(define-public python-prctl
5377 (package
5378 (name "python-prctl")
5379 (version "1.8.1")
5380 (source (origin
5381 (method url-fetch)
5382 (uri (pypi-uri "python-prctl" version))
5383 (sha256
5384 (base32
5385 "1kk7gv582w72spnz6agr0pz0hlpgchp3l7zxzzjarwfllwjrmjml"))))
5386 (build-system pyproject-build-system)
5387 (arguments
5388 (list #:test-backend ''custom
5389 #:test-flags ''("test_prctl.py")
5390 #:phases
5391 #~(modify-phases %standard-phases
5392 (add-after 'unpack 'patch-tests
5393 (lambda _
5394 (substitute* "test_prctl.py"
5395 ;; actual suffix used in cpython build output dir name
5396 (("sys.version\\[0:3\\]") "sys.implementation.cache_tag")
5397 ;; test_no_new_privs assumes existance of /bin/ping, but
5398 ;; can never run anyway due to it requiring setuid ping.
5399 ;; just short circuit it instead.
5400 (("os.stat\\('/bin/ping'\\)\\.st_mode") "0")))))))
5401 (inputs (list libcap))
5402 (native-inputs (list python-setuptools))
5403 (supported-systems (filter target-linux? %supported-systems))
5404 (home-page "https://pythonhosted.org/python-prctl")
5405 (synopsis "Linux capabilities library")
5406 (description "This package provides a Python library for controlling Linux
5407capabilities and attributes, similar to the prctl syscall.")
5408 (license license:gpl3+)))
5409
5410(define-public python-pyhimitsu
5411 (package
5412 (name "python-pyhimitsu")
5413 (version "0.0.9")
5414 (source (origin
5415 (method url-fetch)
5416 (uri (pypi-uri "py_himitsu" version))
5417 (sha256
5418 (base32
5419 "1kljxhjvfy945zij8fif3s6xzgcyslxz99mv460iy0anzj433pj5"))))
5420 (build-system pyproject-build-system)
5421 (arguments
5422 (list
5423 #:phases
5424 #~(modify-phases %standard-phases
5425 (replace 'check
5426 (lambda _
5427 ;; (setenv "PYTHONPATH" (getenv "GUIX_PYTHONPATH"))
5428 (invoke "make" "check"))))))
5429 (native-inputs (list python-hatchling))
5430 (propagated-inputs (list python-pyxdg))
5431 (home-page "https://git.sr.ht/~apreiml/py-himitsu")
5432 (synopsis "Himitsu client protocol implementation in Python")
5433 (description "This package provides a library for writing Himitsu client
5434programs in Python.")
5435 (license license:expat)))
5436
5437(define-public python-hjson
5438 ;; Using commit from master branch as the PyPI version does not contain
5439 ;; the hjson/tests/ directory.
5440 (let ((revision "0")
5441 (commit "1687b811fcbbc54b5ac71cfbaa99f805e406fbcb"))
5442 (package
5443 (name "python-hjson")
5444 (version (git-version "3.1.0" revision commit))
5445 (source (origin
5446 (method git-fetch)
5447 (uri (git-reference
5448 (url "https://github.com/hjson/hjson-py")
5449 (commit commit)))
5450 (file-name (git-file-name name version))
5451 (sha256
5452 (base32
5453 "1qfqnhvfx5mm7bdajjnnagmvns1zxyksjzh3k5la2ag6a8bp5gki"))))
5454 (build-system pyproject-build-system)
5455 (native-inputs (list python-setuptools python-wheel))
5456 (home-page "https://github.com/hjson/hjson-py")
5457 (synopsis "Python package to parse HJSON documents")
5458 (description "This package provides a Python library and a command-line
5459interface utility to parse @url{https://hjson.github.io/, HJSON}) documents.")
5460 (license license:expat))))
5461
5462(define-public python-hnswlib
5463 (package
5464 (name "python-hnswlib")
5465 (version "0.8.0")
5466 (source
5467 (origin
5468 (method git-fetch)
5469 (uri (git-reference
5470 (url "https://github.com/nmslib/hnswlib")
5471 (commit (string-append "v" version))))
5472 (file-name (git-file-name name version))
5473 (sha256
5474 (base32 "0l5ry8c1qkck8w5acdl4k3acs9qfxiq0lc7f50x8vz53imgh1afl"))))
5475 (build-system pyproject-build-system)
5476 (arguments
5477 (list
5478 #:phases
5479 #~(modify-phases %standard-phases
5480 (add-after 'unpack 'disable-native-optimization
5481 (lambda _
5482 (substitute* "setup.py"
5483 ((", '-march=native'")
5484 "")))))))
5485 (native-inputs
5486 (list pybind11
5487 python-pytest
5488 python-setuptools))
5489 (propagated-inputs
5490 (list python-numpy))
5491 (home-page "https://github.com/nmslib/hnswlib")
5492 (synopsis "Fast approximate nearest neighbor search")
5493 (description "Hnswlib is a header-only C++ implementation of fast
5494approximate nearest neighbor search with Python bindings.")
5495 (license license:asl2.0)))
5496
5497(define-public python-pylatexenc
5498 (package
5499 (name "python-pylatexenc")
5500 (version "2.10")
5501 (source
5502 (origin
5503 (method url-fetch)
5504 (uri (pypi-uri "pylatexenc" version))
5505 (sha256
5506 (base32 "1ls09z47b5md71gkxcj7fd87ynpvv2walgp2w6z31p26xf2gvn1x"))))
5507 (build-system pyproject-build-system)
5508 (native-inputs (list python-pytest python-setuptools python-wheel))
5509 (home-page "https://github.com/phfaist/pylatexenc")
5510 (synopsis "LaTeX parser for Unicode/LaTeX conversion")
5511 (description
5512 "@code{python-pylatexenc} is a LaTeX parser providing LaTeX-to-Unicode and
5513Unicode-to-LaTeX conversion.")
5514 (license license:expat)))
5515
5516(define-public python-lsp-black
5517 (package
5518 (name "python-lsp-black")
5519 (version "2.0.0")
5520 (source
5521 (origin
5522 (method git-fetch)
5523 (uri (git-reference
5524 (url "https://github.com/python-lsp/python-lsp-black")
5525 (commit (string-append "v" version))))
5526 (file-name (git-file-name name version))
5527 (sha256
5528 (base32 "0ilh6nx15kzrp29nkrpx03vx6dw3n7wq65qwv7bg7kcnyiwacplx"))))
5529 (build-system pyproject-build-system)
5530 (arguments
5531 ;; The python version is too old for these tests to pass properly.
5532 (list #:test-flags
5533 `'("-k" ,(string-append
5534 "not test_pylsp_format_document_syntax_error"
5535 " and not test_pylsp_format_range_syntax_error"
5536 " and not test_load_config_defaults"
5537 " and not test_load_config_with_skip_options"))))
5538 (propagated-inputs
5539 (list python-black python-lsp-server python-tomli))
5540 (native-inputs
5541 (list python-pytest python-setuptools python-wheel))
5542 (home-page "https://github.com/python-lsp/python-lsp-black")
5543 (synopsis "Black plugin for the Python LSP Server")
5544 (description "This package provides a plugin with support for the
5545@code{python-black} formatter for the Python LSP Server.")
5546 (license license:expat)))
5547
5548(define-public python-pylsp-mypy
5549 (package
5550 (name "python-pylsp-mypy")
5551 (version "0.6.9")
5552 (source
5553 (origin
5554 (method url-fetch)
5555 (uri (pypi-uri "pylsp_mypy" version))
5556 (sha256
5557 (base32 "1amvqzb5lhhw2011003mwm88chb8sz5aax1jrqc3jg0jpak992fj"))))
5558 (build-system pyproject-build-system)
5559 (native-inputs (list python-pytest python-setuptools python-wheel))
5560 (propagated-inputs (list python-mypy python-lsp-server))
5561 (home-page "https://github.com/python-lsp/pylsp-mypy")
5562 (synopsis "Mypy linter for the Python LSP Server")
5563 (description
5564 "Mypy linter integration for use with @code{python-lsp-server}.")
5565 (license license:expat)))
5566
5567(define-public python-sh
5568 (package
5569 (name "python-sh")
5570 (version "2.2.2")
5571 (source
5572 (origin
5573 (method url-fetch)
5574 (uri (pypi-uri "sh" version))
5575 (sha256
5576 (base32
5577 "0nxnkvmrl6vlan6lsvjymmxpr0gf8k0gnwr1632lwa0sqjkjfck5"))))
5578 (build-system pyproject-build-system)
5579 (arguments
5580 (list
5581 #:test-flags
5582 #~(list "-k" (string-join
5583 ;; These tests are shaky.
5584 (list "not test_bad_sig_raise_exception"
5585 "test_doesnt_execute_directories"
5586 "test_environment"
5587 "test_ok_code_ignores_bad_sig_exception"
5588 "test_unicode_path")
5589 " and not ")
5590 "tests")
5591 #:phases
5592 #~(modify-phases %standard-phases
5593 (add-before 'check 'pre-check
5594 (lambda _
5595 (setenv "HOME" "/tmp"))))))
5596 (native-inputs
5597 (list python-poetry-core python-pytest))
5598 (home-page "https://github.com/amoffat/sh")
5599 (synopsis "Python subprocess replacement")
5600 (description "This package provides a replacement for Python's
5601@code{subprocess} feature.")
5602 (license license:expat)))
5603
5604;; Old version just for python-dotenv-0.13.0 for docker-compose; remove once
5605;; that is updated.
5606(define-public python-sh-1
5607 (package
5608 (inherit python-sh)
5609 (version "1.14.2")
5610 (source
5611 (origin
5612 (method url-fetch)
5613 (uri (pypi-uri "sh" version))
5614 (sha256
5615 (base32
5616 "03gyss1rhj4in7pgysg4q0hxp3230whinlpy1532ljs99lrx0ywx"))))
5617 ;(build-system python-build-system)
5618 (arguments
5619 '(#:phases
5620 (modify-phases %standard-phases
5621 (replace 'check
5622 (lambda _
5623 ;; XXX: A Python 2 test fails when HOME=/homeless-shelter.
5624 (setenv "HOME" "/tmp")
5625 (invoke "python" "sh.py" "test"))))))
5626 (native-inputs
5627 (list python-setuptools))))
5628
5629(define-public python-cftime
5630 (package
5631 (name "python-cftime")
5632 (version "1.6.5")
5633 (source
5634 (origin
5635 (method url-fetch)
5636 (uri (pypi-uri "cftime" version))
5637 (sha256
5638 (base32 "07p8s5a0xacn404x6l0i04q1gz2h0h9m5azbhdvbhgxlp7bgw9c2"))))
5639 (build-system pyproject-build-system)
5640 (arguments
5641 (list #:phases
5642 #~(modify-phases %standard-phases
5643 (add-after 'unpack 'remove-unwanted-pytest-options
5644 (lambda _
5645 (substitute* "setup.cfg"
5646 (("doctest_optionflags.*")
5647 "")
5648 (("--cov.*")
5649 "")))))))
5650 (propagated-inputs
5651 (list python-numpy))
5652 (native-inputs
5653 (list python-cython
5654 python-pytest
5655 python-setuptools
5656 python-wheel))
5657 (home-page "https://unidata.github.io/cftime/")
5658 (synopsis "Library for time handling")
5659 (description
5660 "This package provides time-handling functionality that used to be part
5661of the netcdf4 package before.")
5662 (license license:expat)))
5663
5664(define-public python-netcdf4
5665 (package
5666 (name "python-netcdf4")
5667 (version "1.7.2")
5668 (source
5669 (origin
5670 (method git-fetch)
5671 (uri (git-reference
5672 (url "https://github.com/Unidata/netcdf4-python")
5673 (commit (string-append "v" version "rel"))))
5674 (file-name (git-file-name name version))
5675 (sha256
5676 (base32 "1bq0dkgq795z00j5z4xi1dqqw0chaj5j80hg5nci1piyr2ic41v9"))))
5677 (build-system pyproject-build-system)
5678 (arguments
5679 (list
5680 ;; tests: Ran 113 tests; skipped=7
5681 #:phases
5682 #~(modify-phases %standard-phases
5683 (add-before 'build 'set-configure-flags
5684 (lambda _
5685 (setenv "CFLAGS" (string-join
5686 (list "-g -O2"
5687 "-Wno-error=incompatible-pointer-types"
5688 "-Wno-error=implicit-function-declaration"
5689 "-Wno-error=int-conversion")
5690 " "))
5691 (setenv "HDF5_DIR" #$(this-package-input "hdf5"))
5692 (setenv "JPEG_DIR" #$(this-package-input "libjpeg-turbo"))
5693 (setenv "NETCDF4_DIR" #$(this-package-input "netcdf"))
5694 (setenv "USE_NCCONFIG" "0")))
5695 (replace 'check
5696 (lambda* (#:key tests? #:allow-other-keys)
5697 (when tests?
5698 (with-directory-excursion "test"
5699 (setenv "NO_NET" "1")
5700 (setenv "NO_CDL" "1")
5701 (invoke "python" "run_all.py"))))))))
5702 (native-inputs
5703 (list python-cython
5704 python-packaging
5705 python-pytest
5706 python-setuptools
5707 python-setuptools-scm
5708 python-typing-extensions))
5709 (inputs
5710 (list netcdf
5711 hdf5
5712 zlib))
5713 (propagated-inputs
5714 (list python-certifi
5715 python-cftime
5716 python-numpy))
5717 (home-page "https://github.com/Unidata/netcdf4-python")
5718 (synopsis "Python/numpy interface to the netCDF library")
5719 (description "Netcdf4-python is a Python interface to the netCDF C
5720library. netCDF version 4 has many features not found in earlier
5721versions of the library and is implemented on top of HDF5. This module
5722can read and write files in both the new netCDF 4 and the old netCDF 3
5723format, and can create files that are readable by HDF5 clients. The
5724API is modelled after @code{Scientific.IO.NetCDF}, and should be familiar
5725to users of that module.")
5726 ;; The software is mainly ISC, but includes some files covered
5727 ;; by the Expat license.
5728 (license (list license:isc license:expat))))
5729
5730(define-public python-ncclient
5731 (package
5732 (name "python-ncclient")
5733 (version "0.6.19")
5734 (source
5735 (origin
5736 (method git-fetch) ;no tests in PyPI release
5737 (uri (git-reference
5738 (url "https://github.com/ncclient/ncclient")
5739 (commit (string-append "v" version))))
5740 (file-name (git-file-name name version))
5741 (sha256
5742 (base32
5743 "0nmyj59k9zbdfhm7qhrq9gd4x6vhjdf18q1kwfgb2gwcb3b8nd2h"))))
5744 (build-system pyproject-build-system)
5745 (native-inputs
5746 (list python-pytest
5747 python-setuptools
5748 python-wheel))
5749 (propagated-inputs
5750 (list python-lxml
5751 python-paramiko))
5752 (home-page "https://github.com/ncclient/ncclient")
5753 (synopsis "Python library for NETCONF clients")
5754 (description "@code{ncclient} is a Python library that facilitates
5755client-side scripting and application development around the NETCONF
5756protocol.")
5757 (license license:asl2.0)))
5758
5759(define-public python-ncls
5760 (package
5761 (name "python-ncls")
5762 (version "0.0.68")
5763 (source (origin
5764 (method url-fetch)
5765 (uri (pypi-uri "ncls" version))
5766 (sha256
5767 (base32
5768 "14xsnzr34xa4rwfcdjry9aqjs8i03s9fzy6jgrwj3fr3n6msbal1"))))
5769 (build-system pyproject-build-system)
5770 (arguments
5771 ;; Those tests fail with warnings (not errors) for the Numpy update.
5772 ;; Remove it at next python-team iteration.
5773 (list #:test-flags ''("--ignore=examples/test_all_overlaps_both.py"
5774 "--ignore=examples/test_find_overlap_list.py")))
5775 (native-inputs (list python-cython
5776 python-pandas
5777 python-pytest
5778 python-setuptools
5779 python-wheel))
5780 (propagated-inputs (list python-numpy))
5781 (home-page "https://github.com/endrebak/ncls")
5782 (synopsis "Nested containment list data structure")
5783 (description
5784 "This package provides a wrapper for the nested containment list data
5785structure. It is a static interval-tree that is fast for both construction
5786and lookups.")
5787 (license license:bsd-3)))
5788
5789(define-public python-license-expression
5790 (package
5791 (name "python-license-expression")
5792 (version "30.1.0")
5793 (source
5794 (origin
5795 (method url-fetch)
5796 (uri (pypi-uri "license-expression" version))
5797 (sha256
5798 (base32 "0lvshl2fhwa568d3y3vmx45hdp8gk5w9yl3b2q5d66r5vqn1sfwl"))))
5799 (build-system pyproject-build-system)
5800 (native-inputs
5801 (list python-setuptools-scm python-pytest python-setuptools python-wheel))
5802 (propagated-inputs
5803 (list python-boolean.py))
5804 (home-page "https://github.com/nexB/license-expression")
5805 (synopsis "Apply boolean logic to license expressions")
5806 (description
5807 "This Python module defines a tiny language to evaluate and compare
5808license expressions using boolean logic. Logical combinations of licenses can
5809be tested for equality, containment, and equivalence. They can be normalised
5810and simplified. It supports SPDX license expressions as well as other naming
5811conventions and aliases in the same expression.")
5812 (license license:gpl2+)))
5813
5814(define-public python-limits
5815 (package
5816 (name "python-limits")
5817 (version "5.5.0")
5818 (source
5819 (origin
5820 (method git-fetch)
5821 (uri (git-reference
5822 (url "https://github.com/alisaifee/limits")
5823 (commit version)))
5824 (file-name (git-file-name name version))
5825 (sha256
5826 (base32 "1ykld43q1pbvds4wsb18wagh852byzjpcjqg1xwa5cldigmkc2x0"))))
5827 (build-system pyproject-build-system)
5828 (arguments
5829 (list
5830 ;; XXX: Despite running only unit tests, pytest exits with an error code.
5831 #:tests? #f
5832 #:test-flags #~(list "-m" "unit")
5833 #:phases
5834 #~(modify-phases %standard-phases
5835 (add-after 'unpack 'ignore-K-pytest-option
5836 (lambda _
5837 (substitute* "pytest.ini"
5838 (("-K") "")))))))
5839 (propagated-inputs (list python-deprecated python-packaging))
5840 (native-inputs
5841 (list ; python-etcd3
5842 python-flaky
5843 python-pytest
5844 python-pytest-asyncio
5845 python-pytest-benchmark
5846 python-pytest-cov
5847 python-pytest-lazy-fixtures
5848 python-pytest-xdist
5849 ;; python-pymemcache
5850 ;; python-pymongo
5851 ;; python-redis
5852 python-setuptools
5853 ;; python-valkey
5854 ))
5855 (home-page "https://limits.readthedocs.io/")
5856 (synopsis "Rate limiting utilities")
5857 (description
5858 "This package provides a Python library to perform rate limiting with
5859commonly used storage backends.")
5860 (license license:expat)))
5861
5862(define-public python-lockfile
5863 (package
5864 (name "python-lockfile")
5865 (version "0.12.2")
5866 (source
5867 (origin
5868 (method url-fetch)
5869 (uri (pypi-uri "lockfile" version))
5870 (sha256
5871 (base32
5872 "16gpx5hm73ah5n1079ng0vy381hl802v606npkx4x8nb0gg05vba"))))
5873 (build-system python-build-system)
5874 (arguments '(#:test-target "check"))
5875 (native-inputs
5876 (list python-pbr))
5877 (home-page "https://launchpad.net/pylockfile")
5878 (synopsis "Platform-independent file locking module")
5879 (description
5880 "The lockfile package exports a LockFile class which provides a simple
5881API for locking files.")
5882 (license license:expat)))
5883
5884(define-public python-fb-re2
5885 (package
5886 (name "python-fb-re2")
5887 (version "1.0.7")
5888 (source
5889 (origin
5890 (method git-fetch)
5891 (uri (git-reference
5892 (url "https://github.com/facebook/pyre2")
5893 (commit (string-append "v" version))))
5894 (file-name (git-file-name name version))
5895 (sha256
5896 (base32
5897 "0snprxdnh3m45r3b0az4v0l28h90ycmfbybzla6xg1qviwv9w1ak"))))
5898 (build-system pyproject-build-system)
5899 (native-inputs
5900 (list python-pytest python-setuptools))
5901 (inputs
5902 (list re2))
5903 (home-page "https://github.com/facebook/pyre2")
5904 (synopsis "Python wrapper for RE2")
5905 (description "This package provides a Python extension that wraps Google's
5906RE2 regular expression library. It implements many of the features of
5907Python's built-in @code{re} module with compatible interfaces.")
5908 (license license:bsd-3)))
5909
5910(define-public python-filelock
5911 (package
5912 (name "python-filelock")
5913 (version "3.16.1")
5914 (source
5915 (origin
5916 (method url-fetch)
5917 (uri (pypi-uri "filelock" version))
5918 (sha256
5919 (base32
5920 "0d8ljvmsfgriiqf5dqii91gfcpj7cpjrh8fnsvifaiyvspygnjf2"))))
5921 (build-system pyproject-build-system)
5922 (arguments
5923 (list
5924 ;; Break cycle with virtualenv.
5925 #:test-flags #~(list "--ignore=tests/test_virtualenv.py")))
5926 (native-inputs
5927 (list python-hatch-vcs
5928 python-hatchling
5929 python-pytest
5930 python-pytest-asyncio
5931 python-pytest-mock
5932 python-setuptools-scm))
5933 (home-page "https://github.com/tox-dev/py-filelock")
5934 (synopsis "Platform independent file lock")
5935 (description "@code{filelock} contains a single module implementing
5936a platform independent file lock in Python, which provides a simple way of
5937inter-process communication.")
5938 (license license:unlicense)))
5939
5940(define-public python-filelock-next
5941 (package
5942 (inherit python-filelock)
5943 (name "python-filelock")
5944 (version "3.20.0")
5945 (source
5946 (origin
5947 (method url-fetch)
5948 (uri (pypi-uri "filelock" version))
5949 (sha256
5950 (base32 "1x0k9hrk8gr91hfb6ss6cwlq4p0pvi40nsg6skhl5gn69qxr87ki"))))
5951 (native-inputs
5952 (list python-hatch-vcs
5953 python-hatchling
5954 python-pytest
5955 python-pytest-asyncio
5956 python-pytest-mock
5957 python-pytest-timeout))))
5958
5959(define-public python-seedir
5960 (package
5961 (name "python-seedir")
5962 (version "0.5.0")
5963 (source
5964 (origin
5965 (method url-fetch)
5966 (uri (pypi-uri "seedir" version))
5967 (sha256
5968 (base32 "1ibgzji9ijm37vgwmg37s2hsqmpqd793z4q41w816x5m6nahzy76"))))
5969 (build-system pyproject-build-system)
5970 (propagated-inputs (list python-natsort))
5971 (native-inputs (list python-pytest python-setuptools python-wheel))
5972 (home-page "https://github.com/earnestt1234/seedir")
5973 (synopsis
5974 "Package for creating, editing, and reading folder tree diagrams.")
5975 (description
5976 "This is a package for creating, editing, and reading folder tree
5977diagrams.")
5978 (license license:expat)))
5979
5980(define-public python-semantic-version
5981 (package
5982 (name "python-semantic-version")
5983 (version "2.10.0")
5984 (source
5985 (origin
5986 (method url-fetch)
5987 (uri (pypi-uri "semantic_version" version))
5988 (sha256
5989 (base32 "0704smz9k6hdd6i5xh0xf0sk47kannjb77abilvvp34r6v9vdaxx"))))
5990 (build-system pyproject-build-system)
5991 (arguments (list #:test-backend #~'custom
5992 #:test-flags #~(list "-m" "nose2")))
5993 (native-inputs
5994 (list python-nose2
5995 python-setuptools))
5996 (home-page "https://github.com/rbarrois/python-semanticversion")
5997 (synopsis "Semantic versioning module for Python")
5998 (description
5999 "The @code{semantic_version} class is a small library for handling
6000@uref{https://semver.org/, semantic versioning} (@dfn{SemVer}) in Python.
6001
6002It can compare versions, generate a new version that represents a bump in one
6003of the version levels, and check whether any given string is a proper semantic
6004version identifier.")
6005 (license license:bsd-3)))
6006
6007(define-public python-serpent
6008 (package
6009 (name "python-serpent")
6010 (version "1.41")
6011 (source
6012 (origin
6013 (method git-fetch)
6014 (uri (git-reference
6015 (url "https://github.com/irmen/Serpent")
6016 (commit (string-append "serpent-" version))))
6017 (file-name (git-file-name name version))
6018 (sha256
6019 (base32 "081bm13pdxp3rxis24j2mjka06fzi4kap51wmnf21q69fsikbza8"))))
6020 (build-system pyproject-build-system)
6021 (arguments (list #:test-backend #~'unittest
6022 #:test-flags #~(list "discover" "-s" "tests")))
6023 (native-inputs
6024 (list python-attrs python-pytz python-setuptools))
6025 (home-page "https://github.com/irmen/Serpent")
6026 (synopsis "Serializer for literal Python expressions")
6027 (description
6028 "Serpent provides @code{ast.literal_eval()}-compatible object tree
6029serialization. It serializes an object tree into bytes (an utf-8 encoded
6030string) that can be decoded and then passed as-is to @code{ast.literal_eval()}
6031to rebuild the original object tree.
6032
6033Because only safe literals are encoded, it is safe to send serpent data to
6034other machines, such as over the network.")
6035 (license license:expat)))
6036
6037(define-public python-setuptools-declarative-requirements
6038 (package
6039 (name "python-setuptools-declarative-requirements")
6040 (version "1.3.0")
6041 (source
6042 (origin
6043 (method url-fetch)
6044 (uri (pypi-uri "setuptools-declarative-requirements" version))
6045 (sha256
6046 (base32 "1xwqp37ii9kql49agmkipawjbndwxg6y8sxax1wc4l6kkaxvk9ap"))))
6047 (build-system pyproject-build-system)
6048 (arguments
6049 (list #:tests? #f)) ;requir dated inputs
6050 (native-inputs
6051 (list python-setuptools-scm))
6052 (propagated-inputs
6053 (list python-setuptools))
6054 (home-page "https://github.com/s0undt3ch/setuptools-declarative-requirements")
6055 (synopsis "File support for setuptools declarative setup.cfg")
6056 (description
6057 "This package provides file support for setuptools declarative
6058@code{setup.cfg}.")
6059 (license license:asl2.0)))
6060
6061(define-public python-humanfriendly
6062 (package
6063 (name "python-humanfriendly")
6064 (version "10.0")
6065 (source
6066 (origin
6067 (method git-fetch)
6068 (uri (git-reference
6069 (url "https://github.com/xolox/python-humanfriendly")
6070 (commit version)))
6071 (file-name (git-file-name name version))
6072 (sha256
6073 (base32 "07di334y2xbyl9bd2c9q55sm0llmvz80a4p7frlkvq2w6l2d47bv"))))
6074 (build-system pyproject-build-system)
6075 (arguments
6076 (list
6077 ;XXX: Tests depend on coloredlogs, which in turn depends on humanfriendly.
6078 #:tests? #f))
6079 (native-inputs (list python-setuptools))
6080 (home-page "https://humanfriendly.readthedocs.io")
6081 (synopsis "Human-friendly input and output in Python")
6082 (description
6083 "The functions and classes in @code{humanfriendly} can be used to make
6084text interfaces more user-friendly. It includes tools to parse and format
6085numbers, file sizes, and timespans, timers for long-running operations, menus
6086to allow the user to choose from a list of options, and terminal interaction
6087helpers.")
6088 (license license:expat)))
6089
6090;; XXX: The project might be abandoned and this package has no users in Guix,
6091;; consider to remove if it keeps failing.
6092;; See: <https://github.com/ethanfurman/aenum/issues/45>,
6093;; <https://github.com/ethanfurman/aenum/issues/44>,
6094;; <https://github.com/ethanfurman/aenum/issues/27>.
6095(define-public python-aenum
6096 (package
6097 (name "python-aenum")
6098 (version "3.1.15")
6099 (source
6100 (origin
6101 (method url-fetch)
6102 (uri (pypi-uri "aenum" version))
6103 (sha256
6104 (base32 "0ncmbdblqhqyb2mg73d5663vx3q2xb9q8hmj77zp1y64336pdgcc"))
6105 (modules '((guix build utils)))
6106 (snippet
6107 ;; Delete the Python 2 specific files which won't compile
6108 ;; in Python 3.
6109 '(for-each delete-file (find-files "." "_py2.py$")))))
6110 (build-system pyproject-build-system)
6111 (arguments
6112 (list
6113 #:test-flags
6114 ;; These tests are defined in "aenum/test_v3.py" and require a function
6115 ;; "test_pickle_dump_load" from "aenum/test.py" which is not imported
6116 ;; into the module's scope.
6117 #~(list "-k" (string-join
6118 (list "not test_pickle_enum_function_with_qualname"
6119 "test_class_nested_enum_and_pickle_protocol_four"
6120 "test_subclasses_with_getnewargs_ex")
6121 " and not "))
6122 #:phases
6123 #~(modify-phases %standard-phases
6124 (add-after 'unpack 'fix-tests
6125 (lambda _
6126 (substitute* "aenum/test_v3.py"
6127 ;; tempdir variable is not defined in the module.
6128 (("import tempfile.*")
6129 (format #f "import tempfile~%tempdir = tempfile.mkdtemp()~%"))))))))
6130 (native-inputs
6131 (list python-pytest
6132 python-setuptools
6133 python-wheel))
6134 (home-page "https://github.com/ethanfurman/aenum")
6135 (synopsis "Advanced enumerations, namedtuples and constants for Python")
6136 (description
6137 "The aenum library includes an @code{Enum} base class, a metaclass-based
6138@code{NamedTuple} implementation and a @code{NamedConstant} class.")
6139 (license license:bsd-3)))
6140
6141(define-public python-calver
6142 (package
6143 (name "python-calver")
6144 (version "2022.06.26")
6145 (source
6146 (origin
6147 (method git-fetch)
6148 (uri (git-reference
6149 (url "https://github.com/di/calver")
6150 (commit version)))
6151 (file-name (git-file-name name version))
6152 (sha256
6153 (base32 "14l9kv9igcmp5k6d2ahnx6z4dn6zy5kykz95hkh0rkqswn8x79b1"))))
6154 (build-system pyproject-build-system)
6155 (native-inputs
6156 (list python-pretend
6157 python-pytest
6158 python-setuptools
6159 python-wheel))
6160 (home-page "https://github.com/di/calver")
6161 (synopsis "Setuptools extension for CalVer package versions")
6162 (description
6163 "The calver package is a setuptools extension for automatically defining
6164your Python package version as a calendar version.")
6165 (license license:asl2.0)))
6166
6167(define-public python-can
6168 (package
6169 (name "python-can")
6170 (version "4.6.1")
6171 (source
6172 (origin
6173 (method git-fetch)
6174 (uri (git-reference
6175 (url "https://github.com/hardbyte/python-can")
6176 (commit (string-append "v" version))))
6177 (file-name (git-file-name name version))
6178 (sha256
6179 (base32 "0i89hzc9n1h8i63wa333ahh5j1xqxq9v4ymcx7mcsg6ygji5wllr"))))
6180 (build-system pyproject-build-system)
6181 (arguments
6182 (list
6183 #:test-flags
6184 #~(list
6185 ;; TODO: Check if it could be packed:
6186 ;; https://github.com/projectgus/python-canalystii
6187 ;;
6188 ;; Disable tests which require specific CAN drivers we have no
6189 ;; package for in Guix.
6190 "--ignore=test/test_interface_canalystii.py"
6191 ;; These tests fail with "OSError: [Errno 19] No such device".
6192 "-k" "not BasicTestUdpMulticastBusIPv")
6193 #:phases
6194 #~(modify-phases %standard-phases
6195 (add-after 'unpack 'set-version
6196 (lambda _
6197 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
6198 (propagated-inputs (list python-packaging python-wrapt))
6199 (native-inputs
6200 (list ;; python-canalystii ; Not packed yet
6201 python-future
6202 python-hypothesis
6203 python-mock
6204 python-parameterized
6205 python-pyserial
6206 python-pytest
6207 python-pytest-cov
6208 python-pytest-timeout
6209 python-setuptools
6210 python-setuptools-scm))
6211 (home-page "https://github.com/hardbyte/python-can")
6212 (synopsis "Controller Area Network (CAN) interface module for Python")
6213 (description
6214 "This package defines the @code{can} module, which provides controller
6215area network (CAN) support for Python developers; providing common
6216abstractions to different hardware devices, and a suite of utilities for
6217sending and receiving messages on a CAN bus.")
6218 (license license:lgpl3+)))
6219
6220(define-public python-canmatrix
6221 (package
6222 (name "python-canmatrix")
6223 (version "1.2")
6224 (source
6225 (origin
6226 (method git-fetch) ; no tests data in PyPi package
6227 (uri (git-reference
6228 (url "https://github.com/ebroecker/canmatrix")
6229 (commit version)))
6230 (file-name (git-file-name name version))
6231 (sha256
6232 (base32 "05l0hi279y1dc8ifm2223lpn7z9dx2h7kk599bkymvasb2qa1xrx"))))
6233 (build-system pyproject-build-system)
6234 (native-inputs
6235 (list python-pytest
6236 python-pytest-cov
6237 python-pytest-timeout
6238 python-setuptools
6239 python-wheel))
6240 (propagated-inputs
6241 (list python-attrs
6242 python-canopen
6243 python-click
6244 ;; python-ldfparser
6245 python-lxml
6246 python-openpyxl
6247 python-pyyaml
6248 python-xlrd
6249 python-xlwt))
6250 (home-page "https://github.com/ebroecker/canmatrix")
6251 (synopsis "@acronym{CAN, Controller Area Network} matrices in Python")
6252 (description
6253 "This package implements a @acronym{CAN, Controller Area Network} matrix
6254object in Python which describes the CAN-communication and its needed objects
6255such as board units, frames, signals, and values. It also includes two
6256command-line tools (@command{canconvert} and @command{cancompare}) for
6257converting and comparing CAN databases.")
6258 (license license:bsd-2)))
6259
6260(define-public python-canopen
6261 (package
6262 (name "python-canopen")
6263 (version "2.4.1")
6264 (source
6265 (origin
6266 (method git-fetch)
6267 (uri (git-reference
6268 (url "https://github.com/canopen-python/canopen")
6269 (commit (string-append "v" version))))
6270 (file-name (git-file-name name version))
6271 (sha256
6272 (base32 "0vw6si83m4329p0k0q4b54gn1pindfzkmx6wxqy03bixd94bxw5y"))))
6273 (build-system pyproject-build-system)
6274 (native-inputs (list python-pytest python-setuptools))
6275 (propagated-inputs (list python-can))
6276 (home-page "https://github.com/canopen-python/canopen")
6277 (synopsis "CANopen stack implementation")
6278 (description
6279 "This package provides a Python implementation of the
6280@uref{https://www.can-cia.org/canopen/,CANopen standard} for
6281@acronym{CANs, controller-area networks}. The aim of the project is to
6282support the most common parts of the CiA 301 standard in a simple
6283Pythonic interface. It is mainly targeted for testing and automation
6284tasks rather than a standard compliant master implementation.")
6285 (license license:expat)))
6286
6287(define-public python-diskcache
6288 (package
6289 (name "python-diskcache")
6290 (version "5.6.3")
6291 (source
6292 (origin
6293 (method git-fetch)
6294 (uri (git-reference
6295 (url "https://github.com/grantjenks/python-diskcache")
6296 (commit (string-append "v" version))))
6297 (file-name (git-file-name name version))
6298 (sha256
6299 (base32
6300 "0mird2yj3xbh71g325admxpif9h20w0xgp9hw6ss2bdbzxsykh6m"))))
6301 (build-system pyproject-build-system)
6302 (arguments
6303 (list
6304 #:test-flags
6305 #~(list
6306 ;; Ignore flaky tests.
6307 ;; AssertionError: assert None == 100
6308 "--deselect=tests/test_core.py::test_incr_update_keyerror")
6309 #:phases
6310 #~(modify-phases %standard-phases
6311 (add-before 'check 'fix-pytest-config
6312 (lambda _
6313 (substitute* "tox.ini"
6314 ;; no python-pytest-xdist
6315 ((".*-n auto.*")
6316 "")
6317 ;; no python-pytest-cov
6318 ((".*--cov.*")
6319 "")))))))
6320 (native-inputs
6321 (list python-django
6322 python-matplotlib
6323 python-pytest
6324 python-setuptools))
6325 (home-page "https://www.grantjenks.com/docs/diskcache/")
6326 (synopsis "Disk and file backed cache library")
6327 (description "DiskCache is a disk and file backed persistent cache.")
6328 (license license:asl2.0)))
6329
6330(define-public python-optparse-pretty
6331 (package
6332 (name "python-optparse-pretty")
6333 (version "0.1.1")
6334 (source
6335 (origin
6336 (method url-fetch)
6337 (uri (pypi-uri "optparse-pretty" version))
6338 (sha256
6339 (base32 "1920wbh2b7a8qn7zx2iiqbcdaax335l81a73x9pp8h11yzs2jdmh"))))
6340 (build-system pyproject-build-system)
6341 (arguments (list #:tests? #false)) ;There are none
6342 (native-inputs (list python-setuptools python-wheel))
6343 (home-page "https://github.com/gvalkov/optparse-pretty")
6344 (synopsis "Compact help formatter for optparse")
6345 (description
6346 "This module provides two help formatters for optparse. They provide
6347terser and more customizable option formatting in comparison to the default
6348help formatter.")
6349 (license license:bsd-3)))
6350
6351(define-public python-orjson
6352 (package
6353 (name "python-orjson")
6354 (version "3.9.7")
6355 (source (origin
6356 (method url-fetch)
6357 (uri (pypi-uri "orjson" version))
6358 (sha256
6359 (base32
6360 "0hh1j7akxgx1nvsnwx1p4f4h4pkgr7v9aqr99l2pwbwfyyc93qw5"))))
6361 (build-system cargo-build-system)
6362 (arguments
6363 (list
6364 #:imported-modules `(,@%cargo-build-system-modules
6365 ,@%pyproject-build-system-modules)
6366 #:modules '((guix build cargo-build-system)
6367 ((guix build pyproject-build-system) #:prefix py:)
6368 (guix build utils))
6369 #:phases
6370 (with-extensions (list (pyproject-guile-json))
6371 #~(modify-phases %standard-phases
6372 (add-after 'build 'build-python-module
6373 (assoc-ref py:%standard-phases 'build))
6374 (add-after 'build-python-module 'install-python-module
6375 (assoc-ref py:%standard-phases 'install))))
6376 #:install-source? #false))
6377 (inputs
6378 (cons maturin (cargo-inputs 'python-orjson)))
6379 (native-inputs
6380 (list python-wrapper))
6381 (home-page "https://github.com/ijl/orjson")
6382 (synopsis "Python JSON library supporting dataclasses, datetimes, and numpy")
6383 (description "Orjson is a fast, correct JSON library for Python. It
6384benchmarks as the fastest Python library for JSON and is more correct than the
6385standard @code{json} library or other third-party libraries. It serializes
6386dataclass, datetime, numpy, and UUID instances natively.")
6387 ;; Either of these licenses
6388 (license (list license:asl2.0 license:expat))))
6389
6390(define-public python-overrides
6391 (package
6392 (name "python-overrides")
6393 (version "7.7.0")
6394 (source
6395 (origin
6396 (method url-fetch)
6397 (uri (pypi-uri "overrides" version))
6398 (sha256
6399 (base32 "02l2j5pnsxn0q5i63is5g6i3q06ri83nf7lv55swr61vv6iqy5am"))))
6400 (build-system pyproject-build-system)
6401 (native-inputs (list python-pytest python-setuptools python-wheel))
6402 (home-page "https://github.com/mkorpela/overrides")
6403 (synopsis "Decorator to detect mismatch when overriding a method")
6404 (description
6405 "This package provides a decorator to automatically detect mismatch when
6406overriding a method.")
6407 (license license:asl2.0)))
6408
6409(define-public python-argparse-addons
6410 (package
6411 (name "python-argparse-addons")
6412 (version "0.12.0")
6413 (source
6414 (origin
6415 (method url-fetch)
6416 (uri (pypi-uri "argparse_addons" version))
6417 (sha256
6418 (base32 "1bv0nh8147bhjrjdr0m2fnmhxnl6bdni68wd61v7x206szfa08k3"))))
6419 (build-system pyproject-build-system)
6420 (native-inputs
6421 (list python-pytest python-setuptools))
6422 (home-page "https://github.com/eerimoq/argparse_addons")
6423 (synopsis "Extensions for Python's @code{argparse} library")
6424 (description "This Python library provides additional types and actions
6425for the standard @code{argparse} library.")
6426 (license license:expat)))
6427
6428(define-public python-bitstruct
6429 (package
6430 (name "python-bitstruct")
6431 (version "8.21.0")
6432 (source
6433 (origin
6434 (method url-fetch)
6435 (uri (pypi-uri "bitstruct" version))
6436 (sha256
6437 (base32 "1b2836hjc2bvnbjngfk9n0995zm3lz65apq7irlgijj5iabf82zz"))))
6438 (build-system pyproject-build-system)
6439 (native-inputs
6440 (list python-pytest
6441 python-setuptools
6442 python-wheel))
6443 (home-page "https://github.com/eerimoq/bitstruct")
6444 (synopsis "Python values to and C bit field structs converter")
6445 (description
6446 "This module performs conversions between Python values and C bit field
6447structs represented as Python byte strings. It is intended to have a similar
6448interface as the @code{struct} module from Python, but working on bits instead
6449of primitive data types like @code{char}, @code{int}, etc.")
6450 (license license:expat)))
6451
6452(define-public python-cantools
6453 (package
6454 (name "python-cantools")
6455 (version "40.5.0")
6456 (source
6457 (origin
6458 (method git-fetch)
6459 (uri (git-reference
6460 (url "https://github.com/eerimoq/cantools")
6461 (commit version)))
6462 (file-name (git-file-name name version))
6463 (sha256
6464 (base32 "0ldqdsvkvy7vmplyiqcfqqwbh8v88ha98hgdrnlm09g4qbylh5d4"))))
6465 (build-system pyproject-build-system)
6466 (arguments
6467 (list
6468 #:phases
6469 ;; TODO: Build documentation, it's failing with error:
6470 ;; importlib.metadata.PackageNotFoundError: No package metadata was
6471 ;; found for cantools.
6472 ;; See: https://github.com/eerimoq/cantools/issues/190.
6473 #~(modify-phases %standard-phases
6474 (add-before 'build 'set-version
6475 (lambda _
6476 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
6477 (native-inputs
6478 (list python-freezegun
6479 python-parameterized
6480 python-pytest
6481 python-setuptools
6482 python-setuptools-scm))
6483 (propagated-inputs
6484 (list python-argparse-addons
6485 python-bitstruct
6486 python-can
6487 python-crccheck
6488 python-diskcache
6489 python-matplotlib
6490 python-textparser))
6491 (home-page "https://github.com/eerimoq/cantools")
6492 (synopsis "Tools for the Controller Area Network (CAN) bus protocol")
6493 (description
6494 "This package includes Controller Area Network (CAN) related tools that
6495can be used to:
6496@itemize
6497@item parse DBC, KCD, SYM, ARXML 4 and CDD files
6498@item encode and decode CAN messages
6499@item multiplex simple and extended signals
6500@item diagnose DID encoding and decoding
6501@item dump the CAN decoder output
6502@item test CAN nodes
6503@item generate C source code
6504@item monitor the CAN bus
6505@end itemize")
6506 (license license:expat)))
6507
6508(define-public python-capturer
6509 (package
6510 (name "python-capturer")
6511 (version "3.0")
6512 (source
6513 (origin
6514 (method git-fetch)
6515 (uri (git-reference
6516 (url "https://github.com/xolox/python-capturer")
6517 (commit version)))
6518 (file-name (git-file-name name version))
6519 (sha256
6520 (base32 "0fwrxa049gzin5dck7fvwhdp1856jrn0d7mcjcjsd7ndqvhgvjj1"))))
6521 (build-system pyproject-build-system)
6522 (native-inputs (list python-pytest python-setuptools))
6523 (propagated-inputs (list python-humanfriendly))
6524 (home-page "https://capturer.readthedocs.io")
6525 (synopsis "Capture stdout and stderr streams of the current process")
6526 (description
6527 "The capturer package makes it easy to capture the stdout and stderr
6528streams of the current process and subprocesses. Output can be relayed
6529to the terminal in real time but is also available to the Python program
6530for additional processing.")
6531 (license license:expat)))
6532
6533(define-public python-fastprogress
6534 (package
6535 (name "python-fastprogress")
6536 (version "1.0.3")
6537 (source (origin
6538 (method git-fetch)
6539 (uri (git-reference
6540 (url "https://github.com/fastai/fastprogress")
6541 (commit version)))
6542 (file-name (git-file-name name version))
6543 (sha256
6544 (base32
6545 "01h8f786wgmmd3fj98wk1n5id67nsp19gs8bbgims04aciwhvj21"))))
6546 (build-system pyproject-build-system)
6547 (arguments
6548 (list #:tests? #f ;there are no tests
6549 #:phases #~(modify-phases %standard-phases
6550 ;; XXX: Fails with: "In procedure utime: No such file
6551 ;; or directory".
6552 (delete 'ensure-no-mtimes-pre-1980))))
6553 (native-inputs (list python-setuptools python-wheel))
6554 (home-page "https://github.com/fastai/fastprogress")
6555 (synopsis "Progress bar for Jupyter Notebook and console")
6556 (description
6557 "Fastprogress is a progress bar for Jupyter Notebook and console.")
6558 (license license:asl2.0)))
6559
6560(define-public python-coloredlogs
6561 (package
6562 (name "python-coloredlogs")
6563 (version "15.0.1")
6564 (source
6565 (origin
6566 (method git-fetch)
6567 (uri (git-reference
6568 (url "https://github.com/xolox/python-coloredlogs")
6569 (commit version)))
6570 (file-name (git-file-name name version))
6571 (sha256
6572 (base32 "1c83h3cvd2qww2m9myxrnqh0lr9fllx8zfb26f64lcvwd3cli1sf"))))
6573 (build-system pyproject-build-system)
6574 (arguments
6575 (list
6576 #:test-flags
6577 #~(list "-k"
6578 (string-join
6579 (list "not test_auto_install" ; Unclear why this fails.
6580 ;; XXX: Require a "script" executable.
6581 "test_cli_conversion"
6582 "test_empty_conversion"
6583 "test_output_interception")
6584 " and not "))))
6585 (native-inputs (list python-pytest python-setuptools python-verboselogs))
6586 (propagated-inputs (list python-capturer))
6587 (home-page "https://coloredlogs.readthedocs.io")
6588 (synopsis "Colored stream handler for Python's logging module")
6589 (description
6590 "The @code{coloredlogs} package enables colored terminal output for
6591Python's logging module. The @code{ColoredFormatter} class inherits from
6592@code{logging.Formatter} and uses ANSI escape sequences to render your logging
6593messages in color.")
6594 (license license:expat)))
6595
6596(define-public python-editorconfig
6597 (package
6598 (name "python-editorconfig")
6599 (version "0.17.1")
6600 (source
6601 (origin
6602 (method git-fetch)
6603 (uri (git-reference
6604 (url "https://github.com/editorconfig/editorconfig-core-py")
6605 (commit (string-append "v" version))
6606 (recursive? #t)))
6607 (file-name (git-file-name name version))
6608 (sha256
6609 (base32 "107lh5pds1iwgb2q1da2k7g5vs6w0rk84679k6yi8a01agc1c0fz"))))
6610 (build-system pyproject-build-system)
6611 (arguments
6612 (list
6613 #:phases
6614 #~(modify-phases %standard-phases
6615 (replace 'check
6616 (lambda _
6617 (setenv "PYTHONPATH" (getenv "GUIX_PYTHONPATH"))
6618 (invoke "cmake" ".")
6619 (invoke "ctest" "."))))))
6620 (native-inputs (list cmake python-setuptools python-wheel))
6621 (home-page "https://editorconfig.org/")
6622 (synopsis "EditorConfig bindings for python")
6623 (description "The EditorConfig project consists of a file format for
6624defining coding styles and a collection of text editor plugins that enable
6625editors to read the file format and adhere to defined styles. EditorConfig
6626files are easily readable and they work nicely with version control systems.")
6627 ;; "fnmatch.py" and "ini.py" are licensed under psfl, the rest is bsd-2.
6628 (license (list license:bsd-2 license:psfl))))
6629
6630(define-public dosage
6631 (package
6632 (name "dosage")
6633 (version "3.2")
6634 (source
6635 (origin
6636 (method url-fetch)
6637 (uri (pypi-uri "dosage" version))
6638 (sha256
6639 (base32
6640 "0hi5rl17rj9gay7yw7ikrkyp5qhyw5bzp4ig1sj6ahzclsia8y1h"))))
6641 (build-system pyproject-build-system)
6642 (arguments
6643 ;; It requres additional modules for integration tests.
6644 (list #:test-flags #~(list "--ignore=tests/modules/")))
6645 (native-inputs
6646 (list python-pytest
6647 python-responses
6648 python-setuptools
6649 python-setuptools-scm))
6650 (inputs
6651 (list python-imagesize
6652 python-importlib-resources
6653 python-lxml
6654 python-platformdirs
6655 python-requests
6656 python-rich))
6657 (home-page "https://github.com/webcomics/dosage")
6658 (synopsis "Comic strip downloader and archiver")
6659 (description
6660 "Dosage is designed to keep a local copy of specific webcomics and other
6661picture-based content such as Picture of the Day sites. With the
6662@command{dosage} command-line script you can get the latest strip of a
6663webcomic, catch-up to the last strip downloaded, or download a strip for a
6664particular date or index, if possible.")
6665 (license license:expat)))
6666
6667(define-public python-etcd3
6668 (package
6669 (name "python-etcd3")
6670 (version "0.12.0")
6671 (source
6672 (origin
6673 (method git-fetch)
6674 (uri (git-reference
6675 (url "https://github.com/kragniz/python-etcd3")
6676 (commit (string-append "v" version))))
6677 (file-name (git-file-name name version))
6678 (sha256
6679 (base32 "06hw0kcl77v8px5w2hfnf2l9gjnjrspjb49kx3jqa382z7wzdkk0"))))
6680 (build-system pyproject-build-system)
6681 (arguments
6682 (list
6683 ;; XXX: Tests require the etcd package.
6684 #:tests? #f
6685 #:test-backend #~'custom
6686 #:test-flags ; Taken from tox.ini.
6687 #~(list "pifpaf" "-e" "python" "run" "etcd" "--cluster" "--" "pytest")))
6688 (propagated-inputs (list python-grpcio python-protobuf python-tenacity))
6689 (native-inputs (list python-mock python-pifpaf python-pytest python-setuptools))
6690 (home-page "https://github.com/kragniz/python-etcd3")
6691 (synopsis "Python client for the etcd3 API")
6692 (description
6693 "This package provide a Python client for the @code{etcd3} API.")
6694 (license license:asl2.0)))
6695
6696(define-public python-et-xmlfile
6697 (package
6698 (name "python-et-xmlfile")
6699 (version "2.0.0")
6700 (source
6701 (origin
6702 ;; Use a checkout because the PyPI archive does not contain tests.
6703 (method hg-fetch)
6704 (uri (hg-reference
6705 (url "https://foss.heptapod.net/openpyxl/et_xmlfile")
6706 (changeset version)))
6707 (file-name (string-append name "-" version "-checkout"))
6708 (sha256
6709 (base32 "03pmmg6k2ajd83zhki8f0c1ndi7pq23bj9hm6f8hhd07maqksf5w"))))
6710 (build-system pyproject-build-system)
6711 (native-inputs
6712 (list python-pytest
6713 python-lxml
6714 python-setuptools))
6715 (home-page "https://bitbucket.org/openpyxl/et_xmlfile")
6716 (synopsis "Low memory implementation of @code{lxml.xmlfile}")
6717 (description "This Python library is based upon the @code{xmlfile} module
6718from @code{lxml}. It aims to provide a low memory, compatible implementation
6719of @code{xmlfile}.")
6720 (license license:expat)))
6721
6722(define-public python-omero-py
6723 (let ((omero-blitz-version "5.8.2"))
6724 (package
6725 (name "python-omero-py")
6726 (version "5.20.0")
6727 (source
6728 (origin
6729 (method git-fetch)
6730 (uri (git-reference
6731 (url "https://github.com/ome/omero-py")
6732 (commit (string-append "v" version))))
6733 (file-name (git-file-name name version))
6734 (sha256
6735 (base32 "02zsw1p35n6lkqh410qpgw7c4467dkbg0hxly3gjqrwdh349j47g"))))
6736 (build-system pyproject-build-system)
6737 (arguments
6738 (list
6739 ;; #:tests? #f
6740 #:test-flags
6741 #~(list
6742 "-m" "not broken" "-rf" "test" "-s"
6743 ;; XXX: Failing collection because of Numpy compatibility.
6744 "--ignore=test/unit/tablestest/test_hdfstorage.py"
6745 "--ignore=test/unit/tablestest/test_servants.py"
6746 ;; TestImport tries to download Java things; TestSessions
6747 ;; and TestBuildQuery require networking.
6748 "-k" "not TestImport and not TestSessions and not TestBuildQuery")
6749 #:modules '((guix build pyproject-build-system)
6750 (guix build utils)
6751 (ice-9 match)
6752 (srfi srfi-1)
6753 (srfi srfi-26))
6754 #:phases
6755 #~(modify-phases %standard-phases
6756 (add-after 'unpack 'find-artifacts
6757 (lambda* (#:key inputs #:allow-other-keys)
6758 (let ((zip-file
6759 (match inputs
6760 (((labels . files) ...)
6761 (find (cut string-suffix?
6762 (string-append "omero-blitz-"
6763 #$omero-blitz-version
6764 "-python.zip")
6765 <>)
6766 files)))))
6767 (setenv "ZIP_FILE"
6768 (or zip-file (error "failed to find artifact file"))))))
6769 ;; Some tests need this, such as TestTempFileManager
6770 (add-after 'build 'set-HOME
6771 (lambda _ (setenv "HOME" "/tmp")))
6772 ;; The sanity check mistakes omero_model_TypeAnnotationI.py for a
6773 ;; module to load.
6774 (delete 'sanity-check)
6775 ;; The argument parser is picky and interprets the "-real" part as
6776 ;; the first argument.
6777 (add-after 'wrap 'rename-executable
6778 (lambda _
6779 (with-directory-excursion (string-append #$output "/bin")
6780 (rename-file ".omero-real" ".omero")
6781 (substitute* "omero"
6782 (("bin/.omero-real") "bin/.omero"))))))))
6783 (propagated-inputs
6784 (list python-appdirs
6785 python-future
6786 python-numpy
6787 python-pillow
6788 python-pyyaml
6789 python-requests
6790 python-tables
6791 python-zeroc-ice-3.6))
6792 (native-inputs
6793 (list python-portalocker
6794 python-pytest
6795 python-pytest-mock
6796 python-pytest-rerunfailures
6797 python-pytest-xdist
6798 python-setuptools
6799 python-wheel
6800 unzip
6801 (origin
6802 (method url-fetch)
6803 (uri (format #f "\
6804https://artifacts.openmicroscopy.org/artifactory/ome.releases/org/\
6805openmicroscopy/omero-blitz/~a/omero-blitz-~a-python.zip"
6806 omero-blitz-version
6807 omero-blitz-version))
6808 (sha256
6809 (base32 "1nb17xmx6n7i5vkcw661iq42yfgc3i0gmhz3x8iwcrhp8pajzm3l")))))
6810 (home-page "https://github.com/ome/omero-py")
6811 (synopsis "Python bindings to the OMERO.blitz server")
6812 (description "This package provides Python bindings to the OMERO.blitz
6813server.")
6814 (license license:gpl2))))
6815
6816(define-public python-openpyxl
6817 (package
6818 (name "python-openpyxl")
6819 (version "3.1.5")
6820 (source
6821 (origin
6822 ;; We use the upstream repository, as the tests are not included in the
6823 ;; PyPI releases.
6824 (method hg-fetch)
6825 (uri (hg-reference
6826 (url "https://foss.heptapod.net/openpyxl/openpyxl")
6827 (changeset version)))
6828 (file-name (string-append name "-" version "-checkout"))
6829 (sha256
6830 (base32 "17z6rrvv3q1axy9r13c2hln2pazfn9n5bhkzrbjcjakgbfjl6mss"))))
6831 (build-system pyproject-build-system)
6832 (native-inputs
6833 (list python-lxml-4.9
6834 python-pillow
6835 python-pytest
6836 python-setuptools))
6837 (propagated-inputs
6838 (list python-et-xmlfile))
6839 (home-page "https://openpyxl.readthedocs.io")
6840 (synopsis "Python library to read/write Excel 2010 XLSX/XLSM files")
6841 (description
6842 "This Python library allows reading and writing to the Excel XLSX, XLSM,
6843XLTX and XLTM file formats that are defined by the Office Open XML (OOXML)
6844standard.")
6845 (license license:expat)))
6846
6847(define-public python-sinfo
6848 (package
6849 (name "python-sinfo")
6850 (version "0.3.4")
6851 (source (origin
6852 (method url-fetch)
6853 (uri (pypi-uri "sinfo" version))
6854 (sha256
6855 (base32
6856 "0kdsp883mx0lfyykv0p12bvs203kdm3skb8bw5wf2pc7kb393sl1"))))
6857 (build-system pyproject-build-system)
6858 (arguments
6859 (list #:tests? #f)) ; no tests in PyPI or Git
6860 (native-inputs
6861 (list python-setuptools))
6862 (propagated-inputs
6863 (list python-stdlib-list))
6864 (home-page "https://gitlab.com/joelostblom/session_info")
6865 (synopsis "Output module version information loaded in a Python session")
6866 (description "This package outputs version information for modules loaded
6867in the current session, Python, and the OS.")
6868 (license license:bsd-3)))
6869
6870(define-public python-six
6871 (package
6872 (name "python-six")
6873 (version "1.17.0")
6874 (source
6875 (origin
6876 (method url-fetch)
6877 (uri (pypi-uri "six" version))
6878 (sha256
6879 (base32 "109ajcsfhrz33lbwbb337w34crc3lb9rjnxrcpnbczlf8rfk6w7z"))))
6880 (build-system pyproject-build-system)
6881 (native-inputs
6882 (list python-pytest-bootstrap
6883 python-setuptools
6884 python-wheel))
6885 (home-page "https://pypi.org/project/six/")
6886 (synopsis "Python 2 and 3 compatibility utilities")
6887 (description
6888 "Six is a Python 2 and 3 compatibility library. It provides utility
6889functions for smoothing over the differences between the Python versions with
6890the goal of writing Python code that is compatible on both Python versions.
6891Six supports every Python version since 2.5. It is contained in only one
6892Python file, so it can be easily copied into your project.")
6893 (license license:x11)))
6894
6895(define-public python-six-bootstrap python-six)
6896
6897(define-public python-schedule
6898 (package
6899 (name "python-schedule")
6900 (version "1.2.2")
6901 (source
6902 (origin
6903 (method url-fetch)
6904 (uri (pypi-uri "schedule" version))
6905 (sha256
6906 (base32
6907 "1dzhwpnpbvv90z6lavx4z7whh1a2y47cq69zgxibknazzrsrrzhm"))))
6908 (build-system pyproject-build-system)
6909 (native-inputs
6910 (list python-pytest python-setuptools python-wheel))
6911 (home-page "https://github.com/dbader/schedule")
6912 (synopsis "Schedule periodic function calls in Python")
6913 (description
6914 "Schedule is an in-process scheduler for periodic jobs that uses the
6915builder pattern for configuration. Schedule lets you run Python functions (or
6916any other callable) periodically at pre-determined intervals using a simple,
6917human-friendly syntax.")
6918 (license license:expat)))
6919
6920;; XXX: This project is unmaintained since 2020, see:
6921;; <https://github.com/scour-project/scour/issues/321>.
6922;;
6923;; The only user is Inkscape, see:
6924;; <https://gitlab.com/inkscape/inkscape-docs/documentation/-/issues/43>.
6925(define-public python-scour
6926 (package
6927 (name "python-scour")
6928 (version "0.38.2")
6929 (source
6930 (origin
6931 (method git-fetch)
6932 (uri
6933 (git-reference
6934 (url "https://gitlab.com/inkscape/extras/scour")
6935 (commit
6936 (string-append "v" version))))
6937 (file-name (git-file-name name version))
6938 (sha256
6939 (base32 "0mmfvx4wqp8gkpv0kbih89zfs9njvmd3v4dxfqii62xddpxq0f1k"))))
6940 (build-system pyproject-build-system)
6941 (arguments
6942 (list #:test-backend #~'custom
6943 #:test-flags #~(list "test_scour.py")))
6944 (native-inputs
6945 (list python-setuptools))
6946 (propagated-inputs
6947 (list python-six))
6948 (home-page "https://gitlab.com/inkscape/extras/scour")
6949 (synopsis "Scour is an SVG optimizer/cleaner written in Python")
6950 (description
6951 "The goal of Scour is to output a file that renders identically at a
6952fraction of the size by removing a lot of redundant information created by
6953most SVG editors. Optimization options are typically lossless but can be
6954tweaked for more aggressive cleaning.")
6955 (license license:asl2.0)))
6956
6957(define-public python-mechanize
6958 (package
6959 (name "python-mechanize")
6960 (version "0.4.10")
6961 (source
6962 (origin
6963 (method url-fetch)
6964 (uri (pypi-uri "mechanize" version))
6965 (sha256
6966 (base32 "1pvxjnhqi6iq7nnjksnfvyzxcibbwfjc9fzp22v0msp7kdzr9shx"))))
6967 (build-system pyproject-build-system)
6968 (arguments
6969 ;; XXX: Unclear why tests are failing.
6970 (list #:tests? #f
6971 #:phases
6972 #~(modify-phases %standard-phases
6973 (add-before 'check 'configure-tests
6974 (lambda _
6975 (setenv "GUIX_PYTHONPATH"
6976 (string-append (getcwd) "/test-tools:"
6977 (getenv "GUIX_PYTHONPATH"))))))))
6978 (native-inputs
6979 (list python-html5-parser
6980 python-html5lib
6981 python-lxml
6982 python-service-identity
6983 python-setuptools
6984 python-six
6985 python-twisted
6986 python-wheel))
6987 (propagated-inputs
6988 (list python-html5lib))
6989 (home-page "https://github.com/python-mechanize/mechanize")
6990 (synopsis
6991 "Stateful programmatic web browsing in Python")
6992 (description
6993 "Mechanize implements stateful programmatic web browsing in Python,
6994after Andy Lester’s Perl module WWW::Mechanize.")
6995 (license license:bsd-3)))
6996
6997(define-public python-mediapy
6998 (package
6999 (name "python-mediapy")
7000 (version "1.2.2")
7001 (source
7002 (origin
7003 (method git-fetch)
7004 (uri (git-reference
7005 (url "https://github.com/google/mediapy")
7006 (commit (string-append "v" version))))
7007 (file-name (git-file-name name version))
7008 (sha256
7009 (base32 "08dj0h7xkpaj552pzjln1chshxsfxbwhv29p2npsmscy907s322l"))))
7010 (build-system pyproject-build-system)
7011 (arguments
7012 (list
7013 #:phases
7014 '(modify-phases %standard-phases
7015 (add-after 'unpack 'fix-references
7016 (lambda _
7017 (substitute* "mediapy_test.py"
7018 (("'/bin/bash")
7019 (string-append "'" (which "bash")))))))))
7020 (inputs (list ffmpeg-5))
7021 (propagated-inputs (list python-absl-py
7022 python-ipython
7023 python-matplotlib
7024 python-numpy
7025 python-pillow))
7026 (native-inputs
7027 (list python-flit-core
7028 python-pylint
7029 python-pytest
7030 python-pytest-xdist))
7031 (home-page "https://github.com/google/mediapy")
7032 (synopsis "Read/write/show images and videos in an IPython notebook")
7033 (description "This Python library makes it easy to display images and
7034videos in a notebook.")
7035 (license license:asl2.0)))
7036
7037(define-public python-simpleaudio
7038 (package
7039 (name "python-simpleaudio")
7040 (version "1.0.4")
7041 (source
7042 (origin
7043 (method git-fetch)
7044 (uri (git-reference
7045 (url "https://github.com/hamiltron/py-simple-audio")
7046 (commit version)))
7047 (file-name (git-file-name name version))
7048 (sha256
7049 (base32 "12nypzb1m14yip4zrbzin5jc5awyp1d5md5y40g5anj4phb4hx1i"))))
7050 (build-system pyproject-build-system)
7051 (arguments
7052 (list
7053 #:test-backend #~'unittest
7054 #:phases
7055 #~(modify-phases %standard-phases
7056 (add-before 'check 'fix-test-run
7057 (lambda _
7058 (delete-file-recursively "simpleaudio"))))))
7059 (native-inputs (list python-setuptools))
7060 (inputs (list alsa-lib))
7061 (home-page "https://github.com/hamiltron/py-simple-audio")
7062 (synopsis "Simple, asynchronous audio playback for Python 3")
7063 (description
7064 "The @code{simplaudio} package provides cross-platform, dependency-free
7065audio playback capability for Python 3 on OSX, Windows, and Linux.")
7066 (license license:expat))) ; MIT license
7067
7068(define-public python-jsonalias
7069 (package
7070 (name "python-jsonalias")
7071 (version "0.1.2")
7072 (source (origin
7073 (method url-fetch)
7074 (uri (pypi-uri "jsonalias" version))
7075 (sha256
7076 (base32
7077 "0k5c2132hbd9wxnj8w05vvpi286l3g3ksw350m85rd0k9958g5z3"))))
7078 (build-system pyproject-build-system)
7079 (arguments
7080 (list #:tests? #f)) ; no tests in PyPI or Git
7081 (native-inputs
7082 (list python-poetry-core))
7083 (home-page "https://github.com/kevinheavey/jsonalias/")
7084 (synopsis "JSON type alias for Python")
7085 (description
7086 "This package provides a microlibrary that defines a JSON type alias for
7087Python.")
7088 (license license:expat)))
7089
7090(define-public python-jsonargparse
7091 (package
7092 (name "python-jsonargparse")
7093 (version "4.37.0")
7094 (source (origin
7095 (method url-fetch)
7096 (uri (pypi-uri "jsonargparse" version))
7097 (sha256
7098 (base32
7099 "1b9w9j27phj5j00pmhp11lzf53yc4dnwknhxacv2bfyiiaq0af2s"))))
7100 (build-system pyproject-build-system)
7101 (arguments
7102 (list #:test-flags
7103 '(list "-k" "not test_env_prefix")))
7104 (propagated-inputs
7105 (list python-pyyaml))
7106 (native-inputs
7107 (list python-attrs
7108 python-pypa-build
7109 python-pydantic
7110 python-pytest
7111 python-pytest-subtests
7112 python-responses
7113 python-setuptools
7114 python-wheel))
7115 (home-page "https://github.com/omni-us/jsonargparse/")
7116 (synopsis "Implement minimal boilerplate CLIs derived from type hints")
7117 (description
7118 "This package lets you implement minimal boilerplate CLIs derived from
7119type hints and parse from command line, config files and environment
7120variables.")
7121 (license license:expat)))
7122
7123(define-public python-pymarshal
7124 (package
7125 (name "python-pymarshal")
7126 (version "2.2.3")
7127 (source (origin
7128 (method url-fetch)
7129 (uri (pypi-uri "pymarshal" version))
7130 (sha256
7131 (base32
7132 "1lhb7yim60pvclbd440zd4n50xs1d2rvmnrhhvib3hyv0dxil5j3"))))
7133 (build-system pyproject-build-system)
7134 (arguments
7135 ;; Test fails with this error:
7136 ;; "CovReportWarning: Failed to generate report: No data to report."
7137 (list #:tests? #f))
7138 (native-inputs
7139 (list python-pytest python-pytest-cov python-setuptools python-wheel))
7140 (propagated-inputs (list python-bson python-pyyaml))
7141 (home-page "https://gitlab.com/d3v-t00lz/pymarshal")
7142 (synopsis "Pythonic implementation of Golang struct (un)marshalling")
7143 (description "PyMarshal replicates the feature of (un)marshalling structs
7144in Golang.")
7145 (license license:bsd-2)))
7146
7147(define-public python-simplejson
7148 (package
7149 (name "python-simplejson")
7150 (version "3.20.1")
7151 (source
7152 (origin
7153 (method url-fetch)
7154 (uri (pypi-uri "simplejson" version))
7155 (sha256
7156 (base32
7157 "0z838dqnh5c81ib6cvfqfhd82ax2apzclzgz8b0j87sgxjs3jhg6"))))
7158 (build-system pyproject-build-system)
7159 (native-inputs
7160 (list python-pytest python-setuptools))
7161 (home-page "https://simplejson.readthedocs.io/en/latest")
7162 (synopsis
7163 "Json library for Python")
7164 (description
7165 "JSON (JavaScript Object Notation) is a subset of JavaScript
7166syntax (ECMA-262 3rd edition) used as a lightweight data interchange
7167format.
7168
7169Simplejson exposes an API familiar to users of the standard library marshal
7170and pickle modules. It is the externally maintained version of the json
7171library contained in Python 2.6, but maintains compatibility with Python 2.5
7172and (currently) has significant performance advantages, even without using
7173the optional C extension for speedups. Simplejson is also supported on
7174Python 3.3+.")
7175 (license license:x11)))
7176
7177(define-public python-simple-rlp
7178 (package
7179 (name "python-simple-rlp")
7180 (version "0.1.3")
7181 (source
7182 (origin
7183 (method git-fetch)
7184 (uri (git-reference
7185 (url "https://github.com/SamuelHaidu/simple-rlp")
7186 ;; Upstream doesn't tag the git repo.
7187 (commit "342ea269d84da1ddc4a7630cdebc90159261391c")))
7188 (file-name (git-file-name name version))
7189 (sha256
7190 (base32
7191 "1nv92sphpkyrncak4qgj50qmgkmj4ycl2szbnv9c7ihgl5df4div"))))
7192 (build-system pyproject-build-system)
7193 (native-inputs
7194 (list
7195 python-pytest
7196 python-setuptools))
7197 (home-page "https://github.com/SamuelHaidu/simple-rlp")
7198 (synopsis
7199 "Python implementation of RLP (Recursive Length Prefix) encoding")
7200 (description
7201 "@code{simple-rlp} is a python implementation of RLP (Recursive Length \
7202Prefix) - Encode and decode data structures.")
7203 (license license:expat)))
7204
7205(define-public python-pyicu
7206 (package
7207 (name "python-pyicu")
7208 (version "2.15.2")
7209 (source
7210 (origin
7211 (method url-fetch)
7212 (uri (pypi-uri "pyicu" version))
7213 (sha256
7214 (base32 "13srrv5lczr0s74hx2kffwdhfg6flpvi2qpj75lfqz7ivzp7f7jn"))))
7215 (build-system pyproject-build-system)
7216 (native-inputs
7217 (list pkg-config
7218 python-pytest
7219 python-setuptools
7220 python-six))
7221 (inputs
7222 (list icu4c))
7223 (home-page "https://gitlab.pyicu.org/main/pyicu")
7224 (synopsis "Python extension wrapping the ICU C++ API")
7225 (description
7226 "PyICU is a python extension wrapping the ICU C++ API.")
7227 (license license:x11)))
7228
7229(define-public python-dogtail
7230 (package
7231 (name "python-dogtail")
7232 (version "0.9.11")
7233 (source
7234 (origin
7235 (method url-fetch)
7236 (uri (string-append
7237 "https://gitlab.com/dogtail/dogtail/-/raw/released/" "dogtail-"
7238 version ".tar.gz"))
7239 (sha256
7240 (base32 "0sr38z7b2n12bvfd4xw4b5dnnhkn5zl3h0ymmnnzavcihfqia6l0"))))
7241 (build-system pyproject-build-system)
7242 (arguments
7243 (list
7244 #:tests? #f ;TODO Launching dbus for the tests fails
7245 #:phases
7246 #~(modify-phases %standard-phases
7247 (replace 'check
7248 (lambda* (#:key tests? #:allow-other-keys)
7249 (when tests?
7250 (system "Xvfb :1 &")
7251 (setenv "DISPLAY" ":1")
7252 (invoke "dbus-run-session" "--"
7253 "nosetests" "-v" "tests/")))))))
7254 (propagated-inputs (list python-pygobject python-pycairo python-pyatspi))
7255 (native-inputs
7256 (list python-pynose
7257 gtk+
7258 xorg-server-for-tests
7259 dbus
7260 gsettings-desktop-schemas
7261 gobject-introspection
7262 python-setuptools))
7263 (home-page "https://gitlab.com/dogtail/dogtail/")
7264 (synopsis "GUI test tool and automation framework written in Python")
7265 (description
7266 "Dogtail is a GUI test tool and automation framework written in Python.
7267It uses Accessibility (a11y) technologies to communicate with desktop
7268applications. dogtail scripts are written in Python and executed like any
7269other Python program.")
7270 (license license:gpl2+)))
7271
7272(define-public python-doxyqml
7273 (package
7274 (name "python-doxyqml")
7275 (version "0.5.3")
7276 (source (origin
7277 (method url-fetch)
7278 (uri (pypi-uri "doxyqml" version))
7279 (sha256
7280 (base32
7281 "0skrs5i5pvpzvihgxw766zi1c9bbp33aisdldxgj470mlchvdgyy"))))
7282 (build-system pyproject-build-system)
7283 (arguments
7284 (list #:test-backend #~'custom
7285 #:test-flags #~(list "tests/functional/tests.py")))
7286 (native-inputs
7287 (list python-setuptools))
7288 (home-page "https://agateau.com/projects/doxyqml")
7289 (synopsis "Doxygen input filter for QML files")
7290 (description
7291 "This package provides a Doxygen input filter for QML files.")
7292 (license license:bsd-3)))
7293
7294(define-public python-doxypypy
7295 (package
7296 (name "python-doxypypy")
7297 (version "0.8.8.7")
7298 (source (origin
7299 (method url-fetch)
7300 (uri (pypi-uri "doxypypy" version))
7301 (sha256
7302 (base32
7303 "17nh5jjbxrg6ag0gymh8jsp75qnxwgv8fqbj4jlphywj0sxwh6k7"))))
7304 (build-system pyproject-build-system)
7305 (arguments
7306 (list
7307 #:test-flags
7308 #~(list "-k" (string-join
7309 ;; Test files are not in UTF-8 format and attmet to
7310 ;; substitute shebang fails, while tests fail with error:
7311 ;; AssertionError: "#!/bin/env python\n# UTF-32-LE Python
7312 ;; File w[387 chars]g.')" !=
7313 ;; "#!/gnu/store/y5vz9h983i8cg01cxz0zdywz715fxxs[449
7314 ;; chars]g.')"
7315 (list "not test_utf16be_bom"
7316 "test_utf16le_bom"
7317 "test_utf32be_bom"
7318 "test_utf32le_bom"
7319 "test_utf8_bom")
7320 " and not "))
7321 #:phases
7322 #~(modify-phases %standard-phases
7323 ;; compile-bytecode phases fails with error: SyntaxError: source
7324 ;; code string cannot contain null bytes.
7325 (add-after 'unpack 'fix-setup.py
7326 (lambda _
7327 (substitute* "setup.py"
7328 (("packages=.*") "packages=['doxypypy'],\n")))))))
7329 (native-inputs
7330 (list python-pytest
7331 python-setuptools
7332 python-wheel))
7333 (propagated-inputs
7334 (list python-chardet))
7335 (home-page "https://github.com/Feneric/doxypypy")
7336 (synopsis "Doxygen filter for Python")
7337 (description
7338 "This package provides a Doxygen filter for Python.")
7339 (license license:gpl2+)))
7340
7341(define-public python-empy
7342 (package
7343 (name "python-empy")
7344 (version "3.3.4")
7345 (source
7346 (origin
7347 (method url-fetch)
7348 (uri (string-append "http://www.alcyone.com/software/empy/empy-"
7349 version ".tar.gz"))
7350 (sha256
7351 (base32 "1cgikljjcqxgz168prpvb0bnirbdxf9wmgj0vlzzhzzwf4a229li"))))
7352 (build-system pyproject-build-system)
7353 (arguments
7354 (list
7355 #:phases
7356 #~(modify-phases %standard-phases
7357 (replace 'check
7358 (lambda* (#:key tests? #:allow-other-keys)
7359 (when tests?
7360 (invoke "./test.sh")))))))
7361 (native-inputs (list python-setuptools))
7362 (home-page "http://www.alcyone.com/software/empy/")
7363 (synopsis "Templating system for Python")
7364 (description
7365 "EmPy is a system for embedding Python expressions and statements in
7366template text; it takes an EmPy source file, processes it, and produces
7367output. This is accomplished via expansions, which are special signals to the
7368EmPy system and are set off by a special prefix (by default the at sign, @@).
7369EmPy can expand arbitrary Python expressions and statements in this way, as
7370well as a variety of special forms. Textual data not explicitly delimited in
7371this way is sent unaffected to the output, allowing Python to be used in
7372effect as a markup language. Also supported are callbacks via hooks,
7373recording and playback via diversions, and dynamic, chainable filters. The
7374system is highly configurable via command line options and embedded
7375commands.")
7376 (license license:lgpl2.1+)))
7377
7378(define-public python-palettable
7379 (package
7380 (name "python-palettable")
7381 (version "3.3.3")
7382 (source (origin
7383 (method url-fetch)
7384 (uri (pypi-uri "palettable" version))
7385 (sha256
7386 (base32
7387 "1a4h0jpsr3wjciqg9a5kslxv65d3qqgmqgkpai4cl77wlpcxfk89"))))
7388 (build-system pyproject-build-system)
7389 (native-inputs (list python-pytest python-setuptools python-wheel))
7390 (home-page "https://jiffyclub.github.io/palettable/")
7391 (synopsis "Color palettes for Python")
7392 (description "Palettable (formerly brewer2mpl) is a library of color
7393palettes for Python. It’s written in pure Python with no dependencies, but it
7394can supply color maps for matplotlib. You can use Palettable to customize
7395matplotlib plots or supply colors for a web application.")
7396 (license license:expat)))
7397
7398(define-public python-parse-type
7399 (package
7400 (name "python-parse-type")
7401 (version "0.6.6")
7402 (source
7403 (origin
7404 (method url-fetch)
7405 (uri (pypi-uri "parse_type" version))
7406 (sha256
7407 (base32
7408 "1cmzjw8gryc08lp9znaxrngl6csdifd3610fd46pffa82223ffji"))))
7409 (build-system pyproject-build-system)
7410 ;; tests: 332 passed, 2 skipped
7411 (native-inputs
7412 (list python-pytest
7413 python-pytest-html
7414 python-setuptools
7415 python-setuptools-scm))
7416 (propagated-inputs
7417 (list python-six ;hard dependency
7418 python-parse))
7419 (home-page "https://github.com/jenisys/parse_type")
7420 (synopsis "Extended parse module")
7421 (description "Parse_type extends the python parse module.")
7422 (license license:bsd-3)))
7423
7424(define-public python-parse
7425 (package
7426 (name "python-parse")
7427 (version "1.20.2")
7428 (source
7429 (origin
7430 (method git-fetch)
7431 (uri (git-reference
7432 (url "https://github.com/r1chardj0n3s/parse")
7433 (commit version)))
7434 (file-name (git-file-name name version))
7435 (sha256
7436 (base32 "0s3dgafh1mz8g32gwk5vp0azdq168yjhbg5liivapgkwyq9zgwcb"))))
7437 (build-system pyproject-build-system)
7438 (native-inputs (list python-pytest python-pytest-cov python-setuptools))
7439 (home-page "https://github.com/r1chardj0n3s/parse")
7440 (synopsis "Parse strings")
7441 (description
7442 "Parse strings using a specification based on the Python @code{format()}
7443syntax.")
7444 (license license:x11)))
7445
7446(define-public python-parsley
7447 (package
7448 (name "python-parsley")
7449 (version "1.3")
7450 (source (origin
7451 ;; The source distributed on PyPI is outdated.
7452 (method git-fetch)
7453 (uri (git-reference
7454 (url "https://github.com/pyga/parsley")
7455 (commit version)))
7456 (file-name (git-file-name name version))
7457 (sha256
7458 (base32
7459 "0550rw65ygqzbjc8a66hs355pzbx727kbn20dssdb6ls846gw2qs"))))
7460 (build-system pyproject-build-system)
7461 (arguments
7462 (list
7463 #:test-flags #~(list "ometa/test" "terml/test")))
7464 (native-inputs
7465 (list python-pytest
7466 python-twisted
7467 python-setuptools
7468 python-wheel))
7469 (home-page "https://launchpad.net/parsley")
7470 (synopsis "Parsing and pattern matching Python library")
7471 (description
7472 "Parsley is a parsing library using PEG algorithm, so each expression in
7473the grammar rules works like a Python expression. In particular, alternatives
7474are evaluated in order, unlike table-driven parsers such as yacc, bison or PLY.
7475Parsley is an implementation of OMeta, an object-oriented pattern-matching
7476language.")
7477 (license license:expat)))
7478
7479(define-public python-petl
7480 (package
7481 (name "python-petl")
7482 (version "1.7.16")
7483 (source
7484 (origin
7485 (method url-fetch)
7486 (uri (pypi-uri "petl" version))
7487 (sha256
7488 (base32 "0ll7xcc9yrvrz9p9im6m8p69cwrqwmqx91px43hlbnjrv1jflbww"))))
7489 (build-system pyproject-build-system)
7490 (native-inputs (list python-setuptools python-setuptools-scm python-wheel
7491 python-pytest))
7492 (home-page "https://github.com/petl-developers/petl")
7493 (synopsis "Framework for writing @acronym{ETL, Extract Transform Load} data
7494processing pipelines.")
7495 (description
7496 "This package provides a library for extracting, transforming and loading
7497tables of data. It can read from and write to databases or files in multiple
7498formats, including:
7499@itemize @bullet
7500@item python objects
7501@item delimited files
7502@item pickle files
7503@item text/XML/JSON/HTML files
7504@item python I/O streams
7505@item Excel XLS/XLSX files
7506@item HDF5 files
7507@end itemize")
7508 (license license:expat)))
7509
7510(define-public python-polib
7511 (package
7512 (name "python-polib")
7513 (version "1.2.0")
7514 (source
7515 (origin
7516 (method git-fetch)
7517 (uri (git-reference
7518 (url "https://github.com/izimobil/polib/")
7519 (commit version)))
7520 (file-name (git-file-name name version))
7521 (sha256
7522 (base32 "12n2skqj2qydcjp1r2ppzjcfc0fx4l23061x8bfqxx5pdvhnfpyb"))))
7523 (build-system pyproject-build-system)
7524 (arguments
7525 (list #:test-backend #~'custom
7526 #:test-flags #~(list "tests/tests.py")))
7527 (native-inputs (list python-setuptools))
7528 (home-page "https://github.com/izimobil/polib/")
7529 (synopsis "Manipulate, create and modify gettext files")
7530 (description
7531 "Polib can manipulate any gettext format (po, pot and mo) files. It can
7532be used to create po files from scratch or to modify existing ones.")
7533 (license license:expat)))
7534
7535(define-public python-polling2
7536 (package
7537 (name "python-polling2")
7538 (version "0.5.0")
7539 (source
7540 (origin
7541 (method git-fetch)
7542 (uri (git-reference
7543 (url "https://github.com/ddmee/polling2")
7544 (commit (string-append "v" version))))
7545 (file-name (git-file-name name version))
7546 (sha256
7547 (base32 "17q5nw9wab9p092r2bvmnk5nrzlwg5by6wf5wkbxnsz100nww7la"))))
7548 (build-system pyproject-build-system)
7549 (arguments
7550 ;; XXX: Additional , in string comparison.
7551 (list #:test-flags #~(list "-k" "not test_log_error_set_at_debug_level")))
7552 (native-inputs (list python-mock python-pytest python-setuptools))
7553 (home-page "https://github.com/ddmee/polling2")
7554 (synopsis "Polling utility with many configurable options")
7555 (description "Polling2 is a utility used to wait for a function to return
7556a certain expected condition.")
7557 (license license:expat)))
7558
7559(define-public python-daft
7560 (package
7561 (name "python-daft")
7562 (version "0.1.2")
7563 (source (origin
7564 (method url-fetch)
7565 (uri (pypi-uri "daft" version))
7566 (sha256
7567 (base32
7568 "1r8jsfavd624q2q61f863lk6has6mv5csswh39saafd5khwf0xry"))))
7569 (build-system pyproject-build-system)
7570 (arguments
7571 (list
7572 #:test-flags
7573 '(list "-k"
7574 (string-append
7575 ;; The following tests compare matplotlib output with
7576 ;; previously generated images. They fail due to minor
7577 ;; differences in where matplotlib places labels.
7578 "not test_bca[png]"
7579 " and not test_classic[png]"
7580 " and not test_deconvolution[png]"
7581 " and not test_exoplanets[png]"
7582 " and not test_fixed[png]"
7583 " and not test_gaia[png]"
7584 " and not test_galex[png]"
7585 " and not test_huey_p_newton[png]"
7586 " and not test_logo[png]"
7587 " and not test_no_circles[png]"
7588 " and not test_no_gray[png]"
7589 " and not test_recursive[png]"
7590 " and not test_thick_lines[png]"
7591 " and not test_weaklensing[png]"
7592 " and not test_wordy[png]"))))
7593 (native-inputs
7594 (list python-pytest
7595 python-setuptools
7596 python-wheel))
7597 (propagated-inputs (list python-matplotlib python-numpy))
7598 (home-page "https://docs.daft-pgm.org/")
7599 (synopsis "PGM rendering library")
7600 (description "Daft is a Python package that uses matplotlib to
7601render pixel-perfect probabilistic graphical models for publication in
7602a journal or on the internet. With a short Python script and an
7603intuitive model-building syntax you can design directed (Bayesian
7604Networks, directed acyclic graphs) and undirected (Markov random fields)
7605models and save them in any formats that matplotlib supports (including
7606PDF, PNG, EPS and SVG).")
7607 (license license:expat)))
7608
7609(define-public python-portalocker
7610 (package
7611 (name "python-portalocker")
7612 (version "2.7.0")
7613 (source (origin
7614 (method url-fetch)
7615 (uri (pypi-uri "portalocker" version))
7616 (sha256
7617 (base32
7618 "0lawjm736vs86wlnxc3qqh37l11z0yx81xq3dmrw33m86kaq2bh3"))))
7619 (build-system pyproject-build-system)
7620 (native-inputs (list python-pytest
7621 python-pytest-cov
7622 python-pytest-mypy
7623 python-pytest-timeout
7624 python-redis
7625 python-setuptools
7626 python-wheel))
7627 (home-page "https://github.com/WoLpH/portalocker")
7628 (synopsis "Python library for file locking")
7629 (description "Portalocker is a library to provide an easy API to file
7630locking..")
7631 (license license:bsd-3)))
7632
7633(define-public python-poyo
7634 (package
7635 (name "python-poyo")
7636 (version "0.5.0")
7637 (source
7638 (origin
7639 (method url-fetch)
7640 (uri (pypi-uri "poyo" version))
7641 (sha256
7642 (base32
7643 "1pflivs6j22frz0v3dqxnvc8yb8fb52g11lqr88z0i8cg2m5csg2"))))
7644 (build-system pyproject-build-system)
7645 (native-inputs
7646 (list python-pytest python-setuptools))
7647 (home-page "https://github.com/hackebrot/poyo")
7648 (synopsis "Lightweight YAML Parser for Python")
7649 (description
7650 "This package provides a lightweight YAML Parser for Python. It supports
7651only a chosen subset of the YAML format that is required to parse cookiecutter
7652user configuration files. It does not have support for serializing into YAML
7653and is not compatible with JSON.")
7654 (license license:expat)))
7655
7656(define-public python-expandvars
7657 (package
7658 (name "python-expandvars")
7659 (version "0.12.0")
7660 (source
7661 (origin
7662 (method url-fetch)
7663 (uri (pypi-uri "expandvars" version))
7664 (sha256
7665 (base32 "0i6q4i8dzsax85w1l2hc7saymyh3fw43vkifh5flpkr8ayjxy6kx"))))
7666 (build-system pyproject-build-system)
7667 (native-inputs
7668 (list python-hatchling python-pytest))
7669 (home-page "https://pypi.org/project/expandvars/")
7670 (synopsis "Expand system variables Unix style")
7671 (description "This module is inspired by GNU bash's variable expansion
7672features. It can be used as an alternative to Python's
7673@code{os.path.expandvars} function. A good use case is reading config files
7674with the flexibility of reading values from environment variables using
7675advanced features like returning a default value if some variable is not
7676defined.")
7677 (license license:expat)))
7678
7679(define-public python-extension-helpers
7680 (package
7681 (name "python-extension-helpers")
7682 (version "1.4.0")
7683 (source
7684 (origin
7685 (method git-fetch) ; no tests in the PyPI tarball
7686 (uri (git-reference
7687 (url "https://github.com/astropy/extension-helpers")
7688 (commit (string-append "v" version))))
7689 (file-name (git-file-name name version))
7690 (sha256
7691 (base32 "0ljvfv9p7jay4j31awx1h714xhyn5hbfgyhn4nm71xrkz9la113j"))))
7692 (build-system pyproject-build-system)
7693 (arguments
7694 (list
7695 #:test-flags
7696 #~(list "--pyargs" "extension_helpers"
7697 "-k" (string-join
7698 ;; XXX: Tests try to check various compilation options and
7699 ;; fail with some incomparability or trying to download
7700 ;; missing modules.
7701 (list "not test_only_pyproject"
7702 "test_no_setup_py"
7703 "test_limited_api")
7704 " and not "))
7705 #:phases
7706 #~(modify-phases %standard-phases
7707 ;; LookupError: setuptools-scm was unable to detect version for
7708 ;; /tmp/guix-build-python-extension-helpers-1.2.0.drv-0/source.
7709 (add-before 'build 'set-version
7710 (lambda _
7711 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
7712 (native-inputs
7713 (list python-pytest
7714 python-setuptools-scm))
7715 (propagated-inputs
7716 (list python-setuptools))
7717 (home-page "https://extension-helpers.readthedocs.io")
7718 (synopsis "Astropy ecosystem utilities for building and installing packages")
7719 (description
7720 "The extension-helpers package includes convenience helpers to assist
7721with building Python packages with compiled C/Cython extensions. It is
7722developed by the Astropy project but is intended to be general and usable by
7723any Python package.")
7724 (license license:bsd-3)))
7725
7726(define-public python-milc
7727 (package
7728 (name "python-milc")
7729 (version "1.9.1")
7730 (source
7731 (origin
7732 (method git-fetch) ;no tests in PyPI archive
7733 (uri (git-reference
7734 (url "https://github.com/clueboard/milc")
7735 (commit version)))
7736 (file-name (git-file-name name version))
7737 (sha256
7738 (base32 "0ms9ks0xn1ikd48352bifnbfahfnw3gh4qs1ckmmwbpiq2czca3g"))))
7739 (build-system pyproject-build-system)
7740 (native-inputs
7741 (list python-pytest
7742 python-semver
7743 python-setuptools))
7744 (propagated-inputs
7745 (list python-argcomplete
7746 python-colorama
7747 python-halo
7748 python-platformdirs
7749 python-spinners
7750 python-types-colorama))
7751 (home-page "https://github.com/clueboard/milc")
7752 (synopsis "Python library for command line interface programs")
7753 (description "MILC is a Python library for developing command line
7754interface programs. This library provides features to parse arguments,
7755automatic tab-completion, color support, logging to @code{std}, etc.")
7756 (license license:expat)))
7757
7758(define-public python-extract-dtb
7759 (package
7760 (name "python-extract-dtb")
7761 (version "1.2.3")
7762 (source
7763 (origin
7764 (method git-fetch)
7765 (uri (git-reference
7766 (url "https://github.com/PabloCastellano/extract-dtb/")
7767 (commit version)))
7768 (file-name (git-file-name name version))
7769 (sha256
7770 (base32
7771 "1kkfy8sh6bhh1w5lczaw1nym278q5xp5pxjaahwrl3zfddhdm655"))))
7772 (build-system pyproject-build-system)
7773 (arguments
7774 (list #:tests? #f)) ;no tests
7775 (native-inputs
7776 (list python-setuptools))
7777 (home-page "https://github.com/PabloCastellano/extract-dtb/")
7778 (synopsis "Extract device tree blobs (DTB) from kernel images")
7779 (description
7780 "This package provides a tool to split a kernel image with appended
7781@acronym{DTB, Device Tree Blobs} into separated kernel and DTB files.")
7782 (license license:gpl3+)))
7783
7784(define-public python-mimeparse
7785 (package
7786 (name "python-mimeparse")
7787 (version "2.0.0")
7788 (source
7789 (origin
7790 (method url-fetch)
7791 (uri (pypi-uri "python_mimeparse" version))
7792 (sha256
7793 (base32 "00xk5jir6dm4r3qm8dg8vh8lhq00f35zaryn3gina958gb7rv6jv"))))
7794 (build-system pyproject-build-system)
7795 (native-inputs
7796 (list python-pytest
7797 python-setuptools))
7798 (home-page "https://github.com/falconry/python-mimeparse")
7799 (synopsis "Python library for parsing MIME types")
7800 (description
7801 "Mimeparse provides basic functions for parsing MIME type names and
7802matching them against a list of media-ranges.")
7803 (license license:expat)))
7804
7805(define-public python-miniboa
7806 (package
7807 (name "python-miniboa")
7808 (version "1.0.9")
7809 (source
7810 (origin
7811 (method git-fetch) ;no tests in PyPI archive
7812 (uri (git-reference
7813 (url "https://github.com/shmup/miniboa")
7814 (commit (string-append "v" version))))
7815 (file-name (git-file-name name version))
7816 (sha256
7817 (base32 "05xa44x61bia2pxjdncz6rj10js8hgp2a9hf56avbfk7g58n3v5y"))))
7818 (build-system pyproject-build-system)
7819 (native-inputs
7820 (list python-pytest
7821 python-setuptools
7822 python-wheel))
7823 (home-page "https://github.com/shmup/miniboa")
7824 (synopsis "Simple, single-threaded Telnet server")
7825 (description
7826 "Miniboa is a simple, asynchronous, single-threaded, poll-based Telnet
7827server.")
7828 (license license:asl2.0)))
7829
7830(define-public python-mir-eval
7831 (package
7832 (name "python-mir-eval")
7833 (version "0.8.2")
7834 (source (origin
7835 (method git-fetch)
7836 (uri (git-reference
7837 (url "https://github.com/mir-evaluation/mir_eval")
7838 (commit version)))
7839 (file-name (git-file-name name version))
7840 (sha256
7841 (base32
7842 "0mna57q2r0cjsvgz67v6bay1c6a33wl33yna9s083wfqhjmf9bqf"))))
7843 (build-system pyproject-build-system)
7844 (arguments
7845 (list
7846 #:phases
7847 #~(modify-phases %standard-phases
7848 (add-before 'check 'cd-tests
7849 (lambda _
7850 ;; Move to 'tests' directory because tests read data files from
7851 ;; a relative path.
7852 (chdir "tests"))))))
7853 (propagated-inputs (list python-decorator python-numpy python-scipy))
7854 (native-inputs (list python-matplotlib
7855 python-pytest
7856 python-pytest-cov ; used by default
7857 python-pytest-mpl
7858 python-setuptools
7859 python-wheel))
7860 (home-page "https://github.com/mir-evaluation/mir_eval")
7861 (synopsis "Common metrics for common audio/music processing tasks")
7862 (description "This is a Python library for computing common heuristic
7863accuracy scores for various music/audio information retrieval/signal
7864processing tasks.")
7865 (license license:expat)))
7866
7867(define-public python-mizani
7868 (package
7869 (name "python-mizani")
7870 (version "0.13.1")
7871 (source (origin
7872 (method git-fetch)
7873 (uri (git-reference
7874 (url "https://github.com/has2k1/mizani")
7875 (commit (string-append "v" version))))
7876 (file-name (git-file-name name version))
7877 (sha256
7878 (base32
7879 "0ij0fk4w0jyyj44ij3i2j1nfa0d7dk783w9r25cpwjkpn690xqfx"))))
7880 (build-system pyproject-build-system)
7881 (arguments
7882 (list
7883 #:phases
7884 #~(modify-phases %standard-phases
7885 (add-before 'build 'pretend-version
7886 ;; The version string is usually derived via setuptools-scm, but
7887 ;; without the git metadata available, the version string is set to
7888 ;; '999'.
7889 (lambda _
7890 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
7891 (propagated-inputs
7892 (list python-matplotlib python-numpy python-pandas python-scipy))
7893 (native-inputs
7894 (list python-setuptools python-setuptools-scm
7895 python-pytest python-pytest-cov python-wheel tzdata))
7896 (home-page "https://github.com/has2k1/mizani")
7897 (synopsis "Create data visualizations in Python")
7898 (description
7899 "Mizani is a Python package for creating data visualizations. It
7900provides functions and tools to help with the creation of visually appealing
7901and informative visualizations, including scales, transformations and color
7902palettes.")
7903 (license license:bsd-3)))
7904
7905(define-public python-miniupnpc
7906 (package
7907 (name "python-miniupnpc")
7908 (version "2.3.3")
7909 (source
7910 (origin
7911 (method git-fetch)
7912 (uri
7913 (git-reference
7914 ;; The project tags miniupnpd_ as well but with a different version,
7915 ;; where updater may select a wrong version.
7916 (url "https://github.com/miniupnp/miniupnp")
7917 (commit
7918 (string-append
7919 "miniupnpc_" (string-replace-substring version "." "_")))))
7920 (file-name
7921 (git-file-name name version))
7922 (sha256
7923 (base32 "0ysvx21iaq7f505fpnk3280rwnckr0aih0j5j3v82nv99a2rqigh"))))
7924 (build-system pyproject-build-system)
7925 (arguments
7926 (list
7927 #:phases
7928 #~(modify-phases %standard-phases
7929 (add-after 'unpack 'subdir
7930 (lambda* (#:key inputs #:allow-other-keys)
7931 (chdir "miniupnpc")
7932 (setenv "CC" #$(cc-for-target))
7933 (substitute* "Makefile"
7934 (("/bin/sh") (search-input-file inputs "/bin/sh")))))
7935 (add-before 'subdir 'remove-kernel-version
7936 ;; Avoid embedding the running kernel version for reproducible builds
7937 (lambda _
7938 (substitute*
7939 "miniupnpc/updateminiupnpcstrings.sh"
7940 (("^OS_VERSION=`uname -r`") "OS_VERSION=Guix"))))
7941 (replace 'check
7942 (lambda* (#:key tests? #:allow-other-keys)
7943 (when tests?
7944 (invoke "make" "check")))))))
7945 (native-inputs
7946 (list python-setuptools
7947 python-wheel))
7948 (inputs (list python)) ;we are building a Python extension
7949 (synopsis "UPnP client for Python")
7950 (description "Miniupnpc is a client library for Python programs to set up
7951port forwards using @acronym{UPnP, Universal Plug and Play}.")
7952 (home-page "http://miniupnp.free.fr")
7953 (license license:bsd-3)))
7954
7955;; NOTE: As taken from upstram: "this library is in maintenance mode and
7956;; should not be used in new code."
7957(define-public python-py
7958 (package
7959 (name "python-py")
7960 (version "1.11.0")
7961 (source
7962 (origin
7963 (method url-fetch)
7964 (uri (pypi-uri "py" version))
7965 (sha256
7966 (base32
7967 "06c7m7sfcn7587xd4s2bng8m6q1gsfd3j93afhplfjq74r0mrisi"))))
7968 (build-system pyproject-build-system)
7969 (arguments
7970 '(#:tests? #f)) ;cycle with python-pytest
7971 (native-inputs
7972 (list python-setuptools
7973 python-setuptools-scm
7974 python-wheel))
7975 (home-page "https://github.com/pytest-dev/py")
7976 (synopsis "Python library for parsing, I/O, introspection, and logging")
7977 (description
7978 "Py is a Python library for file name parsing, .ini file parsing, I/O,
7979code introspection, and logging.")
7980 (license license:expat)))
7981
7982(define-public python-pyrsistent
7983 (package
7984 (name "python-pyrsistent")
7985 (version "0.20.0")
7986 (home-page "https://github.com/tobgu/pyrsistent")
7987 (source (origin
7988 (method url-fetch)
7989 (uri (pypi-uri "pyrsistent" version))
7990 (sha256
7991 (base32
7992 "1935ybwdxszmzlzshwkc7m7swm1js46ls246j1knqndbca7zfj2c"))))
7993 (build-system pyproject-build-system)
7994 (native-inputs
7995 (list python-pytest python-setuptools python-wheel))
7996 (synopsis "Persistent data structures for Python")
7997 (description
7998 "Pyrsistent is a number of persistent collections (by some referred to as
7999functional data structures). Persistent in the sense that they are immutable.
8000
8001All methods on a data structure that would normally mutate it instead return a
8002new copy of the structure containing the requested updates. The original
8003structure is left untouched.")
8004 (license license:expat)))
8005
8006(define-public python-exif-read
8007 (package
8008 (name "python-exif-read")
8009 (version "3.3.2")
8010 (source
8011 (origin
8012 (method git-fetch) ;PyPI doesn't contain the test images
8013 (uri (git-reference
8014 (url "https://github.com/ianare/exif-py")
8015 (commit version)))
8016 (file-name (git-file-name name version))
8017 (sha256
8018 (base32 "0igvqhalrllidyccy7rlqbhx277rv7mf6bf0w6xjr0dj2dk3jw76"))))
8019 (build-system pyproject-build-system)
8020 (native-inputs (list python-pytest python-setuptools python-wheel))
8021 (home-page "https://github.com/ianare/exif-py")
8022 (synopsis "Python library to extract EXIF data from image files")
8023 (description
8024 "ExifRead is a Python library to extract EXIF data from tiff and jpeg
8025files.")
8026 (license license:bsd-3)))
8027
8028(define-public python-pyld
8029 (package
8030 (name "python-pyld")
8031 (version "2.0.4")
8032 (source
8033 (origin
8034 (method git-fetch)
8035 (uri (git-reference
8036 (url "https://github.com/digitalbazaar/pyld")
8037 ;; Not all tags have the 'v' prefix.
8038 (commit (string-append "v" version))))
8039 (file-name (git-file-name name version))
8040 (sha256
8041 (base32 "12lb4vk7m5y5943fm4r8hixdvlxh6qm21pbv7aalsbpfw8cc18sw"))))
8042 (build-system pyproject-build-system)
8043 (arguments
8044 ;; TODO: Commit history shows next version (>2.0.4) will have pytest tests.
8045 (list #:tests? #f))
8046 (native-inputs
8047 (list python-lxml
8048 python-setuptools))
8049 (propagated-inputs
8050 (list python-aiohttp
8051 python-cachetools
8052 python-frozendict
8053 python-requests))
8054 (home-page "https://github.com/digitalbazaar/pyld")
8055 (synopsis "Python implementation of the JSON-LD specification")
8056 (description "PyLD is an implementation of the JSON-LD specification.")
8057 (license license:bsd-3)))
8058
8059(define-public python-cli-helpers
8060 (package
8061 (name "python-cli-helpers")
8062 (version "2.7.0")
8063 (source
8064 (origin
8065 (method url-fetch)
8066 (uri (pypi-uri "cli_helpers" version))
8067 (sha256
8068 (base32 "1h4b0ka9nh9qidl6s1ard1ixh9c3d0ai5ph3013grhpbvc81glb2"))))
8069 (build-system pyproject-build-system)
8070 (native-inputs
8071 (list python-pytest
8072 python-setuptools))
8073 (propagated-inputs
8074 (list python-configobj
8075 python-tabulate))
8076 (home-page "https://github.com/dbcli/cli_helpers")
8077 (synopsis "Helpers for building command-line apps")
8078 (description
8079 "CLI Helpers is a Python package that makes it easy to perform common
8080tasks when building command-line apps. It's a helper library for command-line
8081interfaces.")
8082 (license license:bsd-3)))
8083
8084(define-public python-click
8085 (package
8086 (name "python-click")
8087 (version "8.1.8")
8088 (source
8089 (origin
8090 (method git-fetch)
8091 (uri (git-reference
8092 (url "https://github.com/pallets/click")
8093 (commit version)))
8094 (file-name (git-file-name name version))
8095 (sha256
8096 (base32 "1wqkkim5gmhdrc62c79s5gbzz2x60l1bf9aacpakfv6rr1zjl054"))))
8097 (build-system pyproject-build-system)
8098 (native-inputs
8099 (list less
8100 python-flit-core
8101 python-pytest))
8102 (home-page "https://palletsprojects.com/p/click/")
8103 (synopsis "Command line library for Python")
8104 (description
8105 "Click is a Python package for creating command line interfaces in a
8106composable way with as little code as necessary. Its name stands for
8107\"Command Line Interface Creation Kit\". It's highly configurable but comes
8108with sensible defaults out of the box.")
8109 (license license:bsd-3)))
8110
8111(define-public python-click-7
8112 (package (inherit python-click)
8113 (name "python-click")
8114 (version "7.1.2")
8115 (source
8116 (origin
8117 (method url-fetch)
8118 (uri (pypi-uri "click" version))
8119 (sha256
8120 (base32 "06kbzd6sjfkqan3miwj9wqyddfxc2b6hi7p5s4dvqjb3gif2bdfj"))))
8121 (arguments (list #:tests? #f)) ;no tests in PyPI
8122 (native-inputs
8123 (list python-setuptools))))
8124
8125(define-public python-clickgen
8126 (package
8127 (name "python-clickgen")
8128 (version "2.2.5")
8129 (source (origin
8130 (method git-fetch)
8131 (uri (git-reference
8132 (url "https://github.com/ful1e5/clickgen")
8133 (commit (string-append "v" version))))
8134 (file-name (git-file-name name version))
8135 (sha256
8136 (base32
8137 "0gdbkdw9b52wbb0bbhs09bdfyfq979kvlv5sg5p70y3jal9j8lf8"))))
8138 (build-system pyproject-build-system)
8139 (arguments
8140 (list
8141 #:test-flags
8142 ;; XXX: See: <https://github.com/ful1e5/clickgen/issues/65>.
8143 '(list "-k" "not test_clickgen_raises")))
8144 (native-inputs
8145 (list python-pytest
8146 python-setuptools))
8147 (propagated-inputs
8148 (list python-attrs
8149 python-numpy
8150 python-pillow
8151 python-pyyaml
8152 python-toml))
8153 (home-page "https://github.com/ful1e5/clickgen")
8154 (synopsis "The hassle-free cursor building toolbox")
8155 (description
8156 "Clickgen is an API for building X11 and Windows cursors from .png files.
8157clickgen is using @code{anicursorgen} and @code{xcursorgen} under the hood.")
8158 (license license:expat)))
8159
8160(define-public python-clickhouse-connect
8161 (package
8162 (name "python-clickhouse-connect")
8163 (version "0.6.1")
8164 (source (origin
8165 (method git-fetch)
8166 (uri (git-reference
8167 (url "https://github.com/ClickHouse/clickhouse-connect")
8168 (commit (string-append "v" version))))
8169 (file-name (git-file-name name version))
8170 (sha256
8171 (base32
8172 "1s0lk7xdq8f351cmpbp6jidqi5zdazrdba7w7fxph0w8sd74amry"))))
8173 (build-system pyproject-build-system)
8174 (arguments
8175 (list
8176 #:test-flags
8177 ;; All these tests require docker-compose
8178 '(list "--ignore-glob=tests/integration_tests/*")
8179 #:phases
8180 '(modify-phases %standard-phases
8181 (add-after 'unpack 'patch-pyproject
8182 (lambda _
8183 ;; Our version of pytest is confused by this field.
8184 (substitute* "pyproject.toml"
8185 (("^env_files.*") ""))))
8186 (add-before 'check 'build-extensions
8187 (lambda _
8188 ;; Cython extensions have to be built before running the tests.
8189 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
8190 (propagated-inputs
8191 (list python-arrow
8192 python-certifi
8193 python-lz4
8194 python-numpy
8195 python-orjson
8196 python-pandas
8197 python-pytz
8198 python-setuptools ; For pkg_resources.
8199 python-sqlalchemy
8200 python-urllib3
8201 python-zstandard))
8202 (native-inputs
8203 (list python-cython
8204 python-pytest
8205 python-wheel))
8206 (home-page "https://github.com/ClickHouse/clickhouse-connect")
8207 (synopsis
8208 "ClickHouse database core driver for Python, Pandas, and Superset")
8209 (description
8210 "This package provides a high performance core database driver for
8211connecting ClickHouse to Python, Pandas, and Superset.")
8212 (license license:asl2.0)))
8213
8214(define-public python-cligj
8215 (package
8216 (name "python-cligj")
8217 (version "0.7.2")
8218 (source
8219 (origin
8220 (method url-fetch)
8221 (uri (pypi-uri "cligj" version))
8222 (sha256
8223 (base32
8224 "09vbkik6kyn6yrqzl2r74vaybjk8kjykvi975hy3fsrm4gb17g54"))))
8225 (build-system pyproject-build-system)
8226 (native-inputs
8227 (list python-pytest
8228 python-setuptools))
8229 (propagated-inputs
8230 (list python-click))
8231 (home-page "https://github.com/mapbox/cligj")
8232 (synopsis "Click params for command line interfaces to GeoJSON")
8233 (description
8234 "cligj is for Python developers who create command line interfaces
8235for geospatial data. cligj allows you to quickly build consistent,
8236well-tested and interoperable CLIs for handling GeoJSON.")
8237 (license license:bsd-3)))
8238
8239(define-public python-cloup
8240 (package
8241 (name "python-cloup")
8242 (version "2.1.1")
8243 (source (origin
8244 (method url-fetch)
8245 (uri (pypi-uri "cloup" version))
8246 (sha256
8247 (base32
8248 "05c6cjpnf9s72gyn5dckxbmd8rf2kgdzfsl7pqzrnc1lcdl13zmv"))))
8249 (build-system pyproject-build-system)
8250 (propagated-inputs (list python-click))
8251 (native-inputs (list python-pytest python-setuptools python-wheel))
8252 (home-page "https://github.com/janLuke/cloup")
8253 (synopsis "Extension library for python-click")
8254 (description
8255 "Cloup enriches Click with several features that make it more expressive
8256and configurable such as option groups, constraints, subcommand aliases,
8257subcommands sections and a themeable HelpFormatter.")
8258 (license license:bsd-3)))
8259
8260(define-public python-jsondiff
8261 (package
8262 (name "python-jsondiff")
8263 (version "2.2.1")
8264 (source
8265 (origin
8266 (method url-fetch)
8267 (uri (pypi-uri "jsondiff" version))
8268 (sha256
8269 (base32
8270 "1zpp8l2ii9ic1sk6kdcqxk0v5q9pgdmdhg1h4vg8dfl6i8n1d3b5"))))
8271 (build-system pyproject-build-system)
8272 (arguments
8273 (list
8274 #:phases
8275 #~(modify-phases %standard-phases
8276 (add-before 'build 'set-version
8277 (lambda _
8278 (substitute* "pyproject.toml"
8279 (("^version_file.*") "")
8280 (("dynamic = \\[\"version\"\\]")
8281 (string-append "version = \"" #$version "\""))))))))
8282 (propagated-inputs (list python-pyyaml))
8283 (native-inputs
8284 (list python-hypothesis
8285 python-pytest
8286 python-setuptools
8287 python-setuptools-scm
8288 python-wheel))
8289 (home-page "https://github.com/fzumstein/jsondiff")
8290 (synopsis "Compare JSON and JSON-like structures in Python")
8291 (description "@code{jsondiff} is a Python library which lets you compare,
8292diff, and patch JSON and JSON-like structures in Python.")
8293 (license license:expat)))
8294
8295(define-public python-ddlparse
8296 (package
8297 (name "python-ddlparse")
8298 (version "1.10.0")
8299 (source
8300 (origin
8301 (method url-fetch)
8302 (uri (pypi-uri "ddlparse" version))
8303 (sha256
8304 (base32 "1nh8m6rxslwk05daxshxmgk41qfp18yynydba49b13l4m8dnh634"))))
8305 (build-system pyproject-build-system)
8306 (native-inputs
8307 (list python-pytest
8308 python-pytest-cov
8309 python-setuptools))
8310 (propagated-inputs (list python-pyparsing))
8311 (home-page "https://github.com/shinichi-takii/ddlparse")
8312 (synopsis "Parses and converts DDL to BigQuery JSON schema")
8313 (description "This package provides @code{ddlparse}, a Python library to parse
8314and convert DDL to BigQuery JSON schema.")
8315 (license license:bsd-3)))
8316
8317(define-public python-jsonschema
8318 (package
8319 (name "python-jsonschema")
8320 (version "4.23.0")
8321 (source
8322 (origin
8323 (method url-fetch)
8324 (uri (pypi-uri "jsonschema" version))
8325 (sha256
8326 (base32 "1i3b4sckkc3v8vckqa11xbrj695qzrzsfzrkclra6lb3ybz9f56p"))))
8327 (build-system pyproject-build-system)
8328 (arguments
8329 (list
8330 #:phases
8331 #~(modify-phases %standard-phases
8332 (add-before 'check 'pre-check
8333 (lambda _
8334 (setenv "JSON_SCHEMA_TEST_SUITE" "json"))))))
8335 (native-inputs
8336 (list python-hatchling
8337 python-hatch-fancy-pypi-readme
8338 python-hatch-vcs
8339 ;; For <tests/test_cli.py::TestCLIIntegration::test_license>.
8340 python-pip
8341 python-pytest))
8342 (propagated-inputs
8343 (list python-attrs
8344 python-fqdn
8345 python-idna
8346 python-importlib-resources
8347 python-isoduration
8348 python-jsonpointer
8349 python-jsonschema-specifications
8350 python-rfc3339-validator
8351 python-rfc3986-validator
8352 python-referencing-bootstrap
8353 python-rpds-py
8354 python-uri-template
8355 python-webcolors))
8356 (home-page "https://github.com/Julian/jsonschema")
8357 (synopsis "Implementation of JSON Schema for Python")
8358 (description
8359 "Jsonschema is an implementation of JSON Schema for Python.")
8360 (license license:expat)))
8361
8362;; For docker-compose 1.29.2, remove when its updated to the latest 2.x
8363;; version.
8364(define-public python-jsonschema-3
8365 (package
8366 (inherit python-jsonschema)
8367 (version "3.2.0")
8368 (source (origin
8369 (method url-fetch)
8370 (uri (pypi-uri "jsonschema" version))
8371 (sha256
8372 (base32
8373 "0ykr61yiiizgvm3bzipa3l73rvj49wmrybbfwhvpgk3pscl5pa68"))))
8374 (arguments
8375 (substitute-keyword-arguments (package-arguments python-jsonschema)
8376 ((#:tests? _ #t) #f)))
8377 (propagated-inputs
8378 (list python-attrs
8379 python-importlib-metadata
8380 python-pyrsistent
8381 python-typing-extensions))
8382 (native-inputs
8383 (list python-setuptools-scm python-twisted
8384 python-setuptools python-wheel))))
8385
8386(define-public python-jsonschema-path
8387 (package
8388 (name "python-jsonschema-path")
8389 (version "0.3.2")
8390 (source
8391 (origin
8392 (method url-fetch)
8393 (uri (pypi-uri "jsonschema_path" version))
8394 (sha256
8395 (base32 "129rb8y2bj2wwps8vs3z1qav006k7wz2myx5j6dnxqs1yfmsn3ad"))))
8396 (build-system pyproject-build-system)
8397 (arguments
8398 (list
8399 #:tests? #false ;there are none
8400 #:phases
8401 '(modify-phases %standard-phases
8402 (add-after 'unpack 'relax-requirements
8403 (lambda _
8404 (substitute* "pyproject.toml"
8405 (("referencing = \">=0.28.0,<0.32.0\"")
8406 "referencing = \">=0.28.0\"")))))))
8407 (propagated-inputs (list python-pathable python-pyyaml python-referencing
8408 python-requests))
8409 (native-inputs (list python-poetry-core))
8410 (home-page "https://github.com/p1c2u/jsonschema-path")
8411 (synopsis "JSONSchema Spec with object-oriented paths")
8412 (description "This package implements object-oriented JSONSchema. It lets
8413you traverse a schema like paths and access a schema on demand with separate
8414dereferencing accessor layer.")
8415 (license license:asl2.0)))
8416
8417(define-public python-jsonschema-objects
8418 (package
8419 (name "python-jsonschema-objects")
8420 (version "0.5.7")
8421 (source
8422 (origin
8423 (method git-fetch)
8424 (uri (git-reference
8425 (url "https://github.com/cwacek/python-jsonschema-objects/")
8426 (commit version)))
8427 (file-name (git-file-name name version))
8428 (sha256
8429 (base32 "0p3m0fbj25brhfma4bl47xjq6x4ay14yx284qwrki96dwd6v46xd"))))
8430 (build-system pyproject-build-system)
8431 (native-inputs
8432 (list python-pytest
8433 python-pytest-mock
8434 python-setuptools))
8435 (propagated-inputs
8436 (list python-inflection
8437 python-jsonschema
8438 python-markdown))
8439 (home-page "http://python-jsonschema-objects.readthedocs.org/")
8440 (synopsis "Automatic Python binding generation from JSON schemas")
8441 (description
8442 "This package provides an automatic class-based binding to JSON
8443Schemas for use in python.")
8444 (license license:expat)))
8445
8446(define-public python-jsonschema-specifications
8447 (package
8448 (name "python-jsonschema-specifications")
8449 (version "2024.10.1")
8450 (source
8451 (origin
8452 (method url-fetch)
8453 (uri (pypi-uri "jsonschema_specifications" version))
8454 (sha256
8455 (base32 "0wp2g90jsaa48g1v0n6m43ywhh9cj1ig19q25lay334m74vbhf0g"))))
8456 (build-system pyproject-build-system)
8457 (native-inputs
8458 (list python-hatch-vcs
8459 python-hatchling
8460 python-pytest))
8461 (propagated-inputs
8462 (list python-importlib-resources
8463 python-referencing-bootstrap))
8464 (home-page "https://github.com/python-jsonschema/jsonschema-specifications")
8465 (synopsis
8466 "JSON Schema meta-schemas and vocabularies, exposed as a Registry")
8467 (description
8468 "This package provides JSON support files from the JSON Schema
8469Specifications (metaschemas, vocabularies, etc.), packaged for runtime access
8470from Python as a referencing-based Schema Registry.")
8471 (license license:expat)))
8472
8473(define-public python-schema
8474 (package
8475 (name "python-schema")
8476 (version "0.7.7")
8477 (source
8478 (origin
8479 (method url-fetch)
8480 (uri (pypi-uri "schema" version))
8481 (sha256
8482 (base32
8483 "01qq1amzbjm1kvjrnnhpjs8v761kwp6qihs74pf1k2lmsamm79bx"))))
8484 (build-system pyproject-build-system)
8485 (native-inputs
8486 (list python-pytest
8487 python-setuptools
8488 python-wheel))
8489 (home-page "https://github.com/keleshev/schema")
8490 (synopsis "Simple data validation library")
8491 (description
8492 "@code{python-schema} is a library for validating Python data
8493structures, such as those obtained from config-files, forms, external
8494services or command-line parsing, converted from JSON/YAML (or
8495something else) to Python data-types.")
8496 (license license:psfl)))
8497
8498;; It may be removed after 2025-11-29.
8499(define-deprecated/public-alias python-schema-0.5 python-schema)
8500
8501(define-public python-kitchen
8502 (package
8503 (name "python-kitchen")
8504 (version "1.2.6")
8505 (source
8506 (origin
8507 (method git-fetch)
8508 (uri (git-reference
8509 (url "https://github.com/fedora-infra/kitchen")
8510 (commit version)))
8511 (file-name (git-file-name name version))
8512 (sha256
8513 (base32 "1wf2m4yx5467vxg4scgzihb0q9q3k7fasgxanhrnxpp1a5l8l93n"))))
8514 (build-system pyproject-build-system)
8515 (arguments
8516 (list
8517 #:test-flags
8518 #~(list "kitchen3"
8519 ;; XXX: Unclear why these tests fail.
8520 "-e" "test_invalid_fallback_no_raise"
8521 "-e" "test_internal_generate_combining_table"
8522 "-e" "test_lgettext"
8523 "-e" "test_lngettext"
8524 "-e" "test_easy_gettext_setup_non_unicode")
8525 #:phases
8526 #~(modify-phases %standard-phases
8527 (add-before 'check 'delete-broken-test-files
8528 (lambda _
8529 (delete-file "kitchen3/tests/test__all__.py")
8530 (delete-file "kitchen3/tests/test_deprecation_py3.py"))))))
8531 (native-inputs (list python-pynose python-setuptools))
8532 (home-page "https://github.com/fedora-infra/kitchen")
8533 (synopsis "Python API for snippets")
8534 (description
8535 "@code{kitchen} module provides a python API for all sorts of little
8536useful snippets of code that everybody ends up writing for their projects but
8537never seem big enough to build an independent release. Use kitchen and stop
8538cutting and pasting that code over and over.")
8539 (license (list license:lgpl2.1+
8540 ;; subprocess.py, test_subprocess.py,
8541 ;; kitchen/pycompat25/defaultdict.py:
8542 license:psfl))))
8543
8544(define-public python-roman
8545 (package
8546 (name "python-roman")
8547 (version "5.2")
8548 (source
8549 (origin
8550 (method git-fetch)
8551 (uri (git-reference
8552 (url "https://github.com/zopefoundation/roman")
8553 (commit version)))
8554 (file-name (git-file-name name version))
8555 (sha256
8556 (base32
8557 "0zvg6pmv0yxm0b96dx104jzlxnsi3wy4swbj1lmc3mym5nahgp36"))))
8558 (build-system pyproject-build-system)
8559 (arguments
8560 (list
8561 #:test-backend #~'unittest))
8562 (native-inputs (list python-setuptools))
8563 (home-page "https://github.com/zopefoundation/roman")
8564 (synopsis "Integer to Roman numerals converter")
8565 (description
8566 "This package provides a small helper library to convert Arabic Numbers
8567to Roman Numerals.")
8568 (license license:zpl2.1)))
8569
8570(define-public python-rollbar
8571 (package
8572 (name "python-rollbar")
8573 (version "1.3.0")
8574 (source (origin
8575 (method url-fetch)
8576 (uri (pypi-uri "rollbar" version))
8577 (sha256
8578 (base32
8579 "0ydksca7glb7g026f4f8nsvpyj8qpgv74642hjj4zk4vqgm0552i"))))
8580 (build-system pyproject-build-system)
8581 (native-inputs (list python-httpx
8582 python-pytest
8583 python-setuptools
8584 python-webob
8585 python-wheel))
8586 (inputs (list python-requests))
8587 (home-page "https://github.com/rollbar/pyrollbar")
8588 (synopsis "Notifier for exceptions, errors, and log messages to Rollbar")
8589 (description
8590 "Python SDK for reporting exceptions, errors, and log messages
8591to @url{https://rollbar.com/, Rollbar}.
8592
8593Capabilities include:
8594
8595@itemize @bullet
8596@item Sending messages and exceptions with arbitrary context
8597@item Getting back aggregates
8598@item Debugging production issues
8599@end itemize")
8600 (license license:expat)))
8601
8602(define-public python-pyjwt
8603 (package
8604 (name "python-pyjwt")
8605 (version "2.10.1")
8606 (source
8607 (origin
8608 (method url-fetch)
8609 (uri (pypi-uri "pyjwt" version))
8610 (sha256
8611 (base32 "0lqr73wnrnxflbh8wr768hxp493qayhdis86mwy26280n8p7gi9w"))))
8612 (build-system pyproject-build-system)
8613 (arguments
8614 (list
8615 ;; tests: 286 passed, 4 skipped, 1 deselected
8616 ;;
8617 ;; jwt.exceptions.PyJWKClientConnectionError: Fail to fetch data from
8618 ;; the url, err: "<urlopen error [Errno -3] Temporary failure in name
8619 ;; resolution>"
8620 #:test-flags #~(list "-k" "not test_get_jwt_set_sslcontext_default")))
8621 (native-inputs
8622 (list python-pytest
8623 python-setuptools))
8624 (propagated-inputs
8625 (if (supported-package? python-cryptography)
8626 (list python-cryptography)
8627 '()))
8628 (home-page "https://github.com/progrium/pyjwt")
8629 (synopsis "JSON Web Token implementation in Python")
8630 (description
8631 "PyJWT is a JSON Web Token implementation written in Python.")
8632 (license license:expat)))
8633
8634(define-public python-pymsgbox
8635 (let ((commit "944b7cdc67058d005ce5fd011c66f2d87d25aba0")
8636 (revision "1"))
8637 (package
8638 (name "python-pymsgbox")
8639 (version (git-version "1.0.6" revision commit))
8640 (source
8641 (origin
8642 (method git-fetch)
8643 (uri (git-reference
8644 (url "https://github.com/asweigart/PyMsgBox")
8645 (commit commit)))
8646 (file-name (git-file-name name version))
8647 (sha256
8648 (base32 "1bhipfvnc06l8hiadk302v74yin38nwz1r47njliwk8kz103yl3g"))))
8649 (build-system pyproject-build-system)
8650 (arguments
8651 ;; Circular dependency to run tests:
8652 ;; Tests need pyautogui, which depends on pymsgbox.
8653 '(#:tests? #f))
8654 (native-inputs (list python-setuptools python-wheel))
8655 (home-page "https://github.com/asweigart/PyMsgBox")
8656 (synopsis "Python module for JavaScript-like message boxes")
8657 (description
8658 "PyMsgBox is a simple, cross-platform, pure Python module for
8659JavaScript-like message boxes. Types of dialog boxes include:
8660@enumerate
8661@item alert
8662@item confirm
8663@item prompt
8664@item password
8665@end enumerate
8666")
8667 (license license:bsd-3))))
8668
8669(define-public python-pympler
8670 (package
8671 (name "python-pympler")
8672 (version "1.1")
8673 (source
8674 (origin
8675 (method url-fetch)
8676 (uri (pypi-uri "pympler" version))
8677 (sha256
8678 (base32 "090403k1wvqyddjwbla4843dylysrkd8yw7i62222b4rp1y8dahy"))))
8679 (build-system pyproject-build-system)
8680 (arguments
8681 (list
8682 ;; One test fails with error: 'function (test.muppy.test_summary.func)'
8683 ;; != 'function (muppy.test_summary.func)'.
8684 ;; See <https://github.com/pympler/pympler/issues/134>.
8685 #:test-flags #~(list "-k" "not test_repr_function")))
8686 (native-inputs
8687 (list python-pytest
8688 python-setuptools
8689 python-wheel))
8690 (home-page "https://pythonhosted.org/Pympler/")
8691 (synopsis "Measure, monitor and analyze memory behavior")
8692 (description
8693 "Pympler is a development tool to measure, monitor and analyze
8694the memory behavior of Python objects in a running Python application.
8695
8696By pympling a Python application, detailed insight in the size and the
8697lifetime of Python objects can be obtained. Undesirable or unexpected
8698runtime behavior like memory bloat and other @samp{pymples} can easily
8699be identified.
8700
8701A web profiling frontend exposes process statistics, garbage
8702visualisation and class tracker statistics.")
8703 (license license:asl2.0)))
8704
8705(define-public python-itsdangerous
8706 (package
8707 (name "python-itsdangerous")
8708 (version "2.2.0")
8709 (source
8710 (origin
8711 (method url-fetch)
8712 (uri (pypi-uri "itsdangerous" version))
8713 (sha256
8714 (base32 "0wv1bwzbfvpsh4ng5gn4d4mjwvjwpg7w0jgiz8zsbvm1gl5hq1g0"))))
8715 (build-system pyproject-build-system)
8716 (native-inputs
8717 (list python-flit-core
8718 python-freezegun
8719 python-pytest))
8720 (home-page "https://palletsprojects.com/p/itsdangerous/")
8721 (synopsis "Python library for passing data to/from untrusted environments")
8722 (description
8723 "Itsdangerous provides various helpers to pass trusted data to untrusted
8724environments and back.")
8725 (license license:bsd-3)))
8726
8727;; WARNING: This package is a dependency of mesa.
8728(define-public python-pyyaml
8729 (package
8730 (name "python-pyyaml")
8731 (version "6.0.2")
8732 (source
8733 (origin
8734 (method url-fetch)
8735 (uri (pypi-uri "PyYAML" version))
8736 (sha256
8737 (base32 "0gmwggzm0j0iprx074g5hah91y2f68sfhhldq0f8crddj7ndk16m"))))
8738 (build-system pyproject-build-system)
8739 (native-inputs
8740 (list python-cython
8741 python-pytest
8742 python-setuptools
8743 python-wheel))
8744 (inputs
8745 (list libyaml))
8746 (home-page "https://pyyaml.org")
8747 (synopsis "YAML parser and emitter for Python")
8748 (description
8749 "PyYAML is a YAML parser and emitter for Python. PyYAML features a
8750complete YAML 1.1 parser, Unicode support, pickle support, capable extension
8751API, and sensible error messages. PyYAML supports standard YAML tags and
8752provides Python-specific tags that represent an arbitrary Python object.")
8753 (license license:expat)))
8754
8755(define-public python-crossenv
8756 (package
8757 (name "python-crossenv")
8758 (version "1.6.1")
8759 (source
8760 (origin
8761 (method git-fetch)
8762 (uri (git-reference
8763 (url "https://github.com/benfogle/crossenv")
8764 (commit (string-append "v" version))))
8765 (file-name (git-file-name name version))
8766 (sha256
8767 (base32 "15mj5kfb30jj0m1jj8qz19zdf53380j14hzj2rx13ilnr1d7j6rn"))))
8768 (build-system pyproject-build-system)
8769 (arguments
8770 (list
8771 ;; XXX: Running test require setting environment variables for
8772 ;; architectures.
8773 #:tests? #f))
8774 (native-inputs (list python-hatchling))
8775 (home-page "https://github.com/benfogle/crossenv")
8776 (synopsis "Cross-compiling virtualenv for Python")
8777 (description
8778 "This package is a tool for cross-compiling extension modules. It
8779creates a special virtual environment such that @command{pip} or
8780@file{setup.py} will cross compile packages for you, usually with no further
8781work on your part.")
8782 (license license:expat)))
8783
8784(define-public python-linkify-it-py
8785 (package
8786 (name "python-linkify-it-py")
8787 (version "2.0.0")
8788 (source (origin
8789 (method git-fetch) ;for tests
8790 (uri (git-reference
8791 (url "https://github.com/tsutsu3/linkify-it-py")
8792 (commit (string-append "v" version))))
8793 (file-name (git-file-name name version))
8794 (sha256
8795 (base32
8796 "0fg0a1lc8xbb62y9krxcp708ll58dxcwm8i7rrwpkd5sh2229f6x"))))
8797 (build-system pyproject-build-system)
8798 (propagated-inputs (list python-uc-micro-py))
8799 (native-inputs (list python-pytest python-setuptools python-wheel))
8800 (home-page "https://github.com/tsutsu3/linkify-it-py")
8801 (synopsis "Links recognition library with full Unicode support")
8802 (description "This is Python port of
8803@url{https://github.com/markdown-it/linkify-it, linkify-it}, which is a links
8804recognition library with full Unicode support. It has features like:
8805@itemize
8806@item Full unicode support, with @i{astral} characters
8807@item International domains support
8808@item Allows rules extension and custom normalizers.
8809@end itemize")
8810 (license license:expat)))
8811
8812(define-public python-makefun
8813 (package
8814 (name "python-makefun")
8815 (version "1.15.1")
8816 (source (origin
8817 (method url-fetch)
8818 (uri (pypi-uri "makefun" version))
8819 (sha256
8820 (base32
8821 "19a8dga8rnmjn5gy1cy1wdi28swbkdkypwbqikbxil6ynqcg3c20"))))
8822 (build-system pyproject-build-system)
8823 (native-inputs
8824 (list python-pytest python-setuptools python-setuptools-scm python-wheel))
8825 (home-page "https://github.com/smarie/python-makefun")
8826 (synopsis "Library to dynamically create python functions")
8827 (description "@code{makefun} helps create functions dynamically with a
8828given signature. It was largely inspired by @code{python-decorator} and
8829@code{functools}.")
8830 (license license:bsd-3)))
8831
8832(define-public python-markdown-it-py
8833 (package
8834 (name "python-markdown-it-py")
8835 (version "3.0.0")
8836 (source (origin
8837 (method url-fetch)
8838 (uri (pypi-uri "markdown-it-py" version))
8839 (sha256
8840 (base32
8841 "1swgvyiavak0nmfb31lq5zck5chwhmyf6qb6qwpcav86zaa0mxp3"))))
8842 (build-system pyproject-build-system)
8843 (arguments (list #:tests? #f)) ;pypi source does not contains tests
8844 (native-inputs (list python-flit-core))
8845 (propagated-inputs
8846 (list python-commonmark
8847 python-linkify-it-py
8848 python-markdown
8849 python-mdurl
8850 python-mistletoe
8851 python-mistune
8852 python-panflute
8853 python-psutil
8854 python-pyyaml))
8855 (home-page "https://github.com/executablebooks/markdown-it-py")
8856 (synopsis "Python port of markdown-it")
8857 (description
8858 "This is a Python port of @code{markdown-it}, and some of its associated
8859plugins. The driving design philosophy of the port has been to change as
8860little of the fundamental code structure (file names, function name, etc) as
8861possible.")
8862 (license license:expat)))
8863
8864(define-public python-markupsafe
8865 (package
8866 (name "python-markupsafe")
8867 (version "3.0.2")
8868 (source
8869 (origin
8870 (method url-fetch)
8871 (uri (pypi-uri "markupsafe" version))
8872 (sha256
8873 (base32 "1w1b1a5pskpqhx1mb53rgpv9srplhrrkr4hsl67f8rq1z3nx6mgf"))))
8874 (build-system pyproject-build-system)
8875 (native-inputs (list python-pytest python-setuptools python-wheel))
8876 (home-page "https://markupsafe.palletsprojects.com")
8877 (synopsis "XML/HTML/XHTML markup safe string implementation for Python")
8878 (description
8879 "Markupsafe provides an XML/HTML/XHTML markup safe string implementation
8880for Python.")
8881 (license license:bsd-3)))
8882
8883(define-public python-jinja2
8884 (package
8885 (name "python-jinja2")
8886 (version "3.1.2")
8887 (source
8888 (origin
8889 (method url-fetch)
8890 (uri (pypi-uri "Jinja2" version))
8891 (sha256
8892 (base32 "0lp86yadzf8dph67f6g3yxmvnhrzzi863z58jmsrx2j059q1ld9i"))))
8893 (build-system pyproject-build-system)
8894 (native-inputs (list python-pytest python-setuptools python-wheel))
8895 (propagated-inputs (list python-markupsafe))
8896 (home-page "https://jinja.palletsprojects.com/")
8897 (synopsis "Python template engine")
8898 (description
8899 "Jinja2 is a small but fast and easy to use stand-alone template engine
8900written in pure Python.")
8901 (license license:bsd-3)))
8902
8903(define-public python-jinja2-time
8904 ;; XXX: No rleases since 2016, see:
8905 ;; <https://codeberg.org/guix/guix/issues/5546>.
8906 (package
8907 (name "python-jinja2-time")
8908 (version "0.2.0")
8909 (source
8910 (origin
8911 (method git-fetch)
8912 (uri (git-reference
8913 (url "https://github.com/hackebrot/jinja2-time")
8914 (commit version)))
8915 (file-name (git-file-name name version))
8916 (sha256
8917 (base32 "1i7qihrs7wix7wjxlpif3iirhmbyahywpy5haj8abv4r3zbfafna"))))
8918 (build-system pyproject-build-system)
8919 (arguments
8920 (list #:tests? #f)) ;all tests are broken
8921 (native-inputs
8922 (list python-setuptools))
8923 (propagated-inputs
8924 (list python-arrow
8925 python-jinja2))
8926 (home-page "https://github.com/hackebrot/jinja2-time")
8927 (synopsis "Jinja2 Extension for Dates and Times")
8928 (description
8929 "This package provides an extension for the template engine Jinja2. It
8930adds a 'now' tag providing a convenient access to the arrow.now() API from
8931templates. A format string can be provided to control the output.")
8932 (license license:expat)))
8933
8934(define-public python-pypugjs
8935 (package
8936 (name "python-pypugjs")
8937 (version "5.12.0")
8938 (source
8939 (origin
8940 (method git-fetch)
8941 (uri (git-reference
8942 (url "https://github.com/kakulukia/pypugjs")
8943 (commit (string-append "v" version))))
8944 (file-name (git-file-name name version))
8945 (sha256
8946 (base32 "008wxvh2p08i8mlgak8hz3z057m06m4ydrca2ickl2m593476xi4"))))
8947 (build-system pyproject-build-system)
8948 (native-inputs (list python-django
8949 python-jinja2
8950 python-flask
8951 python-mako
8952 python-poetry-core
8953 python-pytest
8954 python-tornado-6))
8955 (propagated-inputs (list python-charset-normalizer python-six))
8956 (home-page "https://github.com/kakulukia/pypugjs")
8957 (synopsis "Convert Pug source files into different template languages")
8958 (description
8959 "PyPugJS is a high-performance port of PugJS for Python, that converts
8960any @file{.pug} source into different template languages: Django, Jinja2,
8961Mako, and Tornado.")
8962 (license license:expat))) ;; MIT
8963
8964(define-public python-pystache
8965 (package
8966 (name "python-pystache")
8967 (version "0.6.8")
8968 (source (origin
8969 (method url-fetch)
8970 (uri (pypi-uri "pystache" version))
8971 (sha256
8972 (base32
8973 "0b67fmq0wmfkgcr7qqc44vvpvh8zkdk0rh87kccds9jdda7521rp"))))
8974 (build-system pyproject-build-system)
8975 (native-inputs (list python-pytest python-setuptools python-wheel))
8976 (home-page "http://defunkt.io/pystache/")
8977 (synopsis "Python logic-less template engine")
8978 (description
8979 "Pystache is a Python implementation of the framework agnostic,
8980logic-free templating system Mustache.")
8981 (license license:expat)))
8982
8983(define-public python-pystitcher
8984 (package
8985 (name "python-pystitcher")
8986 (properties '((commit . "d8150be85d53335f7077491ab4d73fad772ef1c9")
8987 (revision . "0")
8988 (upstream-version . "1.0.5")))
8989 (version (git-version (assoc-ref properties 'upstream-version)
8990 (assoc-ref properties 'revision)
8991 (assoc-ref properties 'commit)))
8992 (source
8993 (origin
8994 (method git-fetch)
8995 (uri (git-reference
8996 (url "https://github.com/captn3m0/pystitcher")
8997 (commit (assoc-ref properties 'commit))))
8998 (file-name (git-file-name name version))
8999 (sha256
9000 (base32 "02q03smvfz6x8v45s6qcgh1r2plpcam7ra24ikgqlmq005w7nhv3"))))
9001 (build-system pyproject-build-system)
9002 (arguments
9003 (list
9004 #:phases
9005 #~(modify-phases %standard-phases
9006 (add-after 'unpack 'set-version
9007 (lambda _
9008 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION"
9009 #$(assoc-ref properties 'upstream-version)))))))
9010 (native-inputs (list python-hatchling python-hatch-vcs python-pytest))
9011 (inputs (list python-html5lib
9012 python-importlib-metadata
9013 python-markdown
9014 python-pypdf
9015 python-validators))
9016 (home-page "https://github.com/captn3m0/pystitcher")
9017 (synopsis "Declaratively stitch together a PDF file from multiple sources")
9018 (description
9019 "This package stitches your PDF files together, generating customizable
9020bookmarks using a declarative input in the form of a markdown file.")
9021 (license license:expat)))
9022
9023(define-public python-joblib
9024 (package
9025 (name "python-joblib")
9026 (version "1.5.2")
9027 (source
9028 (origin
9029 (method url-fetch)
9030 (uri (pypi-uri "joblib" version))
9031 (sha256
9032 (base32 "0mbvch9pzadf0vrm666381ic0ryy5zsv5abxak506bsb0lwmraiz"))))
9033 (build-system pyproject-build-system)
9034 (arguments
9035 (list
9036 #:test-flags
9037 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
9038 ;; Disabled to avoid having to depend on ipython/jupyter.
9039 "-k" "not test_parallel_call_cached_function_defined_in_jupyter")))
9040 (native-inputs
9041 (list python-pytest
9042 python-pytest-asyncio
9043 python-pytest-xdist
9044 python-setuptools
9045 python-wheel))
9046 (home-page "https://joblib.readthedocs.io/")
9047 (synopsis "Using Python functions as pipeline jobs")
9048 (description
9049 "Joblib is a set of tools to provide lightweight pipelining in Python.
9050In particular, joblib offers: transparent disk-caching of the output values
9051and lazy re-evaluation (memoize pattern), easy simple parallel computing
9052logging and tracing of the execution.")
9053 (license license:bsd-3)))
9054
9055(define-public python-daemon
9056 (package
9057 (name "python-daemon")
9058 (version "3.1.2")
9059 (source
9060 (origin
9061 (method git-fetch)
9062 (uri (git-reference
9063 (url "https://pagure.io/python-daemon")
9064 (commit (string-append "release/" version))))
9065 (file-name (git-file-name name version))
9066 (sha256
9067 (base32 "0rfchh68pxg68s02idc0qcm2s9yn587hv0b83r4isy5ccb3g60y4"))
9068 (patches
9069 (search-patches "python-daemon-relax-lockfile.patch"))))
9070 (build-system pyproject-build-system)
9071 (arguments
9072 (list
9073 #:phases
9074 #~(modify-phases %standard-phases
9075 (add-after 'unpack 'discard-dynamic-metadata
9076 (lambda _
9077 (substitute* "pyproject.toml"
9078 (("^dynamic = " all)
9079 (format #f "version = ~s~%~a" #$version all))
9080 (("\"(description|readme|version|maintainers)\",")
9081 ""))
9082 (for-each delete-file
9083 '("setup.py"
9084 "test/test_util_metadata.py"
9085 "test/test_setup.py")))))))
9086 (propagated-inputs (list python-filelock))
9087 (native-inputs (list python-testscenarios python-setuptools))
9088 (home-page "https://pagure.io/python-daemon/")
9089 (synopsis "Python library for making a Unix daemon process")
9090 (description
9091 "Python-daemon is a library that assists a Python program to turn itself
9092into a well-behaved Unix daemon process, as specified in PEP 3143.
9093
9094This library provides a @code{DaemonContext} class that manages the following
9095important tasks for becoming a daemon process:
9096@enumerate
9097@item Detach the process into its own process group.
9098@item Set process environment appropriate for running inside a chroot.
9099@item Renounce suid and sgid privileges.
9100@item Close all open file descriptors.
9101@item Change the working directory, uid, gid, and umask.
9102@item Set appropriate signal handlers.
9103@item Open new file descriptors for stdin, stdout, and stderr.
9104@item Manage a specified PID lock file.
9105@item Register cleanup functions for at-exit processing.
9106@end enumerate")
9107 ;; Only setup.py is gpl3+, everything else is apache 2.0 licensed.
9108 (license (list license:asl2.0 license:gpl3+))))
9109
9110(define-public python-annotated-types
9111 (package
9112 (name "python-annotated-types")
9113 (version "0.7.0")
9114 (source
9115 (origin
9116 (method url-fetch)
9117 (uri (pypi-uri "annotated_types" version))
9118 (sha256
9119 (base32 "12ff8j1l0hrmfa8dfa1pyaka5a8sbyq8b76bzj6bq21sll4prw5g"))))
9120 (build-system pyproject-build-system)
9121 (native-inputs
9122 (list python-hatchling
9123 python-pytest))
9124 (propagated-inputs (list python-typing-extensions))
9125 (home-page "https://github.com/annotated-types/annotated-types")
9126 (synopsis "Reusable constraint types to use with typing.Annotated")
9127 (description "This package provides metadata objects which can be used to
9128represent common constraints such as upper and lower bounds on scalar values and
9129collection sizes, a Predicate marker for runtime checks, and descriptions of how
9130we intend these metadata to be interpreted. In some cases, we also note
9131alternative representations which do not require this package.")
9132 (license license:expat)))
9133
9134(define-public python-anytree
9135 (package
9136 (name "python-anytree")
9137 (version "2.13.0")
9138 (source
9139 (origin
9140 (method git-fetch) ; no tests data in PyPi package
9141 (uri (git-reference
9142 (url "https://github.com/c0fec0de/anytree")
9143 (commit version)))
9144 (file-name (git-file-name name version))
9145 (sha256
9146 (base32 "0xp13r0jrz1kdmi9h10bmgqzc7wjil3ghf6gqsi9m0lsqlj5hlwh"))))
9147 (build-system pyproject-build-system)
9148 (arguments
9149 (list
9150 #:phases
9151 #~(modify-phases %standard-phases
9152 (add-before 'check 'pre-check
9153 (lambda _
9154 ;; Tests need to write to that direcroty.
9155 (mkdir-p "tests/dotexport/"))))))
9156 (native-inputs
9157 (list graphviz ;for 'dot'
9158 python-pdm-backend
9159 python-pytest
9160 python-pytest-cov
9161 python-pyyaml
9162 python-test2ref))
9163 (home-page "https://github.com/c0fec0de/anytree")
9164 (synopsis "Lightweight tree data library")
9165 (description
9166 "@code{anytree} is a simple, lightweight, and extensible tree data
9167structure for Python.")
9168 (license license:asl2.0)))
9169
9170(define-public kalamine
9171 (package
9172 (name "kalamine")
9173 (version "0.38")
9174 (source
9175 (origin
9176 (method url-fetch)
9177 (uri (pypi-uri "kalamine" version))
9178 (sha256
9179 (base32 "0dj0v4in6jngh7f5ypvxyadjsilbiwxj3rx6yxxmh5zab6dxzyhz"))))
9180 (build-system pyproject-build-system)
9181 (arguments
9182 (list
9183 #:phases
9184 #~(modify-phases %standard-phases
9185 (add-before 'check 'make-test-layouts
9186 (lambda _
9187 (apply invoke
9188 (cons* "python" "-m" "kalamine.cli" "build"
9189 (find-files "layouts" "\\.toml")))
9190 (invoke "python" "-m" "kalamine.cli" "new" "test.toml"))))))
9191 (propagated-inputs
9192 (list python-click
9193 python-livereload
9194 python-lxml
9195 python-progress
9196 python-pyyaml
9197 python-tomli))
9198 ;; TODO: Add python-pytest-ruff to native-inputs once it has been
9199 ;; packaged.
9200 (native-inputs
9201 (list python-hatchling python-mypy python-pytest))
9202 (home-page "https://github.com/OneDeadKey/kalamine")
9203 (synopsis "Keyboard layout maker")
9204 (description
9205 "Kalamine provides a CLI to create advanced keyboard layout from a
9206textual portable description. It also supports layout emulation via web
9207browser.")
9208 (license license:expat)))
9209
9210(define-public python-dm-tree
9211 (package
9212 (name "python-dm-tree")
9213 (version "0.1.9")
9214 (source
9215 (origin
9216 (method url-fetch)
9217 (uri (pypi-uri "dm_tree" version))
9218 (sha256
9219 (base32 "0arlspn0122igcz5sq6lqrw6zkdhqqkgr0xkwkas599m74yxpix4"))))
9220 (build-system pyproject-build-system)
9221 (arguments
9222 (list #:tests? #f
9223 #:phases
9224 ;; TODO: Build against shared libraries with USE_SYSTEM_ABSEIL=true
9225 ;; and USE_SYSTEM_PYBIND11=true.
9226 #~(modify-phases %standard-phases
9227 (add-before 'build 'build-shared-lib
9228 (lambda _
9229 (let* ((pybind11 #$(this-package-input "pybind11"))
9230 (python #$(this-package-input "python"))
9231 (version (python-version python))
9232 (abseil-cpp #$(this-package-input "abseil-cpp")))
9233 ;; Delete default cmake build.
9234 (substitute* "setup.py"
9235 (("ext_modules.*") "")
9236 (("cmdclass.*") ""))
9237 ;; Actual build phase.
9238 (mkdir-p "build/temp/tree/")
9239 (invoke
9240 "gcc" "-pthread" "-Wno-unused-result" "-Wsign-compare"
9241 "-DNDEBUG" "-g" "-fwrapv" "-O3" "-Wall"
9242 "-fno-semantic-interposition" "-fPIC"
9243 "-I" (string-append pybind11
9244 "/lib/python" version
9245 "/site-packages/pybind11/include")
9246 "-I" (string-append python "/include/python"
9247 version)
9248 "-I" (string-append abseil-cpp "/include")
9249 "-c" "tree/tree.cc"
9250 "-o" "build/temp/tree/tree.o"
9251 "-fvisibility=hidden" "-g0")
9252 (mkdir-p "build/lib/tree")
9253 (invoke
9254 "g++" "-pthread" "-shared"
9255 (string-append "-Wl," "-rpath=" python "/lib")
9256 "-fno-semantic-interposition"
9257 "build/temp/tree/tree.o"
9258 "-L" (string-append python "/lib")
9259 (string-append abseil-cpp "/lib/libabsl_int128.a")
9260 (string-append abseil-cpp "/lib/libabsl_raw_hash_set.a")
9261 (string-append abseil-cpp "/lib/libabsl_raw_logging_internal.a")
9262 (string-append abseil-cpp "/lib/libabsl_strings.a")
9263 (string-append abseil-cpp "/lib/libabsl_strings_internal.a")
9264 (string-append abseil-cpp "/lib/libabsl_throw_delegate.a")
9265 "-o" "build/lib/tree/_tree.so")))))))
9266 ;; We link the static abseil libraries here to avoid problems in
9267 ;; downstream libraries using potentially different variants of
9268 ;; abseil-cpp. This is also what's done in the upstream CMake build.
9269 (native-inputs
9270 (list python-setuptools))
9271 (inputs
9272 (list pybind11
9273 static-abseil-cpp
9274 python))
9275 (propagated-inputs
9276 (list python-absl-py
9277 python-attrs
9278 python-numpy
9279 python-wrapt))
9280 (home-page "https://github.com/deepmind/tree")
9281 (synopsis "Work with nested data structures in Python")
9282 (description "Tree is a python library for working with nested data
9283structures. In a way, @code{tree} generalizes the builtin @code{map} function
9284which only supports flat sequences, and allows you to apply a function to each
9285leaf preserving the overall structure.")
9286 (license license:asl2.0)))
9287
9288(define-public python-pyment
9289 (package
9290 (name "python-pyment")
9291 (version "0.3.4")
9292 (source
9293 (origin
9294 (method git-fetch)
9295 (uri
9296 (git-reference
9297 (url "https://github.com/dadadel/pyment")
9298 (commit (string-append "v" version))))
9299 (file-name (git-file-name name version))
9300 (sha256
9301 (base32 "0gbx9wmqsxdx85v5sg79lv2zxmy16j5dwi8bip07i1nyvzc5gvn0"))))
9302 (build-system pyproject-build-system)
9303 (native-inputs (list python-pytest python-setuptools))
9304 (home-page "https://github.com/dadadel/pyment/")
9305 (synopsis "Convert Python docstrings automatically")
9306 (description "Pyment is a command line tool and library that can be
9307used to convert between several docstring styles.")
9308 (license license:gpl3+)))
9309
9310(define-public python-docstring-parser
9311 (package
9312 (name "python-docstring-parser")
9313 (version "0.15")
9314 (source (origin
9315 (method url-fetch)
9316 (uri (pypi-uri "docstring_parser" version))
9317 (sha256
9318 (base32
9319 "10pnbg2q0ic1h6pwbyhhqd075fv67sq07k3gjncmi1mix29w1pa8"))))
9320 (build-system pyproject-build-system)
9321 (native-inputs (list python-poetry-core python-pytest))
9322 (home-page "https://github.com/rr-/docstring_parser")
9323 (synopsis "Parse Python docstrings in reST, Google and Numpydoc format")
9324 (description "This package lets you parse Python docstrings in reST,
9325Google and Numpydoc format.")
9326 (license license:expat)))
9327
9328(define-public python-docutils
9329 (package
9330 (name "python-docutils")
9331 (version "0.21.2")
9332 (source
9333 (origin
9334 (method url-fetch)
9335 (uri (pypi-uri "docutils" version))
9336 (sha256
9337 (base32 "0vwqzbmzdvwx23myx4cg8s8mdkrqnfxpa9yi7jm2s66z5rrihsrs"))))
9338 (build-system pyproject-build-system)
9339 (arguments
9340 (list
9341 #:test-backend #~'custom
9342 #:test-flags #~(list "test/alltests.py")))
9343 (native-inputs
9344 (list python-flit-core))
9345 (home-page "https://docutils.sourceforge.net/")
9346 (synopsis "Python Documentation Utilities")
9347 (description
9348 "Docutils is a modular system for processing documentation into useful
9349formats, such as HTML, XML, and LaTeX. It uses @dfn{reStructuredText}, an
9350easy to use markup language, for input.
9351
9352This package provides tools for converting @file{.rst} files to other formats
9353via commands such as @command{rst2man}, as well as supporting Python code.")
9354 ;; Most of the source code is public domain, but some source files are
9355 ;; licensed under the PFSL, BSD 2-clause, and GPLv3+ licenses.
9356 (license (list license:public-domain license:psfl license:bsd-2 license:gpl3+))))
9357
9358;; awscli refuses to be built with docutils < 0.17.
9359(define-public python-docutils-0.16
9360 (package
9361 (inherit python-docutils)
9362 (version "0.16")
9363 (source (origin
9364 (method url-fetch)
9365 (uri (pypi-uri "docutils" version))
9366 (sha256
9367 (base32
9368 "1z3qliszqca9m719q3qhdkh0ghh90g500avzdgi7pl77x5h3mpn2"))))
9369 ;; tests contain Python 2 syntax.
9370 (arguments '(#:tests? #false))
9371 (native-inputs
9372 (list python-setuptools python-wheel))))
9373
9374(define-public python-docutils-0.19
9375 (hidden-package
9376 (package
9377 (inherit python-docutils)
9378 (version "0.19")
9379 (source (origin
9380 (method url-fetch)
9381 (uri (pypi-uri "docutils" version))
9382 (sha256
9383 (base32
9384 "1rprvir116g5rz2bgzkzgyn6mv0z8582rz7bgxbpy2y3adkmm69k"))))
9385 (native-inputs
9386 (list python-setuptools python-wheel)))))
9387
9388(define-public python-docx
9389 (package
9390 (name "python-docx")
9391 (version "1.2.0")
9392 (source (origin
9393 (method url-fetch)
9394 (uri (pypi-uri "python_docx" version))
9395 (sha256
9396 (base32
9397 "1ki0cbw3hbiz51ww3fi3vi770lk5r0c62889r819r756v2vxgjbv"))))
9398 (build-system pyproject-build-system)
9399 (native-inputs
9400 (list behave
9401 python-pyparsing
9402 python-pytest
9403 python-setuptools
9404 python-wheel))
9405 (propagated-inputs
9406 (list python-lxml python-typing-extensions))
9407 (home-page "https://github.com/python-openxml/python-docx/")
9408 (synopsis "Python library to create and modify Microsoft Word documents")
9409 (description "This Python library can be used to create and update
9410Microsoft Word (.docx) documents.")
9411 (license license:expat)))
9412
9413(define-public python-repoze-lru
9414 (package
9415 (name "python-repoze-lru")
9416 (version "0.7")
9417 (source
9418 (origin
9419 (method url-fetch)
9420 (uri (pypi-uri "repoze.lru" version))
9421 (sha256
9422 (base32 "0xzz1aw2smy8hdszrq8yhnklx6w1r1mf55061kalw3iq35gafa84"))))
9423 (build-system pyproject-build-system)
9424 (arguments
9425 (list
9426 #:test-backend #~'unittest
9427 #:test-flags #~(list "discover" "repoze")))
9428 (native-inputs
9429 (list python-setuptools))
9430 (home-page "https://www.repoze.org")
9431 (synopsis "Tiny LRU cache implementation and decorator")
9432 (description
9433 "This package provides a tiny LRU cache implementation and decorator.")
9434 (license license:bsd-4)))
9435
9436(define-public python-reretry
9437 (package
9438 (name "python-reretry")
9439 (version "0.11.8")
9440 (source
9441 (origin
9442 (method git-fetch)
9443 (uri (git-reference
9444 (url "https://github.com/leshchenko1979/reretry")
9445 (commit version)))
9446 (file-name (git-file-name name version))
9447 (sha256
9448 (base32 "15c6275mcrkrq3zs0gyx06gr3xsg9ldrpyknfy4mbypgwjy6fp38"))))
9449 (build-system pyproject-build-system)
9450 (native-inputs
9451 (list python-pytest python-pytest-asyncio python-setuptools))
9452 (home-page "https://github.com/leshchenko1979/reretry")
9453 (synopsis "Functional decorator for retrying on exceptions")
9454 (description
9455 "This package is a fork from the retry package, but with some of added
9456community-sourced features. It provides an easy to use, but functional
9457decorator for retrying on exceptions.")
9458 (license license:asl2.0)))
9459
9460(define-public python-restructuredtext-lint
9461 (package
9462 (name "python-restructuredtext-lint")
9463 (version "1.4.0")
9464 (source
9465 (origin
9466 (method git-fetch)
9467 (uri (git-reference
9468 (url "https://github.com/twolfson/restructuredtext-lint")
9469 (commit version)))
9470 (file-name (git-file-name name version))
9471 (sha256
9472 (base32 "19ncbmnq2rnkqxhc9wf0q9whji34iyfv1pz6z61vnv4qhhdrn33v"))))
9473 (build-system pyproject-build-system)
9474 (arguments (list #:test-backend #~'unittest))
9475 (propagated-inputs (list python-docutils))
9476 (native-inputs (list python-setuptools))
9477 (home-page "https://github.com/twolfson/restructuredtext-lint")
9478 (synopsis "Linter")
9479 (description
9480 "This package provides a linter for the reStructuredText format.")
9481 (license license:unlicense)))
9482
9483(define-public python-click-repl
9484 (package
9485 (name "python-click-repl")
9486 (version "0.3.0")
9487 (source
9488 (origin
9489 (method git-fetch) ; no tests in PyPI release
9490 (uri (git-reference
9491 (url "https://github.com/click-contrib/click-repl")
9492 (commit version)))
9493 (file-name (git-file-name name version))
9494 (sha256
9495 (base32 "08asy80wdplbrfff7q7qb9k3kkaw5jxqvy9jnkfvsqy3831zf964"))))
9496 (build-system pyproject-build-system)
9497 (native-inputs (list python-pytest
9498 python-pytest-cov ; used by default
9499 python-setuptools
9500 python-wheel))
9501 (propagated-inputs
9502 (list python-click python-prompt-toolkit))
9503 (home-page "https://github.com/click-contrib/click-repl")
9504 (synopsis "REPL plugin for Click")
9505 (description "This package provides a REPL plugin for Click.")
9506 (license license:expat)))
9507
9508(define-public python-pygdbmi
9509 (package
9510 (name "python-pygdbmi")
9511 (version "0.11.0.0")
9512 (source
9513 (origin
9514 (method url-fetch)
9515 (uri (pypi-uri "pygdbmi" version))
9516 (sha256
9517 (base32 "1c0z4snkjiyl1iq4m1k6liwg0b4pdv2as4bfyvcm0mpjzki6na3s"))))
9518 (build-system pyproject-build-system)
9519 (arguments (list #:tests? #f)) ;no tests in PyPI archive
9520 (native-inputs (list python-setuptools python-wheel))
9521 (home-page "https://github.com/cs01/pygdbmi")
9522 (synopsis "Parse gdb machine interface output with Python")
9523 (description "This package provides a parse gdb machine interface output
9524with Python.")
9525 (license license:expat)))
9526
9527(define-public python-pygments
9528 (package
9529 (name "python-pygments")
9530 (version "2.19.1")
9531 (source
9532 (origin
9533 (method url-fetch)
9534 (uri (pypi-uri "pygments" version))
9535 (sha256
9536 (base32
9537 "07qm8mx3y5r8ri6zpn0hp9zx5g02bydhi7pkv54hdp3nhlm6vhb1"))))
9538 (build-system pyproject-build-system)
9539 (arguments
9540 (list
9541 #:test-flags
9542 ;; 4568 passed, 16 skipped, 597 deselected
9543 ;;
9544 ;; Ignore tests requiring "wcag_contrast_ratio"
9545 #~(list "--ignore=tests/contrast/test_contrasts.py"
9546 ;; Tests fail with not matched diff.
9547 "--ignore=tests/examplefiles/awk/test.awk"
9548 "--ignore=tests/examplefiles/bash/example.sh"
9549 "--ignore=tests/examplefiles/make/Makefile"
9550 "--ignore=tests/examplefiles/phix/example.exw"
9551 "--ignore=tests/examplefiles/sed/all_sorts_of_syntax.sed"
9552 "--ignore=tests/examplefiles/sed/count_words.sed"
9553 "--ignore=tests/examplefiles/sed/increment_number.sed"
9554 "--ignore=tests/examplefiles/sed/reverse.sed"
9555 "--ignore=tests/examplefiles/slurm/example.sl"
9556 ;; Assertion error to find example file by following symlink:
9557 ;; assert p.is_file(), f"Example file {p} not found"
9558 "--deselect=tests/test_basic_api.py::test_lexer_classes")))
9559 (native-inputs
9560 (list python-hatchling python-pytest-bootstrap))
9561 (home-page "https://pygments.org/")
9562 (synopsis "Syntax highlighting")
9563 (description
9564 "Pygments is a syntax highlighting package written in Python.")
9565 (license license:bsd-2)))
9566
9567(define-public python-pygments-bootstrap
9568 (package/inherit python-pygments
9569 (name "python-pygments-bootstrap")
9570 (native-inputs
9571 (list python-hatchling))
9572 (arguments `(#:tests? #f))))
9573
9574(define-public python-pygtrie
9575 (package
9576 (name "python-pygtrie")
9577 (version "2.5.0")
9578 (source
9579 (origin
9580 (method git-fetch)
9581 (uri (git-reference
9582 (url "https://github.com/mina86/pygtrie")
9583 (commit (string-append "v" version))))
9584 (file-name (git-file-name name version))
9585 (sha256
9586 (base32 "00m4h2faslm242hsp98d21n6jmc8h616m69p2n6ga2rz37jqmh45"))))
9587 (build-system pyproject-build-system)
9588 (arguments
9589 (list
9590 #:test-backend #~'unittest
9591 #:phases
9592 #~(modify-phases %standard-phases
9593 (add-after 'unpack 'set-version
9594 (lambda _
9595 (delete-file "version.py")
9596 (substitute* "setup.py"
9597 (("import version")
9598 "")
9599 (("version\\.get_version\\(\\)")
9600 (format #f "~s" #$version))))))))
9601 (native-inputs (list python-setuptools))
9602 (home-page "https://github.com/mina86/pygtrie")
9603 (synopsis "Pure Python trie data structure implementation")
9604 (description
9605 "This package provides a pure Python trie data structure implementation.")
9606 (license license:asl2.0)))
9607
9608(define-public python-bump2version
9609 (package
9610 (name "python-bump2version")
9611 (properties '((commit . "1044c085ba7d32d73c9cd7ca4561a7ec624c6b19")
9612 (revision . "1")))
9613 (version (git-version "1.0.1"
9614 (assoc-ref properties 'revision)
9615 (assoc-ref properties 'commit)))
9616 (source
9617 (origin
9618 (method git-fetch)
9619 (uri (git-reference
9620 (url "https://github.com/c4urself/bump2version")
9621 (commit (assoc-ref properties 'commit))))
9622 (file-name (git-file-name name version))
9623 (sha256
9624 (base32 "1m5c5rdz9723irwdl46mg7si5syddlzna0ldkz2ps6dphkmqsv7j"))))
9625 (build-system pyproject-build-system)
9626 (arguments
9627 ;; XXX: Single flaky failing test.
9628 (list #:test-flags #~(list "-k" "not test_usage_string")))
9629 (native-inputs (list python-pytest python-setuptools python-testfixtures))
9630 (home-page "https://github.com/c4urself/bump2version")
9631 (synopsis "Version-bump your software with a single command!")
9632 (description
9633 "This package provides a small command line tool to simplify releasing
9634software by updating all version strings in your source code by the correct
9635increment. It also creates commits and tags.")
9636 (license license:expat)))
9637
9638(define-public python-deprecated
9639 (package
9640 (name "python-deprecated")
9641 (version "1.2.14")
9642 (source
9643 (origin
9644 (method git-fetch)
9645 (uri (git-reference
9646 (url "https://github.com/tantale/deprecated")
9647 (commit (string-append "v" version))))
9648 (file-name (git-file-name name version))
9649 (sha256
9650 (base32
9651 "0knjsacv0r4gyz6ngjn3ih6352yz05r63ll73y2cg162bzcak48z"))))
9652 (build-system pyproject-build-system)
9653 (propagated-inputs
9654 (list python-wrapt))
9655 (native-inputs
9656 (list python-pytest python-setuptools python-wheel))
9657 (home-page "https://github.com/tantale/deprecated")
9658 (synopsis "Python decorator to deprecate classes, functions or methods")
9659 (description "The @code{deprecated} decorator provides a convenient way to deprecate
9660to deprecate classes, functions or methods.")
9661 (license license:expat)))
9662
9663(define-public python-pygithub
9664 (package
9665 (name "python-pygithub")
9666 (version "2.8.1")
9667 (source
9668 (origin
9669 (method git-fetch)
9670 (uri (git-reference
9671 (url "https://github.com/PyGithub/PyGithub")
9672 (commit (string-append "v" version))))
9673 (file-name (git-file-name name version))
9674 (sha256
9675 (base32 "0c5qp69qfkfcp8lfmfh0a2rcb1azsrlrc525qd8blnkrmz2mmayz"))))
9676 (build-system pyproject-build-system)
9677 (arguments
9678 (list
9679 #:phases
9680 #~(modify-phases %standard-phases
9681 (add-after 'unpack 'set-version
9682 (lambda _
9683 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
9684 (propagated-inputs
9685 (list python-pyjwt
9686 python-pynacl
9687 python-requests
9688 python-typing-extensions
9689 python-urllib3))
9690 (native-inputs
9691 (list python-responses
9692 python-pytest
9693 python-setuptools
9694 python-setuptools-scm))
9695 (home-page "https://pygithub.readthedocs.io/en/latest/")
9696 (synopsis "Python library for the GitHub API")
9697 (description "This library allows managing GitHub resources such as
9698repositories, user profiles, and organizations in your Python applications,
9699using version 3 of the GitHub application programming interface (API).")
9700 (license license:lgpl3+)))
9701
9702(define-public python-rellu
9703 (package
9704 (name "python-rellu")
9705 (version "0.7")
9706 (source
9707 (origin
9708 (method git-fetch)
9709 (uri (git-reference
9710 (url "https://github.com/robotframework/rellu")
9711 (commit (string-append "v" version))))
9712 (file-name (git-file-name name version))
9713 (sha256
9714 (base32 "1vbzkn4yfmc3dypgkw47fyd6n26ib7na1azrgjrvwc0vdf0qjyrw"))))
9715 (build-system pyproject-build-system)
9716 (native-inputs (list python-pytest python-setuptools))
9717 (propagated-inputs (list python-invoke python-pygithub))
9718 (home-page "https://github.com/robotframework/rellu")
9719 (synopsis "Utilities to create PyPI releases")
9720 (description
9721 "This collection of utilities contains tooling and templates to assist in
9722creating releases on GitHub and publishing them on PyPI. It is designed to be
9723used by Robot Framework and tools and libraries in its ecosystem, but can
9724naturally be used also by other projects.")
9725 (license license:asl2.0)))
9726
9727(define-public python-robotframework
9728 (package
9729 (name "python-robotframework")
9730 (version "7.3.2")
9731 (source
9732 (origin
9733 (method git-fetch) ; no tests in the PyPI archive
9734 (uri (git-reference
9735 (url "https://github.com/robotframework/robotframework")
9736 (commit (string-append "v" version))))
9737 (file-name (git-file-name name version))
9738 (sha256
9739 (base32 "0azis3dj7lfiwrr5gr1gr78z5m05vvl8n20rw3bz93s05z94h5i7"))))
9740 (outputs '("out" "doc"))
9741 (build-system pyproject-build-system)
9742 (arguments
9743 (list
9744 #:modules '((guix build pyproject-build-system)
9745 (guix build utils)
9746 (ice-9 ftw)
9747 (ice-9 match)
9748 (srfi srfi-26))
9749 #:phases
9750 #~(modify-phases %standard-phases
9751 (add-before 'build 'build-and-install-doc
9752 (lambda* (#:key outputs #:allow-other-keys)
9753 (let ((doc (string-append #$output:doc
9754 "/share/doc/robotframework")))
9755 (invoke "invoke" "library-docs" "all")
9756 (invoke "doc/userguide/ug2html.py" "dist") ;user guide
9757 (mkdir-p doc)
9758 (with-directory-excursion "dist"
9759 (define user-guide-dir
9760 (match (scandir "." (cut string-prefix?
9761 "robotframework-userguide-" <>))
9762 ((dir) dir)
9763 (_ (error "could not find the user guide directory"))))
9764 (copy-recursively user-guide-dir doc)))))
9765 (replace 'check
9766 (lambda* (#:key tests? #:allow-other-keys)
9767 (when tests?
9768 ;; TODO: Some acceptance faile and took near 30min to
9769 ;; complete: 6765 tests, 6745 passed, 20 failed; findout how
9770 ;; to skip failing ones.
9771 (format #t "Running unit tests...~%")
9772 (invoke "utest/run.py")))))))
9773 (native-inputs
9774 (list python-docutils
9775 python-invoke
9776 python-jsonschema
9777 python-pygments
9778 python-rellu
9779 python-typing-extensions
9780 python-setuptools
9781 `(,python "tk") ;used when building the HTML doc
9782 python-wheel))
9783 (home-page "https://robotframework.org")
9784 (synopsis "Generic automation framework")
9785 (description "Robot Framework is a generic automation framework for
9786acceptance testing, acceptance test driven development (ATDD), and robotic
9787process automation (RPA).")
9788 (license license:asl2.0)))
9789
9790(define-public python-robotframework-datadriver
9791 (package
9792 (name "python-robotframework-datadriver")
9793 (version "1.11.2")
9794 (source
9795 (origin
9796 (method git-fetch) ; no tests in PyPI release
9797 (uri (git-reference
9798 (url "https://github.com/Snooz82/robotframework-datadriver")
9799 (commit version)))
9800 (file-name (git-file-name name version))
9801 (sha256
9802 (base32 "0fq6ykbnypirw1wrgigsfzg8lv8g7j9gs46v0n814ycw8906n43x"))))
9803 (build-system pyproject-build-system)
9804 (arguments
9805 (list
9806 #:phases
9807 #~(modify-phases %standard-phases
9808 (add-before 'check 'skip-problematic-tests
9809 (lambda _
9810 (for-each delete-file-recursively
9811 (list
9812 ;; The test file 'tab-csv-file-name.tsv' contains
9813 ;; special characters for which there is no locale
9814 ;; in the build environment, causing one test to
9815 ;; fail.
9816 "atest/TestCases/csv_reader_config"
9817 ;; Error in file on line 6: Non-existing setting
9818 ;; 'Test Tags'.
9819 "atest/TestCases/DataTypes/Types_in_dicts.robot"))))
9820 (replace 'check
9821 (lambda* (#:key tests? #:allow-other-keys)
9822 (when tests?
9823 (with-directory-excursion "atest"
9824 (invoke "sh" "run_atest.sh"))))))))
9825 (native-inputs
9826 (list python-docutils
9827 python-robotframework-stacktrace
9828 python-setuptools
9829 python-wheel))
9830 (propagated-inputs
9831 (list python-openpyxl
9832 python-pandas
9833 python-pygments
9834 python-robotframework))
9835 (home-page "https://github.com/Snooz82/robotframework-datadriver")
9836 (synopsis "Data-driven test extension for Robot Framework")
9837 (description "DataDriver is a data-driven extension for Robot Framework.
9838DataDriver uses the Listener Interface of Robot Framework to create new test
9839cases based on a data file that contains the test data. DataDriver supports
9840data files in the CSV, XLS or XLSX formats.")
9841 (license license:asl2.0)))
9842
9843(define-public python-robotframework-lint
9844 ;; There is no properly tagged release; the commit below seems to correspond
9845 ;; to the 0.9 stable release available from PyPI. The tests are not
9846 ;; included in the PyPI archive, so we fetch the sources from the upstream
9847 ;; Git repo.
9848 (let ((commit "b0619ac58a8b1be125f9c98856a664594614570f")
9849 (revision "0"))
9850 (package
9851 (name "python-robotframework-lint")
9852 (version (git-version "1.1" ;version taken from 'rflint/version.py'
9853 revision commit))
9854 (source
9855 (origin
9856 (method git-fetch)
9857 (uri (git-reference
9858 (url "https://github.com/boakley/robotframework-lint")
9859 (commit commit)))
9860 (file-name (git-file-name name version))
9861 (sha256
9862 (base32
9863 "180npmvzqync25b2scs878gv8q4y17dsinxyjcc10bw22msfap6b"))))
9864 (build-system python-build-system)
9865 (arguments
9866 `(#:phases
9867 (modify-phases %standard-phases
9868 (replace 'check
9869 (lambda _
9870 (invoke "python" "-m" "robot" "-A"
9871 "tests/conf/default.args" "tests"))))))
9872 (propagated-inputs
9873 (list python-robotframework))
9874 (home-page "https://github.com/boakley/robotframework-lint/")
9875 (synopsis "Static analysis tool (linter) for Robot Framework")
9876 (description "This package provides the @code{rflint} command-line
9877utility, a static analysis tool (linter) for Robot Framework source files.")
9878 (license license:asl2.0))))
9879
9880(define-public python-robotframework-pabot
9881 (package
9882 (name "python-robotframework-pabot")
9883 (version "4.2.0")
9884 (source
9885 (origin
9886 ;; There are no tests in the PyPI archive.
9887 (method git-fetch)
9888 (uri (git-reference
9889 (url "https://github.com/mkorpela/pabot")
9890 (commit version)))
9891 (file-name (git-file-name name version))
9892 (sha256
9893 (base32
9894 "1q4vxrmkximyxk735d7payypx4w3qqdlldmg34frlnbkxrf40pxc"))))
9895 (build-system pyproject-build-system)
9896 (arguments
9897 (list
9898 #:test-flags
9899 #~(list "-k" (string-join
9900 ;; XXX: Maybe it's a bad idea to skip these tests which
9901 ;; failing assertions highlight incomparability issues.
9902 ;;
9903 ;; 93 passed, 23 deselected, 11 warnings
9904 (list "not test_argumentfile_outputs"
9905 "test_dependency_ok"
9906 "test_longnames_in_tests"
9907 "test_multiple_dependencies_ok"
9908 "test_orders"
9909 "test_pabotprerunmodifier"
9910 "test_pabotprerunmodifier_with_prerunmodifier"
9911 "test_pabotprerunmodifier_with_testlevelsplit"
9912 "test_pabotprerunmodifier_with_testlevelsplit_and_"
9913 "test_parallel_execution"
9914 "test_parallel_execution_with_testlevelsplit"
9915 "test_pre_run_with_new_name"
9916 "test_pre_run_with_new_tag"
9917 "test_run_dir_2_then_dir_3"
9918 "test_run_dir_3_then_dir_2"
9919 "test_run_root_then_suite_4_then_dir_1_then_dir_4"
9920 "test_sleep_test_cases_and_group"
9921 "test_stdout_should_display_passed_test"
9922 "test_stdout_should_display_passed_test"
9923 "test_stdout_should_display_passed_test_and_not_"
9924 "test_testlevelsplit_output_task_order"
9925 "test_too_big_testname"
9926 "test_two_orders")
9927 " and not "))
9928 #:phases
9929 #~(modify-phases %standard-phases
9930 (add-after 'unpack 'relax-requirements
9931 (lambda _
9932 (substitute* "setup.cfg"
9933 ;; natsort>=8.2.0
9934 ((">=8.2.0") "")))))))
9935 (native-inputs
9936 (list python-pytest
9937 python-setuptools
9938 python-wheel))
9939 (propagated-inputs
9940 (list python-natsort
9941 python-robotframework
9942 python-robotframework-stacktrace))
9943 (home-page "https://pabot.org")
9944 (synopsis "Parallel test runner for Robot Framework")
9945 (description "Pabot is a parallel executor for Robot Framework tests.")
9946 (license license:asl2.0)))
9947
9948(define-public python-robotframework-stacktrace
9949 (package
9950 (name "python-robotframework-stacktrace")
9951 (version "0.4.1")
9952 (source
9953 (origin
9954 (method git-fetch)
9955 (uri (git-reference
9956 (url "https://github.com/MarketSquare/robotframework-stacktrace")
9957 (commit version)))
9958 (file-name (git-file-name name version))
9959 (sha256
9960 (base32 "1nkzcgc1xwbx8d5qq47aj23qa7dn1ml033bjwrgqh55x3miphlcq"))))
9961 (build-system pyproject-build-system)
9962 (arguments
9963 ;; XXX: The test suite fails (see:
9964 ;; https://github.com/MarketSquare/robotframework-stacktrace/issues/4).
9965 (list
9966 #:tests? #f
9967 #:phases
9968 #~(modify-phases %standard-phases
9969 (add-after 'unpack 'set-version
9970 (lambda _
9971 (substitute* "setup.py"
9972 (("VERSION =.*")
9973 (string-append "VERSION = '" #$version "'"))))))))
9974 (native-inputs (list python-setuptools))
9975 (propagated-inputs (list python-robotframework))
9976 (home-page "https://github.com/MarketSquare/robotframework-stacktrace")
9977 (synopsis "Robot Framework listener to print a stack trace on error")
9978 (description "StackTrace is a Robot Framework listener that prints a stack
9979trace directly to the terminal to ease debugging.")
9980 (license license:asl2.0)))
9981
9982(define-public python-robotframework-sshlibrary
9983 (package
9984 (name "python-robotframework-sshlibrary")
9985 (version "3.8.0")
9986 ;; There are no tests in the PyPI archive.
9987 (source
9988 (origin
9989 (method git-fetch)
9990 (uri (git-reference
9991 (url "https://github.com/robotframework/SSHLibrary")
9992 (commit (string-append "v" version))))
9993 (file-name (git-file-name name version))
9994 (sha256
9995 (base32 "1fn72hw7xacjjpl4dd6wynh2x63i9rk8iqhj3v640db21qpcnbkw"))
9996 (patches (search-patches
9997 "python-robotframework-sshlibrary-rf5-compat.patch"))))
9998 (build-system pyproject-build-system)
9999 (arguments
10000 (list
10001 #:phases
10002 #~(modify-phases %standard-phases
10003 (add-before 'build 'build-and-install-doc
10004 (lambda _
10005 (let ((doc (string-append #$output:doc
10006 "/share/doc/robotframework-sshlibrary")))
10007 (invoke "chmod" "-R" "+w" "docs")
10008 (invoke "invoke" "kw-docs" "project-docs")
10009 (mkdir-p doc)
10010 (for-each delete-file
10011 (find-files "docs" "\\.rst"))
10012 (copy-recursively "docs" doc))))
10013 (replace 'check
10014 (lambda* (#:key tests? #:allow-other-keys)
10015 (when tests?
10016 ;; Some tests require an SSH server; we remove them.
10017 (delete-file "utest/test_client_api.py")
10018 (delete-file "utest/test_scp.py")
10019 (invoke "python" "utest/run.py")))))))
10020 (propagated-inputs
10021 (list python-robotframework python-paramiko python-scp))
10022 (native-inputs
10023 (list openssh
10024 which
10025 ;; To generate the documentation
10026 python-docutils
10027 python-invoke
10028 python-pygments
10029 python-rellu
10030 python-setuptools))
10031 (outputs '("out" "doc"))
10032 (home-page "https://github.com/robotframework/SSHLibrary")
10033 (synopsis "Robot Framework library for SSH and SFTP")
10034 (description
10035 "SSHLibrary is a Robot Framework library providing support for SSH and
10036SFTP. It has the following main usages:
10037@itemize @bullet
10038@item Executing commands on the remote machine, either blocking or non-blocking.
10039@item Writing and reading in an interactive shell.
10040@item Transferring files and directories over SFTP.
10041@item Ensuring that files and directories exist on the remote machine.
10042@end itemize")
10043 (license license:asl2.0)))
10044
10045(define-public python-robotframework-pythonlibcore
10046 (package
10047 (name "python-robotframework-pythonlibcore")
10048 (version "4.4.1")
10049 (source
10050 (origin
10051 (method git-fetch) ;no tests in pypi archive
10052 (uri (git-reference
10053 (url "https://github.com/robotframework/PythonLibCore")
10054 (commit (string-append "v" version))))
10055 (file-name (git-file-name name version))
10056 (sha256
10057 (base32 "0hjayjq5wrgajs56nf85y5wqh76jbjfbsz40bam315l3kzmj45g5"))))
10058 (build-system pyproject-build-system)
10059 (arguments
10060 (list
10061 #:test-backend #~'custom
10062 #:test-flags #~(list "utest/run.py")))
10063 (native-inputs
10064 (list python-approvaltests
10065 python-pytest
10066 python-pytest-cov
10067 python-pytest-mockito
10068 python-robotframework
10069 python-setuptools))
10070 (home-page "https://github.com/robotframework/PythonLibCore")
10071 (synopsis "Robot Framework Python library tools")
10072 (description
10073 "PythonLibCore provides tools for creating larger test libraries for
10074Robot Framework using Python. The Robot Framework hybrid and dynamic library
10075APIs give more flexibility for library than the static library API, but they
10076also set requirements for libraries which need to be implemented in the
10077library side. PythonLibCore eases the problem by providing a simpler
10078interface and by handling all the requirements towards the Robot Framework
10079library APIs.")
10080 (license license:asl2.0)))
10081
10082(define-public python-robotframework-seleniumlibrary
10083 (package
10084 (name "python-robotframework-seleniumlibrary")
10085 (version "6.8.0")
10086 (source
10087 (origin
10088 (method git-fetch)
10089 (uri (git-reference
10090 (url "https://github.com/robotframework/SeleniumLibrary")
10091 (commit (string-append "v" version))))
10092 (file-name (git-file-name name version))
10093 (sha256
10094 (base32 "093kcmwvh72n22sj1psx4dyjj87xrzz2622ygpkavrhmd9r2a9jg"))))
10095 (build-system pyproject-build-system)
10096 (arguments
10097 (list
10098 #:test-flags
10099 #~(list "--ignore=utest/test/keywords/test_firefox_profile_parsing.py"
10100 "-k" (string-join
10101 (list "not test_create_firefox_with_options"
10102 "test_create_headless_firefox_with_options"
10103 "test_create_driver_firefox")
10104 " and not "))))
10105 (native-inputs
10106 (list python-approvaltests
10107 python-pytest
10108 python-pytest-mockito
10109 python-setuptools))
10110 (propagated-inputs
10111 (list python-click
10112 python-robotframework
10113 python-robotframework-pythonlibcore
10114 python-selenium))
10115 (home-page "https://github.com/robotframework/SeleniumLibrary")
10116 (synopsis "Web testing library for Robot Framework")
10117 (description "SeleniumLibrary is a web testing library for Robot Framework
10118that utilizes the Selenium tool internally.")
10119 (license license:asl2.0)))
10120
10121(define-public python-robotframework-seleniumscreenshots
10122 (package
10123 (name "python-robotframework-seleniumscreenshots")
10124 (version "0.9.5")
10125 (source
10126 (origin
10127 (method git-fetch)
10128 (uri (git-reference
10129 (url
10130 "https://github.com/MarketSquare/robotframework-seleniumscreenshots")
10131 (commit version)))
10132 (file-name (git-file-name name version))
10133 (sha256
10134 (base32 "1gal4ifibk2bj1qgppcs6vmjgjvz47nq4d4gqvyd70vpyf9iw342"))))
10135 (build-system pyproject-build-system)
10136 (arguments
10137 ;; XXX: The tests require a relatively complicated setup configured in
10138 ;; their CI with Nix (!).
10139 `(#:tests? #f))
10140 (native-inputs (list python-setuptools))
10141 (propagated-inputs
10142 (list python-robotframework python-robotframework-seleniumlibrary))
10143 (home-page
10144 "https://github.com/MarketSquare/robotframework-seleniumscreenshots")
10145 (synopsis
10146 "Robot Framework library for annotating and cropping screenshots")
10147 (description
10148 "The SeleniumScreenshots library for Robot Framework provides keywords
10149for annotating and cropping screenshots taken with SeleniumLibrary. It is
10150useful for scripting automatically updated screenshots for documentation or
10151for visual regression testing purposes.")
10152 (license license:bsd-3)))
10153
10154(define-public python-rstr
10155 (package
10156 (name "python-rstr")
10157 (version "3.2.2")
10158 (source
10159 (origin
10160 (method git-fetch)
10161 (uri (git-reference
10162 (url "https://github.com/leapfrogonline/rstr")
10163 (commit version)))
10164 (file-name (git-file-name name version))
10165 (sha256
10166 (base32 "1z9d660jnv72jn8qzpa9hddpv5f953js8i75hfhkcw68vmdfndnr"))))
10167 (build-system pyproject-build-system)
10168 (arguments
10169 (list
10170 #:phases
10171 #~(modify-phases %standard-phases
10172 (add-before 'build 'pretend-version
10173 ;; The version string is usually derived via setuptools-scm, but
10174 ;; without the git metadata available, the version string is set to
10175 ;; '0.0.0'.
10176 (lambda _
10177 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
10178 (native-inputs (list python-pytest
10179 python-setuptools
10180 python-setuptools-scm
10181 python-wheel))
10182 (home-page "https://github.com/leapfrogonline/rstr")
10183 (synopsis "Generate random strings in Python")
10184 (description "This package provides a python module for generating
10185random strings of various types. It could be useful for fuzz testing,
10186generating dummy data, or other applications. It has no dependencies
10187outside the standard library.")
10188 (license license:bsd-3)))
10189
10190(define-public python-scp
10191 (package
10192 (name "python-scp")
10193 (version "0.15.0")
10194 (source
10195 (origin
10196 (method git-fetch)
10197 (uri (git-reference
10198 (url "https://github.com/jbardin/scp.py")
10199 (commit (string-append "v" version))))
10200 (file-name (git-file-name name version))
10201 (sha256
10202 (base32 "03mdkiwfxvi1xfsw9qjdjf0jgljs991jn29lia9fka68x1ngwnw9"))))
10203 (build-system pyproject-build-system)
10204 (arguments (list #:tests? #f)) ;tests require an SSH server
10205 (native-inputs (list python-setuptools))
10206 (propagated-inputs (list python-paramiko))
10207 (home-page "https://github.com/jbardin/scp.py")
10208 (synopsis "SCP protocol module for Python and Paramiko")
10209 (description
10210 "The scp module extends the Paramiko library to send and receive files
10211via the SCP1 protocol, as implemented by the OpenSSH @command{scp} program.")
10212 (license license:gpl2+)))
10213
10214(define-public python-rst-linker
10215 (package
10216 (name "python-rst-linker")
10217 (version "2.6.0")
10218 (source
10219 (origin
10220 (method git-fetch)
10221 (uri (git-reference
10222 (url "https://github.com/jaraco/rst.linker")
10223 (commit (string-append "v" version))))
10224 (file-name (git-file-name name version))
10225 (sha256
10226 (base32 "1pcnhib881p0vgm0s8jj6inzzs98raz70sc2z6m6wlgrj9ivv5jj"))))
10227 (build-system pyproject-build-system)
10228 (arguments
10229 (list
10230 #:phases
10231 #~(modify-phases %standard-phases
10232 (add-after 'unpack 'set-version
10233 (lambda _
10234 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
10235 (propagated-inputs (list python-jaraco-context))
10236 (native-inputs
10237 (list python-path
10238 python-jaraco-vcs
10239 python-pytest
10240 python-pytest-subprocess
10241 python-setuptools-scm
10242 python-setuptools))
10243 (home-page "https://github.com/jaraco/rst.linker")
10244 (synopsis "Sphinx plugin to add links and timestamps")
10245 (description
10246 "rst.linker automatically replaces text by a reStructuredText external
10247reference or timestamps. It's primary purpose is to augment the changelog,
10248but it can be used for other documents, too.")
10249 (license license:expat)))
10250
10251(define-public python-feedgenerator
10252 (package
10253 (name "python-feedgenerator")
10254 (version "2.1.0")
10255 (source
10256 (origin
10257 (method url-fetch)
10258 (uri (pypi-uri "feedgenerator" version))
10259 (sha256
10260 (base32
10261 "179bshnb0ssx7pspzbyaqvhi5w3c3hb15cingh4py8px50zz4xgh"))))
10262 (build-system pyproject-build-system)
10263 (native-inputs
10264 (list python-pytest python-pytest-cov python-setuptools python-wheel))
10265 (propagated-inputs
10266 (list python-pytz))
10267 (home-page "https://github.com/getpelican/feedgenerator")
10268 (synopsis
10269 "Standalone version of Django's Atom/RSS feed generator")
10270 (description
10271 "Feedgenerator-py3k is a standalone version of Django's feedgenerator,
10272which can produce feeds in RSS 2.0, RSS 0.91, and Atom formats.")
10273 (license license:bsd-3)))
10274
10275(define-public python-lsp-jsonrpc
10276 (package
10277 (name "python-lsp-jsonrpc")
10278 (version "1.1.2")
10279 (source
10280 (origin
10281 (method url-fetch)
10282 (uri (pypi-uri "python-lsp-jsonrpc" version))
10283 (sha256
10284 (base32
10285 "04n95h0cqnsrdyh1gv0abh2i5ynyrq2wfqpppx9djp7mxr9y9226"))))
10286 (build-system pyproject-build-system)
10287 (native-inputs
10288 (list python-coverage
10289 python-pycodestyle
10290 python-pyflakes
10291 python-pylint
10292 python-pytest
10293 python-pytest-cov
10294 python-setuptools
10295 python-setuptools-scm
10296 python-wheel))
10297 (propagated-inputs
10298 (list python-ujson))
10299 (home-page "https://github.com/python-lsp/python-lsp-jsonrpc")
10300 (synopsis "JSON RPC 2.0 server library")
10301 (description
10302 "This package provides a JSON RPC 2.0 server library for Python.")
10303 (license license:expat)))
10304
10305(define-deprecated-package python-jsonrpc-server
10306 python-lsp-jsonrpc)
10307
10308(define-public python-pydantic
10309 (package
10310 (name "python-pydantic")
10311 (version "2.12.5")
10312 (source
10313 (origin
10314 (method git-fetch)
10315 (uri (git-reference
10316 (url "https://github.com/samuelcolvin/pydantic")
10317 (commit (string-append "v" version))))
10318 (file-name (git-file-name name version))
10319 (sha256
10320 (base32 "0h1dwnd16smyknv7fzskv8akp96pw18mrd3l8a3nbhs1afslnd7m"))))
10321 (build-system pyproject-build-system)
10322 (arguments
10323 (list
10324 ;; tests: 5428 passed, 1091 skipped, 24 xfailed
10325 #:test-flags
10326 #~(list "--parallel-threads" (number->string (parallel-job-count)))))
10327 (native-inputs
10328 (list tzdata-for-tests
10329 python-dirty-equals
10330 python-faker
10331 python-hatch-fancy-pypi-readme
10332 python-hatchling
10333 python-jsonschema
10334 python-pytest
10335 python-pytest-benchmark
10336 python-pytest-examples
10337 python-pytest-mock
10338 python-pytest-run-parallel))
10339 (propagated-inputs
10340 (list python-annotated-types
10341 python-pydantic-core ;it's hard == requirement, keep it in sync
10342 python-typing-extensions
10343 python-typing-inspection))
10344 (home-page "https://github.com/samuelcolvin/pydantic")
10345 (synopsis "Python data validation and settings management")
10346 (description
10347 "Pydantic enforces type hints at runtime, and provides user friendly
10348errors when data is invalid.")
10349 (license license:expat)))
10350
10351(define-public python-pydantic-1
10352 (package
10353 (inherit python-pydantic)
10354 (name "python-pydantic")
10355 (version "1.10.19")
10356 (source
10357 (origin
10358 (method git-fetch)
10359 (uri (git-reference
10360 (url "https://github.com/samuelcolvin/pydantic")
10361 (commit (string-append "v" version))))
10362 (file-name (git-file-name name version))
10363 (sha256
10364 (base32 "0swcpfq1y0h5dcj82idls8k5la4xh4c0vz47y7jci2qass8gjffc"))))
10365 (build-system pyproject-build-system)
10366 (arguments
10367 (list
10368 #:test-flags
10369 ;; One test fails with not equal assertion.
10370 #~(list "--deselect=tests/test_validators.py::test_assert_raises_validation_error")))
10371 (native-inputs
10372 (list python-pytest
10373 python-pytest-mock
10374 python-setuptools))
10375 (propagated-inputs
10376 (list python-typing-extensions))))
10377
10378;; It may be removed after 2026-01-05.
10379(define-deprecated/public-alias python-pydantic-2 python-pydantic)
10380
10381(define-public python-pydantic-core
10382 (package
10383 (name "python-pydantic-core")
10384 (version "2.41.5")
10385 (source
10386 (origin
10387 (method url-fetch)
10388 (uri (pypi-uri "pydantic_core" version))
10389 (sha256
10390 (base32 "0vj72r481py6r5mlna185g3ppw1jri964q77spzp7lval4gabnh8"))))
10391 (build-system pyproject-build-system)
10392 (arguments
10393 (list
10394 #:imported-modules `(,@%cargo-build-system-modules
10395 ,@%pyproject-build-system-modules)
10396 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
10397 (guix build pyproject-build-system)
10398 (guix build utils))
10399 ;; tests: 5318 passed, 123 skipped, 10 xfailed
10400 #:test-flags
10401 #~(list "--ignore=tests/benchmarks"
10402 ;; XXX: It cycles, bootstrap variant needs to be introduced:
10403 ;; python-pydantic-core -> python-pydantic ->
10404 ;; python-inline-snapshot -> python-pydantic-core
10405 "--ignore=tests/test_docstrings.py"
10406 "--ignore=tests/test_hypothesis.py"
10407 "--ignore=tests/validators/test_allow_partial.py"
10408 "--ignore=tests/validators/test_frozenset.py"
10409 "--ignore=tests/validators/test_list.py"
10410 "--ignore=tests/validators/test_set.py")
10411 #:phases
10412 #~(modify-phases %standard-phases
10413 (add-after 'unpack 'prepare-cargo-build-system
10414 (lambda args
10415 (for-each (lambda (phase)
10416 (format #t "Running cargo phase: ~a~%" phase)
10417 (apply (assoc-ref cargo:%standard-phases phase)
10418 #:cargo-target #$(cargo-triplet)
10419 args))
10420 '(unpack-rust-crates
10421 configure
10422 check-for-pregenerated-files
10423 patch-cargo-checksums))))
10424 (add-after 'unpack 'patch-pyproject
10425 (lambda _
10426 ;; maturin failed to parce pyproject.toml.
10427 (substitute* "pyproject.toml"
10428 (("^license-files = .*") "")))))))
10429 (native-inputs
10430 (append
10431 (list maturin
10432 python-dirty-equals
10433 python-pytest
10434 python-pytest-benchmark ;TODO: disable in pyproject.toml
10435 python-pytest-mock
10436 python-pytest-timeout
10437 python-typing-inspection
10438 python-tzdata
10439 rust
10440 `(,rust "cargo"))
10441 (or (and=> (%current-target-system)
10442 (compose list make-rust-sysroot))
10443 '())))
10444 (inputs
10445 (cargo-inputs 'python-pydantic-core))
10446 (propagated-inputs
10447 (list python-typing-extensions))
10448 (home-page "https://github.com/pydantic/pydantic-core")
10449 (synopsis "Core validation logic for pydantic")
10450 (description "This package provides the core functionality for pydantic
10451validation and serialization.")
10452 (license license:expat)))
10453
10454(define-public python-pydantic-cli
10455 (package
10456 (name "python-pydantic-cli")
10457 (version "9.1.0")
10458 (source
10459 (origin
10460 (method git-fetch) ;for tests
10461 (uri (git-reference
10462 (url "https://github.com/mpkocher/pydantic-cli")
10463 (commit (string-append "v" version))))
10464 (file-name (git-file-name name version))
10465 (sha256
10466 (base32
10467 "1rfffz4kasjihys8qgnvjb8cwm0dycsdj7qnggi9372b9q1ng4zg"))))
10468 (build-system pyproject-build-system)
10469 (propagated-inputs
10470 (list python-pydantic))
10471 (native-inputs
10472 (list python-hatchling python-pytest))
10473 (home-page "https://github.com/mpkocher/pydantic-cli")
10474 (synopsis "Turn Pydantic defined data models into CLI tools")
10475 (description
10476 "@code{python-pydantic} enables specifying @acronym{CLI, Command Line
10477Interfaces} via data models provided in the JSON format.")
10478 (license license:expat)))
10479
10480(define-public python-pydantic-extra-types
10481 (package
10482 (name "python-pydantic-extra-types")
10483 (version "2.10.6")
10484 (source
10485 (origin
10486 (method git-fetch)
10487 (uri (git-reference
10488 (url "https://github.com/pydantic/pydantic-extra-types")
10489 (commit (string-append "v" version))))
10490 (file-name (git-file-name name version))
10491 (sha256
10492 (base32 "0n3w6zm7wdj0xb2c4kjkysfxhcr5pzbgcpcw158pzdsxz6svnrl3"))))
10493 (build-system pyproject-build-system)
10494 (arguments
10495 (list
10496 ;; tests: 13079 passed, 1 deselected
10497 #:test-flags
10498 ;; See: <https://github.com/pydantic/pydantic-extra-types/issues/345>.
10499 #~(list "--ignore=tests/test_s3.py"
10500 "--deselect=tests/test_coordinate.py::test_json_schema"
10501 ;; XXX: The most of the tests fail, pendulum is optional package
10502 ;; and needs to be =>3 where we have 2.1.2, updating to 3+
10503 ;; requires Rust.
10504 "--ignore=tests/test_pendulum_dt.py"
10505 "--ignore=tests/test_json_schema.py")
10506 #:phases
10507 #~(modify-phases %standard-phases
10508 (add-before 'check 'pre-check
10509 (lambda* (#:key inputs #:allow-other-keys)
10510 (setenv "TZ" "UTC")
10511 (setenv "TZDIR" (search-input-directory inputs
10512 "share/zoneinfo")))))))
10513 (native-inputs
10514 (list python-pytest
10515 python-hatchling
10516 tzdata-for-tests))
10517 (propagated-inputs
10518 (list python-pydantic
10519 python-typing-extensions
10520 ;; [optional]
10521 python-cron-converter
10522 ;; python-pendulum
10523 python-phonenumbers
10524 python-pycountry
10525 python-pymongo
10526 python-pytz
10527 python-semver
10528 python-tzdata
10529 python-ulid))
10530 (home-page "https://github.com/pydantic/pydantic-extra-types")
10531 (synopsis "Extra Pydantic types")
10532 (description "This package provides sxtra types for Pydantic.")
10533 (license license:expat)))
10534
10535(define-public python-pydantic-settings
10536 (package
10537 (name "python-pydantic-settings")
10538 (version "2.12.0")
10539 (source
10540 (origin
10541 (method url-fetch)
10542 (uri (pypi-uri "pydantic_settings" version))
10543 (sha256
10544 (base32 "1l6gmw6v1nlm3cid92c5xw6ljw9fbwmjk2y0w5l2lg0yjppkhm80"))))
10545 (build-system pyproject-build-system)
10546 (arguments
10547 (list
10548 ;; tests: 399 passed, 27 skipped
10549 #:test-flags
10550 ;; XXX: Ignore tests requiring python-ruff.
10551 #~(list "--ignore=tests/test_docs.py")
10552 #:phases
10553 #~(modify-phases %standard-phases
10554 (add-before 'check 'set-home
10555 (lambda _
10556 ;; FileNotFoundError: [Errno 2] No such file or directory:
10557 ;; '/homeless-shelter/
10558 (setenv "HOME" "/tmp"))))))
10559 (native-inputs
10560 (list python-hatchling
10561 python-pytest
10562 python-pytest-examples
10563 python-pytest-mock))
10564 (propagated-inputs
10565 (list python-dotenv
10566 python-pydantic
10567 python-typing-inspection
10568 ;; [optional]
10569 python-pyyaml
10570 python-tomli))
10571 (home-page "https://docs.pydantic.dev/latest/usage/pydantic_settings/")
10572 (synopsis "Settings management using Pydantic")
10573 (description
10574 "Pydantic Settings provides optional Pydantic features for loading a
10575settings or config class from environment variables or secrets files.")
10576 (license license:expat)))
10577
10578(define-public python-pydoc-markdown
10579 (package
10580 (name "python-pydoc-markdown")
10581 (version "4.8.2")
10582 (source
10583 (origin
10584 (method url-fetch)
10585 (uri (pypi-uri "pydoc_markdown" version))
10586 (sha256
10587 (base32 "02vzlrd18r8wi0b64vq2gnbhaadysg9rnbylf9sf2v9q65z94v7v"))))
10588 (build-system pyproject-build-system)
10589 (arguments
10590 (list
10591 #:tests? #false ;there are none
10592 #:phases
10593 '(modify-phases %standard-phases
10594 ;; This is probably not a good idea, but it wants a rather old
10595 ;; version of docstring-parser.
10596 (add-after 'unpack 'relax-requirements
10597 (lambda _
10598 (substitute* "pyproject.toml"
10599 (("docstring-parser = .*")
10600 "docstring-parser = \"^0\"\n")))))))
10601 (propagated-inputs (list python-click
10602 python-databind-core
10603 python-databind-json
10604 python-docspec
10605 python-docspec-python
10606 python-docstring-parser
10607 python-jinja2
10608 python-nr-util
10609 python-pyyaml
10610 python-requests
10611 python-tomli
10612 python-tomli-w
10613 python-watchdog
10614 python-yapf))
10615 (native-inputs (list python-poetry-core))
10616 (home-page "https://pypi.org/project/pydoc-markdown/")
10617 (synopsis "Create Python API documentation in Markdown format")
10618 (description "Pydoc-Markdown is a tool to create Python API documentation
10619in Markdown format. Instead of executing your Python code like so many other
10620documentation tools, it parses it using docspec instead.")
10621 (license license:expat)))
10622
10623;; XXX: The project is deprecated upstream, still in use by some packages,
10624;; consider to remove when nothing depends on it.
10625(define-public python-pydocstyle
10626 (package
10627 (name "python-pydocstyle")
10628 (version "6.3.0")
10629 (source
10630 (origin
10631 (method git-fetch) ;no tests in PyPI archive
10632 (uri (git-reference
10633 (url "https://github.com/PyCQA/pydocstyle")
10634 (commit version)))
10635 (file-name (git-file-name name version))
10636 (sha256
10637 (base32 "1aabvnxmy939y5b7jpnygpnkgbi4id9j461v7bwzxwdmdffnnd1j"))
10638 (patches (search-patches
10639 "python-pydocstyle-add-support-for-pep701.patch"))))
10640 (build-system pyproject-build-system)
10641 (arguments
10642 (list
10643 ;; It tries to install with pip.
10644 #:test-flags #~(list "--ignore=src/tests/test_integration.py")
10645 #:phases
10646 #~(modify-phases %standard-phases
10647 (add-after 'unpack 'set-version
10648 (lambda _
10649 (substitute* "pyproject.toml"
10650 (("0.0.0-dev") #$version)))))))
10651 (native-inputs
10652 (list python-poetry-core
10653 python-pytest
10654 python-tomli))
10655 (propagated-inputs
10656 (list python-six
10657 python-snowballstemmer))
10658 (home-page "https://github.com/PyCQA/pydocstyle/")
10659 (synopsis "Python docstring style checker")
10660 (description
10661 "This package provides a style checker for the Python Language
10662Server (PLS).")
10663 (license license:expat)))
10664
10665(define-public python-lsp-server
10666 (package
10667 (name "python-lsp-server")
10668 (version "1.13.0")
10669 (source
10670 (origin
10671 (method url-fetch)
10672 (uri (pypi-uri "python_lsp_server" version))
10673 (sha256
10674 (base32
10675 "0s8dipxkdshg27a7a2nnkgg3kmksvbkfa7g39n310k6g7sv2d3rp"))))
10676 (build-system pyproject-build-system)
10677 (arguments
10678 (list
10679 #:test-flags
10680 '(list "-c" "/dev/null" ;avoid coverage
10681 "--ignore-glob" "**/test_autopep8_format.py" ;avoid autopep8 dep
10682 "-k"
10683 (string-append
10684 "not test_concurrent_ws_requests " ; flaky
10685 "and not test_pyqt_completion " ; avoid pyqt5
10686 "and not test_pandas_completion")) ; avoid pandas
10687 #:phases
10688 '(modify-phases %standard-phases
10689 (add-before 'check 'set-HOME
10690 (lambda _ (setenv "HOME" "/tmp"))))))
10691 (propagated-inputs
10692 (list python-black
10693 python-docstring-to-markdown
10694 python-importlib-metadata
10695 python-jedi
10696 python-lsp-jsonrpc
10697 python-pluggy
10698 python-pycodestyle
10699 python-pydocstyle
10700 python-ujson
10701 python-whatthepatch
10702 python-yapf))
10703 (native-inputs
10704 (list python-flake8
10705 python-flaky
10706 python-matplotlib
10707 python-pylint
10708 python-pytest
10709 python-rope
10710 python-setuptools
10711 python-setuptools-scm
10712 python-websockets
10713 python-wheel))
10714 (home-page "https://github.com/python-lsp/python-lsp-server")
10715 (synopsis "Python implementation of the Language Server Protocol")
10716 (description
10717 "The Python Language Server @command{pylsp} is an implementation of the
10718Python 3 language specification for the Language Server Protocol (LSP).
10719This tool is used in text editing environments to provide a complete
10720and integrated feature-set for programming Python effectively.")
10721 (license license:expat)))
10722
10723(define-deprecated-package python-language-server
10724 python-lsp-server)
10725
10726(define-public python-black
10727 (package
10728 (name "python-black")
10729 (version "25.1.0")
10730 (source
10731 (origin
10732 (method url-fetch)
10733 (uri (pypi-uri "black" version))
10734 (sha256
10735 (base32
10736 "0ri6xhcrm39c7q5si4wvx1fkq98mvbl4larmj4rxfai2s5f6sj9k"))))
10737 (build-system pyproject-build-system)
10738 (arguments
10739 (list
10740 #:test-flags
10741 ;; On the build farm we run out of resources if we let the build system
10742 ;; autodetect the number of parallel processes.
10743 '(list "--numprocesses" (number->string (min (parallel-job-count) 8)))
10744 #:phases
10745 '(modify-phases %standard-phases
10746 (add-after 'patch-source-shebangs 'use-absolute-file-names
10747 (lambda* (#:key inputs #:allow-other-keys)
10748 (substitute* (find-files "tests" "\\.py$")
10749 (("#!/usr/bin/env python3")
10750 (string-append
10751 "#!" (search-input-file inputs "/bin/python3")))))))))
10752 (propagated-inputs
10753 (list python-aiohttp
10754 python-click
10755 python-mypy-extensions
10756 python-packaging
10757 python-pathspec
10758 python-platformdirs))
10759 (native-inputs
10760 (list python-pytest
10761 python-pytest-xdist
10762 python-hatch-fancy-pypi-readme
10763 python-hatch-vcs
10764 python-hatchling))
10765 (home-page "https://github.com/psf/black")
10766 (synopsis "The uncompromising code formatter")
10767 (description "Black is the uncompromising Python code formatter.")
10768 (license license:expat)))
10769
10770(define-public python-black-macchiato
10771 (package
10772 (name "python-black-macchiato")
10773 (version "1.3.0")
10774 (source
10775 (origin
10776 (method git-fetch)
10777 (uri (git-reference
10778 (url "https://github.com/wbolster/black-macchiato")
10779 (commit version)))
10780 (file-name (git-file-name name version))
10781 (sha256
10782 (base32 "0lc9w50nlbmlzj44krk7kxcia202fhybbnwfh77xixlc7vb4rayl"))))
10783 (build-system pyproject-build-system)
10784 (arguments
10785 (list
10786 #:phases
10787 #~(modify-phases %standard-phases
10788 (add-after 'unpack 'ignore-failing-tests
10789 (lambda _
10790 (substitute* "test_macchiato.py"
10791 (("\\(.*\\n'\\)," all)
10792 (string-append "# " all))))))))
10793 (native-inputs (list python-pytest python-setuptools))
10794 (propagated-inputs (list python-black))
10795 (home-page "https://github.com/wbolster/black-macchiato")
10796 (synopsis "Partial @code{python-black} formatting")
10797 (description
10798 "This package is built on top the @code{python-black} code formatter to
10799enable formatting of partial files.")
10800 (license license:bsd-3)))
10801
10802(define-public python-blinker
10803 (package
10804 (name "python-blinker")
10805 (version "1.9.0")
10806 (source
10807 (origin
10808 (method url-fetch)
10809 (uri (pypi-uri "blinker" version))
10810 (sha256
10811 (base32
10812 "1gs5aigi8v8k4cymm06gdgaylv5yps6yk5n8gigf9v5blxjj5kml"))))
10813 (build-system pyproject-build-system)
10814 (native-inputs
10815 (list python-flit-core
10816 python-pytest
10817 python-pytest-asyncio))
10818 (home-page "https://pythonhosted.org/blinker/")
10819 (synopsis "Fast, simple object-to-object and broadcast signaling")
10820 (description
10821 "Blinker provides a fast dispatching system that allows any number of
10822interested parties to subscribe to events, or \"signals\".")
10823 (license license:expat)))
10824
10825(define-public pelican
10826 (package
10827 (name "pelican")
10828 (version "4.11.0")
10829 (source
10830 (origin
10831 (method url-fetch)
10832 (uri (pypi-uri "pelican" version))
10833 (sha256
10834 (base32 "1n4b8y4vvycxhwmi3z5i96bh0d2rg1mk1hdc6cbkk3c1gd4380mr"))))
10835 (build-system pyproject-build-system)
10836 (arguments
10837 (list
10838 #:test-flags #~(list "-k" (string-append
10839 ;; These tests failed with AssertionError.
10840 "not test_typogrify_ignore_filters"
10841 " and not test_typogrify_ignore_tags"
10842 " and not test_error_on_warning"))))
10843 (native-inputs
10844 (list python-anyio
10845 python-beautifulsoup4
10846 python-lxml
10847 python-pdm-backend
10848 python-pytest
10849 python-smartypants
10850 python-typogrify))
10851 (inputs
10852 (list python-blinker
10853 python-dateutil
10854 ;; Ignoring `guix lint` warning as python-docutils is used to support
10855 ;; reStructuredText processing at runtime.
10856 python-docutils
10857 python-feedgenerator
10858 python-jinja2
10859 python-ordered-set
10860 python-pygments
10861 python-rich
10862 python-tzdata
10863 python-unidecode
10864 python-watchfiles))
10865 (home-page "https://blog.getpelican.com/")
10866 (synopsis "Python-based static site publishing system")
10867 (description
10868 "Pelican is a tool to generate a static blog from reStructuredText,
10869Markdown input files, and more. Pelican uses Jinja2 for templating
10870and is very extensible.")
10871 (license license:agpl3+)))
10872
10873(define-public python-cykhash
10874 (package
10875 (name "python-cykhash")
10876 (version "2.0.1")
10877 (source
10878 (origin
10879 (method url-fetch)
10880 (uri (pypi-uri "cykhash" version))
10881 (sha256
10882 (base32 "1xwpxff4whfvkwvcyhzhdcj5zzq89vvdjmnqy664s4a9yp4lnydl"))))
10883 (build-system pyproject-build-system)
10884 (arguments
10885 (list #:tests? #f)) ;no tests in PyPI, 2.0.1 is not tagged in git
10886 (native-inputs
10887 (list python-cython
10888 python-setuptools))
10889 (home-page "https://github.com/realead/cykhash")
10890 (synopsis "Khash-sets and maps")
10891 (description
10892 "This package is a Cython wrapper for khash-sets/maps. It brings
10893functionality of
10894@url{https://github.com/attractivechaos/klib/blob/master/khash.h, khash} to
10895Python and Cython and can be used seamlessly in numpy or pandas. Numpy's
10896world is lacking the concept of a (hash-)set. This shortcoming is fixed and
10897efficient (memory- and speedwise compared to pandas) @code{unique} and
10898@code{isin} are implemented. Python-set/dict have a big memory-footprint.
10899For some datatypes the overhead can be reduced by using khash by factor 4-8.")
10900 (license license:expat)))
10901
10902(define-public python-cython
10903 ;; TODO: Move to python-build.
10904 (package
10905 (name "python-cython")
10906 (version "3.1.7")
10907 (source
10908 (origin
10909 (method url-fetch)
10910 (uri (pypi-uri "cython" version))
10911 (sha256
10912 (base32 "0gaslzb3virk4v6yh5a7dp6ka1lm267v994g8r25lck1702vjy3g"))))
10913 (build-system pyproject-build-system)
10914 (arguments
10915 (list
10916 #:test-backend #~'custom
10917 #:test-flags
10918 #~(list "runtests.py"
10919 "-vv"
10920 "-j" (number->string (parallel-job-count))
10921 "-x" (string-join
10922 (list "annotate_html"
10923 "Debugger"
10924 ;; It introduces cycle.
10925 "numpy_test"
10926 ;; It fails with AssertionError: Failed doctest test
10927 ;; for complex_numbers_cpp.double_abs.
10928 "complex_numbers_cpp"
10929 ;; This test fails when running on 24 cores.
10930 "cpp_stl_conversion"
10931 #$@(if (not (target-64bit?))
10932 ;; XXX: On 32-bit architectures, running the
10933 ;; parallel tests fails on many-core systems.
10934 ;; See: <https://github.com/cython/cython/issues/2807>.
10935 '("run.parallel"
10936 ;; Test cpp_stl_any.cast_test fails.
10937 ;; See: <https://github.com/cython/cython/issues/5928>.
10938 "cpp_stl_any")
10939 '())
10940 #$@(if (system-hurd?)
10941 '("test_class_ref"
10942 "test_compiler_directives"
10943 "test_lang_version")
10944 '()))
10945 "|"))
10946 #:phases
10947 #~(modify-phases %standard-phases
10948 (add-before 'check 'pre-check
10949 (lambda* (#:key tests? test-flags #:allow-other-keys)
10950 ;; Disable compiler optimizations to greatly reduce the running
10951 ;; time of the test suite.
10952 (setenv "CFLAGS" "-O0")
10953 ;; Some tests require access to "$HOME/.cython".
10954 (setenv "HOME" "/tmp"))))))
10955 (native-inputs
10956 (list libxcrypt
10957 python-setuptools
10958 python-wheel))
10959 ;; we need the full python package and not just the python-wrapper
10960 ;; because we need libpython3.3m.so
10961 (inputs
10962 (list python))
10963 (home-page "https://cython.org/")
10964 (synopsis "C extensions for Python")
10965 (description "Cython is an optimising static compiler for both the Python
10966programming language and the extended Cython programming language. It makes
10967writing C extensions for Python as easy as Python itself.")
10968 (license license:asl2.0)))
10969
10970(define-public python-cython-0
10971 (package
10972 (inherit python-cython)
10973 ;; It's the latest version of 0.29. See
10974 ;; <https://github.com/cython/cython/blob/0.29.37/CHANGES.rst>.
10975 (version "0.29.37")
10976 (source
10977 (origin
10978 (method url-fetch)
10979 (uri (pypi-uri "Cython" version))
10980 (sha256
10981 (base32 "1ysca2r23h12ai9wrym4ci0nvgwm3lfijrpj9xfyxbclvnkd84zq"))))
10982 (arguments
10983 (list
10984 #:test-backend #~'custom
10985 #:test-flags
10986 #~(list "runtests.py"
10987 "-vv"
10988 "-j" (number->string (parallel-job-count))
10989 ;; XXX: On 32-bit architectures, running the parallel tests
10990 ;; fails on many-core systems, see
10991 ;; <https://github.com/cython/cython/issues/2807>.
10992 #$@(if (not (target-64bit?))
10993 #~("-x" "run.parallel")
10994 #~())
10995 #$@(if (system-hurd?)
10996 #~("-x" "test_class_ref"
10997 "-x" "test_compiler_directives"
10998 "-x" "test_lang_version")
10999 #~())
11000 ;; This test fails when running on 24 cores.
11001 "-x" "cpp_stl_conversion")
11002 #:phases
11003 #~(modify-phases %standard-phases
11004 (add-before 'check 'pre-check
11005 ;; some tests require access to "$HOME/.cython"
11006 (lambda _
11007 (setenv "HOME" "/tmp")
11008 ;; Disable compiler optimizations to greatly reduce the running
11009 ;; time of the test suite.
11010 (setenv "CFLAGS" "-O0"))))))))
11011
11012(define-public python-cython-next
11013 (package
11014 (inherit python-cython)
11015 (version "3.2.2")
11016 (source
11017 (origin
11018 (method url-fetch)
11019 (uri (pypi-uri "cython" version))
11020 (sha256
11021 (base32 "0d0n0yyicr7icd4f5kn1wwbjqyad6j4m640xlqlk3ixchgad7bf3"))))))
11022
11023;; It may be removed after 2026-01-24.
11024(define-deprecated/public-alias python-cython-3 python-cython)
11025
11026;; NOTE: when upgrading numpy please make sure that python-numba,
11027;; python-pandas and python-scipy still build, as these three packages are
11028;; often used together.
11029(define-public python-numpy
11030 (package
11031 (name "python-numpy")
11032 (version "2.3.1")
11033 (source
11034 (origin
11035 (method url-fetch)
11036 (uri (string-append
11037 "https://github.com/numpy/numpy/releases/download/v"
11038 version "/numpy-" version ".tar.gz"))
11039 (sha256
11040 (base32 "0aqx8hsw54wfp7iv0h0ljlpsygvmrmi3rjic6rsa6v92lhhaxj8y"))))
11041 (build-system pyproject-build-system)
11042 (arguments
11043 (list
11044 #:modules '((guix build utils)
11045 (guix build pyproject-build-system)
11046 (ice-9 format))
11047 #:test-flags
11048 #~(list "-m" "not slow"
11049 "--numprocesses" (number->string (min 8 (parallel-job-count)))
11050 ;; See: <https://github.com/numpy/numpy/issues/27531>,
11051 ;; <https://github.com/numpy/numpy/issues/17685>,
11052 ;; <https://github.com/numpy/numpy/issues/17635>.
11053 "-k" "not test_api_importable")
11054 #:phases
11055 #~(modify-phases %standard-phases
11056 (add-after 'unpack 'fix-executable-paths
11057 (lambda _
11058 (substitute* "numpy/distutils/exec_command.py"
11059 (("'/bin/sh'")
11060 (format #f "~s" (which "bash"))))
11061 (substitute* "numpy/meson.build"
11062 ;; Relay on python from the PATH instead of full reference
11063 ;; stored in built wheel.
11064 (("'py.full_path\\(\\)'") "'python'"))))
11065 ;; This isn't architecture specific.
11066 ;; TODO: Remove this conditional and apply for all builds.
11067 #$@(if (target-ppc64le?)
11068 #~((add-after 'unpack 'patch-bin-true
11069 (lambda* (#:key inputs #:allow-other-keys)
11070 (substitute* "numpy/_core/tests/test_cpu_features.py"
11071 (("/bin/true")
11072 (search-input-file inputs "bin/true"))))))
11073 #~())
11074 (add-before 'build 'parallelize-build
11075 (lambda _
11076 (setenv "OMP_NUM_THREAD"
11077 (number->string (parallel-job-count)))
11078 (setenv "NPY_NUM_BUILD_JOBS"
11079 (number->string (parallel-job-count)))))
11080 ;; XXX: It fails with an issue "'fenv_t' has not been declared..."
11081 ;; when the gfortran header is used. Remove gfortran from
11082 ;; CPLUS_INCLUDE_PATH as a workaround. Taken from
11083 ;; <https://issues.guix.gnu.org/73439#45>.
11084 (add-after 'set-paths 'hide-gfortran
11085 (lambda* (#:key inputs #:allow-other-keys)
11086 (let ((gfortran (assoc-ref inputs "gfortran")))
11087 (setenv "CPLUS_INCLUDE_PATH"
11088 (string-join
11089 (delete (string-append gfortran "/include/c++")
11090 (string-split (getenv "CPLUS_INCLUDE_PATH") #\:))
11091 ":")))))
11092 (add-before 'build 'configure-blas
11093 (lambda* (#:key inputs #:allow-other-keys)
11094 (call-with-output-file "site.cfg"
11095 (lambda (port)
11096 (format port
11097 "[openblas]
11098libraries = openblas
11099library_dirs = ~a/lib
11100include_dirs = ~:*~a/include~%" #$(this-package-input "openblas"))))))
11101 (replace 'check
11102 (lambda* (#:key tests? test-flags #:allow-other-keys)
11103 (when tests?
11104 (with-directory-excursion #$output
11105 (apply invoke "pytest" test-flags))))))))
11106 (native-inputs
11107 (list gfortran
11108 meson-python
11109 ninja
11110 pkg-config
11111 python-hypothesis
11112 python-mypy
11113 python-pytest
11114 python-pytest-xdist
11115 python-setuptools
11116 python-setuptools
11117 python-typing-extensions
11118 python-wheel))
11119 (home-page "https://numpy.org")
11120 (synopsis "Fundamental package for scientific computing with Python")
11121 (description "NumPy is the fundamental package for scientific computing
11122with Python. It contains among other things: a powerful N-dimensional array
11123object, sophisticated (broadcasting) functions, tools for integrating C/C++
11124and Fortran code, useful linear algebra, Fourier transform, and random number
11125capabilities.")
11126 (properties
11127 '((upstream-name . "numpy")))
11128 (license license:bsd-3)))
11129
11130(define-public python-numpy-1
11131 (package
11132 (inherit python-numpy)
11133 (name "python-numpy")
11134 ;; XXX: Starting from v1.26.0 the project includes a vendored-meson which
11135 ;; is needed for SIMD and BLAS/LAPACK features that are not yet available
11136 ;; in upstream Meson.
11137 ;;
11138 ;; See:
11139 ;; - URL <https://raw.githubusercontent.com/numpy/numpy>
11140 ;; - commit :: 2f3549c9d7c5048621568e431c86bc7530742723
11141 ;; - file <doc/source/building/understanding_meson.rst>
11142 (version "1.26.4") ;; This is the last planned release in the 1.26.x series.
11143 (source
11144 (origin
11145 (method url-fetch)
11146 (uri (string-append
11147 "https://github.com/numpy/numpy/releases/download/v"
11148 version "/numpy-" version ".tar.gz"))
11149 (sha256
11150 (base32
11151 "0410j6jfz1yzm5s0v0yrc1j0q6ih4322357and7arr0jxnlsn0ia"))
11152 (patches (search-patches "python-numpy-gcc-14.patch"))))
11153 (arguments
11154 (list
11155 #:modules '((guix build utils)
11156 (guix build pyproject-build-system)
11157 (ice-9 format))
11158 #:phases
11159 #~(modify-phases %standard-phases
11160 ;; XXX: It fails with an issue "'fenv_t' has not been declared..."
11161 ;; when the gfortran header is used. Remove gfortran from
11162 ;; CPLUS_INCLUDE_PATH as a workaround. Taken from
11163 ;; <https://issues.guix.gnu.org/73439#45>.
11164 (add-after 'set-paths 'hide-gfortran
11165 (lambda* (#:key inputs #:allow-other-keys)
11166 (let ((gfortran (assoc-ref inputs "gfortran")))
11167 (setenv "CPLUS_INCLUDE_PATH"
11168 (string-join
11169 (delete (string-append gfortran "/include/c++")
11170 (string-split (getenv "CPLUS_INCLUDE_PATH") #\:))
11171 ":")))))
11172 (add-before 'build 'relax-gcc-14-strictness
11173 (lambda _
11174 (setenv "CFLAGS"
11175 "-g -O2 -Wno-error=implicit-function-declaration")))
11176 (add-before 'build 'parallelize-build
11177 (lambda _
11178 (setenv "NPY_NUM_BUILD_JOBS"
11179 (number->string (parallel-job-count)))))
11180 (add-before 'build 'configure-blas
11181 (lambda* (#:key inputs #:allow-other-keys)
11182 (call-with-output-file "site.cfg"
11183 (lambda (port)
11184 (format port
11185 "\
11186[openblas]
11187libraries = openblas
11188library_dirs = ~a/lib
11189include_dirs = ~:*~a/include~%"
11190 (dirname (dirname
11191 (search-input-file
11192 inputs "include/openblas_config.h"))))))))
11193 (add-before 'build 'fix-executable-paths
11194 (lambda* (#:key inputs #:allow-other-keys)
11195 ;; Make /gnu/store/...-bash-.../bin/sh the default shell,
11196 ;; instead of /bin/sh.
11197 (substitute* "numpy/distutils/exec_command.py"
11198 (("'/bin/sh'")
11199 (format #f "~s" (search-input-file inputs "bin/bash"))))
11200 ;; Don't try to call '/bin/true' specifically.
11201 (substitute* "numpy/core/tests/test_cpu_features.py"
11202 (("/bin/true") (search-input-file inputs "bin/true")))))
11203 (replace 'check
11204 (lambda* (#:key tests? outputs inputs #:allow-other-keys)
11205 (when tests?
11206 (invoke "./runtests.py" "-vv" "--no-build" "--mode=fast"
11207 "-j" (number->string (parallel-job-count))
11208 ;; Contrary to scipy, the runtests.py script of numpy
11209 ;; does *not* automatically provide -n when -j is used
11210 ;; (see: https://github.com/numpy/numpy/issues/21359).
11211 "--" "-n" (number->string (parallel-job-count))
11212 ;; Disable Pytest Warnings, they are resolved in the
11213 ;; latest 1.x.x: pytest.PytestRemovedIn9Warning: Marks
11214 ;; applied to fixtures have no effect,
11215 ;; DeprecationWarning.
11216 "-p" "no:warnings"
11217 "-k" (string-append
11218 ;; These tests may fail on 32-bit systems (see:
11219 ;; https://github.com/numpy/numpy/issues/18387).
11220 "not test_float_remainder_overflow "
11221 "and not test_pareto "
11222 ;; The 'test_rint_big_int' test fails on older
11223 ;; x86_64 CPUs such as the Core 2 Duo (see:
11224 ;; https://github.com/numpy/numpy/issues/22170).
11225 "and not test_rint_big_int "
11226 ;; They fail to detect compiler.
11227 "and not test_compile1 "
11228 "and not test_compile2 "
11229 ;; Due to disabled warnings
11230 "and not test_getattr_warning "
11231 "and not test_integer_signs "
11232 "and not test_implicit_cast_float_to_int_fails "
11233 "and not test_integer_signs "
11234 ;; The huge_array test is too large for 32-bit (see:
11235 ;; https://bugs.gentoo.org/843599 and
11236 ;; https://bugs.gentoo.org/846548).
11237 ;; TestKind.test_all is a Fortran type failure
11238 ;; that may be toolchain or environment related.
11239 #$@(if (or (target-x86?) (target-arm32?))
11240 `(" and not test_identityless_reduction_huge_array"
11241 " and not (TestKind and test_all)")
11242 '())
11243 ;; This test fails with a Fortran failure (16
11244 ;; expected but got -1), due to the fact that it
11245 ;; requires a 64-bit system.
11246 #$@(if (or (target-x86-32?) (target-arm32?))
11247 `(" and not test_int")
11248 '())
11249 ;; These tests fail when building from aarch64-linux.
11250 #$@(if (target-arm32?)
11251 `(" and not test_features"
11252 " and not test_unary_spurious_fpexception")
11253 '())
11254 ;; These tests seem to fail on machines without
11255 ;; an FPU is still under investigation upstream.
11256 ;; https://github.com/numpy/numpy/issues/20635
11257 #$@(if (target-riscv64?)
11258 `(" and not test_fp_noncontiguous")
11259 '())
11260 ;; They also fail with gcc-14
11261 " and not test_float"
11262 " and not test_fpclass"
11263
11264 ;; These tests fail with gcc-14
11265 " and not test_context_locality"
11266 " and not test_cosh"
11267 " and not test_default_policy_singleton"
11268 " and not test_exp_exceptions"
11269 " and not test_half_fpe"
11270 " and not test_owner_is_base"
11271 " and not test_policy_propagation"
11272 " and not test_set_policy"
11273 " and not test_sinh"
11274 " and not test_square_values"
11275 " and not test_sum"
11276 " and not test_switch_owner"
11277 " and not test_thread_locality"))))))))
11278 (native-inputs
11279 (list meson-python
11280 pkg-config
11281 python-cython
11282 python-hypothesis
11283 python-mypy
11284 python-pytest
11285 python-pytest-xdist
11286 python-setuptools-67 ;see: <https://github.com/numpy/numpy/issues/27531>
11287 python-typing-extensions
11288 python-wheel-0.40
11289 ;; XXX: Avoid to: 'fenv_t' has not been declared in '::' 58 | using ::fenv_t;
11290 ;; See <https://github.com/numpy/numpy/issues/21075#issuecomment-1047976197>,
11291 ;; <https://github.com/numpy/numpy/issues/24318>.
11292 gcc ;fevn.h c[++] include must precede fortran's
11293 gfortran))
11294 (inputs (list bash openblas))))
11295
11296(define-deprecated/public-alias python-numpy-2 python-numpy)
11297
11298(define-public python-numpysane
11299 (package
11300 (name "python-numpysane")
11301 (version "0.42")
11302 (source
11303 (origin
11304 (method git-fetch)
11305 (uri (git-reference
11306 (url "https://github.com/dkogan/numpysane.git")
11307 (commit (string-append "v" version))))
11308 (file-name (git-file-name name version))
11309 (sha256
11310 (base32 "0s38fm88bmq08j5qxfka1wyjs2r9s9arzd1c3c4ixa8k3pisnihr"))))
11311 (build-system pyproject-build-system)
11312 (arguments
11313 (list
11314 #:phases
11315 #~(modify-phases %standard-phases
11316 (add-after 'unpack 'patch
11317 (lambda* (#:key inputs outputs #:allow-other-keys)
11318 (let* ((numpy (assoc-ref inputs "python-numpy"))
11319 (site (site-packages inputs `(("out" . ,numpy)))))
11320 (substitute* "Makefile.common.header"
11321 ;; numpy 2.0 has this--but we don't use numpy 2.0.
11322 (("pkg-config --cflags-only-I numpy")
11323 (format #f "echo -I~a/numpy/core/include" site))))))
11324 (replace 'check
11325 (lambda _
11326 (setenv "CC"
11327 #$(cc-for-target))
11328 (invoke "make" "check"))))))
11329 (propagated-inputs (list python-numpy-1))
11330 (native-inputs (list perl pkg-config python-setuptools))
11331 (home-page "https://github.com/dkogan/numpysane")
11332 (synopsis "More-reasonable core functionality for numpy")
11333 (description
11334 "This package provides more-reasonable core functionality for numpy.
11335
11336A lot of numpysane functionality is inspired by PDL (Perl Data Language).
11337
11338numpysane has:
11339@itemize
11340@item easier broadcasting
11341@item nicer array manipulation
11342@item array concatenation
11343@item manipulation of dimensions
11344@item broadcast-aware inner product
11345@item broadcast-aware outer product
11346@item broadcast-aware 2-norm
11347@item broadcast-aware matrix multiplication
11348@end itemize
11349")
11350 (license license:lgpl2.0+)))
11351
11352(define-public python-numpy-documentation
11353 (package
11354 (inherit python-numpy)
11355 (name "python-numpy-documentation")
11356 (arguments
11357 (list
11358 #:tests? #f ;we're only generating the documentation
11359 #:phases
11360 #~(modify-phases %standard-phases
11361 (add-after 'unpack 'avoid-external-deps
11362 (lambda _
11363 ;; XXX: Avoid theme-switcher to avoid sphinx error
11364 ;; TemplateNotFound('theme-switcher.html')
11365 ;; XXX: Avoid version-switcher because it depends on the value
11366 ;; of external https://numpy.org/doc/_static/versions.json
11367 (substitute* "doc/source/conf.py"
11368 (("\
11369\"navbar_end\": \\[\"theme-switcher\", \"version-switcher\", ")
11370 "\"navbar_end\": ["))))
11371 (add-before 'build 'add-gnu-freefont-to-texmf
11372 (lambda _
11373 ;; XXX: The Sphinx-generated tex output specifies the GNU
11374 ;; FreeFont font to be searched via its extension, which uses
11375 ;; kpathsea instead of fontconfig and fail (see:
11376 ;; https://github.com/sphinx-doc/sphinx/issues/10347). Create a
11377 ;; symlink to GNU FreeFont and add it to the TEXMF tree via
11378 ;; GUIX_TEXMF.
11379 (mkdir-p "texmf-dist/fonts/opentype/public")
11380 (symlink (string-append
11381 #$(this-package-native-input "font-gnu-freefont")
11382 "/share/fonts/opentype")
11383 (string-append
11384 (getcwd) "/"
11385 "texmf-dist/fonts/opentype/public/gnu-freefont"))
11386 (setenv "GUIX_TEXMF" (string-append (getenv "GUIX_TEXMF") ":"
11387 (getcwd) "/texmf-dist"))))
11388 (replace 'build
11389 (lambda _
11390 (chdir "doc")
11391 (let ((sphinxopts (string-append
11392 "SPHINXOPTS=-j"
11393 (number->string (parallel-job-count)))))
11394 ;; Do not treat warnings as errors.
11395 (substitute* "Makefile"
11396 ((" -WT ") " -T "))
11397 (setenv "HOME" "/tmp")
11398 ;; Build the PDF documentation.
11399 (invoke "make" "latex-build" sphinxopts)
11400 ;; FIXME: PDF build fails
11401 ;; (invoke "make" "-C" "build/latex" "all-pdf" sphinxopts)
11402 ;; Build the HTML documentation
11403 (invoke "make" "html" sphinxopts)
11404 ;; Build the Info documentation. The issues worked around
11405 ;; below can be tracked at
11406 ;; https://github.com/numpy/numpy/issues/12278.
11407 (substitute* "source/conf.py"
11408 ;; The root document should be "index", not "contents".
11409 (("\"contents\"") "'index'")
11410 ;; Disable Sphinx extensions that produce broken Texinfo.
11411 ((".*'numpydoc'.*") "")
11412 ((".*'sphinx.ext.autodoc'.*") "")
11413 ((".*'sphinx.ext.autosummary'.*") ""))
11414 (invoke "make" "info" sphinxopts))))
11415 (replace 'install
11416 (lambda _
11417 (let* ((data (string-append #$output "/share"))
11418 (doc (string-append data "/doc/numpy"))
11419 (html (string-append doc "/html"))
11420 (info (string-append data "/info")))
11421 ;; Install the HTML documentation.
11422 (mkdir-p html)
11423 (copy-recursively "build/html" html)
11424 ;; Install the PDF reference and user manuals.
11425 ;; FIXME:
11426 ;; (install-file "build/latex/numpy-ref.pdf" doc)
11427 ;; (install-file "build/latex/numpy-user.pdf" doc)
11428 ;; Install the info manual.
11429 (install-file "build/texinfo/numpy.info" info)
11430 (symlink (string-append html "/_images")
11431 (string-append info "/numpy-figures"))))))))
11432 (native-inputs
11433 (list font-gnu-freefont
11434 perl
11435 python-breathe
11436 python-ipython
11437 python-matplotlib
11438 python-numpy
11439 python-numpydoc
11440 python-pandas
11441 python-pydata-sphinx-theme
11442 python-scipy ;used by matplotlib
11443 python-sphinx
11444 python-sphinx-design
11445 texinfo
11446 (texlive-local-tree
11447 (list texlive-cbfonts
11448 texlive-cm-super
11449 texlive-cmap
11450 texlive-expdlist
11451 texlive-fandol
11452 texlive-greek-fontenc
11453 texlive-latexmk
11454 texlive-polyglossia
11455 texlive-xetex
11456 texlive-xindy))))
11457 (inputs '())
11458 (propagated-inputs '())
11459 (synopsis "Documentation for the @code{python-numpy} package")
11460 (description "This package provides the complete NumPy documentation in
11461the Texinfo, and HTML formats.")))
11462
11463(define-public python-numpy-stl
11464 (package
11465 (name "python-numpy-stl")
11466 (version "3.2.0")
11467 (source
11468 (origin
11469 (method url-fetch)
11470 (uri (pypi-uri "numpy_stl" version))
11471 (sha256
11472 (base32 "0kgxhghl9j5caydb2a9g2n44zvffd94gb6abday0manxkkvw682s"))))
11473 (build-system pyproject-build-system)
11474 (native-inputs
11475 (list python-cython
11476 python-pytest
11477 python-setuptools
11478 python-wheel))
11479 (propagated-inputs
11480 (list python-numpy
11481 python-utils))
11482 (home-page "https://github.com/WoLpH/numpy-stl/")
11483 (synopsis "Read, write and modify binary/ASCII STL files library")
11484 (description
11485 "Library to make reading, writing and modifying both binary and ascii STL
11486files, file format native to the stereolithography CAD software created by 3D
11487Systems, easy.")
11488 (license license:bsd-3)))
11489
11490(define-public python-npx
11491 (package
11492 (name "python-npx")
11493 (version "0.1.6")
11494 (source
11495 (origin
11496 (method git-fetch) ; no source archive in PyPI
11497 (uri (git-reference
11498 (url "https://github.com/sigma-py/npx")
11499 (commit (string-append "v" version))))
11500 (file-name (git-file-name name version))
11501 (sha256
11502 (base32 "0a3rb3ydl13m1r48kdvnbi31566jxm10p36argkz5kjr2ilkrx8v"))))
11503 (build-system pyproject-build-system)
11504 (native-inputs
11505 (list python-networkx
11506 python-pytest
11507 python-setuptools
11508 python-wheel))
11509 (propagated-inputs
11510 (list python-numpy))
11511 (home-page "https://github.com/nschloe/npx")
11512 (synopsis "Extensions for NumPy")
11513 (description "NumPy is a large library used everywhere in scientific
11514computing. That's why breaking backwards-compatibility comes at a
11515significant cost and is almost always avoided, even if the API of some
11516methods is arguably lacking. This package provides drop-in wrappers
11517\"fixing\" those.")
11518 (license license:bsd-3)))
11519
11520(define-public python-munch
11521 (package
11522 (name "python-munch")
11523 (version "4.0.0")
11524 (source
11525 (origin
11526 (method url-fetch)
11527 (uri (pypi-uri "munch" version))
11528 (sha256
11529 (base32
11530 "0d928bdzm0d9s9f058xa72pywps2zjdgvhrp9rm22qqj8r8v2b2l"))))
11531 (build-system pyproject-build-system)
11532 (native-inputs
11533 (list python-astroid
11534 python-pytest
11535 python-setuptools
11536 python-wheel))
11537 (home-page "https://github.com/Infinidat/munch")
11538 (synopsis "Dot-accessible dictionary")
11539 (description "Munch is a dot-accessible dictionary similar to JavaScript
11540objects.")
11541 (license license:expat)))
11542
11543(define-public python-colormath2
11544 (package
11545 (name "python-colormath2")
11546 (version "3.0.3")
11547 (source
11548 (origin
11549 (method git-fetch)
11550 (uri (git-reference
11551 (url "https://github.com/bkmgit/python-colormath2")
11552 (commit version)))
11553 (file-name (git-file-name name version))
11554 (sha256
11555 (base32 "0xxhmmx1mzjggapjmpz8v166lj86xrkq7kak83akcirnq0pz9ihv"))))
11556 (build-system pyproject-build-system)
11557 (propagated-inputs (list python-networkx python-numpy))
11558 (native-inputs (list python-nose2 python-setuptools))
11559 (home-page "https://github.com/bkmgit/python-colormath2")
11560 (synopsis "Color math and conversion library")
11561 (description
11562 "This is a Python library for color math and conversions.")
11563 (license license:bsd-3)))
11564
11565(define-public python-spectra
11566 (package
11567 (name "python-spectra")
11568 (version "0.1.0")
11569 (source
11570 (origin
11571 (method url-fetch)
11572 (uri (pypi-uri "spectra" version))
11573 (sha256
11574 (base32 "0gva48a1rn5yxj6dgy76dnndqaf09k5q2l9r41h2a66b84rf6c3a"))))
11575 (build-system pyproject-build-system)
11576 (propagated-inputs
11577 (list python-colormath2))
11578 (native-inputs
11579 (list python-pytest python-setuptools python-wheel))
11580 (home-page "https://github.com/jsvine/spectra")
11581 (synopsis "Color scales and color conversion")
11582 (description
11583 "This package provides a Python library intended to make color math,
11584color scales, and color space conversion easy. It has support for:
11585
11586@enumerate
11587@item Color scales
11588@item Color ranges
11589@item Color blending
11590@item Brightening/darkening colors
11591@item Saturating/desaturating colors
11592@item Conversion to/from multiple color spaces.
11593@end enumerate\n")
11594 (license license:expat)))
11595
11596(define-public python-pyspnego
11597 (package
11598 (name "python-pyspnego")
11599 (version "0.8.0")
11600 (source (origin
11601 (method url-fetch)
11602 (uri (pypi-uri "pyspnego" version))
11603 (sha256
11604 (base32
11605 "1ps34laa0kvvp33az173hp5l0hnk8cr0bfqmlgw64ry5cv09qjg0"))))
11606 (build-system pyproject-build-system)
11607 (native-inputs
11608 (list python-pytest python-pytest-mock python-setuptools python-wheel))
11609 (propagated-inputs
11610 (list python-cryptography python-gssapi python-krb5 python-ruamel.yaml))
11611 (home-page "https://github.com/jborean93/pyspnego")
11612 (synopsis "Python SPNEGO library")
11613 (description "The @code{pyspnego} Python library handles Negotiate, NTLM,
11614Kerberos (SPNEGO) and CredSSP authentication. It also includes a packet
11615parser that can be used to decode raw NTLM/SPNEGO/Kerberos tokens into a human
11616readable format.")
11617 (license license:expat)))
11618
11619(define-public python-pygit2-1.11
11620 (package
11621 (name "python-pygit2")
11622 (version "1.11.1")
11623 (source
11624 (origin
11625 (method url-fetch)
11626 (uri (pypi-uri "pygit2" version))
11627 (sha256
11628 (base32 "1v34xdvh6i5cn5srwicvp0i2kvv8fzsv0v9p72ng081nsczmhgvr"))))
11629 (build-system pyproject-build-system)
11630 (propagated-inputs (list python-cffi libgit2-1.5))
11631 (native-inputs (list python-pytest python-setuptools python-wheel))
11632 (home-page "https://github.com/libgit2/pygit2")
11633 (synopsis "Python bindings for libgit2")
11634 (description "Pygit2 is a set of Python bindings to the libgit2 shared library.")
11635 ;; GPL2.0 only, with linking exception.
11636 (license license:gpl2)))
11637
11638(define-public python-pygit2
11639 (package/inherit python-pygit2-1.11
11640 (name "python-pygit2")
11641 (version "1.18.2")
11642 (source
11643 (origin
11644 (method url-fetch)
11645 (uri (pypi-uri "pygit2" version))
11646 (sha256
11647 (base32 "0m8g8s72c0xwwayykpj1hf8c1wldhmg1sj8kgxdp2rf9c837xa7c"))))
11648 (propagated-inputs (list python-cffi libgit2))))
11649
11650(define-public python-patiencediff
11651 (package
11652 (name "python-patiencediff")
11653 (version "0.2.15")
11654 (source
11655 (origin
11656 (method url-fetch)
11657 (uri (pypi-uri "patiencediff" version))
11658 (sha256
11659 (base32
11660 "012jjgkkpk563l1mgj2ax4z32h0l558adhr2qa3chfrfsgpi22fh"))))
11661 (build-system pyproject-build-system)
11662 (arguments
11663 (list
11664 #:phases #~(modify-phases %standard-phases
11665 ;; Fails because bin/patiencediff expects two files to diff
11666 (delete 'sanity-check))))
11667 (native-inputs (list python-pytest python-setuptools python-wheel))
11668 (home-page "https://www.breezy-vcs.org/")
11669 (synopsis "Python implementation of the patiencediff algorithm")
11670 (description
11671 "This package contains a Python implementation of the @code{patiencediff}
11672algorithm. Patiencediff provides a good balance of performance, nice output for
11673humans, and implementation simplicity.")
11674 (license license:gpl2+)))
11675
11676(define-public python-merge3
11677 (package
11678 (name "python-merge3")
11679 (version "0.0.15")
11680 (source
11681 (origin
11682 (method git-fetch)
11683 (uri (git-reference
11684 (url "https://github.com/breezy-team/merge3")
11685 (commit (string-append "v" version))))
11686 (file-name (git-file-name name version))
11687 (sha256
11688 (base32 "0p52fdzra86d03p5gwz7wmb2pgzkv0frgdhhg9wfld8qr0611wp4"))))
11689 (build-system pyproject-build-system)
11690 (arguments (list #:test-backend #~'unittest))
11691 (native-inputs (list python-setuptools))
11692 (home-page "https://github.com/breezy-team/merge3")
11693 (synopsis "Python implementation of 3-way merge")
11694 (description "This Python library implements 3-way merge for text.")
11695 (license license:gpl2+)))
11696
11697(define-public python-fancycompleter
11698 (package
11699 (name "python-fancycompleter")
11700 (version "0.9.1")
11701 (source
11702 (origin
11703 (method git-fetch)
11704 (uri (git-reference
11705 (url "https://github.com/pdbpp/fancycompleter")
11706 (commit version)))
11707 (file-name (git-file-name name version))
11708 (sha256
11709 (base32 "04gbnpm2m86wgigaqf03mphacawg203gdgpljx5xzax3vhm8qnxw"))))
11710 (build-system pyproject-build-system)
11711 (arguments
11712 (list
11713 #:phases
11714 #~(modify-phases %standard-phases
11715 (add-after 'unpack 'fix-setup.py
11716 (lambda _
11717 (substitute* "setup.py"
11718 ((".*setupmeta.*")
11719 "")
11720 (("versioning=.*")
11721 (string-append "version='" #$version "',"))
11722 ((".*pyrepl.*") ; broken on Python 3
11723 "")))))))
11724 (native-inputs (list python-pytest python-setuptools))
11725 (home-page "https://github.com/pdbpp/fancycompleter")
11726 (synopsis "TAB completion library for Python")
11727 (description
11728 "@code{fancycompleter} is a module that adds TAB completion to the
11729interactive prompt. It is an extension of the @code{rlcompleter} module from
11730the standard Python library.")
11731 (license license:bsd-3)))
11732
11733(define-public python-ipdb
11734 (package
11735 (name "python-ipdb")
11736 (version "0.13.13")
11737 (source
11738 (origin
11739 (method git-fetch)
11740 (uri (git-reference
11741 (url "https://github.com/gotcha/ipdb")
11742 (commit version)))
11743 (file-name (git-file-name name version))
11744 (sha256
11745 (base32 "151cw13kgfgv2is7kx10zzwp17kkvzz6658srdhgnzm6d5kjjrxk"))))
11746 (build-system pyproject-build-system)
11747 (arguments (list #:test-backend #~'unittest))
11748 (native-inputs (list python-setuptools))
11749 (propagated-inputs (list python-ipython python-toml python-decorator))
11750 (home-page "https://github.com/gotcha/ipdb")
11751 (synopsis "IPython-enhanced Python debugger (pdb)")
11752 (description
11753 "@code{ipdb} exports functions to access the IPython debugger, which
11754features tab completion, syntax highlighting, better tracebacks and better
11755introspection than Python's standard @command{pdb} debugger, with which it
11756shares the same interface.")
11757 (license license:bsd-3)))
11758
11759(define-public python-ipfsspec
11760 (package
11761 (name "python-ipfsspec")
11762 (version "0.4.0")
11763 (source
11764 (origin
11765 (method url-fetch)
11766 (uri (pypi-uri "ipfsspec" version))
11767 (sha256
11768 (base32 "1y4ad9schc76j2lynm7vpwi4q4jzi9vv843zfpisbp8zqgm0rr7l"))))
11769 (build-system pyproject-build-system)
11770 (arguments
11771 (list
11772 #:test-flags
11773 '(list "-m not local_gw"
11774 ;; Require local gateway
11775 "--ignore=test/test_gateway.py"
11776 ;; Require internet
11777 "--ignore=test/test_async.py"
11778 "--ignore=test/test_ipfs.py")))
11779 (propagated-inputs (list python-aiohttp python-fsspec python-requests))
11780 (native-inputs
11781 (list python-pytest
11782 python-pytest-asyncio
11783 python-setuptools
11784 python-wheel))
11785 (home-page "https://github.com/fsspec/ipfsspec")
11786 (synopsis "Read-only implementation of fsspec for IPFS")
11787 (description "This package provides a read-only implementation of
11788@code{fsspec} for IPFS.")
11789 (license license:expat)))
11790
11791(define-public python-pdftotext
11792 (package
11793 (name "python-pdftotext")
11794 (version "3.0.0")
11795 (source
11796 (origin
11797 (method url-fetch)
11798 (uri (pypi-uri "pdftotext" version))
11799 (sha256
11800 (base32 "1ahs7c0qh3gyafxwrg9p4gcqwcrnc7y57adzm0ama52f2lcjnrf3"))))
11801 (build-system pyproject-build-system)
11802 (native-inputs (list python-pytest python-setuptools python-wheel))
11803 (inputs (list poppler))
11804 (home-page "https://github.com/jalan/pdftotext")
11805 (synopsis "Simple PDF text extraction")
11806 (description "Pdftotext is a Python library of PDF text extraction.")
11807 (license license:expat)))
11808
11809(define-public python-pluginbase
11810 (package
11811 (name "python-pluginbase")
11812 (version "1.0.1")
11813 (source
11814 (origin
11815 (method git-fetch)
11816 (uri (git-reference
11817 (url "https://github.com/mitsuhiko/pluginbase")
11818 (commit (string-append "v" version))))
11819 (file-name (git-file-name name version))
11820 (sha256
11821 (base32 "16c089ka8z4wb4mnx6a3dbvibibgzvawm8zgkp7ppadsgb3lc357"))))
11822 (build-system pyproject-build-system)
11823 (arguments
11824 (list
11825 #:phases
11826 #~(modify-phases %standard-phases
11827 (replace 'check
11828 (lambda* (#:key tests? #:allow-other-keys)
11829 (when tests?
11830 (invoke "make" "test")))))))
11831 (native-inputs (list python-pytest python-setuptools))
11832 (home-page "https://github.com/mitsuhiko/pluginbase")
11833 (synopsis "Simple but flexible plugin system for Python")
11834 (description
11835 "PluginBase is a library useful in the development of flexible plugin
11836systems in Python.")
11837 (license license:bsd-3)))
11838
11839(define-public python-node-semver
11840 (package
11841 (name "python-node-semver")
11842 (version "0.8.1")
11843 (source
11844 (origin
11845 (method git-fetch)
11846 (uri (git-reference
11847 (url "https://github.com/podhmo/python-node-semver")
11848 (commit version)))
11849 (file-name (git-file-name name version))
11850 (sha256
11851 (base32 "0az6v4y8awl3dhgrfyikgz2vc8p1k15qwsq6yb8azp54m1fbh5hs"))))
11852 (build-system pyproject-build-system)
11853 (native-inputs (list python-pytest python-setuptools))
11854 (home-page "https://github.com/podhmo/python-node-semver")
11855 (synopsis "Python port of node-semver")
11856 (description
11857 "This module provides a Python version of node-semver, a semantic version
11858parser for Node.js.")
11859 (license license:expat)))
11860
11861(define-public python-norns
11862 (package
11863 (name "python-norns")
11864 (version "0.1.6")
11865 (source
11866 (origin
11867 (method git-fetch)
11868 (uri (git-reference
11869 (url "https://github.com/simonvh/norns")
11870 (commit version)))
11871 (file-name (git-file-name name version))
11872 (sha256
11873 (base32 "0x488xd2dp1clnzpb3gikx416g0fh1bjs25bwi0jmsvqmd80hmb0"))
11874 (patches
11875 (search-patches "python-norns-nose.patch"))))
11876 (build-system pyproject-build-system)
11877 (propagated-inputs (list python-appdirs python-pynose python-pyyaml))
11878 (native-inputs (list python-setuptools))
11879 (home-page "https://github.com/simonvh/norns")
11880 (synopsis "Simple YAML-based config module")
11881 (description "This package provides a simple YAML-based config module.")
11882 (license license:expat)))
11883
11884(define-public python-patch-ng
11885 (package
11886 (name "python-patch-ng")
11887 (version "1.18.1")
11888 (source
11889 (origin
11890 (method git-fetch)
11891 (uri (git-reference
11892 (url "https://github.com/conan-io/python-patch-ng")
11893 (commit version)))
11894 (file-name (git-file-name name version))
11895 (sha256
11896 (base32 "1kr3h0bkcr02zyfsmwmxfv5b4b9vf3bhsvrlwp6cwrfy3q3qnyq8"))))
11897 (build-system pyproject-build-system)
11898 (arguments
11899 (list
11900 #:test-backend #~'custom
11901 #:test-flags #~(list "tests/run_tests.py" "-v")))
11902 (native-inputs (list python-pytest python-setuptools))
11903 (home-page "https://github.com/conan-io/python-patch-ng")
11904 (synopsis "Python library to parse and apply unified diffs")
11905 (description
11906 "Patch NG (New Generation) is a command and Python library to parse and
11907apply unified diffs. It has features such as:
11908@itemize
11909@item automatic correction of common patch formatting corruption
11910@item patch format detection (SVN, Hg, Git)
11911@item nice diffstat histogram.
11912@end itemize")
11913 (license license:expat)))
11914
11915(define-public python-numpydoc
11916 (package
11917 (name "python-numpydoc")
11918 (version "1.5.0")
11919 (source
11920 (origin
11921 (method url-fetch)
11922 (uri (pypi-uri "numpydoc" version))
11923 (sha256
11924 (base32
11925 "0k2z3g4s3w39h1nd293542hl9qv55j29gcr3bkia0rr3ldsppnxh"))))
11926 (build-system pyproject-build-system)
11927 (arguments
11928 (list #:test-flags
11929 '(list "numpydoc/tests"
11930 ;; TODO: unclear why these fail.
11931 "-k" "not test_MyClass and not test_my_function")))
11932 (propagated-inputs (list python-jinja2 python-sphinx))
11933 (native-inputs
11934 (list python-matplotlib
11935 python-pytest
11936 python-pytest-cov
11937 python-setuptools
11938 python-wheel))
11939 (home-page "https://pypi.org/project/numpydoc/")
11940 (synopsis "Numpy's Sphinx extensions")
11941 (description "Sphinx extension to support docstrings in Numpy format.")
11942 (license license:bsd-2)))
11943
11944(define-public python-numexpr
11945 (package
11946 (name "python-numexpr")
11947 (version "2.14.1")
11948 (source
11949 (origin
11950 (method url-fetch)
11951 (uri (pypi-uri "numexpr" version))
11952 (sha256
11953 (base32 "12xla8qkza3xjrqb2yc517z460mqnwi82m9i5v1sbdy7hq80pq2b"))))
11954 (build-system pyproject-build-system)
11955 (arguments
11956 (list
11957 ;; tests: 6039 passed, 8 warnings
11958 #:phases
11959 #~(modify-phases %standard-phases
11960 (replace 'check
11961 (lambda* (#:key tests? test-flags #:allow-other-keys)
11962 (when tests?
11963 (with-directory-excursion #$output
11964 (apply invoke "pytest" "-vv" test-flags))))))))
11965 (native-inputs
11966 (list python-pytest
11967 python-setuptools))
11968 (propagated-inputs
11969 (list python-numpy))
11970 (home-page "https://github.com/pydata/numexpr")
11971 (synopsis "Fast numerical expression evaluator for NumPy")
11972 (description
11973 "Numexpr is a fast numerical expression evaluator for NumPy. With it,
11974expressions that operate on arrays are accelerated and use less memory than
11975doing the same calculation in Python. In addition, its multi-threaded
11976capabilities can make use of all your cores, which may accelerate
11977computations, most specially if they are not memory-bounded (e.g. those using
11978transcendental functions).")
11979 (license license:expat)))
11980
11981(define-public python-cycler
11982 (package
11983 (name "python-cycler")
11984 (version "0.12.1")
11985 (source
11986 (origin
11987 (method git-fetch) ;no tests in PyPI archive
11988 (uri (git-reference
11989 (url "https://github.com/matplotlib/cycler")
11990 (commit (string-append "v" version))))
11991 (file-name (git-file-name name version))
11992 (sha256
11993 (base32 "061b8vxd2kp016pnwik9jg6zqng8khzmg0p298wrz65z50yh1gg4"))))
11994 (build-system pyproject-build-system)
11995 (native-inputs
11996 (list python-pytest
11997 python-setuptools))
11998 (home-page "https://matplotlib.org/cycler/")
11999 (synopsis "Composable keyword argument iterator")
12000 (description
12001 "When using @code{matplotlib} and plotting more than one line, it is
12002common to want to be able to want to be able to cycle over one or more artist
12003styles; but the plotting logic can quickly become involved.
12004To address this and enable easy cycling over arbitrary @code{kwargs}, the
12005@code{Cycler} class was developed.")
12006 (license license:bsd-3)))
12007
12008(define-public python-colorspacious
12009 (package
12010 (name "python-colorspacious")
12011 (version "1.1.2")
12012 (source
12013 (origin
12014 (method git-fetch)
12015 (uri (git-reference
12016 (url "https://github.com/njsmith/colorspacious")
12017 (commit (string-append "v" version))))
12018 (file-name (git-file-name name version))
12019 (sha256
12020 (base32 "0x7nkphr6g5ql5fvgss8l56rgiyjgh6fm8zzs73i94ci9wzlm63w"))))
12021 (build-system pyproject-build-system)
12022 (arguments (list #:tests? #f)) ; No tests.
12023 (propagated-inputs (list python-numpy))
12024 (native-inputs (list python-pytest python-setuptools))
12025 (home-page "https://github.com/njsmith/colorspacious")
12026 (synopsis "Python library for colorspace conversions")
12027 (description
12028 "@code{colorspacious} is a Python library that lets you convert between
12029colorspaces like sRGB, XYZ, CIEL*a*b*, CIECAM02, CAM02-UCS, etc.")
12030 (license license:expat)))
12031
12032(define-public python-propcache
12033 (package
12034 (name "python-propcache")
12035 (version "0.2.1")
12036 (source
12037 (origin
12038 (method url-fetch)
12039 (uri (pypi-uri "propcache" version))
12040 (sha256
12041 (base32 "0r4sq2j6s63wziw8fhnrx0lxlg8ch3z2i6a92ivm7jqridrcwxrz"))))
12042 (build-system pyproject-build-system)
12043 (arguments
12044 (list
12045 #:test-flags '(list "--ignore=tests/test_benchmarks.py")
12046 #:phases
12047 '(modify-phases %standard-phases
12048 (add-after 'unpack 'patch-build-system
12049 (lambda _
12050 ;; XXX: I don't know how to tell it to build the extensions in
12051 ;; place.
12052 (substitute* "packaging/pep517_backend/_backend.py"
12053 (("build_inplace=False") "build_inplace=True")))))))
12054 (native-inputs
12055 (list python-covdefaults
12056 python-cython
12057 python-expandvars
12058 python-pytest
12059 python-pytest-cov
12060 python-pytest-xdist
12061 python-setuptools
12062 python-tomli
12063 python-wheel))
12064 (home-page "https://github.com/aio-libs/propcache")
12065 (synopsis "Accelerated property cache")
12066 (description "The module provides a fast implementation of cached
12067properties for Python 3.9+.")
12068 (license license:asl2.0)))
12069
12070(define-public python-proto-matcher
12071 (package
12072 (name "python-proto-matcher")
12073 (version "0.0.3")
12074 (source
12075 (origin
12076 (method git-fetch)
12077 (uri (git-reference
12078 (url "https://github.com/dayfine/proto-matcher")
12079 (commit version)))
12080 (file-name (git-file-name name version))
12081 (sha256
12082 (base32 "1l0dqnicpk4gpfspdlng026sxnkgzy68x416aw7camwq0513mq5l"))))
12083 (build-system pyproject-build-system)
12084 (native-inputs (list python-pytest python-setuptools))
12085 (arguments (list #:tests? #f)) ; The test suite seems broken (missing data).
12086 (propagated-inputs (list python-protobuf python-pyhamcrest))
12087 (home-page "https://github.com/dayfine/proto-matcher")
12088 (synopsis "PyHamcrest test matchers for protocol buffers")
12089 (description
12090 "This package provides the following PyHamcrest test matchers, that
12091enable matching a protocol buffer message:
12092@table @code
12093@item equals_proto
12094Test the argument equals the given protobuf message.
12095@item approximately
12096Test the argument equals the given protobuf message, while comparing any float
12097field using approximation.
12098@item ignoring_field_paths
12099Test the argument equals the given protobuf message, while ignoring those
12100fields specified in the field paths.
12101@item ignoring_repeated_field_ordering
12102Test the argument equals the given protobuf message, ignoring the ordering of
12103any repeated field.
12104@item partially
12105Test the argument partially equals the given protobuf message, i.e. if a field
12106is in the argument but not in the expected message, it's ignored in the
12107comparison.
12108@end table")
12109 (license license:asl2.0)))
12110
12111(define-public python-matplotlib
12112 (package
12113 (name "python-matplotlib")
12114 (version "3.10.8")
12115 (source
12116 (origin
12117 (method git-fetch)
12118 (uri (git-reference
12119 (url "https://github.com/matplotlib/matplotlib")
12120 (commit (string-append "v" version))))
12121 (file-name (git-file-name name version))
12122 (sha256
12123 (base32 "1rlday52hcyrp7xfbdf4z8lzgnxkpfvjxnl9qmq0jvc3ph3n8k5i"))))
12124 (build-system pyproject-build-system)
12125 (arguments
12126 (list
12127 #:configure-flags
12128 ''(("setup-args" . #("-DrcParams-backend=TkAgg"
12129 "-Dsystem-freetype=true"
12130 "-Dsystem-qhull=true"))
12131 ("install-args" . "--tags=data,python-runtime,runtime,tests"))
12132 #:test-flags
12133 #~(list "-m" "not network"
12134 "-n" (number->string (parallel-job-count))
12135 ;; Run the installed tests, which is what we want since not
12136 ;; everything gets built in the source directory.
12137 "--pyargs" "matplotlib"
12138 "-k"
12139 (string-join
12140 (list
12141 ;; XXX: Disable all image comparison tests because we're using
12142 ;; a newer version of FreeType than matplotlib expects. This
12143 ;; leads to minor differences throughout the tests.
12144 "not image_comparison"
12145 "check_figures_equal"
12146 "png" ;disables many problematic image tests
12147 "test_figure_legend_outside"
12148 "test_ft2font_get_kerning"
12149 "test_normal_axes"
12150 "test_get_tightbbox_polar"
12151 ;; The invisible line ordering test fails due to a too short
12152 ;; timeout (see:
12153 ;; <https://github.com/matplotlib/matplotlib/issues/30809>).
12154 "test_invisible_Line_rendering"
12155 ;; The determinism check test is not deterministic (see:
12156 ;; <https://github.com/matplotlib/matplotlib/issues/30360>)
12157 "test_determinism_check")
12158 " and not "))
12159 #:phases
12160 #~(modify-phases %standard-phases
12161 (add-before 'build 'pretend-version
12162 ;; The version string is usually derived via setuptools-scm, but
12163 ;; without the git metadata available, the version string is set to
12164 ;; '0.0.0'.
12165 (lambda _
12166 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)))
12167 (add-after 'unpack 'patch-commands
12168 (lambda _
12169 (substitute* "lib/matplotlib/tests/test_animation.py"
12170 (("/bin/sh") (which "sh")))))
12171 (add-after 'unpack 'patch-dlopen
12172 (lambda* (#:key inputs #:allow-other-keys)
12173 (substitute* "src/_c_internal_utils.cpp"
12174 (("libX11.so.6")
12175 (search-input-file inputs "lib/libX11.so.6")))))
12176 (add-before 'build 'configure-environment
12177 (lambda* (#:key inputs #:allow-other-keys)
12178 ;; Fix rounding errors when using the x87 FPU.
12179 (when (string-prefix? "i686" #$(%current-system))
12180 (setenv "CFLAGS" "-ffloat-store"))))
12181 (add-before 'check 'chdir
12182 (lambda _
12183 ;; Step out of the source directory to avoid interference.
12184 (chdir "/tmp"))))))
12185 (propagated-inputs
12186 (list python-contourpy
12187 python-cycler
12188 python-dateutil
12189 python-fonttools-minimal
12190 python-importlib-resources
12191 python-kiwisolver
12192 python-numpy
12193 python-packaging
12194 python-pillow
12195 python-pyparsing
12196 `(,python "tk")))
12197 (inputs
12198 (list cairo
12199 freetype
12200 glib
12201 libpng
12202 qhull
12203 tcl
12204 tk))
12205 (native-inputs
12206 (list meson-python
12207 pkg-config
12208 pybind11
12209 python-pytest
12210 python-pytest-timeout
12211 python-pytest-xdist
12212 python-setuptools
12213 python-setuptools-scm
12214 python-wheel))
12215 (home-page "https://matplotlib.org/")
12216 (synopsis "2D plotting library for Python")
12217 (description
12218 "Matplotlib is a Python 2D plotting library which produces publication
12219quality figures in a variety of hardcopy formats and interactive environments
12220across platforms. Matplotlib can be used in Python scripts, the python and
12221ipython shell, web application servers, and six graphical user interface
12222toolkits.")
12223 (license license:psfl)))
12224
12225(define-public python-matplotlib-documentation
12226 (package
12227 (inherit python-matplotlib)
12228 (name "python-matplotlib-documentation")
12229 (arguments
12230 (list
12231 #:tests? #f ;we're only generating documentation
12232 #:phases
12233 #~(modify-phases %standard-phases
12234 (add-after 'unpack 'avoid-external-deps
12235 (lambda _
12236 ;; XXX: Avoid theme-switcher to avoid sphinx error
12237 ;; TemplateNotFound('theme-switcher.html')
12238 ;; XXX: Avoid version-switcher because it depends on an
12239 ;; external file, and we pack only one version anyway.
12240 (substitute* "doc/conf.py"
12241 (("\
12242\"navbar_end\": \\[\"theme-switcher\", \"version-switcher\", ")
12243 "\"navbar_end\": ["))))
12244 (replace 'build
12245 (lambda _
12246 (setenv "HOME" "/tmp")
12247 (chdir "doc")
12248 (invoke "make" "html" "info"
12249 ;; Don't abort on warnings; build in parallel.
12250 (format #f "SPHINXOPTS=-j~a" (parallel-job-count)))))
12251 (replace 'install
12252 (lambda _
12253 (let* ((data (string-append #$output "/share"))
12254 (doc (string-append data "/doc/matplotlib"))
12255 (info (string-append data "/info"))
12256 (html (string-append doc "/html")))
12257 (mkdir-p html)
12258 (copy-recursively "build/html" html)
12259 (install-file "build/texinfo/matplotlib.info" info)
12260 ;; The "matplotlib-figures" directory contains are a subset of
12261 ;; the images produced for the html target; simply create a
12262 ;; symlink to it, saving about 11 MiB.
12263 (symlink (string-append html "/_images")
12264 (string-append info "/matplotlib-figures"))))))))
12265 (native-inputs
12266 (list graphviz
12267 inkscape/pinned
12268 python-colorspacious
12269 python-ipython
12270 python-ipykernel
12271 python-ipywidgets
12272 python-mpl-sphinx-theme
12273 python-numpydoc
12274 python-scipy
12275 python-sphinx
12276 python-sphinx-copybutton
12277 python-sphinx-design
12278 python-sphinx-gallery
12279 python-sphinxcontrib-svg2pdfconverter
12280 texinfo
12281 texlive-dvipng-bin
12282 (texlive-local-tree
12283 (list texlive-amsfonts
12284 texlive-amsmath
12285 texlive-babel
12286 texlive-cm-super
12287 texlive-etoolbox
12288 texlive-expdlist
12289 texlive-fontspec
12290 texlive-times
12291 texlive-type1cm
12292 texlive-underscore
12293 texlive-unicode-math))))
12294 (synopsis "Documentation for the @code{python-matplotlib} package")))
12295
12296(define-public python-matplotlib-inline
12297 (package
12298 (name "python-matplotlib-inline")
12299 (version "0.1.7")
12300 (source
12301 (origin
12302 (method url-fetch)
12303 (uri (pypi-uri "matplotlib_inline" version))
12304 (sha256
12305 (base32 "145bl0ppy4cz1fii3pfixd0fi1jfmkcbsq3bw4b3vgk6qqzb48w4"))))
12306 (build-system pyproject-build-system)
12307 (arguments
12308 (list
12309 ;; Tests disabled because of a circular dependency with IPython.
12310 #:tests? #f
12311 #:phases
12312 #~(modify-phases %standard-phases
12313 ;; Disabled because of a circular dependency with IPython.
12314 (delete 'sanity-check))))
12315 (native-inputs
12316 (list python-setuptools))
12317 (propagated-inputs
12318 (list python-matplotlib
12319 python-traitlets))
12320 (home-page "https://github.com/ipython/matplotlib-inline")
12321 (synopsis "Inline Matplotlib backend for Jupyter")
12322 (description
12323 "This package provides a Matplotlib inline back-end for IPython and
12324Jupyter.")
12325 (license license:bsd-3)))
12326
12327(define-public python-matplotlib-venn
12328 (package
12329 (name "python-matplotlib-venn")
12330 (version "1.1.2")
12331 (source
12332 (origin
12333 (method url-fetch)
12334 (uri (pypi-uri "matplotlib-venn" version))
12335 (sha256
12336 (base32 "1qrnxhi2rbz737fm9mprfr8ig7kk2r99cbzkw8nsddcv7sh0favg"))))
12337 (build-system pyproject-build-system)
12338 (native-inputs (list python-pytest
12339 python-setuptools
12340 python-shapely
12341 python-wheel))
12342 (propagated-inputs
12343 (list python-matplotlib python-numpy python-scipy))
12344 (home-page "https://github.com/konstantint/matplotlib-venn")
12345 (synopsis "Plot area-proportional Venn diagrams")
12346 (description
12347 "This package provides tools for plotting area-proportional two- and
12348three-way Venn diagrams in @code{matplotlib}.")
12349 (license license:expat)))
12350
12351(define-public python-matplotx
12352 (package
12353 (name "python-matplotx")
12354 (version "0.3.10")
12355 (source
12356 (origin
12357 (method git-fetch)
12358 (uri (git-reference
12359 (url "https://github.com/nschloe/matplotx")
12360 (commit (string-append "v" version))))
12361 (file-name (git-file-name name version))
12362 (sha256
12363 (base32 "1j301mr7ai2jmbm5mkva0jd99fzxhyq585pqzqfmrf5pil8j4q8i"))))
12364 (build-system pyproject-build-system)
12365 (arguments
12366 (list
12367 #:test-flags
12368 ;; This test fails with ValueError: not enough values to unpack.
12369 #~(list "--deselect" "tests/test_spy.py::test_cli"
12370 ;; XXX: unknown failure
12371 "--deselect" "tests/test_spy.py::test_png")))
12372 (propagated-inputs
12373 (list python-matplotlib
12374 python-numpy
12375 ;; optional dependencies
12376 python-networkx
12377 python-pypng
12378 python-scipy))
12379 (native-inputs (list python-imageio
12380 python-meshzoo
12381 python-pytest
12382 python-scikit-fem
12383 python-setuptools
12384 python-wheel))
12385 (home-page "https://github.com/nschloe/matplotx")
12386 (synopsis "Minimal matplotlib styles")
12387 (description
12388 "This package includes some extensions for Matplotlib to create
12389clean plots with a minimalistic style.")
12390 (license license:expat)))
12391
12392(define-public python-cplot
12393 (package
12394 (name "python-cplot")
12395 (version "0.9.3")
12396 (source
12397 (origin
12398 (method git-fetch) ;for tests
12399 (uri (git-reference
12400 (url "https://github.com/nschloe/cplot")
12401 (commit (string-append "v" version))))
12402 (file-name (git-file-name name version))
12403 (sha256
12404 (base32 "0zk7hpq358sbympmkms7w2wjs7nw8mdfvkvdasblg2nhqayv42qz"))))
12405 (build-system pyproject-build-system)
12406 (native-inputs
12407 (list python-pytest
12408 python-setuptools
12409 python-wheel))
12410 (propagated-inputs
12411 (list python-matplotlib
12412 python-matplotx
12413 python-npx
12414 python-numpy))
12415 (home-page "https://github.com/nschloe/cplot")
12416 (synopsis "Plot complex-valued functions")
12417 (description "@code{cplot} is a Python library for plotting
12418complex-valued functions.")
12419 (license license:gpl3+)))
12420
12421(define-public python-cppheaderparser
12422 (package
12423 (name "python-cppheaderparser")
12424 (version "2.7.4")
12425 (source
12426 (origin
12427 (method url-fetch)
12428 (uri (pypi-uri "CppHeaderParser" version))
12429 (sha256
12430 (base32 "0hncwd9y5ayk8wa6bqhp551mcamcvh84h89ba3labc4mdm0k0arq"))))
12431 (build-system pyproject-build-system)
12432 (arguments
12433 (list
12434 #:tests? #f)) ; no tests
12435 (propagated-inputs (list python-ply))
12436 (native-inputs (list python-setuptools python-wheel))
12437 (home-page "http://senexcanis.com/open-source/cppheaderparser/")
12438 (synopsis
12439 "Parse C++ header files and generate a data structure representing the class")
12440 (description
12441 "CppHeaderParser is a pure python module that will parse C++ header files
12442and generate a data structure representing the class.")
12443 (license license:bsd-3)))
12444
12445(define-public python-cppy
12446 (package
12447 (name "python-cppy")
12448 (version "1.3.1")
12449 (source
12450 (origin
12451 (method url-fetch)
12452 (uri (pypi-uri "cppy" version))
12453 (sha256
12454 (base32 "0s3d7bjgr9af571y7czswjymnymnihwnyf9ml4p28kw725y31dam"))))
12455 (build-system pyproject-build-system)
12456 (native-inputs
12457 (list python-pytest
12458 python-setuptools
12459 python-setuptools-scm
12460 python-wheel))
12461 (home-page "https://github.com/nucleic/cppy")
12462 (synopsis "C++ header library for Python extension modules")
12463 (description "This package is a small C++ header library which makes it
12464easier to write Python extension modules. The primary feature is a
12465@code{PyObject} smart pointer which automatically handles reference counting
12466and provides convenience methods for performing common object operations.")
12467 (license license:bsd-3)))
12468
12469(define-public python-perfplot
12470 (package
12471 (name "python-perfplot")
12472 (version "0.10.2")
12473 (source (origin
12474 (method url-fetch)
12475 (uri (pypi-uri "perfplot" version))
12476 (sha256
12477 (base32
12478 "0hbyv17f9ra6l6albcrqx4rylmfv2m6z4qsnhb4bar256dralvfp"))))
12479 (build-system pyproject-build-system)
12480 (propagated-inputs (list python-matplotlib
12481 python-matplotx
12482 python-numpy-1
12483 python-rich))
12484 (native-inputs (list python-flit-core
12485 python-pytest))
12486 (home-page "https://github.com/nschloe/perfplot")
12487 (synopsis "Performance plots for Python code snippets")
12488 (description "@code{perfplot} extends Python's timeit by testing
12489snippets with input parameters (e.g., the size of an array) and plotting
12490the results.")
12491 (license license:gpl3+)))
12492
12493(define-public python-socksipy-branch
12494 (package
12495 (name "python-socksipy-branch")
12496 (version "1.01")
12497 (source
12498 (origin
12499 (method url-fetch)
12500 (uri (pypi-uri "SocksiPy-branch" version))
12501 (sha256
12502 (base32 "01l41v4g7fy9fzvinmjxy6zcbhgqaif8dhdqm4w90fwcw9h51a8p"))))
12503 (build-system pyproject-build-system)
12504 (arguments (list #:tests? #f)) ; There are no tests
12505 (native-inputs (list python-setuptools))
12506 (home-page "https://code.google.com/archive/p/socksipy-branch/")
12507 (synopsis "Python SOCKS module")
12508 (description
12509 "SocksiPy - A Python SOCKS client module. It provides a socket-like
12510interface that supports connections to any TCP service through the use of a
12511SOCKS4, SOCKS5 or HTTP proxy. The original version was developed by Dan Haim,
12512this is a branch created by Mario Vilas to address some open issues,as the
12513original project seems to have been abandoned circa 2007.")
12514 (license license:bsd-3)))
12515
12516(define-public python-socksipychain
12517 (package
12518 (name "python-socksipychain")
12519 (properties '((commit . "570c75c55661db175bd733996ed1ab68fc4e3b33")
12520 (revision . "0")))
12521 (version (git-version "2.1.3"
12522 (assoc-ref properties 'revision)
12523 (assoc-ref properties 'commit)))
12524 (source
12525 (origin
12526 (method git-fetch)
12527 (uri (git-reference
12528 (url "https://github.com/pagekite/PySocksipyChain")
12529 (commit (assoc-ref properties 'commit))))
12530 (file-name (git-file-name name version))
12531 (sha256
12532 (base32 "1fi82id1qgh63wm8k1gcxpkaa8ic0mwliq7x3iy9lxihaqmr0zww"))))
12533 (build-system pyproject-build-system)
12534 (arguments (list #:tests? #f)) ; Tests try to access the network.
12535 (native-inputs (list python-setuptools))
12536 (home-page "http://pagekite.net/wiki/Floss/PySocksipyChain/")
12537 (synopsis "Python SOCKS module with chained proxies support")
12538 (description
12539 "SocksiPyChain is a modified version of the SocksiPy SOCKS module, which
12540adds support for arbitrary chaining of proxy servers and various modes of
12541TLS/SSL encryption. It was developed for use in PageKite, and also includes
12542a simple netcat replacement with chaining support.")
12543 (license license:bsd-3)))
12544
12545(define-public python-pycodestyle
12546 (package
12547 (name "python-pycodestyle")
12548 (version "2.12.1")
12549 (source
12550 (origin
12551 (method url-fetch)
12552 (uri (pypi-uri "pycodestyle" version))
12553 (sha256
12554 (base32 "089mszv65gwnz4nq8vryxqanlqk3bh3p4maxrnngdr5wighflf38"))))
12555 (build-system pyproject-build-system)
12556 (arguments
12557 (list
12558 #:test-flags #~(list "-m" "pycodestyle" "--statistics" "pycodestyle.py")
12559 #:phases
12560 #~(modify-phases %standard-phases
12561 ;; Taken from Tox config
12562 ;; <https://github.com/PyCQA/pycodestyle/blob/2.11.0/tox.ini#L16>.
12563 (replace 'check
12564 (lambda* (#:key tests? test-flags #:allow-other-keys)
12565 (when tests?
12566 (apply invoke "python" "-v" test-flags)))))))
12567 (native-inputs
12568 (list python-setuptools
12569 python-wheel))
12570 (home-page "https://pycodestyle.readthedocs.io/")
12571 (synopsis "Python style guide checker")
12572 (description "@code{pycodestyle} (formerly pep8) is a tool to check
12573Python code against some of the style conventions in
12574@url{http://www.python.org/dev/peps/pep-0008/,PEP 8}.")
12575 (license license:expat)))
12576
12577(define-public python-pycollada
12578 (package
12579 (name "python-pycollada")
12580 (version "0.9.2")
12581 (source
12582 (origin
12583 (method git-fetch)
12584 (uri (git-reference
12585 (url "https://github.com/pycollada/pycollada")
12586 (commit (string-append "v" version))))
12587 (file-name (git-file-name name version))
12588 (sha256
12589 (base32 "13pj179p9gdiza409n8mdl7cpfasc3mrmk40p1vqplfdshks75dy"))))
12590 (build-system pyproject-build-system)
12591 (native-inputs
12592 (list python-pytest
12593 python-setuptools))
12594 (propagated-inputs
12595 (list python-numpy
12596 python-dateutil))
12597 (home-page "https://pycollada.readthedocs.io")
12598 (synopsis "Reading and writing collada documents library")
12599 (description
12600 "This package implements a functionality for creating, editing and
12601loading @url{https://www.khronos.org/collada/,COLLADA},which is a
12602COLLAborative Design Activity for establishing an interchange file format for
12603interactive 3D applications.
12604
12605The library allows you to load a COLLADA file and interact with it as a python
12606object. In addition, it supports creating a collada python object from
12607scratch, as well as in-place editing.")
12608 (license license:bsd-3)))
12609
12610(define-public python-pyct
12611 (package
12612 (name "python-pyct")
12613 (version "0.5.0")
12614 (source
12615 (origin
12616 (method url-fetch)
12617 (uri (pypi-uri "pyct" version))
12618 (sha256
12619 (base32 "1856dbrcpc0nxxhlfh3dqzz7xxn5sdi600q45hsprqyqrg2lm7yx"))))
12620 (build-system pyproject-build-system)
12621 (arguments
12622 (list
12623 #:test-flags
12624 ;; These tests want to download example data from the internet.
12625 '(list "-k" (string-append
12626 "not test_examples_with_use_test_data"
12627 " and not test_examples_using_test_data_and_force_with_prexisting_content_in_target"
12628 " and not test_fetch_data_using_test_data_with_no_file_in_data_copies_from_stubs"
12629 " and not test_fetch_data_using_test_data_and_force_with_file_in_data_over_writes"))))
12630 (propagated-inputs (list python-param python-pyyaml))
12631 (native-inputs (list python-flake8 python-pytest python-setuptools python-wheel))
12632 (home-page "https://github.com/holoviz-dev/pyct")
12633 (synopsis "Common packaging tasks")
12634 (description
12635 "This Python package provides utilities to run common packaging tasks,
12636e.g. copy examples, fetch data, etc.")
12637 (license license:bsd-3)))
12638
12639(define-public python-multidict
12640 (package
12641 (name "python-multidict")
12642 (version "6.1.0")
12643 (source
12644 (origin
12645 (method url-fetch)
12646 (uri (pypi-uri "multidict" version))
12647 (sha256
12648 (base32
12649 "0jlgjpclkh5g6vr1danl6alz0cza2jlzdqh3q03d4s8ckfzjxbi2"))))
12650 (build-system pyproject-build-system)
12651 (propagated-inputs (list python-typing-extensions))
12652 (native-inputs
12653 (list python-pytest python-pytest-cov python-setuptools python-wheel))
12654 (home-page "https://github.com/aio-libs/multidict/")
12655 (synopsis "Multidict implementation")
12656 (description "Multidict is dict-like collection of key-value pairs
12657where key might be occurred more than once in the container.")
12658 (license license:asl2.0)))
12659
12660(define-public python-orderedmultidict
12661 (package
12662 (name "python-orderedmultidict")
12663 (version "1.0.1")
12664 (source
12665 (origin
12666 (method url-fetch)
12667 (uri (pypi-uri "orderedmultidict" version))
12668 (sha256
12669 (base32 "1bc2v0yflsxjyyjx4q9wqx0j3bvzcw9z87d5pz4iqac7bsxhn1q4"))))
12670 (build-system pyproject-build-system)
12671 (propagated-inputs
12672 (list python-six))
12673 (native-inputs
12674 (list python-pytest
12675 python-setuptools))
12676 (home-page "https://github.com/gruns/orderedmultidict")
12677 (synopsis "Python Ordered Multivalue Dictionary - omdict")
12678 (description "This package contains a library for ordered multivalue
12679dictionaries. A multivalue dictionary is a dictionary that can store
12680multiple values for the same key. An ordered multivalue dictionary is a
12681multivalue dictionary that retains the order of insertions and deletions.")
12682 (license license:unlicense)))
12683
12684(define-public python-autocommand
12685 (package
12686 (name "python-autocommand")
12687 (version "2.2.2")
12688 (source
12689 (origin
12690 (method url-fetch)
12691 (uri (pypi-uri "autocommand" version))
12692 (sha256
12693 (base32 "0d2zjms5xm236k46la5pnl7i7hs3a12jlp12cw8lk5jm7i1fk3c7"))))
12694 (build-system pyproject-build-system)
12695 (native-inputs
12696 (list python-pytest python-setuptools))
12697 (home-page "https://github.com/Lucretiel/autocommand")
12698 (synopsis "Python library to build a command-line from a function")
12699 (description "@code{autocommand} is library to automatically generate and
12700run simple @code{argparse} parsers from function signatures.")
12701 (license license:lgpl3+)))
12702
12703(define-public python-autopage
12704 (package
12705 (name "python-autopage")
12706 (version "0.5.1")
12707 (source (origin
12708 (method url-fetch)
12709 (uri (pypi-uri "autopage" version))
12710 (sha256
12711 (base32
12712 "169ixll1ncm2a2pcc86665ikjv2lrzs10p6c1w4yj55p3gk3xgh1"))))
12713 (build-system pyproject-build-system)
12714 (arguments
12715 (list
12716 #:phases
12717 #~(modify-phases %standard-phases
12718 (add-before 'check 'disable-e2e-tests
12719 (lambda _
12720 ;; These tests rely on KeyboardInterrupts which do not
12721 ;; work in the build container.
12722 (delete-file "autopage/tests/test_end_to_end.py"))))))
12723 (native-inputs
12724 (list python-pypa-build
12725 python-setuptools
12726 python-wheel
12727 ;; For tests.
12728 python-fixtures
12729 python-pytest
12730 python-testtools))
12731 (home-page "https://github.com/zaneb/autopage")
12732 (synopsis "Automatic paging for console output")
12733 (description
12734 "Autopage is a Python library to automatically display terminal output
12735from a program in a @dfn{pager} such as @command{less}.")
12736 (license license:asl2.0)))
12737
12738(define-public python-dirty-equals
12739 (package
12740 (name "python-dirty-equals")
12741 (version "0.8.0")
12742 (source
12743 (origin
12744 (method git-fetch)
12745 (uri (git-reference
12746 (url "https://github.com/samuelcolvin/dirty-equals")
12747 (commit (string-append "v" version))))
12748 (file-name (git-file-name name version))
12749 (sha256
12750 (base32 "1jp9jbfs90m8jkpcvi798zxxx49a94rzn8gki9fraqhbqxkv76qd"))))
12751 (build-system pyproject-build-system)
12752 (arguments
12753 (list
12754 #:test-flags
12755 ;; This test requires pytest-examples, which in turn requires
12756 ;; python-ruff, which is difficult to package because it is written in
12757 ;; Rust (TODO: Enable when Ruff is in Guix!).
12758 #~(list "--ignore=tests/test_docs.py"
12759 ;; Optional typing check with Pydantic.
12760 "--ignore=tests/test_other.py"
12761 ;; TODO: Some timezones are missing in PyTZ, remove constrain
12762 ;; when updated.
12763 "-k" (string-append "not test_is_datetime_zoneinfo"
12764 " and not test_is_now_tz"
12765 " and not test_tz"))))
12766 (native-inputs
12767 (list python-hatchling
12768 ;; python-pydantic ; introduces cycle, optinoal
12769 python-pytest))
12770 (propagated-inputs
12771 (list python-pytz))
12772 (home-page "https://dirty-equals.helpmanual.io/")
12773 (synopsis "Do dirty (but useful) things with equals")
12774 (description
12775 "@code{dirty-equals} is a Python library that (mis)uses the
12776@code{__eq__} method to make code (generally unit tests) more declarative
12777and therefore easier to read and write.")
12778 (license license:expat)))
12779
12780(define-public python-distlib
12781 (package
12782 (name "python-distlib")
12783 (version "0.3.7")
12784 (source
12785 (origin
12786 (method url-fetch)
12787 (uri (pypi-uri "distlib" version))
12788 (sha256
12789 (base32
12790 "1a27f5p93j9i1l3324qgahs3g8ai91fmx783jpyyla506i5ybbwx"))))
12791 (build-system pyproject-build-system)
12792 (arguments
12793 (list
12794 #:phases
12795 #~(modify-phases %standard-phases
12796 (add-before 'build 'no-/bin/sh
12797 (lambda* (#:key inputs #:allow-other-keys)
12798 (let ((/bin/sh (search-input-file inputs "bin/sh")))
12799 (substitute* '("distlib/scripts.py" "tests/test_scripts.py")
12800 (("/bin/sh") /bin/sh)))))
12801 (add-before 'check 'prepare-test-environment
12802 (lambda _
12803 (setenv "HOME" "/tmp")
12804 ;; NOTE: Any value works, the variable just has to be present.
12805 (setenv "SKIP_ONLINE" "1"))))))
12806 (native-inputs
12807 (list python-pytest python-setuptools python-wheel))
12808 (inputs
12809 (list bash-minimal))
12810 (home-page "https://github.com/pypa/distlib")
12811 (synopsis "Distribution utilities")
12812 (description "Distlib is a library which implements low-level functions that
12813relate to packaging and distribution of Python software. It is intended to be
12814used as the basis for third-party packaging tools.")
12815 (license license:psfl)))
12816
12817(define-public python-distutils-extra
12818 (package
12819 (name "python-distutils-extra")
12820 (version "2.38")
12821 (source
12822 (origin
12823 (method url-fetch)
12824 (uri (string-append "https://launchpad.net/python-distutils-extra/trunk/"
12825 version "/+download/python-distutils-extra-"
12826 version ".tar.gz"))
12827 (sha256
12828 (base32
12829 "0lx15kcbby9zisx33p2h5hgakgwh2bvh0ibag8z0px4j6ifhs41x"))))
12830 (build-system pyproject-build-system)
12831 (arguments
12832 (list #:tests? #f)) ;tests are outdated and broken
12833 (native-inputs (list python-setuptools python-wheel))
12834 (home-page "https://launchpad.net/python-distutils-extra/")
12835 (synopsis "Enhancements to Python's distutils")
12836 (description
12837 "The python-distutils-extra module enables you to easily integrate
12838gettext support, themed icons, and scrollkeeper-based documentation into
12839Python's distutils.")
12840 (license license:gpl2)))
12841
12842(define-public python-olefile
12843 (package
12844 (name "python-olefile")
12845 (version "0.47")
12846 (source
12847 (origin
12848 (method git-fetch)
12849 (uri (git-reference
12850 (url "https://github.com/decalage2/olefile")
12851 (commit (string-append "v" version))))
12852 (file-name (git-file-name name version))
12853 (sha256
12854 (base32 "1ardfp32jgijha6vk7znvnpwgi710c6gj02lk4drv45xj4mw71hv"))))
12855 (build-system pyproject-build-system)
12856 (native-inputs
12857 (list python-pytest
12858 python-setuptools))
12859 (home-page "https://www.decalage.info/python/olefileio")
12860 (synopsis "Read and write Microsoft OLE2 files")
12861 (description
12862 "@code{olefile} can parse, read and write Microsoft OLE2 files (Structured
12863Storage or Compound Document, Microsoft Office). It is an improved version of
12864the OleFileIO module from PIL, the Python Image Library.")
12865 (license license:bsd-3)))
12866
12867(define-public python-property-cached
12868 (package
12869 (name "python-property-cached")
12870 (version "1.6.4")
12871 (source
12872 (origin
12873 (method url-fetch)
12874 (uri (pypi-uri "property-cached" version ".zip"))
12875 (sha256
12876 (base32 "0wxv5sdx1p7ils36j6j6hfscz8v2vzbq212i8y8r0lrnxpqlx71y"))
12877 (patches
12878 (search-patches "python-property-cached-asyncio-3_11.patch"))))
12879 (build-system pyproject-build-system)
12880 (arguments
12881 (list
12882 ;; AssertionError.
12883 #:test-flags #~(list "-k" "not test_threads_ttl_expiry")))
12884 (native-inputs (list python-freezegun python-pytest unzip
12885 python-setuptools python-wheel))
12886 (home-page "https://github.com/althonos/property-cached/")
12887 (synopsis "Decorator for caching properties in classes")
12888 (description "This package provides a decorator for caching properties in
12889classes. It is forked from @code{cached-property}.")
12890 (license license:bsd-3)))
12891
12892(define-public python-pdf2image
12893 (package
12894 (name "python-pdf2image")
12895 (version "1.17.0")
12896 (source
12897 (origin
12898 (method git-fetch)
12899 (uri (git-reference
12900 (url "https://github.com/Belval/pdf2image")
12901 (commit (string-append "v" version))))
12902 (file-name (git-file-name name version))
12903 (sha256
12904 (base32 "0xd8q939zqa8flfcdhbgyadiwqb8sgnd42cbr6n1l2jl9fnix45v"))))
12905 (build-system pyproject-build-system)
12906 (arguments
12907 (list
12908 ;; The following excluded tests assume hardcoded binary paths to
12909 ;; /usr/bin/pdftoppm and /usr/bin/pdftocairo.
12910 #:test-flags
12911 #~(list "--exclude=^test_use_poppler_path$"
12912 "--exclude=^test_use_poppler_path_with_trailing_slash$")))
12913 (propagated-inputs (list python-pillow))
12914 (inputs (list poppler))
12915 (native-inputs (list python-pynose which python-setuptools))
12916 (home-page "https://github.com/Belval/pdf2image")
12917 (synopsis
12918 "Python wrapper around @command{pdftoppm} and @command{pdftocairo}")
12919 (description
12920 "This package provides a Python API wrapping the @command{pdftoppm} and
12921@command{pdftocairo} command line tools. It can convert @file{PDF} files to a
12922Python list with elements of type @code{PIL.Image} (from the
12923@code{python-pillow} library).")
12924 (license license:expat)))
12925
12926(define-public python-pikepdf
12927 (package
12928 (name "python-pikepdf")
12929 (version "8.15.1")
12930 (source
12931 (origin
12932 (method git-fetch)
12933 (uri (git-reference
12934 (url "https://github.com/pikepdf/pikepdf")
12935 (commit (string-append "v" version))))
12936 (file-name (git-file-name name version))
12937 (sha256
12938 (base32 "0hpnb63xp8yaflah3i1z5azh6mg36rz0liy27km47417w2q72v0c"))))
12939 (build-system pyproject-build-system)
12940 (arguments
12941 (list
12942 #:phases
12943 #~(modify-phases %standard-phases
12944 (add-after 'unpack 'set-version
12945 (lambda _
12946 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
12947 (native-inputs
12948 (list pybind11
12949 python-attrs
12950 python-hypothesis
12951 python-setuptools-scm
12952 python-psutil
12953 python-pytest
12954 python-pytest-timeout
12955 python-pytest-xdist
12956 python-dateutil
12957 python-xmp-toolkit
12958 python-tomli
12959 python-setuptools))
12960 (inputs
12961 (list qpdf))
12962 (propagated-inputs
12963 (list python-deprecated python-lxml python-packaging python-pillow))
12964 (home-page "https://github.com/pikepdf/pikepdf")
12965 (synopsis "Read and write PDFs with Python")
12966 (description
12967 "pikepdf is a Python library for reading and writing PDF files.")
12968 (license license:mpl2.0)))
12969
12970(define-public python-pillow
12971 (package
12972 (name "python-pillow")
12973 (version "11.1.0")
12974 (source
12975 (origin
12976 (method url-fetch)
12977 (uri (pypi-uri "pillow" version))
12978 (sha256
12979 (base32 "081abgpz7g013cgzz7pjhmf8m7q626ngza4hnfs76vdk104ag39n"))))
12980 (build-system pyproject-build-system)
12981 (arguments
12982 (list
12983 #:phases
12984 #~(modify-phases %standard-phases
12985 (add-after 'unpack 'patch-ldconfig
12986 (lambda _
12987 (substitute* "setup.py"
12988 (("\\['/sbin/ldconfig', '-p'\\]") "['true']"))))
12989 (replace 'check
12990 (lambda* (#:key tests? #:allow-other-keys)
12991 (when tests?
12992 (setenv "HOME" (getcwd))
12993 (invoke "python" "selftest.py" "--installed")
12994 (invoke "python" "-m" "pytest" "-vv")))))))
12995 (native-inputs (list python-defusedxml
12996 python-markdown2
12997 python-olefile
12998 python-pytest
12999 python-setuptools
13000 python-trove-classifiers))
13001 (inputs (list freetype
13002 lcms
13003 libjpeg-turbo
13004 libtiff
13005 libwebp
13006 openjpeg
13007 zlib))
13008 (home-page "https://python-pillow.org")
13009 (synopsis "Fork of the Python Imaging Library")
13010 (description
13011 "The Python Imaging Library adds image processing capabilities to your
13012Python interpreter. This library provides extensive file format support, an
13013efficient internal representation, and fairly powerful image processing
13014capabilities. The core image library is designed for fast access to data
13015stored in a few basic pixel formats. It should provide a solid foundation for
13016a general image processing tool.")
13017 (properties `((cpe-name . "pillow")))
13018 (license (license:x11-style
13019 "http://www.pythonware.com/products/pil/license.htm"
13020 "The PIL Software License"))))
13021
13022(define-public python-pillow-heif
13023 (package
13024 (name "python-pillow-heif")
13025 (version "1.1.1")
13026 (source
13027 (origin
13028 (method url-fetch)
13029 (uri (pypi-uri "pillow_heif" version))
13030 (sha256
13031 (base32 "1pkbkg88jg6f24xvbg95aq8dm8fa8ffz7zy4rq262m98i658q3pn"))))
13032 (build-system pyproject-build-system)
13033 (inputs (list libheif))
13034 (propagated-inputs (list python-pillow))
13035 (native-inputs (list opencv ; for opencv-python
13036 python-defusedxml
13037 python-numpy
13038 python-packaging
13039 python-pympler
13040 python-pytest
13041 python-setuptools))
13042 (home-page "https://github.com/bigcat88/pillow_heif")
13043 (synopsis "Python interface for libheif library")
13044 (description "This package provides Python bindings for the libheif library
13045and a plugin for Pillow.")
13046 (license license:bsd-3)))
13047
13048(define-public python-pillow-heif-0.22
13049 (package
13050 (inherit python-pillow-heif)
13051 (version "0.22.0")
13052 (source
13053 (origin
13054 (method url-fetch)
13055 (uri (pypi-uri "pillow_heif" version))
13056 (sha256
13057 (base32 "16mkap63d14f69105b3bm8pi64fvpdznncgn48vhgls0jf977m31"))))))
13058
13059(define-public python-pixelmatch
13060 (package
13061 (name "python-pixelmatch")
13062 (version "0.3.0")
13063 (source
13064 (origin
13065 (method git-fetch)
13066 (uri (git-reference
13067 (url "https://github.com/whtsky/pixelmatch-py")
13068 (commit (string-append "v" version))))
13069 (file-name (git-file-name name version))
13070 (sha256
13071 (base32 "0d4579hh5rwdh9djq5j9lf448x68c1iz80wavxiq7sxpmwm1j23a"))))
13072 (build-system pyproject-build-system)
13073 (arguments
13074 ;; XXX: PIL.UnidentifiedImageError despite images being present.
13075 (list #:tests? #f))
13076 (native-inputs
13077 (list python-poetry-core
13078 python-pillow
13079 python-pytest
13080 python-pytest-benchmark))
13081 (home-page "https://github.com/whtsky/pixelmatch-py")
13082 (synopsis "Pixel-level image comparison library")
13083 (description
13084 "This package provides a pixel-level image comparison library for Python,
13085originally created to compare screenshots in tests. Its features include
13086accurate anti-aliased pixels detection and perceptual color difference
13087metrics.")
13088 (license license:isc)))
13089
13090(define-public python-imagecodecs
13091 (package
13092 (name "python-imagecodecs")
13093 (version "2025.8.2")
13094 (source
13095 (origin
13096 (method url-fetch)
13097 (uri (pypi-uri "imagecodecs" version))
13098 (sha256
13099 (base32 "0v7yglk100fnk0m9m5bnfph2vm1jpnxzrzz2lwk06dqcr6m75wia"))
13100 (modules '((guix build utils)))
13101 (snippet #~(for-each delete-file
13102 ;; Delete pre-generated Cython files.
13103 (find-files "imagecodecs" "_.*\\.c$")))))
13104 (build-system pyproject-build-system)
13105 (arguments
13106 (list
13107 ;; tests: 2023 passed, 7841 skipped, 200 deselected, 1626 xfailed, 4 warnings
13108 #:test-flags
13109 ;; Some of those tests are flaky.
13110 #~(list "-k" "not test_cms_identity_transforms")
13111 #:phases
13112 #~(modify-phases %standard-phases
13113 (add-after 'unpack 'create-configuration
13114 (lambda _
13115 ;; By default everything is enabled. We can selectively disable
13116 ;; extensions (and thus dependencies) by deleting them from the
13117 ;; EXTENSIONS dictionary. This is upstream’s preferred way.
13118 (call-with-output-file "imagecodecs_distributor_setup.py"
13119 (lambda (port)
13120 (format port "\
13121def customize_build(EXTENSIONS, OPTIONS):
13122~{ del EXTENSIONS[~s]~%~}~%"
13123 (list "apng" "lzo" "tiff" ; FIXME Wrong version?
13124 ;; Those rely on unpackaged inputs.
13125 "aec" "avif" "bitshuffle" "brunsli" "deflate"
13126 "jetraw" "jpeg2k" "jpegls" "jpegxl" "jpegxr"
13127 "jpegxs" "lerc" "ljpeg" "lzf" "lzham" "mozjpeg"
13128 "pcodec" "sperr" "sz3" "szip" "ultrahdr" "zfp"
13129 "zlibng" "zopfli"))))))
13130 (add-after 'unpack 'fix-sanity-check
13131 (lambda _
13132 ;; XXX: Don't exit twice. The generated script already does that.
13133 (substitute* "imagecodecs/__main__.py"
13134 (("sys\\.exit\\(main\\(\\)\\)")
13135 ""))))
13136 (add-before 'check 'configure-tests
13137 (lambda _
13138 (setenv "HOME" (getcwd)))))))
13139 (inputs
13140 (list brotli
13141 c-blosc
13142 c-blosc2
13143 giflib
13144 lcms
13145 libheif
13146 libjpeg-turbo
13147 libpng
13148 libtiff
13149 libwebp
13150 lz4
13151 lzfse
13152 snappy
13153 xz
13154 zlib
13155 `(,zstd "lib")))
13156 (propagated-inputs
13157 (list python-numpy python-matplotlib python-tifffile))
13158 (native-inputs
13159 (list python-cython python-pytest python-setuptools))
13160 (home-page "https://www.lfd.uci.edu/~gohlke/")
13161 (synopsis "Image transformation, compression, and decompression codecs")
13162 (description
13163 "Imagecodecs is a Python library that provides block-oriented, in-memory
13164buffer transformation, compression, and decompression functions for use in the
13165tifffile, czifile, and other scientific image input/output modules.")
13166 (license license:bsd-3)))
13167
13168(define-public python-property-manager
13169 (package
13170 (name "python-property-manager")
13171 (version "3.0")
13172 (source
13173 (origin
13174 (method git-fetch)
13175 (uri (git-reference
13176 (url "https://github.com/xolox/python-property-manager")
13177 (commit version)))
13178 (file-name (git-file-name name version))
13179 (sha256
13180 (base32 "1v7hjm7qxpgk92i477fjhpcnjgp072xgr8jrgmbrxfbsv4cvl486"))))
13181 (build-system pyproject-build-system)
13182 (native-inputs (list python-pytest python-setuptools))
13183 (propagated-inputs
13184 (list python-verboselogs
13185 python-humanfriendly
13186 python-coloredlogs))
13187 (home-page "https://github.com/xolox/python-property-manager")
13188 (synopsis "Useful property variants for Python programming")
13189 (description
13190 "The @code{property-manager} package defines several custom property
13191variants for Python programming including required properties,writable
13192properties, cached properties, etc.")
13193 (license license:expat)))
13194
13195(define-public python-executing
13196 (package
13197 (name "python-executing")
13198 (version "2.2.0")
13199 (source
13200 (origin
13201 (method url-fetch)
13202 (uri (pypi-uri "executing" version))
13203 (sha256
13204 (base32 "0mb74ajjfhzscvwxr9qazjs2q7il2fvyicm7s58jbzh8h418q42x"))))
13205 (build-system pyproject-build-system)
13206 (arguments
13207 (list
13208 #:test-flags
13209 ;; Test needs IPython
13210 #~(list "-k" "not test_two_statement_lookups")
13211 #:phases
13212 #~(modify-phases %standard-phases
13213 (add-after 'unpack 'fix-tests
13214 (lambda _
13215 ;; See: <https://github.com/alexmojaki/executing/issues/99>.
13216 (substitute* "pyproject.toml"
13217 (("ignore_missing_imports = true.*")
13218 "ignore_missing_imports = true
13219
13220[tool.pytest.ini_options]
13221python_functions = \"test_\"\n")))))))
13222 (native-inputs
13223 (list python-asttokens
13224 python-littleutils
13225 python-pytest
13226 python-rich
13227 python-setuptools
13228 python-setuptools-scm
13229 python-wheel))
13230 (home-page "https://github.com/alexmojaki/executing")
13231 (synopsis "Get information about what a Python frame is currently doing")
13232 (description "This package lets you get information about what a frame is
13233currently doing, particularly the AST node being executed.")
13234 (license license:expat)))
13235
13236(define-public python-executor
13237 (package
13238 (name "python-executor")
13239 (version "23.2")
13240 (source
13241 (origin
13242 (method git-fetch)
13243 (uri (git-reference
13244 (url "https://github.com/xolox/python-executor")
13245 (commit version)))
13246 (file-name (git-file-name name version))
13247 (sha256
13248 (base32 "1mr0662c5l5zx0wjapcprp8p2xawfd0im3616df5sgv79fqzwfqs"))))
13249 (build-system pyproject-build-system)
13250 (arguments
13251 (list #:tests? #f)) ;TODO: tests require root/sudo
13252 (native-inputs (list python-mock python-pytest python-setuptools))
13253 (propagated-inputs
13254 (list python-six
13255 python-property-manager
13256 python-fasteners
13257 python-virtualenv))
13258 (home-page "https://github.com/xolox/python-executor")
13259 (synopsis "Programmer friendly subprocess wrapper")
13260 (description
13261 "The @code{executor} package is a simple wrapper for Python’s subprocess
13262module that makes it very easy to handle subprocesses on UNIX systems with
13263proper escaping of arguments and error checking currently doing, particularly
13264the AST node being executed.")
13265 (license license:expat)))
13266
13267(define-public python-roifile
13268 (package
13269 (name "python-roifile")
13270 (version "2025.5.10")
13271 (source
13272 (origin
13273 (method url-fetch)
13274 (uri (pypi-uri "roifile" version))
13275 (sha256
13276 (base32 "1kiwylcmxckzrqj3xn5ljcjfyx6y2s8bnqjd5psmkb4mjrwiypcf"))))
13277 (build-system pyproject-build-system)
13278 (arguments (list #:tests? #f)) ; There are none.
13279 (native-inputs (list python-setuptools))
13280 (propagated-inputs (list python-numpy))
13281 (home-page "https://www.lfd.uci.edu/~gohlke/")
13282 (synopsis "Read and write ImageJ ROI format")
13283 (description "Roifile is a Python library to read, write, create, and plot
13284ImageJ ROIs, an undocumented and ImageJ application specific format to store
13285regions of interest, geometric shapes, paths, text, etc for image overlays.")
13286 (license license:bsd-3)))
13287
13288(define-public python-lfdfiles
13289 (package
13290 (name "python-lfdfiles")
13291 (version "2025.9.17")
13292 (source
13293 (origin
13294 (method url-fetch)
13295 (uri (pypi-uri "lfdfiles" version))
13296 (sha256
13297 (base32 "0b363vv146icsn86gxc04grq2d5r7xzzabr03xsc7aq9wybgvgqp"))
13298 (modules '((guix build utils)))
13299 (snippet
13300 ;; Delete pre-generated Cython files.
13301 #~(for-each delete-file (find-files "lfdfiles" "_.*\\.c$")))))
13302 (build-system pyproject-build-system)
13303 (arguments
13304 (list #:tests? #f)) ; No tests, despite a test dependency on pytest.
13305 (native-inputs (list python-setuptools))
13306 (propagated-inputs (list python-click python-numpy python-tifffile))
13307 (home-page "https://www.lfd.uci.edu/~gohlke/")
13308 (synopsis "Work with LFD data files")
13309 (description
13310 "Lfdfiles is a Python library and console script for reading, writing,
13311converting, and viewing many of the proprietary file formats used to store
13312experimental data and metadata at the Laboratory for Fluorescence Dynamics.")
13313 (license license:bsd-3)))
13314
13315;; ~8Mo of test files.
13316(define python-av-testdata
13317 (file-union
13318 "python-av-testdata"
13319 (cons*
13320 (let ((file "pexels/time-lapse-video-of-night-sky-857195.mp4"))
13321 `(,(string-append "pyav-curated/" file)
13322 ,(origin
13323 (method url-fetch)
13324 (uri (string-append "https://pyav.org/datasets/" file))
13325 (sha256
13326 (base32 "10fjs2gyha88gzv7pv3njv0fimv61ihz39p1556qazm90xbknzgb")))))
13327 (map
13328 (match-lambda
13329 ((file . hash)
13330 (list (string-append "fate-suite/" file)
13331 (origin
13332 (method url-fetch)
13333 (uri (string-append "http://fate.ffmpeg.org/fate-suite/" file))
13334 (sha256 (base32 hash))))))
13335 '(("aac/latm_stereo_to_51.ts" .
13336 "05h8389i944gb7f2y9c7848vqn8xz1mnm602fwala85npj4z8p4m")
13337 ("h264/extradata-reload-multi-stsd.mov" .
13338 "1rwlkl9vxp925vzh13cq5dfr983jxbkng0w6ivaymqqwvi7bvg5m")
13339 ("amv/MTV_high_res_320x240_sample_Penguin_Joke_MTV_from_WMV.amv" .
13340 "1hiifhdmd0ygzny5mplqdxl3dh9g95384ilkr4ccwv5l9y7hrmiv")
13341 ("audio-reference/chorusnoise_2ch_44kHz_s16.wav" .
13342 "06xybcnv7max9mmj6f1fw8rwz2aawhcyx2wgj1gmn1142kk431ra")
13343 ("h264/interlaced_crop.mp4" .
13344 "04bcmwd6scqn63y6p8i5srbjh9jq1sc95q6vy7srwfhzwxl9cma9")
13345 ("hap/HAPQA_NoSnappy_127x1.mov" .
13346 "1kvf8xs5v29sjqk2p07arl2hlp9z7hb1lb4202v4iqiwva1jmiaq")
13347 ("mkv/codec_delay_opus.mkv" .
13348 "0ll3qnmxnkhqxbh6s2a3clbkbhw5bsbfw6mh6kxdsa463iyyka8r")
13349 ("mov/displaymatrix.mov" .
13350 "1d4jp93hdyfhasxhqmx8lliwsa2w1kv2jj1qh6fqs74aqb6kzb82")
13351 ("mov/mov-1elist-ends-last-bframe.mov" .
13352 "04lyjsm8zncw9aac7vmkc2h45dcyb6y8643s3pg3rgzgcgqkq3nn")
13353 ("mov/white_zombie_scrunch-part.mov" .
13354 "07wg7mxa799z8dcvnbbrr9f0b5l6r42bd7d414isk3kc3jw0z6ka")
13355 ("mpeg2/mpeg2_field_encoding.ts" .
13356 "1f3waj8jhp6v655hnqpxi2bx3b36976vdjmr74hjr7jv2hx3724n")
13357 ("vorbis/vorbis_chapter_extension_demo.ogg" .
13358 "1prhhwi44psk9xji2mvk7rnvk899h5rx9wi3dmzkgwaz11r0cjdk")
13359 ("mxf/track_01_v02.mxf" .
13360 "04gpbma4kxvhn4dr1sh2k4pq2kbpmnmk2s2bdhq081jzap2983q1")
13361 ("png1/55c99e750a5fd6_50314226.png" .
13362 "05rha9vdix0wfibrhpaknh9fzj0cv84q6d2ypxq1wc0y328fc068")
13363 ("qtrle/aletrek-rle.mov" .
13364 "1n6ksjrqrb7gnbvzhj58y5z5jx6bmpgg7lxwzvnbfg9f9ib2yxdr")
13365 ("sub/MovText_capability_tester.mp4" .
13366 "07znmm4bhnp5f40yksnpf7ws94yflsbv169ydkga6rdby6ys2sv3")
13367 ("sub/vobsub.sub" .
13368 "12rwhnv1k7mngvyq026f2xd9dpd9mxmwg82sa9p5r8z54hrw8sjz"))))))
13369
13370(define-public python-av
13371 (package
13372 (name "python-av")
13373 (version "16.0.1")
13374 (source
13375 (origin
13376 (method url-fetch)
13377 (uri (pypi-uri "av" version))
13378 (sha256
13379 (base32 "1gqxzwbgwj164x211lsjgqj8xx9rpjxhzq6rls4mhpqbz9wyfb6x"))))
13380 (build-system pyproject-build-system)
13381 (arguments
13382 (list
13383 ;; Upstream is not great in responding to open issues or change requests.
13384 ;; See:
13385 ;; - <https://github.com/PyAV-Org/PyAV/issues/1942>
13386 ;; - <https://github.com/PyAV-Org/PyAV/issues/1946>
13387 ;; - <https://github.com/PyAV-Org/PyAV/pull/1944>
13388 #:test-flags
13389 ;; Writing to custom IO requires network access.
13390 #~(list "-k" "not test_writing_to_custom_io_dash")
13391 #:phases
13392 #~(modify-phases %standard-phases
13393 (add-before 'check 'pre-check
13394 (lambda _
13395 ;; This would otherwise interfere with finding the installed
13396 ;; av when running tests.
13397 (delete-file-recursively "av")
13398 (setenv "PYAV_TESTDATA_DIR" #+python-av-testdata)
13399 (substitute* "tests/common.py"
13400 (("^os\\.environ\\[\"PYAV_TESTDATA_DIR\"\\] = asset\\(\\)")
13401 "os.environ.setdefault(\"PYAV_TESTDATA_DIR\", asset())")))))))
13402 (native-inputs
13403 (list pkg-config
13404 python-cython
13405 python-numpy
13406 python-pillow
13407 python-pytest
13408 python-setuptools))
13409 (inputs (list ffmpeg))
13410 (home-page "https://github.com/PyAV-Org/PyAV")
13411 (synopsis "Pythonic bindings for FFmpeg's libraries")
13412 (description
13413 "PyAV is a Python library that allows for direct and precise manipulation
13414of media through containers, streams, packets, codecs, and frames. It provides
13415access to the powerful FFmpeg libraries while managing the complex details as
13416much as possible.
13417PyAV also facilitates data transformation and integration with
13418other packages such as Numpy and Pillow. However, working with media is a
13419challenging task and PyAV cannot abstract it away or make all the best decisions
13420for you. If you can accomplish your tasks with the ffmpeg command, PyAV may not
13421be necessary. Nonetheless, PyAV is an essential tool when working with media
13422that requires its specific capabilities.")
13423 (license license:bsd-3)))
13424
13425(define-public python-ffmpeg-python
13426 ;; The latest release (0.2.0) is old and its test suite crashs on Python 3.10.
13427 (package
13428 (name "python-ffmpeg-python")
13429 (properties '((commit . "df129c7ba30aaa9ffffb81a48f53aa7253b0b4e6")
13430 (revision . "0")))
13431 (version (git-version "0.2.0"
13432 (assoc-ref properties 'revision)
13433 (assoc-ref properties 'commit)))
13434 (source
13435 (origin
13436 (method git-fetch)
13437 (uri (git-reference
13438 (url "https://github.com/kkroening/ffmpeg-python.git")
13439 (commit (assoc-ref properties 'commit))))
13440 (file-name (git-file-name name version))
13441 (sha256
13442 (base32 "1zj4ac37n4igfj21zy405mdlvbpv6jyb12wfpszf8zkhhj2qby4c"))))
13443 (build-system pyproject-build-system)
13444 (arguments
13445 (list
13446 #:test-flags
13447 #~(list "-k" "not test_pipe and not test__probe")
13448 #:phases
13449 #~(modify-phases %standard-phases
13450 (add-after 'unpack 'hardcode-ffmpeg
13451 (lambda* (#:key inputs #:allow-other-keys)
13452 (let ((ffmpeg (search-input-file inputs "bin/ffmpeg")))
13453 (substitute* "ffmpeg/_run.py"
13454 (("cmd='ffmpeg'")
13455 (string-append "cmd='" ffmpeg "'")))
13456 (substitute* "ffmpeg/tests/test_ffmpeg.py"
13457 (("out_file.compile\\(\\) == \\['ffmpeg'")
13458 (format #f "out_file.compile() == [~s" ffmpeg)))))))))
13459 (inputs (list ffmpeg))
13460 (propagated-inputs (list python-future))
13461 (native-inputs (list python-future
13462 python-numpy
13463 python-pytest
13464 python-pytest-mock
13465 python-setuptools))
13466 (home-page "https://github.com/kkroening/ffmpeg-python")
13467 (synopsis "Python bindings for FFmpeg with complex filtering support")
13468 (description
13469 "ffmpeg-python allows you to write FFmpeg filtergraphs in familiar
13470Python terms, taking care of running ffmpeg with the correct command-line
13471arguments. It handles arbitrarily large (directed-acyclic) signal graphs.")
13472 (license license:asl2.0)))
13473
13474(define-public python-imageio-ffmpeg
13475 (package
13476 (name "python-imageio-ffmpeg")
13477 (version "0.6.0")
13478 (source
13479 (origin
13480 (method url-fetch)
13481 (uri (pypi-uri "imageio_ffmpeg" version))
13482 (sha256
13483 (base32 "0m8ppa4ap5vnic3jb25hsrq2gn0283x7mfr5z6ln8m80ivnnnmg2"))))
13484 (build-system pyproject-build-system)
13485 (arguments
13486 (list
13487 #:tests? #f ;XXX: tests requrie network access to get FFmpeg data
13488 #:phases
13489 #~(modify-phases %standard-phases
13490 (add-after 'unpack 'hardcode-ffmpeg
13491 (lambda* (#:key inputs #:allow-other-keys)
13492 (substitute* "imageio_ffmpeg/_utils.py"
13493 (("os\\.getenv\\(\"IMAGEIO_FFMPEG_EXE\".*\\)" all)
13494 (string-append "(" all " or \""
13495 (search-input-file inputs "bin/ffmpeg")
13496 "\")"))))))))
13497 (native-inputs
13498 (list python-setuptools
13499 python-wheel))
13500 (inputs
13501 (list ffmpeg))
13502 (home-page "https://github.com/imageio/imageio-ffmpeg")
13503 (synopsis "FFMPEG wrapper for Python")
13504 (description
13505 "This package provides an FFMPEG wrapper for working with video files.
13506It implements generator functions for reading and writing data to and from
13507FFMPEG, reliably terminating the process when done.")
13508 (license license:bsd-2)))
13509
13510(define-public python-imageio-freeimage
13511 (package
13512 (name "python-imageio-freeimage")
13513 (version "0.1.1")
13514 (source
13515 (origin
13516 (method url-fetch)
13517 (uri (pypi-uri "imageio_freeimage" version))
13518 (sha256
13519 (base32 "1la0iv3617m52dnidhhrdaz9dpnlfqs7b83550d3jkjavv30md72"))))
13520 (build-system pyproject-build-system)
13521 (arguments
13522 (list
13523 #:tests? #f ; tests need internet and are not distributed in PyPI
13524 #:phases
13525 #~(modify-phases %standard-phases
13526 ;; imageio_freeimage expects a copy of the library in its source
13527 ;; tree. Changing this would require hacky substitutions.
13528 (add-after 'install 'freeimage-path
13529 (lambda* (#:key inputs #:allow-other-keys)
13530 (let* ((pylib (string-append #$output "/lib/python"
13531 #$(version-major+minor
13532 (package-version python))
13533 "/site-packages"))
13534 (iofi (string-append pylib "/imageio_freeimage")))
13535 (mkdir-p (string-append iofi "/_lib"))
13536 (symlink (search-input-file inputs "lib/libfreeimage.so")
13537 (string-append iofi "/_lib/libfreeimage.so"))))))))
13538 (native-inputs (list python-poetry-core python-requests python-setuptools
13539 python-wheel))
13540 (inputs (list freeimage))
13541 (propagated-inputs (list python-imageio))
13542 (home-page "https://github.com/imageio/imageio-freeimage")
13543 (synopsis "Plugin for ImageIO that wraps the FreeImage library")
13544 (description
13545 "This package provides a plugin for @code{ImageIO} that wraps the
13546@code{FreeImage} library.")
13547 ;; As a derivative work of FreeImage, imageio_freeimage is licensed under
13548 ;; GPLv2 or GPLv3, and the FreeImage Public License (FIPL).
13549 ;; For more information, see the LICENSE file.
13550 (license
13551 (list license:gpl2 license:gpl3
13552 (license:non-copyleft "https://spdx.org/licenses/FreeImage.html")))))
13553
13554(define-public python-imageio
13555 (package
13556 (name "python-imageio")
13557 (version "2.36.1")
13558 (source
13559 (origin
13560 (method url-fetch)
13561 (uri (pypi-uri "imageio" version))
13562 (sha256
13563 (base32
13564 "0qmy8qbnycas6v2a43qw9pxmd23fm3hpq3qb20b9x6kzyhqx5qg4"))))
13565 (build-system pyproject-build-system)
13566 (arguments
13567 (list
13568 #:test-flags #~(list "-m" "not needs_internet"
13569 ;; This attempts to load libGL.so (provided by mesa)
13570 ;; at the Python store path (sys.base_prefix?).
13571 "-k" "not test_findlib2"
13572 "--ignore" "tests/test_freeimage.py")
13573 #:phases
13574 #~(modify-phases %standard-phases
13575 (add-after 'unpack 'fix-source
13576 (lambda* (#:key inputs #:allow-other-keys)
13577 (substitute* "imageio/core/util.py"
13578 (("\"/var/tmp\"")
13579 "os.getenv(\"TMPDIR\", \"/tmp\")")))))))
13580 (propagated-inputs
13581 (list python-imageio-ffmpeg python-numpy python-pillow python-tifffile))
13582 (native-inputs
13583 (list python-fsspec
13584 python-pytest
13585 python-setuptools))
13586 (home-page "https://imageio.github.io/")
13587 (synopsis "Library for reading and writing a wide range of image data")
13588 (description
13589 "Imageio is a Python library that provides an easy interface to read and
13590write a wide range of image data, including animated images, video, volumetric
13591data, and scientific formats.")
13592 (license license:bsd-2)))
13593
13594(define-public python-pyvips
13595 (package
13596 (name "python-pyvips")
13597 (version "3.0.0")
13598 (source
13599 (origin
13600 (method git-fetch) ; PyPI does not include test helpers
13601 (uri (git-reference
13602 (url "https://github.com/libvips/pyvips")
13603 (commit (string-append "v" version))))
13604 (file-name (git-file-name name version))
13605 (sha256
13606 (base32 "017x7i8ssghsdpncjfhk5shdq31784hb5xjalrxl918s86rjwakp"))))
13607 (build-system pyproject-build-system)
13608 (native-inputs
13609 (list pkg-config
13610 python-pytest
13611 python-setuptools
13612 python-wheel))
13613 (inputs
13614 (list glib vips))
13615 (propagated-inputs
13616 (list python-cffi python-pkgconfig))
13617 (home-page "https://github.com/libvips/pyvips")
13618 (synopsis "Python bindings for VIPS")
13619 (description "The @code{pyvips} package provides Python bindings for VIPS,
13620a multithreaded image-processing system with low memory needs.")
13621 (license license:expat)))
13622
13623;; WARNING: This package is a dependency of mesa.
13624;; There are no users in python-xyz for this package, consider to adopt closer
13625;; to Mesa.
13626(define-public python-pycparser
13627 (package
13628 (name "python-pycparser")
13629 (version "2.22")
13630 (source
13631 (origin
13632 (method url-fetch)
13633 (uri (pypi-uri "pycparser" version))
13634 (sha256
13635 (base32
13636 "1xhhxjg460f70ldki4prxmb7zl1bfl3mnjplbc7kkxa0q3lqn729"))))
13637 (outputs '("out" "doc"))
13638 (build-system pyproject-build-system)
13639 (arguments
13640 (list
13641 #:test-backend #~'unittest
13642 #:phases
13643 #~(modify-phases %standard-phases
13644 (add-after 'install 'install-doc
13645 (lambda _
13646 (let* ((data (string-append #$output:doc "/share"))
13647 (doc (string-append data "/doc/" #$name "-" #$version))
13648 (examples (string-append doc "/examples")))
13649 (mkdir-p examples)
13650 (for-each (lambda (file)
13651 (copy-file (string-append "." file)
13652 (string-append doc file)))
13653 '("/README.rst" "/CHANGES" "/LICENSE"))
13654 (copy-recursively "examples" examples)))))))
13655 (native-inputs
13656 (list python-setuptools))
13657 (home-page "https://github.com/eliben/pycparser")
13658 (synopsis "C parser in Python")
13659 (description
13660 "Pycparser is a complete parser of the C language, written in pure Python
13661using the PLY parsing library. It parses C code into an AST and can serve as
13662a front-end for C compilers or analysis tools.")
13663 (license license:bsd-3)))
13664
13665(define-public python-pywavelets
13666 (package
13667 (name "python-pywavelets")
13668 (version "1.8.0")
13669 (home-page "https://github.com/PyWavelets/pywt")
13670 (source (origin
13671 (method url-fetch)
13672 (uri (pypi-uri "pywavelets" version))
13673 (sha256
13674 (base32
13675 "1aimbjxvflmx4qrl17bfzy64pz5ql4s9bhnb8g0ssh28fm2h507k"))))
13676 (build-system pyproject-build-system)
13677 (arguments
13678 (list
13679 #:test-flags '(list "--pyargs" "pywt")
13680 #:phases
13681 #~(modify-phases %standard-phases
13682 ;; The compiled libraries are only in the output at this point,
13683 ;; but they are needed to run tests.
13684 ;; FIXME: This should be handled by the pyargs pytest argument,
13685 ;; but is not for some reason.
13686 (add-before 'check 'pre-check
13687 (lambda _ (chdir #$output))))))
13688 (native-inputs
13689 (list meson
13690 ninja
13691 pkg-config
13692 python-cython
13693 python-meson-python
13694 python-numpy
13695 python-pytest))
13696 (propagated-inputs
13697 (list python-numpy python-scipy))
13698 (synopsis "Wavelet transforms in Python")
13699 (description
13700 "PyWavelets is a library for wavelet transforms in Python. Wavelets are
13701mathematical basis functions that are localized in both time and frequency.
13702Wavelet transforms are time-frequency transforms employing wavelets. They are
13703similar to Fourier transforms, the difference being that Fourier transforms are
13704localized only in frequency instead of in time and frequency.")
13705 (license license:expat)))
13706
13707(define-public python-pywal
13708 (package
13709 (name "python-pywal")
13710 (version "3.3.0")
13711 (source
13712 (origin
13713 (method git-fetch)
13714 (uri (git-reference
13715 (url "https://github.com/dylanaraps/pywal")
13716 (commit version)))
13717 (file-name (git-file-name name version))
13718 (sha256
13719 (base32 "039m7dch479hlwddynacdrr0klz6a5bdly5swqbs94hfimficiyf"))))
13720 (build-system pyproject-build-system)
13721 (arguments
13722 `(#:phases
13723 (modify-phases %standard-phases
13724 (add-before 'check 'fix-home-directory
13725 (lambda _
13726 ;; Tests fail with "Permission denied: '/homeless-shelter'".
13727 (setenv "HOME" "/tmp"))))))
13728 (native-inputs
13729 (list python-pytest
13730 python-setuptools))
13731 (inputs
13732 (list imagemagick))
13733 (home-page "https://github.com/dylanaraps/pywal")
13734 (synopsis "Color palette generator and applicator")
13735 (description
13736 "Pywal is a tool that generates a color palette from the dominant colors
13737in an image. It then applies the colors system-wide and on-the-fly in all of
13738your favourite programs.")
13739 (license license:expat)))
13740
13741(define-public python-pywal16
13742 (package
13743 (name "python-pywal16")
13744 (version "3.8.10")
13745 (source
13746 (origin
13747 (method url-fetch)
13748 (uri (pypi-uri "pywal16" version))
13749 (sha256
13750 (base32 "0836ya6zw0dglh0yldd9apsfvh5f9cxvmy8nc7aw2w8s491yancf"))))
13751 (build-system pyproject-build-system)
13752 (arguments
13753 (list
13754 #:phases
13755 '(modify-phases %standard-phases
13756 (add-before 'check 'set-HOME
13757 (lambda _ (setenv "HOME" "/tmp"))))))
13758 (native-inputs
13759 (list imagemagick
13760 python-pytest
13761 python-setuptools))
13762 (home-page "https://github.com/eylles/pywal16")
13763 (synopsis "16 colors fork of pywal")
13764 (description
13765 "Pywal16 is a tool that generates a color palette from the dominant
13766colors in an image. It then applies the colors system-wide and on-the-fly in
13767all of your favorite programs.")
13768 (license license:expat)))
13769
13770(define-public python-click-didyoumean
13771 (package
13772 (name "python-click-didyoumean")
13773 (version "0.3.1")
13774 (source
13775 (origin
13776 (method git-fetch) ;no tests in PyPI archive
13777 (uri (git-reference
13778 (url "https://github.com/click-contrib/click-didyoumean")
13779 (commit (string-append "v" version))))
13780 (file-name (git-file-name name version))
13781 (sha256
13782 (base32 "1byfqs3m87zfpvssm1al9dvq94gjd0iddpwrzk6205n18wjsphqb"))))
13783 (build-system pyproject-build-system)
13784 (native-inputs
13785 (list python-poetry-core python-pytest))
13786 (propagated-inputs
13787 (list python-click))
13788 (home-page "https://github.com/timofurrer/click-didyoumean")
13789 (synopsis "Git-like did-you-mean feature in Click")
13790 (description
13791 "This plugin enables git-like did-you-mean feature in Click.")
13792 (license license:expat)))
13793
13794(define-public python-pywinrm
13795 (package
13796 (name "python-pywinrm")
13797 (version "0.5.0")
13798 (source
13799 (origin
13800 (method git-fetch)
13801 (uri (git-reference
13802 (url "https://github.com/diyan/pywinrm/")
13803 (commit (string-append "v" version))))
13804 (file-name (git-file-name name version))
13805 (sha256
13806 (base32 "0jp7rps6zg5b6n98lfkwbhv72982sxxnqc4v4i6hjlq1ycjmmb8r"))))
13807 (build-system pyproject-build-system)
13808 (propagated-inputs
13809 (list python-requests python-requests-ntlm python-xmltodict))
13810 (native-inputs
13811 (list python-mock python-pytest python-setuptools))
13812 (home-page "https://github.com/diyan/pywinrm/")
13813 (synopsis "Python library for Windows Remote Management (WinRM)")
13814 (description
13815 "pywinrm is a Python client for the Windows Remote Management (WinRM)
13816service. It allows you to invoke commands on target Windows machines from
13817any machine that can run Python.")
13818 (license license:expat)))
13819
13820(define-public python-manimpango
13821 (package
13822 (name "python-manimpango")
13823 (version "0.5.0")
13824 (source
13825 (origin
13826 (method git-fetch) ; no tests data in PyPi package
13827 (uri (git-reference
13828 (url "https://github.com/ManimCommunity/ManimPango")
13829 (commit (string-append "v" version))))
13830 (file-name (git-file-name name version))
13831 (sha256
13832 (base32 "00mrvswk8yly0m13jq0f432pr19sy3j6w37lrv78ah1j6jz9n50h"))))
13833 (build-system pyproject-build-system)
13834 (arguments
13835 (list
13836 #:phases
13837 #~(modify-phases %standard-phases
13838 (add-before 'check 'build-extensions
13839 (lambda _
13840 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
13841 (native-inputs
13842 (list pkg-config
13843 python-cython
13844 python-pytest
13845 python-pytest-cov
13846 python-setuptools
13847 python-wheel))
13848 (inputs
13849 (list pango))
13850 (home-page "https://manimpango.manim.community/")
13851 (synopsis "Bindings for Pango for using with Manim")
13852 (description
13853 "Python bindings for ManimPango which is a C binding for Pango,
13854using Cython.
13855
13856ManimPango is internally used in Manim to render (non-LaTeX) text.")
13857 (license license:expat)))
13858
13859(define-public python-cairocffi
13860 (package
13861 (name "python-cairocffi")
13862 (version "1.7.1")
13863 (source
13864 (origin
13865 ;; The PyPI archive does not include the documentation, so use Git.
13866 (method git-fetch)
13867 (uri (git-reference
13868 (url "https://github.com/Kozea/cairocffi")
13869 (commit (string-append "v" version))))
13870 (file-name (git-file-name name version))
13871 (sha256
13872 (base32
13873 "08ilpzf1027f5w461yx2cg0ky64pd41kclfklyn8n292dmc9sk4g"))))
13874 (build-system pyproject-build-system)
13875 (outputs '("out" "doc"))
13876 (inputs
13877 (list glib gtk+ gdk-pixbuf cairo))
13878 (native-inputs
13879 (list python-flit-core
13880 python-numpy
13881 python-pikepdf
13882 python-pytest
13883 python-pytest-cov
13884 python-pytest-runner
13885 python-sphinx
13886 python-sphinx-rtd-theme))
13887 (propagated-inputs
13888 (list python-xcffib)) ; used at run time
13889 (arguments
13890 (list
13891 #:phases
13892 #~(modify-phases %standard-phases
13893 (add-after 'unpack 'patch-paths
13894 (lambda* (#:key inputs #:allow-other-keys)
13895 (substitute* "cairocffi/__init__.py"
13896 ;; Hack the dynamic library loading mechanism.
13897 (("find_library\\(library_name\\)")
13898 "\"found\"")
13899 (("filenames = \\(library_filename,\\) \\+ filenames")
13900 "pass")
13901 (("libcairo.so.2")
13902 (search-input-file inputs "/lib/libcairo.so.2")))
13903 (substitute* "cairocffi/pixbuf.py"
13904 (("libgdk_pixbuf-2.0.so.0")
13905 (search-input-file inputs "/lib/libgdk_pixbuf-2.0.so.0"))
13906 (("libgobject-2.0.so.0")
13907 (search-input-file inputs "/lib/libgobject-2.0.so.0"))
13908 (("libglib-2.0.so.0")
13909 (search-input-file inputs "/lib/libglib-2.0.so.0"))
13910 (("libgdk-3.so.0")
13911 (search-input-file inputs "/lib/libgdk-3.so.0")))))
13912 (add-after 'install 'install-doc
13913 (lambda* (#:key inputs #:allow-other-keys)
13914 (let* ((data (string-append #$output:doc "/share"))
13915 (doc (string-append data "/doc/" #$name "-" #$version))
13916 (html (string-append doc "/html")))
13917 (setenv "LD_LIBRARY_PATH"
13918 (string-append (assoc-ref inputs "cairo") "/lib" ":"
13919 (assoc-ref inputs "gdk-pixbuf") "/lib"))
13920 (setenv "LANG" "en_US.UTF-8")
13921 (mkdir-p html)
13922 (for-each (lambda (file)
13923 (copy-file (string-append "." file)
13924 (string-append doc file)))
13925 '("/README.rst" "/NEWS.rst"))
13926 (system* "python" "setup.py" "build_sphinx")
13927 (copy-recursively "docs/_build/html" html)))))))
13928 (home-page "https://github.com/Kozea/cairocffi")
13929 (synopsis "Python bindings and object-oriented API for Cairo")
13930 (description
13931 "Cairocffi is a CFFI-based drop-in replacement for Pycairo, a set of
13932Python bindings and object-oriented API for cairo. Cairo is a 2D vector
13933graphics library with support for multiple backends including image buffers,
13934PNG, PostScript, PDF, and SVG file output.")
13935 (license license:bsd-3)))
13936
13937(define-public python-decorator
13938 (package
13939 (name "python-decorator")
13940 (version "5.2.1")
13941 (source
13942 (origin
13943 (method url-fetch)
13944 (uri (pypi-uri "decorator" version))
13945 (sha256
13946 (base32 "0q03vavcj2hxnv6006wiqnw7bbqq8rpw90yclyq39xsj6wa6dwk5"))))
13947 (build-system pyproject-build-system)
13948 (arguments
13949 (list #:test-backend #~'custom
13950 #:test-flags #~(list "tests/test.py")))
13951 (native-inputs
13952 (list python-setuptools))
13953 (home-page "https://pypi.org/project/decorator/")
13954 (synopsis "Python module to simplify usage of decorators")
13955 (description
13956 "The aim of the decorator module is to simplify the usage of decorators
13957for the average programmer, and to popularize decorators usage giving examples
13958of useful decorators, such as memoize, tracing, redirecting_stdout, locked,
13959etc. The core of this module is a decorator factory.")
13960 (license license:expat)))
13961
13962(define-public python-drmaa
13963 (package
13964 (name "python-drmaa")
13965 (version "0.7.7")
13966 (source
13967 (origin
13968 (method url-fetch)
13969 (uri (pypi-uri "drmaa" version))
13970 (sha256
13971 (base32 "0xzqriqyvk5b8hszbavsyxd29wm3sxirm8zvvdm73rs2iq7w4hkx"))))
13972 (build-system pyproject-build-system)
13973 ;; The test suite requires libdrmaa which is provided by the cluster
13974 ;; environment. At runtime the environment variable DRMAA_LIBRARY_PATH
13975 ;; should be set to the path of the libdrmaa library.
13976 (arguments
13977 (list
13978 #:tests? #f
13979 #:phases
13980 #~(modify-phases %standard-phases
13981 ;; Loading the library fails because DRMAA_LIBRARY_PATH
13982 ;; is not configured.
13983 (delete 'sanity-check))))
13984 (native-inputs (list python-setuptools))
13985 (home-page "https://pypi.org/project/drmaa/")
13986 (synopsis "Python bindings for the DRMAA library")
13987 (description
13988 "A Python package for Distributed Resource Management (DRM) job
13989submission and control. This package is an implementation of the DRMAA 1.0
13990Python language binding specification.")
13991 (license license:bsd-3)))
13992
13993(define-public python-grako
13994 (package
13995 (name "python-grako")
13996 (version "3.99.9")
13997 (source
13998 (origin
13999 (method url-fetch)
14000 (uri (pypi-uri "grako" version ".zip"))
14001 (sha256
14002 (base32 "0r63i68wcnv63rfjkasq1ah81frz61a6mzbcnaxhrkdpx84p7hzw"))
14003 (snippet
14004 #~(begin (use-modules (guix build utils))
14005 (substitute* "grako/grammars.py"
14006 (("from collections import defaultdict, Mapping")
14007 (string-append "from collections import defaultdict\n"
14008 "from collections.abc import Mapping")))
14009 (substitute* '("grako/util.py"
14010 "grako/walkers.py")
14011 (("collections\\.Mapping") "collections.abc.Mapping"))))))
14012 (build-system pyproject-build-system)
14013 ;; XXX: Test file 'grako.ebnf' is missing from archive.
14014 (arguments (list #:tests? #f))
14015 (native-inputs (list unzip python-pytest python-setuptools))
14016 (home-page "https://pypi.org/project/grako")
14017 (synopsis "EBNF parser generator")
14018 (description
14019 "Grako takes a grammar in a variation of EBNF as input, and outputs a
14020memoizing PEG/Packrat parser in Python.")
14021 (license license:bsd-3)))
14022
14023(define-public python-grandalf
14024 (package
14025 (name "python-grandalf")
14026 ;; `guix refresh` will try to upgrade to v0.55555, but that is older.
14027 (version "0.8")
14028 (source
14029 (origin
14030 (method git-fetch)
14031 (uri (git-reference
14032 (url "https://github.com/bdcht/grandalf")
14033 (commit (string-append "v" version))))
14034 (file-name (git-file-name name version))
14035 (sha256
14036 (base32
14037 "199f86hz3g4p237ma4j27rzwmska3bxzsbgq20i4l4pczf9v7ax0"))))
14038 (build-system pyproject-build-system)
14039 (arguments
14040 (list
14041 #:phases
14042 #~(modify-phases %standard-phases
14043 (add-before 'build 'patch-requirements
14044 (lambda _
14045 (substitute* "setup.py"
14046 (("install_requires=\\['pyparsing'],") "")))))))
14047 (native-inputs
14048 (list python-setuptools python-pytest))
14049 (propagated-inputs
14050 (list python-numpy python-ply))
14051 (home-page "https://github.com/bdcht/grandalf")
14052 (synopsis "Graph and drawing algorithms framework")
14053 (description
14054 "Grandalf is a Python package made for experimentations with graphs
14055drawing algorithms. It is written in pure Python, and currently implements
14056two layouts: the Sugiyama hierarchical layout and the force-driven or energy
14057minimization approach. While not as fast or featured as graphviz or other
14058libraries like OGDF (C++), it provides a way to walk and draw graphs no larger
14059than thousands of nodes, while keeping the source code simple enough to tweak
14060and hack any part of it for experimental purpose. With a total of about 1500
14061lines of Python, the code involved in drawing the Sugiyama (dot) layout fits
14062in less than 600 lines. The energy minimization approach is comprised of only
14063250 lines!
14064
14065Grandalf does only 2 not-so-simple things:
14066@itemize
14067@item computing the nodes (x,y) coordinates (based on provided nodes
14068dimensions, and a chosen layout)
14069@item routing the edges with lines or nurbs
14070@end itemize
14071
14072It doesn’t depend on any GTK/Qt/whatever graphics toolkit. This means that it
14073will help you find where to draw things like nodes and edges, but it’s up to
14074you to actually draw things with your favorite toolkit.")
14075 ;; The user can choose either license.
14076 (license (list license:gpl2 license:epl1.0))))
14077
14078(define-public python-gridmap
14079 (package
14080 (name "python-gridmap")
14081 (version "0.15.0")
14082 (source
14083 (origin
14084 (method git-fetch)
14085 (uri (git-reference
14086 (url "https://github.com/pygridtools/gridmap")
14087 (commit (string-append "v" version))))
14088 (file-name (git-file-name name version))
14089 (sha256
14090 (base32 "0w1sxvhv5ldbzkx70q7036yvny0zsylc4zj7nzmp3nhjdl8whlrm"))))
14091 (build-system pyproject-build-system)
14092 (arguments
14093 (list #:tests? #f ;XXX: freezes or timeout
14094 #:test-backend #~'nose))
14095 (native-inputs
14096 (list ;; python-pynose
14097 python-setuptools))
14098 (propagated-inputs
14099 (list python-cherrypy
14100 python-cloudpickle
14101 python-psutil
14102 python-drmaa
14103 python-pyzmq))
14104 (home-page "https://github.com/pygridtools/gridmap")
14105 (synopsis "Create jobs on a cluster directly from Python")
14106 (description
14107 "Gridmap is a Python package to allow you to easily create jobs on the
14108cluster directly from Python. You can directly map Python functions onto the
14109cluster without needing to write any wrapper code yourself.")
14110 (license license:gpl3+)))
14111
14112(define-public python-honcho
14113 (package
14114 (name "python-honcho")
14115 (version "2.0.0")
14116 (source
14117 (origin
14118 (method git-fetch)
14119 (uri (git-reference
14120 (url "https://github.com/nickstenning/honcho")
14121 (commit (string-append "v" version))))
14122 (file-name (git-file-name name version))
14123 (sha256
14124 (base32 "0hdp4cr6imxrlyg9x9xj5r6qdmgi63ffvmqjrr1kjs3qapan6s4l"))))
14125 (build-system pyproject-build-system)
14126 (arguments
14127 ;; Tests below fail with the error
14128 ;; ValueError: The 'honcho.export.xxx' package was not installed
14129 ;; in a way that PackageLoader understands.
14130 ;; Probably safe because it's testing for different init systems.
14131 (list #:test-flags #~(list "--ignore" "tests/integration/test_export.py"
14132 "--ignore" "tests/test_export_runit.py"
14133 "--ignore" "tests/test_export_supervisord.py"
14134 "--ignore" "tests/test_export_systemd.py"
14135 "--ignore" "tests/test_export_upstart.py")))
14136 (native-inputs
14137 (list python-jinja2 python-mock python-pytest python-setuptools python-wheel))
14138 (propagated-inputs
14139 (list python-colorama))
14140 (home-page "https://github.com/nickstenning/honcho")
14141 (synopsis "Manage Procfile-based applications")
14142 (description
14143 "A Procfile is a file which describes how to run an application
14144consisting of several processes. honcho starts all listed processes.
14145The output of all running processes is collected by honcho and
14146displayed.")
14147 (license license:expat)))
14148
14149(define-public python-hsluv
14150 (package
14151 (name "python-hsluv")
14152 (version "5.0.4")
14153 (source
14154 (origin
14155 (method url-fetch)
14156 (uri (pypi-uri "hsluv" version))
14157 (sha256
14158 (base32 "0bmpd7qxcvin8szblilxmw50v7mygf6a6i180h82123s893gk092"))))
14159 (build-system pyproject-build-system)
14160 (native-inputs
14161 (list python-pytest python-setuptools))
14162 (home-page "https://www.hsluv.org")
14163 (synopsis "Human-friendly HSL colour space implemented in Python")
14164 (description
14165 "Human-friendly @acronym{Hue Saturation Lightness,HSL}. HSLuv extends
14166@url{http://en.wikipedia.org/wiki/CIELUV,CIELUV} with a new saturation
14167component that allows you to span all the available chroma as a neat
14168percentage.")
14169 (license license:expat)))
14170
14171(define-public python-pebble
14172 (package
14173 (name "python-pebble")
14174 (version "5.1.3")
14175 (source
14176 (origin
14177 (method git-fetch)
14178 (uri (git-reference
14179 (url "https://github.com/noxdafox/pebble")
14180 (commit version)))
14181 (file-name (git-file-name name version))
14182 (sha256
14183 (base32 "1x3rvgm5b0g33xlh8w68r50zwqrdwjafwri8y2lzxny8y4i01ffp"))))
14184 (build-system pyproject-build-system)
14185 (native-inputs (list python-pytest python-setuptools))
14186 (home-page "https://github.com/noxdafox/pebble")
14187 (synopsis "Threading and multiprocessing for Python")
14188 (description
14189 "Pebble aims to help manage threads and processes in an easier way. It
14190wraps Python's standard library threading and multiprocessing objects.")
14191 (license license:lgpl3+)))
14192
14193(define-public python-pexpect
14194 (package
14195 (name "python-pexpect")
14196 (version "4.9.0")
14197 (source
14198 (origin
14199 (method url-fetch)
14200 (uri (pypi-uri "pexpect" version))
14201 (sha256
14202 (base32 "03ykxacc64ijldbpa31v5lxw93an0z0xmhm21q2i369w7w942zgf"))))
14203 (build-system pyproject-build-system)
14204 (arguments
14205 (list
14206 #:test-flags
14207 #~(list "-k" (string-join
14208 (list
14209 ;; Disable failing test, see
14210 ;; <https://github.com/pexpect/pexpect/issues/568>.
14211 "not test_bash"
14212 ;; Fails with attempt to find OpenSSL.
14213 "test_large_stdout_stream"
14214 ;; Tests fail while trying to find
14215 ;; tmp-pexpect-xxxxxxxxxxxx directories.
14216 "test_run_uses_env"
14217 "test_run_uses_env_path"
14218 "test_run_uses_env_path_over_path"
14219 "test_spawn_uses_env"
14220 ;; Fails with assertion error: assert 0 == 500
14221 "test_before_across_chunks"
14222 ;; Bash is enough for tests.
14223 "test_zsh")
14224 " and not "))
14225 #:phases
14226 #~(modify-phases %standard-phases
14227 (add-before 'check 'prepare-tests
14228 (lambda _
14229 (substitute* (find-files "tests")
14230 (("/bin/bash") (which "bash"))
14231 (("/bin/echo") (which "echo"))
14232 (("/bin/ls") (which "ls"))
14233 (("/bin/which") (which "which"))
14234 ;; Many tests try to use the /bin directory which is not
14235 ;; present in the build environment. Use one that's non-empty
14236 ;; and unlikely to change.
14237 (("/bin'") "/dev'")))))))
14238 (native-inputs
14239 (list bash ;full Bash for 'test_replwrap.py'
14240 man-db
14241 python-pytest
14242 python-setuptools
14243 python-wheel
14244 which))
14245 (propagated-inputs
14246 (list python-ptyprocess))
14247 (home-page "https://pexpect.readthedocs.org/")
14248 (synopsis "Controlling interactive console applications")
14249 (description
14250 "Pexpect is a pure Python module for spawning child applications;
14251controlling them; and responding to expected patterns in their output. Pexpect
14252works like Don Libes’ Expect. Pexpect allows your script to spawn a child
14253application and control it as if a human were typing commands.")
14254 (license license:isc)))
14255
14256(define-public python-sexpdata
14257 (package
14258 (name "python-sexpdata")
14259 (version "1.0.2")
14260 (source
14261 (origin
14262 (method url-fetch)
14263 (uri (pypi-uri "sexpdata" version))
14264 (sha256
14265 (base32
14266 "02f1v96wzqf3jgwbp1fvankszkzvyff53fa4ks7nyxpnc41ppdlj"))))
14267 (build-system pyproject-build-system)
14268 (arguments
14269 (list #:tests? #f)) ; no tests
14270 (native-inputs (list python-setuptools python-wheel))
14271 (home-page "https://github.com/jd-boyd/sexpdata")
14272 (synopsis "S-expression parser for Python")
14273 (description
14274 "Sexpdata is an S-expression parser/serializer. It has load and dump
14275functions like pickle, json or PyYAML module.")
14276 (license license:bsd-3)))
14277
14278(define-public python-pathable
14279 (package
14280 (name "python-pathable")
14281 (version "0.4.3")
14282 (source
14283 (origin
14284 (method url-fetch)
14285 (uri (pypi-uri "pathable" version))
14286 (sha256
14287 (base32 "1ayw9jzlw0qrz51rcfbba00xqq0c7vs3lgwrib67c1z5bcqrv1jw"))))
14288 (build-system pyproject-build-system)
14289 (arguments (list #:tests? #false)) ;there are none
14290 (native-inputs (list python-poetry-core))
14291 (home-page "https://github.com/p1c2u/pathable")
14292 (synopsis "Object-oriented paths")
14293 (description "With this package you can traverse resources like paths and
14294access resources on demand with separate accessor layer.")
14295 (license license:asl2.0)))
14296
14297(define-public python-importlib-resources
14298 (package
14299 (name "python-importlib-resources")
14300 (version "6.5.2")
14301 (source (origin
14302 (method url-fetch)
14303 (uri (pypi-uri "importlib_resources" version))
14304 (sha256
14305 (base32
14306 "0b7dizkjyjpwqm2dsmb40fy7iskwl3xv93yr9622ik2vxynqfpqq"))))
14307 (build-system pyproject-build-system)
14308 (native-inputs
14309 (list python-jaraco-test
14310 python-jaraco-collections
14311 python-pytest
14312 python-setuptools
14313 python-setuptools-scm
14314 python-zipp))
14315 (home-page "https://importlib-resources.readthedocs.io/")
14316 (synopsis "Read resources from Python packages")
14317 (description
14318 "@code{importlib_resources} is a backport of Python 3's standard library
14319@code{importlib.resources} module for Python 2.7, and Python 3.")
14320 (license license:asl2.0)))
14321
14322(define-public python-importlib-metadata
14323 (package
14324 (name "python-importlib-metadata")
14325 (version "8.7.0")
14326 (source
14327 (origin
14328 (method url-fetch)
14329 (uri (pypi-uri "importlib_metadata" version))
14330 (sha256
14331 (base32
14332 "004h71gl22rg57wxd0hgy72pdksn62ng4waldjhhm29v4anq2fyi"))))
14333 (build-system pyproject-build-system)
14334 (arguments
14335 (list #:test-flags #~(list "tests")))
14336 (native-inputs
14337 (list python-jaraco-test
14338 python-packaging-bootstrap
14339 python-pyfakefs
14340 python-pytest-bootstrap
14341 python-setuptools
14342 python-setuptools-scm))
14343 (propagated-inputs
14344 (list python-zipp))
14345 (home-page "https://importlib-metadata.readthedocs.io/")
14346 (synopsis "Read metadata from Python packages")
14347 (description
14348 "@code{importlib_metadata} is a library which provides an API for
14349accessing an installed Python package's metadata, such as its entry points or
14350its top-level name. This functionality intends to replace most uses of
14351@code{pkg_resources} entry point API and metadata API. Along with
14352@code{importlib.resources} in Python 3.7 and newer, this can eliminate the
14353need to use the older and less efficient @code{pkg_resources} package.")
14354 (license license:asl2.0)))
14355
14356(define-public python-importlib-metadata-argparse-version
14357 (package
14358 (name "python-importlib-metadata-argparse-version")
14359 (version "2.0.1")
14360 (home-page
14361 "https://github.com/mondeja/importlib-metadata-argparse-version")
14362 (source
14363 (origin
14364 (method git-fetch)
14365 (uri (git-reference
14366 (url home-page)
14367 (commit (string-append "v" version))))
14368 (file-name (git-file-name name version))
14369 (sha256
14370 (base32 "02jbfv7xkd4lhdcsr232b6x8xcpv93micz7848fhi5946grvm1j2"))))
14371 (build-system pyproject-build-system)
14372 (native-inputs (list python-pytest python-hatchling))
14373 (synopsis "Get Python package version more efficiently")
14374 (description
14375 "This package provides an @code{argparse} action to define CLI version
14376with a delayed call to @code{importlib.metadata}, avoiding to load this module
14377when not needed.")
14378 (license license:bsd-3)))
14379
14380(define-public python-importmagic
14381 (package
14382 (name "python-importmagic")
14383 (version "0.1.7")
14384 (source
14385 (origin
14386 (method git-fetch)
14387 (uri (git-reference
14388 (url "https://github.com/alecthomas/importmagic")
14389 (commit version)))
14390 (file-name (git-file-name name version))
14391 (sha256
14392 (base32 "1asijinpirq9ips9drsibyg2bj6qbpryz27n91akhvmzn78pbz7s"))))
14393 (build-system pyproject-build-system)
14394 (native-inputs (list python-pytest python-setuptools))
14395 (home-page "https://github.com/alecthomas/importmagic")
14396 (synopsis "Library for adding, removing and managing Python imports")
14397 (description
14398 "Importmagic is a Python library for automatically managing imports by
14399finding unresolved symbols in Python code and their corresponding imports.")
14400 (license license:bsd-3)))
14401
14402(define-public python-inotify-simple
14403 (package
14404 (name "python-inotify-simple")
14405 (version "1.3.5")
14406 (source
14407 (origin
14408 (method git-fetch)
14409 (uri (git-reference
14410 (url "https://github.com/chrisjbillington/inotify_simple")
14411 (commit version)))
14412 (file-name (git-file-name name version))
14413 (sha256
14414 (base32 "1dv9svrcz31acyq9smjlnw75xv3x5wpn5h6s8j8h0vrqyl3d7l05"))))
14415 (build-system pyproject-build-system)
14416 (arguments
14417 (list
14418 #:test-backend #~'custom
14419 #:test-flags #~(list "example.py")))
14420 (native-inputs (list python-setuptools))
14421 (home-page "https://github.com/chrisjbillington/inotify_simple")
14422 (synopsis "Simple wrapper around inotify library")
14423 (description
14424 "@code{inotify-simple} is a simple wrapper around inotify library.")
14425 (license license:bsd-3)))
14426
14427(define-public python-interface-meta
14428 (package
14429 (name "python-interface-meta")
14430 (version "1.3.0")
14431 (source
14432 (origin
14433 (method url-fetch)
14434 (uri (pypi-uri "interface_meta" version))
14435 (sha256
14436 (base32 "18brkmz2ssjikkrkb23cwccp683yi6y1alfdbmjvjgxpppw96i4a"))))
14437 (build-system pyproject-build-system)
14438 (native-inputs (list python-poetry-core python-pytest))
14439 (home-page "https://github.com/matthewwardrop/interface_meta")
14440 (synopsis
14441 "API for enforced method signatures and consistent documentation")
14442 (description
14443 "This package provides a convenient way to expose an extensible API with
14444enforced method signatures and consistent documentation.")
14445 (license license:expat)))
14446
14447(define-public python-jaraco-classes
14448 (package
14449 (name "python-jaraco-classes")
14450 (version "3.4.0")
14451 (source
14452 (origin
14453 (method url-fetch)
14454 (uri (pypi-uri "jaraco.classes" version))
14455 (sha256
14456 (base32 "1k9s7wxhsy15730qab8bry7kpgl4yk3wch45ikfw0f823nsj9827"))))
14457 (build-system pyproject-build-system)
14458 (arguments
14459 (list ; Do not test the myproject.toml build as it pulls dependencies.
14460 #:test-flags '(list "-k" "not project")))
14461 (native-inputs
14462 (list python-pytest
14463 python-setuptools))
14464 (propagated-inputs
14465 (list python-more-itertools))
14466 (home-page "https://github.com/jaraco/jaraco.classes")
14467 (synopsis "Utility functions for Python class constructs")
14468 (description "This Python library contains utility functions for Python
14469class constructs.")
14470 (license license:expat)))
14471
14472(define-public python-jaraco-collections
14473 (package
14474 (name "python-jaraco-collections")
14475 (version "5.2.1")
14476 (source
14477 (origin
14478 (method url-fetch)
14479 (uri (pypi-uri "jaraco_collections" version))
14480 (sha256
14481 (base32 "1v8qza70spm4d822bm7wq3j2cyd33nqg2i87n99spw6np9q1kf6s"))))
14482 (build-system pyproject-build-system)
14483 ;; Do not test pyproject.toml with python-pytest-checkdocs as it tries to
14484 ;; download dependencies.
14485 (arguments
14486 '(#:test-flags '("-k" "not project")))
14487 (native-inputs
14488 (list python-pytest
14489 python-setuptools
14490 python-setuptools-scm
14491 python-wheel))
14492 (propagated-inputs
14493 (list python-jaraco-text))
14494 (home-page "https://github.com/jaraco/jaraco.collections")
14495 (synopsis "Provides various collection objects")
14496 (description
14497 "This package provides models and classes to supplement the
14498standard library @code{collections} module. Examples include
14499@itemize
14500@item
14501RangeMap: A mapping that accepts a range of values for keys.
14502@item
14503Projection: A subset over an existing mapping.
14504@item
14505KeyTransformingDict: Generalized mapping with keys transformed by a function.
14506@item
14507FoldedCaseKeyedDict: A dict whose string keys are case-insensitive.
14508@item
14509BijectiveMap: A map where keys map to values and values back to their keys.
14510@item
14511ItemsAsAttributes: A mapping mix-in exposing items as attributes.
14512@item
14513IdentityOverrideMap: A map whose keys map by default to themselves unless overridden.
14514@item
14515FrozenDict: A hashable, immutable map.
14516@item
14517Enumeration: An object whose keys are enumerated.
14518@item
14519Everything: A container that contains all things.
14520@item
14521Least, Greatest: Objects that are always less than or greater than any other.
14522@item
14523pop_all: Return all items from the mutable sequence and remove them from that sequence.
14524@item
14525DictStack: A stack of dicts, great for sharing scopes.
14526@item
14527WeightedLookup: A specialized RangeMap for selecting an item by weights.
14528@end itemize")
14529 (license license:expat)))
14530
14531(define-public python-jaraco-context
14532 (package
14533 (name "python-jaraco-context")
14534 (version "6.0.1")
14535 (source
14536 (origin
14537 (method url-fetch)
14538 (uri (pypi-uri "jaraco_context" version))
14539 (sha256
14540 (base32 "1cyija3n4481r1ykxdx342m07lrfyg4ygbn0in9i82yganjlxblv"))))
14541 (build-system pyproject-build-system)
14542 (arguments
14543 (list #:tests? #f)) ;no tests in PyPI archive and Git checkout
14544 (native-inputs
14545 (list python-setuptools
14546 python-setuptools-scm
14547 python-wheel))
14548 (propagated-inputs
14549 (list python-backports-tarfile))
14550 (home-page "https://github.com/jaraco/jaraco.context")
14551 (synopsis "Context managers Python library")
14552 (description "This Python library provides context managers-related
14553procedures.")
14554 (license license:expat)))
14555
14556(define-public python-jaraco-functools
14557 (package
14558 (name "python-jaraco-functools")
14559 (version "4.2.1")
14560 (source
14561 (origin
14562 (method url-fetch)
14563 (uri (pypi-uri "jaraco_functools" version))
14564 (sha256
14565 (base32 "0lvk12qbl5zd1ikr6xzflj1jcs3vwgmwgy2k63x5dkmbrjzllqxy"))))
14566 (build-system pyproject-build-system)
14567 (arguments
14568 (list #:tests? (not (%current-target-system))
14569 ;; Do not test the myproject.toml build as it pulls dependencies.
14570 ;; Do not run a test that tries to emulate a broken proprietary
14571 ;; CI set-up, fails to do so correctly, and then throws an error.
14572 #:test-flags
14573 '(list "-k" "not project and not test_function_throttled")))
14574 (native-inputs
14575 (list python-jaraco-classes
14576 python-pytest
14577 python-setuptools
14578 python-setuptools-scm
14579 python-wheel))
14580 (propagated-inputs (list python-more-itertools))
14581 (home-page "https://github.com/jaraco/jaraco.functools")
14582 (synopsis "Python library extending Python's @code{functools}")
14583 (description "This library extends the standard @code{functools} Python
14584module with a few extra procedures.")
14585 (license license:expat)))
14586
14587(define-public python-jaraco-packaging
14588 (package
14589 (name "python-jaraco-packaging")
14590 (version "9.4.0") ;the latest version compatible with [email protected]
14591 (source
14592 (origin
14593 (method url-fetch)
14594 (uri (pypi-uri "jaraco.packaging" version))
14595 (sha256
14596 (base32
14597 "1djpwmw2gmb6i9by1bc4lh4qlkvifgsqfj5alb9xz7pa80fcm416"))))
14598 (build-system pyproject-build-system)
14599 (arguments
14600 (list #:tests? #f)) ;no tests in PyPI archive
14601 (native-inputs
14602 (list python-setuptools
14603 python-setuptools-scm))
14604 (propagated-inputs
14605 (list python-pypa-build
14606 python-virtualenv
14607 python-domdf-python-tools
14608 python-jaraco-context
14609 python-sphinx))
14610 (home-page "https://github.com/jaraco/jaraco.packaging")
14611 (synopsis "Tools to supplement packaging Python releases")
14612 (description
14613 "This package provides various tools to supplement packaging Python
14614releases.")
14615 (license license:expat)))
14616
14617(define-public python-jaraco-path
14618 (package
14619 (name "python-jaraco-path")
14620 (version "3.7.2")
14621 (source
14622 (origin
14623 (method git-fetch)
14624 (uri (git-reference
14625 (url "https://github.com/jaraco/jaraco.path")
14626 (commit (string-append "v" version))))
14627 (file-name (git-file-name name version))
14628 (sha256
14629 (base32 "12bj9za1yp0yn0ppya6a4kwgmh7hvmw64x7ivp4y0sbv20r0vfdq"))))
14630 (build-system pyproject-build-system)
14631 (arguments
14632 (list
14633 #:phases
14634 #~(modify-phases %standard-phases
14635 (add-after 'unpack 'set-version
14636 (lambda _
14637 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
14638 (native-inputs
14639 (list python-pytest python-setuptools python-setuptools-scm))
14640 (home-page "https://github.com/jaraco/jaraco.path")
14641 (synopsis "Miscellaneous path functions")
14642 (description
14643 "This package provides miscellaneous path functions for Python.")
14644 (license license:expat)))
14645
14646(define-public python-jaraco-test
14647 (package
14648 (name "python-jaraco-test")
14649 (version "5.5.1")
14650 (source
14651 (origin
14652 (method url-fetch)
14653 (uri (pypi-uri "jaraco_test" version))
14654 (sha256
14655 (base32 "0xfkly5w4i4npi4pq1g32y8q8iijkq4pfcfs8wcjhfn4amj6212c"))))
14656 (build-system pyproject-build-system)
14657 (arguments
14658 (list #:test-flags '(list "-k" "http")))
14659 (native-inputs
14660 (list python-pytest
14661 python-setuptools))
14662 (propagated-inputs
14663 (list python-jaraco-collections
14664 python-jaraco-context
14665 python-jaraco-functools))
14666 (home-page "https://github.com/jaraco/jaraco.test")
14667 (synopsis "Testing support by jaraco")
14668 (description "This package provides testing support by jaraco.")
14669 (license license:expat)))
14670
14671(define-public python-jaraco-text
14672 (package
14673 (name "python-jaraco-text")
14674 (version "4.0.0")
14675 (source
14676 (origin
14677 (method url-fetch)
14678 (uri (pypi-uri "jaraco_text" version))
14679 (sha256
14680 (base32 "1c0dy5jvhigcyryi2h8n1m87dnhyxr7w01n9shwzkdlslv7gwwav"))))
14681 (build-system pyproject-build-system)
14682 ;; Do not test pyproject.toml with python-pytest-checkdocs as it tries to
14683 ;; download dependencies.
14684 (arguments
14685 '(#:test-flags '("-k" "not project")))
14686 (native-inputs
14687 (list python-pytest
14688 python-setuptools
14689 python-setuptools-scm))
14690 (propagated-inputs
14691 (list python-autocommand
14692 python-inflect
14693 python-jaraco-context
14694 python-jaraco-functools
14695 python-more-itertools))
14696 (home-page "https://github.com/jaraco/jaraco.text")
14697 (synopsis "Provides various routines for text manipulation")
14698 (description
14699 "This package provides handy routines for dealing with text,
14700such as wrapping, substitution, trimming, stripping, prefix and suffix
14701removal, line continuation, indentation, comment processing, identifier
14702processing, values parsing, case insensitive comparison, and more.")
14703 (license license:expat)))
14704
14705(define-public python-jaraco-vcs
14706 (package
14707 (name "python-jaraco-vcs")
14708 (version "2.4.1")
14709 (source
14710 (origin
14711 (method git-fetch)
14712 (uri (git-reference (url "https://github.com/jaraco/jaraco.vcs")
14713 (commit (string-append "v" version))))
14714 (file-name (git-file-name name version))
14715 (sha256 (base32 "1n9f0l4zp8dbbq2ha93bd9z6gb9y7gsmbd4jkl5gcm51qpsq4vpm"))))
14716 (build-system pyproject-build-system)
14717 (arguments
14718 (list
14719 #:test-flags
14720 ;; Ignore doctests.
14721 #~(list "--ignore-glob=jaraco/vcs/*.py")
14722 #:phases
14723 #~(modify-phases %standard-phases
14724 (add-after 'unpack 'set-version
14725 (lambda _
14726 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
14727 (propagated-inputs (list python-jaraco-classes
14728 python-jaraco-path
14729 python-jaraco-versioning
14730 python-more-itertools
14731 python-packaging
14732 python-dateutil
14733 python-tempora))
14734 (native-inputs (list python-pygments
14735 python-pytest
14736 python-pytest-home
14737 python-setuptools
14738 python-setuptools-scm))
14739 (home-page "https://github.com/jaraco/jaraco.vcs")
14740 (synopsis "Utilities for working with VCS repositories")
14741 (description
14742 "This package provides facilities for working with VCS repositories in
14743Python.")
14744 (license license:expat)))
14745
14746(define-public python-jaraco-versioning
14747 (package
14748 (name "python-jaraco-versioning")
14749 (version "1.1.0")
14750 (source
14751 (origin
14752 (method git-fetch)
14753 (uri (git-reference
14754 (url "https://github.com/jaraco/jaraco.versioning")
14755 (commit (string-append "v" version))))
14756 (file-name (git-file-name name version))
14757 (sha256
14758 (base32 "12svnpa5sl3r5lci9bybzy5gb8pd4clfkl65x5hsap00ada2w91r"))))
14759 (build-system pyproject-build-system)
14760 (arguments
14761 (list
14762 #:phases
14763 #~(modify-phases %standard-phases
14764 (add-after 'unpack 'set-version
14765 (lambda _
14766 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
14767 (propagated-inputs (list python-packaging))
14768 (native-inputs
14769 (list python-pytest python-setuptools python-setuptools-scm))
14770 (home-page "https://github.com/jaraco/jaraco.versioning")
14771 (synopsis "Version manipulation utils")
14772 (description
14773 "This package builds upon @code{python-packaging} to provide more
14774sophisticated version manipulation.")
14775 (license license:expat)))
14776
14777(define-public python-pypytools
14778 (package
14779 (name "python-pypytools")
14780 (version "0.6.2")
14781 (source
14782 (origin
14783 (method git-fetch)
14784 (uri (git-reference
14785 (url "https://github.com/antocuni/pypytools/")
14786 (commit version)))
14787 (file-name (git-file-name name version))
14788 (sha256
14789 (base32 "1nmq4gsw3hcayj2d96n8n166h0wnmp7n28fqswcn562hx57mlh05"))
14790 (patches (search-patches "python-pypytools-python-3-fixes.patch"))))
14791 (build-system pyproject-build-system)
14792 (arguments
14793 (list
14794 ;; These tests are using deprecated py.code module.
14795 #:test-flags
14796 #~(list
14797 "--deselect=pypytools/testing/test_codegen.py::test_def__default_args"
14798 "--deselect=pypytools/testing/test_codegen.py::test_def_"
14799 "--deselect=pypytools/testing/test_codegen.py::test_compile"
14800 "--ignore=pypytools/testing/test_unroll.py"
14801 ;; clone_func returns an object of the wrong type.
14802 "--deselect=pypytools/testing/test_util.py::test_clonefunc")))
14803 (native-inputs
14804 (list python-freezegun
14805 python-numpy
14806 python-pytest
14807 python-setuptools))
14808 (propagated-inputs (list python-py))
14809 (home-page "https://github.com/antocuni/pypytools/")
14810 (synopsis "Tools to use PyPy-specific features, with CPython fallbacks")
14811 (description
14812 "This package provides a collection of useful tools to use PyPy-specific
14813features, with CPython fallbacks.")
14814 (license license:x11)))
14815
14816(define-public python-simplegeneric
14817 (package
14818 (name "python-simplegeneric")
14819 (version "0.8.1")
14820 (source
14821 (origin
14822 (method url-fetch)
14823 (uri (pypi-uri "simplegeneric" version ".zip"))
14824 (sha256
14825 (base32 "0wwi1c6md4vkbcsfsf8dklf3vr4mcdj4mpxkanwgb6jb1432x5yw"))))
14826 (build-system pyproject-build-system)
14827 (arguments
14828 (list
14829 #:test-backend #~'custom
14830 #:test-flags #~(list "-m" "simplegeneric")))
14831 (native-inputs
14832 (list unzip python-setuptools))
14833 (home-page "https://cheeseshop.python.org/pypi/simplegeneric")
14834 (synopsis "Python module for simple generic functions")
14835 (description
14836 "The simplegeneric module lets you define simple single-dispatch generic
14837functions, akin to Python’s built-in generic functions like @code{len()},
14838@code{iter()} and so on. However, instead of using specially-named methods,
14839these generic functions use simple lookup tables, akin to those used by
14840e.g. @code{pickle.dump()} and other generic functions found in the Python
14841standard library.")
14842 (license license:zpl2.1)))
14843
14844(define-public python-ipython-genutils
14845 ;; TODO: This package is retired, check if can be removed, see description.
14846 (package
14847 (name "python-ipython-genutils")
14848 (version "0.1.0")
14849 (source
14850 (origin
14851 (method url-fetch)
14852 (uri (pypi-uri "ipython_genutils" version))
14853 (sha256
14854 (base32 "19l2pp1c64ansr89l3cqh19jdi2ixhssdzx0vz4n6r52a6i281is"))))
14855 (build-system pyproject-build-system)
14856 (arguments `(#:tests? #f)) ; no tests
14857 (native-inputs
14858 (list python-setuptools))
14859 (home-page "https://ipython.org")
14860 (synopsis "Vestigial utilities from IPython")
14861 (description
14862 "This package provides retired utilities from IPython. No packages
14863outside IPython/Jupyter should depend on it.
14864
14865This package shouldn't exist. It contains some common utilities shared by
14866Jupyter and IPython projects during The Big Split. As soon as possible, those
14867packages will remove their dependency on this, and this package will go
14868away.")
14869 (license license:bsd-3)))
14870
14871;;; Variant used to break a cycle with python-ipykernel.
14872(define-public python-ipyparallel-bootstrap
14873 (hidden-package
14874 (package
14875 (name "python-ipyparallel-bootstrap")
14876 (version "9.0.1")
14877 (source
14878 (origin
14879 (method url-fetch)
14880 (uri (pypi-uri "ipyparallel" version))
14881 (sha256
14882 (base32 "177jk2g8srsddgyb4djbyci93v766vzrnqzzpd7ski804anjqn9f"))))
14883 (build-system pyproject-build-system)
14884 (arguments
14885 (list
14886 #:tests? #f
14887 #:phases #~(modify-phases %standard-phases
14888 ;; The python-ipykernel is normally propagated but is
14889 ;; removed from this package to break the cycle.
14890 (delete 'sanity-check))))
14891 (native-inputs
14892 (list python-hatchling))
14893 (propagated-inputs
14894 (list python-dateutil
14895 python-decorator
14896 python-entrypoints
14897 python-ipython
14898 ;; python-ipykernel is omitted here to break a cycle.
14899 python-jupyter-client-bootstrap
14900 python-psutil
14901 python-pyzmq
14902 python-tornado-6
14903 python-tqdm
14904 python-traitlets))
14905 (home-page "https://ipython.org/")
14906 (synopsis "Interactive Parallel Computing with IPython")
14907 (description
14908 "@code{ipyparallel} is a Python package and collection of CLI scripts
14909for controlling clusters for Jupyter. @code{ipyparallel} contains the
14910following CLI scripts:
14911@enumerate
14912@item ipcluster - start/stop a cluster
14913@item ipcontroller - start a scheduler
14914@item ipengine - start an engine
14915@end enumerate")
14916 (license license:bsd-3))))
14917
14918(define-public python-ipyparallel
14919 (package
14920 (inherit python-ipyparallel-bootstrap)
14921 (name "python-ipyparallel")
14922 (arguments
14923 (list #:test-flags #~(list "--pyargs" "ipyparallel")))
14924 (native-inputs
14925 (modify-inputs (package-native-inputs python-ipyparallel-bootstrap)
14926 (append python-ipython
14927 python-pytest
14928 python-pytest-asyncio
14929 python-pytest-tornado
14930 python-testpath)))
14931 (propagated-inputs
14932 (modify-inputs (package-propagated-inputs python-ipyparallel-bootstrap)
14933 (replace "python-jupyter-client-bootstrap" python-jupyter-client)
14934 (append python-ipykernel)))
14935 (properties (alist-delete 'hidden? (package-properties
14936 python-ipyparallel-bootstrap)))))
14937
14938;; TODO: Package python-jupysql which is the maintained fork of this one.
14939(define-public python-ipython-sql
14940 (package
14941 (name "python-ipython-sql")
14942 (properties '((commit . "e21bc64e172270311d9103602e1c2ec1bcdd5aa8")
14943 (revision . "0")))
14944 (version (git-version "0.5.0"
14945 (assoc-ref properties 'revision)
14946 (assoc-ref properties 'commit)))
14947 (source
14948 (origin
14949 (method git-fetch)
14950 (uri (git-reference
14951 (url "https://github.com/catherinedevlin/ipython-sql")
14952 (commit (assoc-ref properties 'commit))))
14953 (file-name (git-file-name name version))
14954 (sha256
14955 (base32 "0palwgr7lnar8ykifzhf1qach206bf1xa1zkji2adk9pr9ajsiix"))))
14956 (build-system pyproject-build-system)
14957 (arguments
14958 (list #:tests? #f ;Fail because of prettytable.
14959 #:phases
14960 #~(modify-phases %standard-phases
14961 (replace 'check
14962 (lambda* (#:key tests? #:allow-other-keys)
14963 (setenv "HOME" (getcwd))
14964 (if tests?
14965 (invoke "ipython" "-c"
14966 "import pytest; pytest.main(['.'])")
14967 (format #t "test suite not run.~%")))))))
14968 (native-inputs (list python-pytest python-setuptools))
14969 (propagated-inputs
14970 (list python-ipython
14971 python-ipython-genutils
14972 python-prettytable
14973 python-sqlalchemy-2
14974 python-sqlparse))
14975 (home-page "https://github.com/catherinedevlin/ipython-sql")
14976 (synopsis "RDBMS access via IPython")
14977 (description "This library connects to a database, using SQLAlchemy URL
14978connect strings, then issue SQL commands within IPython or IPython Notebook.")
14979 (license license:expat)))
14980
14981(define-public python-optree
14982 (package
14983 (name "python-optree")
14984 (version "0.14.0")
14985 (source
14986 (origin
14987 (method git-fetch)
14988 (uri (git-reference
14989 (url "https://github.com/metaopt/optree")
14990 (commit (string-append "v" version))))
14991 (file-name (git-file-name name version))
14992 (sha256
14993 (base32
14994 "17zph1jgzk0zaanj7057qj8x5cml8j66ip0xmlbwmq4396hmdlbs"))))
14995 (build-system pyproject-build-system)
14996 (arguments
14997 (list
14998 #:test-flags
14999 ;; These tests fails due to a circular import
15000 '`("-k" ,(string-append "not test_treespec_pickle_missing_registration"
15001 " and not test_import_no_warnings"))))
15002 (propagated-inputs (list python-typing-extensions))
15003 (native-inputs
15004 (list python-pytest
15005 python-setuptools
15006 python-wheel
15007 cmake-minimal
15008 pybind11))
15009 (home-page "https://github.com/metaopt/optree")
15010 (synopsis "Optimized PyTree Utilities")
15011 (description "This package contains operations on PyTrees (a tree made of
15012container data structures in Python).")
15013 (license license:asl2.0)))
15014
15015(define-public python-backcall
15016 (package
15017 (name "python-backcall")
15018 (version "0.2.0")
15019 (source
15020 (origin
15021 (method git-fetch)
15022 (uri (git-reference
15023 (url "https://github.com/takluyver/backcall/")
15024 (commit version)))
15025 (file-name (git-file-name name version))
15026 (sha256
15027 (base32 "0br41zib1zph2jazanyjfl03rrb7frplk639fb10wvdqkrzgm6cd"))))
15028 (build-system pyproject-build-system)
15029 (native-inputs (list python-flit-core python-pytest))
15030 (home-page "https://github.com/takluyver/backcall/")
15031 (synopsis "Specifications for callback functions passed in to an API")
15032 (description
15033 "If your code lets other people supply callback functions, it's important
15034to specify the function signature you expect, and check that functions support
15035that. Adding extra parameters later would break other peoples code unless
15036you're careful. The @code{backcall} package provides a way of specifying the
15037callback signature using a prototype function.")
15038 (license license:bsd-3)))
15039
15040(define-public python-pubmed-parser
15041 (package
15042 (name "python-pubmed-parser")
15043 (version "0.5.1")
15044 (source (origin
15045 (method git-fetch)
15046 (uri (git-reference
15047 (url "https://github.com/titipata/pubmed_parser")
15048 (commit version)))
15049 (file-name (git-file-name name version))
15050 (sha256
15051 (base32
15052 "0hm520pxmbqlfckkdyccagmmsrqwdi0qdsc0l7rgp62jmsv7ppi5"))))
15053 (build-system pyproject-build-system)
15054 (arguments (list #:tests? #f)) ;; Tests require internet
15055 (native-inputs
15056 (list python-setuptools))
15057 (propagated-inputs
15058 (list python-lxml
15059 python-numpy
15060 python-requests
15061 python-six ;hard dependency
15062 python-unidecode))
15063 (home-page "https://titipata.github.io/pubmed_parser/")
15064 (synopsis "Parser for Pubmed Open-Access Subset and MEDLINE XML repository")
15065 (description
15066 "This package provides a Python parser for Pubmed Open-Access Subset and
15067MEDLINE XML repository.")
15068 (license license:expat)))
15069
15070(define-public python-pure-eval
15071 (package
15072 (name "python-pure-eval")
15073 (version "0.2.3")
15074 (source
15075 (origin
15076 (method url-fetch)
15077 (uri (pypi-uri "pure_eval" version))
15078 (sha256
15079 (base32 "0hmg1qcv1h5k0dyj7sfp54ibnmjrvf4awdc6gin5fk2n80zrhkjz"))))
15080 (build-system pyproject-build-system)
15081 (native-inputs
15082 (list python-pytest
15083 python-setuptools
15084 python-setuptools-scm
15085 python-wheel))
15086 (home-page "https://github.com/alexmojaki/pure_eval")
15087 (synopsis "Python library to evaluate abstract syntax tree nodes")
15088 (description "The @code{pure_eval} Python library can safely evaluate
15089abstract syntax tree (AST) nodes without side effects.")
15090 (license license:expat)))
15091
15092(define-public python-puremagic
15093 (package
15094 (name "python-puremagic")
15095 (version "1.28")
15096 (source
15097 (origin
15098 (method git-fetch) ;no tests in PyPI archive
15099 (uri (git-reference
15100 (url "https://github.com/cdgriffith/puremagic")
15101 (commit version)))
15102 (file-name (git-file-name name version))
15103 (sha256
15104 (base32 "0sffrjjqh37ijwnggyvs2rfm4iwaz2m395wqg0x727wv8i0x3f3b"))))
15105 (build-system pyproject-build-system)
15106 (native-inputs
15107 (list python-pytest python-setuptools python-wheel))
15108 (home-page "https://github.com/cdgriffith/puremagic")
15109 (synopsis "Pure Python implementation of magic file detection")
15110 (description
15111 "This package implements a functionality that will identify a file based
15112off it's magic numbers.")
15113 (license license:expat)))
15114
15115(define-public python-ast-decompiler
15116 (package
15117 (name "python-ast-decompiler")
15118 (version "0.7.0")
15119 (source
15120 (origin
15121 (method url-fetch)
15122 (uri (pypi-uri "ast_decompiler" version))
15123 (sha256
15124 (base32 "0dw3fck4ajilphqw4hdpa8pmqxg3jfk2xkmjnk3kx5pqwl3sbhzg"))
15125 ;; We need to manually create an __init__.py file under the tests/
15126 ;; directory, since it is not included in the distributed
15127 ;; version. (See:
15128 ;; https://github.com/JelleZijlstra/ast_decompiler/issues/52).
15129 (modules '((guix build utils)))
15130 (snippet '(call-with-output-file "tests/__init__.py"
15131 (const #t)))))
15132 (build-system pyproject-build-system)
15133 (native-inputs (list python-flit-core python-pytest))
15134 (home-page "https://github.com/JelleZijlstra/ast_decompiler")
15135 (synopsis
15136 "Decompile an @acronym{AST, Abstract Syntax Tree} to Python code")
15137 (description
15138 "This library provides functionality to decompile @acronym{AST, Abstract
15139Syntax Tree} objects, as generated by the standard library @code{ast} module,
15140to Python code.")
15141 (license license:asl2.0)))
15142
15143(define-public python-asttokens
15144 (package
15145 (name "python-asttokens")
15146 (version "3.0.0")
15147 (source
15148 (origin
15149 (method url-fetch)
15150 (uri (pypi-uri "asttokens" version))
15151 (sha256
15152 (base32 "1ixv6n8cg08n9h6rwyhd3lkzyjiwpbfv56dk338w3c32inm8pk8d"))))
15153 (build-system pyproject-build-system)
15154 (native-inputs
15155 (list python-astroid
15156 python-pytest
15157 python-setuptools
15158 python-setuptools-scm
15159 python-wheel))
15160 (home-page "https://github.com/gristlabs/asttokens")
15161 (synopsis "Python library to annotate abstract syntax trees")
15162 (description "The @code{asttokens} module annotates Python abstract syntax
15163trees (ASTs) with the positions of tokens and text in the source code that
15164generated them. It makes it possible for tools that work with logical AST
15165nodes to find the particular text that resulted in those nodes, for example
15166for automated refactoring or highlighting.")
15167 (license license:asl2.0)))
15168
15169(define-public python-littleutils
15170 (package
15171 (name "python-littleutils")
15172 (version "0.2.4")
15173 (source
15174 (origin
15175 (method url-fetch)
15176 (uri (pypi-uri "littleutils" version))
15177 (sha256
15178 (base32 "069xlm6vp1rprgrl4gsg3fd2vg0nzdw7v2qij7i45v8c080mp0y7"))))
15179 (build-system pyproject-build-system)
15180 (arguments (list #:tests? #f)) ;no tests in PyPIi archive or Git checkout
15181 (native-inputs
15182 (list python-setuptools
15183 python-setuptools-scm
15184 python-wheel))
15185 (home-page "https://github.com/alexmojaki/littleutils")
15186 (synopsis "Python utility function collection")
15187 (description "@code{littleutils} is a small collection of Python utility
15188functions, useful in the context of writing unit tests among other uses.")
15189 (license license:expat)))
15190
15191(define-public python-ipython
15192 (package
15193 (name "python-ipython")
15194 (version "9.8.0")
15195 (source
15196 (origin
15197 (method git-fetch)
15198 (uri (git-reference
15199 (url "https://github.com/ipython/ipython")
15200 (commit version)))
15201 (file-name (git-file-name name version))
15202 (sha256
15203 (base32 "01xislvlz33hlpbpf9cfgqabva3wzg49gb5437ypdzwldf8q25cg"))))
15204 (build-system pyproject-build-system)
15205 (arguments
15206 (list
15207 ;; tests: 1655 passed, 118 skipped, 3 xfailed, 7 warnings
15208 ;; with-extra: 1681 passed, 87 skipped, 5 deselected, 3 xfailed, 8 warnings
15209 #:test-backend #~'custom
15210 ;; XXX: It's a workaround to fix the error with module import
15211 ;; "_pytest.pathlib.ImportPathMismatchError:", see:
15212 ;; <https://codeberg.org/guix/guix/issues/2108>.
15213 #:test-flags
15214 #~(list "-m" "pytest" "-vv"
15215 "-k" (string-join
15216 ;; These need git.
15217 (list "not test_json_getsysinfo"
15218 "IPython.utils.sysinfo.sys_info"
15219 ;; Failed: DID NOT RAISE
15220 "test_timeit_raise_on_interrupt"
15221 "test_script_raise_on_interrupt"
15222 "test_time_raise_on_interrupt")
15223 " and not "))
15224 #:phases
15225 #~(modify-phases %standard-phases
15226 (add-before 'check 'pre-check
15227 (lambda _
15228 (setenv "HOME" "/tmp"))))))
15229 (propagated-inputs
15230 (list python-decorator
15231 python-ipython-pygments-lexers
15232 python-jedi
15233 python-matplotlib-inline
15234 python-pexpect
15235 python-prompt-toolkit
15236 python-pygments
15237 python-stack-data
15238 python-traitlets
15239 python-typing-extensions))
15240 (native-inputs
15241 (list python-pytest
15242 python-pytest-asyncio
15243 python-setuptools
15244 python-testpath
15245 ;; [extra]
15246 python-curio
15247 ;; python-ipykernel ;cycles
15248 ;; python-jupyter-ai ;not packaged
15249 python-matplotlib
15250 ;; python-nbclient ;cycles
15251 python-nbformat
15252 python-numpy
15253 python-pandas
15254 python-trio))
15255 (home-page "https://ipython.org")
15256 (synopsis "IPython is a tool for interactive computing in Python")
15257 (description
15258 "IPython provides a rich architecture for interactive computing with:
15259Powerful interactive shells, a browser-based notebook, support for interactive
15260data visualization, embeddable interpreters and tools for parallel
15261computing.")
15262 (properties '((cpe-name . "ipython")))
15263 (license license:bsd-3)))
15264
15265(define-public python-ipython-documentation
15266 (package
15267 (inherit python-ipython)
15268 (name "python-ipython-documentation")
15269 (version (package-version python-ipython))
15270 (arguments
15271 (list
15272 #:phases
15273 #~(modify-phases %standard-phases
15274 (add-after 'unpack 'set-pythonpath
15275 (lambda _
15276 ;; Ensure this fixed (via the
15277 ;; "python-ipython-documentation-chars.patch" patch) copy of
15278 ;; IPython gets used.
15279 (setenv "PYTHONPATH" (string-append (getcwd)))))
15280 (add-before 'build 'configure-sphinx-for-xelatex
15281 (lambda _
15282 ;; Use XeLaTeX instead of PDFLaTeX, as it can
15283 ;; cope with the Unicode characters present in the
15284 ;; contributors page, for example.
15285 (substitute* "docs/source/conf.py"
15286 (("project = 'IPython'.*" all)
15287 (string-append all "latex_engine = 'xelatex'\n")))
15288 ;; XXX: The Sphinx-generated ipython.tex specifies the GNU
15289 ;; FreeFont font to be searched via its extension, which uses
15290 ;; kpathsea instead of fontconfig and fail (see:
15291 ;; https://github.com/sphinx-doc/sphinx/issues/10347). Create a
15292 ;; symlink to GNU FreeFont and add it to the TEXMF tree via
15293 ;; GUIX_TEXMF.
15294 (mkdir-p "texmf-dist/fonts/opentype/public")
15295 (symlink (string-append
15296 #$(this-package-native-input "font-gnu-freefont")
15297 "/share/fonts/opentype")
15298 (string-append
15299 (getcwd) "/"
15300 "texmf-dist/fonts/opentype/public/gnu-freefont"))
15301 (setenv "GUIX_TEXMF" (string-append (getenv "GUIX_TEXMF") ":"
15302 (getcwd) "/texmf-dist"))))
15303 (delete 'build)
15304 (delete 'check)
15305 (replace 'install
15306 (lambda* (#:key outputs #:allow-other-keys)
15307 (let* ((data (string-append #$output "/share"))
15308 (doc (string-append data "/doc/" #$name "-" #$version))
15309 (html (string-append doc "/html"))
15310 (info (string-append data "/info")))
15311 (invoke "make" "-C" "docs" "info" "html" "pdf"
15312 (string-append "SPHINXOPTS=-j"
15313 (number->string (parallel-job-count))))
15314 (install-file "COPYING.rst" doc)
15315 (copy-recursively "examples" (string-append doc "/examples"))
15316 ;; Install HTML documentation.
15317 (copy-recursively "docs/build/html" html)
15318 ;; Likewise for the PDF.
15319 (install-file "docs/build/latex/ipython.pdf" doc)
15320 ;; Likewise for the info manual.
15321 (install-file "docs/build/texinfo/ipython.info" info)
15322 (symlink (string-append html "/_images")
15323 (string-append info "/ipython-figures"))))))))
15324 (native-inputs
15325 (list fontconfig ;for XDG_DATA_DIRS to locate fonts
15326 font-gnu-freefont
15327 graphviz
15328 python-docrepr
15329 python-ipykernel
15330 python-sphinx
15331 python-sphinx-rtd-theme
15332 texinfo
15333 (texlive-local-tree
15334 (list texlive-latexmk
15335 texlive-polyglossia
15336 texlive-xetex
15337 texlive-xindy))))))
15338
15339;; A bare minimal package, mainly to use in tests and reduce closure
15340;; size. Tests are left out in the main package to slim down native-inputs.
15341(define-public python-ipython-minimal
15342 (package/inherit python-ipython
15343 (name "python-ipython-minimal")
15344 (arguments
15345 (list #:tests? #f))
15346 (native-inputs
15347 (list python-setuptools))))
15348
15349(define-public python-ipython-pygments-lexers
15350 (package
15351 (name "python-ipython-pygments-lexers")
15352 (version "1.1.1")
15353 (source
15354 (origin
15355 (method git-fetch)
15356 (uri (git-reference
15357 (url "https://github.com/ipython/ipython-pygments-lexers/")
15358 (commit version)))
15359 (file-name (git-file-name name version))
15360 (sha256
15361 (base32 "154vbpp9mkblsk1d0w8x8mybwgn5gz6mjgg77nqyn75ky0banrd7"))))
15362 (build-system pyproject-build-system)
15363 (propagated-inputs (list python-pygments))
15364 (native-inputs (list python-flit-core python-pytest))
15365 (home-page "https://github.com/ipython/ipython-pygments-lexers/")
15366 (synopsis "Plugin for IPython code sessions")
15367 (description
15368 "This package defines a variety of Pygments lexers for highlighting IPython
15369code.")
15370 (license license:bsd-3)))
15371
15372(define-public python-pydbus
15373 (package
15374 (name "python-pydbus")
15375 (version "0.6.0")
15376 (source
15377 (origin
15378 (method url-fetch)
15379 (uri (pypi-uri "pydbus" version))
15380 (sha256
15381 (base32 "0b0gipvz7vcfa9ddmwq2jrx16d4apb0hdnl5q4i3h8jlzwp1c1s2"))))
15382 (build-system pyproject-build-system)
15383 (arguments
15384 (list #:tests? #f ; no tests in PyPI, git tests require running DBus
15385 #:phases
15386 #~(modify-phases %standard-phases
15387 (add-after 'unpack 'fix-comparability-with-pygobject
15388 (lambda _
15389 (substitute* "pydbus/_inspect3.py"
15390 (("getargspec")
15391 "getfullargspec")))))))
15392 (native-inputs
15393 (list python-setuptools
15394 python-wheel))
15395 (propagated-inputs
15396 (list python-pygobject))
15397 (home-page "https://github.com/LEW21/pydbus")
15398 (synopsis "Pythonic D-Bus library")
15399 (description
15400 "Pydbus provides a pythonic interface to the D-Bus message bus system.
15401Pydbus can be used to access remote objects and also for object publication.
15402It is based on PyGI, the Python GObject Introspection bindings, which is the
15403recommended way to use GLib from Python.")
15404 (license license:lgpl2.1+)))
15405
15406(define-public python-dbus
15407 (package
15408 (name "python-dbus")
15409 (version "1.2.18")
15410 (source
15411 (origin
15412 (method url-fetch)
15413 (uri (string-append "https://dbus.freedesktop.org/releases/dbus-python/"
15414 "dbus-python-" version ".tar.gz"))
15415 (sha256
15416 (base32 "0q3jrw515z98mqdk9x822nd95rky455zz9876f1nqna5igkd3gcj"))))
15417 (build-system gnu-build-system)
15418 (native-inputs
15419 (list pkg-config))
15420 (inputs
15421 `(("python" ,python-wrapper)
15422 ("dbus-glib" ,dbus-glib)))
15423 (synopsis "Python bindings for D-bus")
15424 (description "python-dbus provides bindings for libdbus, the reference
15425implementation of D-Bus.")
15426 (home-page "https://www.freedesktop.org/wiki/Software/DBusBindings/")
15427 (properties `((python2-variant . ,(delay python2-dbus))))
15428 (license license:expat)))
15429
15430(define-public python-notify2
15431 (package
15432 (name "python-notify2")
15433 (version "0.3.1")
15434 (source
15435 (origin
15436 (method url-fetch)
15437 (uri (pypi-uri "notify2" version))
15438 (sha256
15439 (base32
15440 "0z8rrv9rsg1r2qgh2dxj3dfj5xnki98kgi3w839kqby4a26i1yik"))))
15441 (build-system pyproject-build-system)
15442 (arguments (list #:tests? #f)) ; tests depend on system state
15443 (native-inputs (list python-setuptools))
15444 (propagated-inputs (list python-dbus))
15445 (home-page "https://bitbucket.org/takluyver/pynotify2")
15446 (synopsis "Python interface to D-Bus notifications")
15447 (description
15448 "Pynotify2 provides a Python interface for sending D-Bus notifications.
15449It is a reimplementation of pynotify in pure Python, and an alternative to
15450the GObject Introspection bindings to libnotify for non-GTK applications.")
15451 (license (list license:bsd-2
15452 license:lgpl2.1+))))
15453
15454;; beautifulsoup4 has a totally different namespace than 3.x,
15455;; and pypi seems to put it under its own name, so I guess we should too
15456(define-public python-beautifulsoup4
15457 (package
15458 (name "python-beautifulsoup4")
15459 (version "4.14.3")
15460 (source
15461 (origin
15462 (method url-fetch)
15463 (uri (pypi-uri "beautifulsoup4" version))
15464 (sha256
15465 (base32
15466 "11pvlxgxxn8bcgfsbbfrb9b9jw3ma7qggycycsx6ndbd332v34k2"))))
15467 (build-system pyproject-build-system)
15468 (native-inputs
15469 (list python-hatchling
15470 python-pytest))
15471 (propagated-inputs
15472 (list python-soupsieve
15473 python-typing-extensions
15474 ;; [optional]
15475 python-cchardet
15476 python-chardet
15477 python-charset-normalizer
15478 python-html5lib
15479 python-lxml))
15480 (home-page "https://www.crummy.com/software/BeautifulSoup/bs4/")
15481 (synopsis "Python screen-scraping library")
15482 (description
15483 "Beautiful Soup is a Python library designed for rapidly setting up
15484screen-scraping projects. It offers Pythonic idioms for navigating,
15485searching, and modifying a parse tree, providing a toolkit for
15486dissecting a document and extracting what you need. It automatically
15487converts incoming documents to Unicode and outgoing documents to UTF-8.")
15488 (license license:expat)))
15489
15490(define-public python-beautifulsoup4-bootstrap
15491 (hidden-package
15492 (package/inherit python-beautifulsoup4
15493 (arguments
15494 (list #:tests? #f))
15495 (native-inputs
15496 (list python-hatchling))
15497 (propagated-inputs '()))))
15498
15499(define-public python-soupsieve
15500 (package
15501 (name "python-soupsieve")
15502 (version "2.7")
15503 (source
15504 (origin
15505 (method url-fetch)
15506 (uri (pypi-uri "soupsieve" version))
15507 (sha256
15508 (base32 "0shjmvk8yz2ljc16pmizg16bqhk1i8n5al27mlp6sa16d6djya5d"))))
15509 (build-system pyproject-build-system)
15510 (native-inputs
15511 (list python-beautifulsoup4-bootstrap
15512 python-hatchling
15513 python-pytest))
15514 (home-page "https://github.com/facelessuser/soupsieve")
15515 (synopsis "CSS selector library")
15516 (description
15517 "Soup Sieve is a CSS selector library designed to be used with Beautiful
15518Soup 4. It aims to provide selecting, matching, and filtering using modern
15519CSS selectors. Soup Sieve currently provides selectors from the CSS level 1
15520specifications up through the latest CSS level 4 drafts and beyond (though
15521some are not yet implemented).")
15522 (license license:expat)))
15523
15524
15525(define-public python-netifaces
15526 (package
15527 (name "python-netifaces")
15528 (version "0.11.0")
15529 (source
15530 (origin
15531 (method url-fetch)
15532 (uri (pypi-uri "netifaces" version))
15533 (sha256
15534 (base32 "0cnajf5rl4w1sa72j921scbigr6zndig56cq8ggpx45jdqa7jfh4"))))
15535 (build-system pyproject-build-system)
15536 (arguments
15537 (list
15538 #:test-backend #~'custom
15539 #:test-flags #~(list "test.py")))
15540 (native-inputs (list python-setuptools))
15541 (home-page "https://github.com/al45tair/netifaces")
15542 (synopsis "Python module for portable network interface information")
15543 (description
15544 "Netifaces is a Python module providing information on network
15545interfaces in an easy and portable manner.")
15546 (license license:expat)))
15547
15548(define-public python-networkx
15549 (package
15550 (name "python-networkx")
15551 (version "3.4.2")
15552 (source
15553 (origin
15554 (method url-fetch)
15555 (uri (pypi-uri "networkx" version))
15556 (sha256
15557 (base32 "1qaks3c3h5qlw25z949q3plw8iwgm9h152kwnam64lwc89lkcz1h"))))
15558 (build-system pyproject-build-system)
15559 (arguments
15560 (list
15561 #:test-flags
15562 #~(list "--numprocesses" (number->string (parallel-job-count)))))
15563 (native-inputs
15564 (list python-pytest
15565 python-pytest-xdist
15566 python-setuptools
15567 python-wheel))
15568 (propagated-inputs
15569 (list python-decorator))
15570 (home-page "https://networkx.github.io/")
15571 (synopsis "Python module for creating and manipulating graphs and networks")
15572 (description
15573 "NetworkX is a Python package for the creation, manipulation, and study
15574of the structure, dynamics, and functions of complex networks.")
15575 (license license:bsd-3)))
15576
15577(define-public python-datrie
15578 (package
15579 (name "python-datrie")
15580 (version "0.8.3")
15581 (source
15582 (origin
15583 (method git-fetch)
15584 (uri (git-reference
15585 (url "https://github.com/kmike/datrie")
15586 (commit version)))
15587 (file-name (git-file-name name version))
15588 (sha256
15589 (base32 "1jfyhzfjgin370l6chd0cjg521ql3y53db194n94ff6cdbdbg7cg"))))
15590 (build-system pyproject-build-system)
15591 (arguments
15592 (list
15593 #:phases
15594 #~(modify-phases %standard-phases
15595 (add-after 'ensure-no-mtimes-pre-1980 'inject-libdatrie
15596 (lambda* (#:key inputs #:allow-other-keys)
15597 (let* ((headers (search-input-directory inputs
15598 "include/datrie"))
15599 (base (dirname (dirname headers))))
15600 (symlink headers "libdatrie/datrie")
15601 (setenv "LDFLAGS" (string-append "-L" base "/lib")))))
15602 (add-before 'build 'relax-gcc-14-strictness
15603 (lambda _
15604 (setenv "CFLAGS"
15605 "-g -O2 -Wno-error=incompatible-pointer-types"))))))
15606 (native-inputs
15607 (list python-cython python-hypothesis python-pytest python-setuptools))
15608 (inputs (list libdatrie))
15609 (home-page "https://github.com/kmike/datrie")
15610 (synopsis "Fast, efficiently stored trie for Python")
15611 (description
15612 "This package provides a fast, efficiently stored trie implementation for
15613Python.")
15614 (license license:lgpl2.1+)))
15615
15616(define-public python-amply
15617 (package
15618 (name "python-amply")
15619 (version "0.1.6")
15620 (source
15621 (origin
15622 (method url-fetch)
15623 (uri (pypi-uri "amply" version))
15624 (sha256
15625 (base32 "195fg1n5nsl722hk33f6a7ak3n0hfs8yfpqi2xkhdqgqrh1i2hk1"))))
15626 (build-system pyproject-build-system)
15627 (native-inputs
15628 (list python-pytest
15629 python-setuptools
15630 python-setuptools-scm
15631 python-wheel))
15632 (propagated-inputs
15633 (list python-docutils
15634 python-pyparsing))
15635 (home-page "https://github.com/willu47/amply")
15636 (synopsis "Load and manipulate AMPL/GLPK data as Python data structures")
15637 (description
15638 "Amply allows you to load and manipulate AMPL/GLPK data as Python data
15639structures.")
15640 (license license:epl1.0)))
15641
15642(define-public python-pulp
15643 ;; When updating, check snakemake@N builds still fine, see:
15644 ;; <https://codeberg.org/guix/guix/issues/4782>.
15645 (package
15646 (name "python-pulp")
15647 (version "2.4")
15648 (source
15649 (origin
15650 (method url-fetch)
15651 (uri (pypi-uri "PuLP" version))
15652 (sha256
15653 (base32
15654 "1dammrg0f1v0r028i3rpxbf2bsyxmjq0q6ihb4x2wsdki44z3bxj"))))
15655 (build-system pyproject-build-system)
15656 (arguments
15657 ;; TODO: They need a special setup, see:
15658 ;; <https://codeberg.org/guix/guix/pulls/4908>.
15659 (list #:tests? #f))
15660 (native-inputs
15661 (list python-setuptools))
15662 (propagated-inputs
15663 (list python-amply))
15664 (home-page "https://github.com/coin-or/pulp")
15665 (synopsis "Linear Programming modeler")
15666 (description
15667 "PuLP is a Linear Programming modeler written in Python. PuLP can
15668generate MPS or LP files and call GLPK, COIN CLP/CBC, CPLEX, and GUROBI to
15669solve linear problems.")
15670 (license license:expat)))
15671
15672(define-public python-py-partiql-parser
15673 (package
15674 (name "python-py-partiql-parser")
15675 (version "0.6.1")
15676 (source
15677 (origin
15678 (method git-fetch) ; no tests data in PyPi package
15679 (uri (git-reference
15680 (url "https://github.com/getmoto/py-partiql-parser")
15681 (commit version)))
15682 (file-name (git-file-name name version))
15683 (sha256
15684 (base32 "008vj0f09gzk6pijwvxs6m860rmszm85is7wgjwifc8y38sqd86s"))))
15685 (build-system pyproject-build-system)
15686 (native-inputs
15687 (list python-hatchling
15688 python-pytest))
15689 (home-page "https://pypi.org/project/py-partiql-parser/")
15690 (synopsis "Pure Python PartiQL Parser")
15691 (description
15692 "This package provides a tokenizer/parser/executor for the PartiQL
15693language, in Python.")
15694 (license license:expat)))
15695
15696(define-public python-py-tes
15697 (package
15698 (name "python-py-tes")
15699 (version "0.4.2")
15700 (source
15701 (origin
15702 (method git-fetch)
15703 (uri (git-reference
15704 (url "https://github.com/ohsu-comp-bio/py-tes")
15705 (commit version)))
15706 (file-name (git-file-name name version))
15707 (sha256
15708 (base32 "0nacmw7whmbfqa6y728l6f646wpgaanfa0v4p5mggag2044v55qx"))))
15709 (build-system pyproject-build-system)
15710 (native-inputs
15711 (list python-pytest python-requests-mock python-setuptools))
15712 (propagated-inputs
15713 (list python-attrs python-dateutil python-future python-requests))
15714 (home-page "https://github.com/ohsu-comp-bio/py-tes")
15715 (synopsis "Library for communicating with the GA4GH Task Execution API")
15716 (description "This package provides a library for communicating with the
15717GA4GH Task Execution API.")
15718 (license license:expat)))
15719
15720(define-public python-altgraph
15721 (package
15722 (name "python-altgraph")
15723 (version "0.17.4")
15724 (source
15725 (origin
15726 (method url-fetch)
15727 (uri (pypi-uri "altgraph" version))
15728 (sha256
15729 (base32 "01j48np3g50g6insjkszsz0vifwlm6gspria5vdwlkbciywznnhv"))))
15730 (build-system pyproject-build-system)
15731 (native-inputs (list python-pytest python-setuptools python-wheel))
15732 (home-page "https://altgraph.readthedocs.io")
15733 (synopsis "Python graph network package")
15734 (description
15735"This package provides tools for constructing graphs, BFS and DFS
15736traversals, topological sort, shortest paths, and more with graphviz
15737output.")
15738 (license license:expat)))
15739
15740(define-public python-pyqrcode
15741 (package
15742 (name "python-pyqrcode")
15743 (properties '((commit . "674a77b5eaf850d063f518bd90c243ee34ad6b5d")
15744 (revision . "0")))
15745 (version (git-version "1.2.1"
15746 (assoc-ref properties 'revision)
15747 (assoc-ref properties 'commit)))
15748 (source
15749 (origin
15750 (method git-fetch)
15751 (uri (git-reference
15752 (url "https://github.com/mnooner256/pyqrcode")
15753 (commit (assoc-ref properties 'commit))))
15754 (file-name (git-file-name name version))
15755 (sha256
15756 (base32 "0ks4sqwcwsnb5r65z6zdfbir34f35sfv3agnlmcq1w36fya2y62m"))))
15757 (build-system pyproject-build-system)
15758 (arguments (list #:test-backend #~'nose))
15759 (native-inputs (list python-pynose python-pypng python-setuptools))
15760 (home-page "https://github.com/mnooner256/pyqrcode")
15761 (synopsis "QR code generator")
15762 (description
15763 "Pyqrcode is a QR code generator written purely in Python with SVG, EPS,
15764PNG and terminal output.")
15765 (license license:bsd-3)))
15766
15767(define-public python-seaborn
15768 (package
15769 (name "python-seaborn")
15770 (version "0.13.2")
15771 (source (origin
15772 (method url-fetch)
15773 (uri (pypi-uri "seaborn" version))
15774 (sha256
15775 (base32
15776 "1xzzxrbxsmmk39647vcx7avzdbzxw9vz8pc8yklnakcgk100mrlk"))))
15777 (build-system pyproject-build-system)
15778 (arguments
15779 (list
15780 ;; 2358 passed, 16 skipped, 6 xfailed, 17 warnings
15781 #:test-flags
15782 #~(list "--numprocesses" (number->string (parallel-job-count))
15783 ;; XXX: See: <https://github.com/mwaskom/seaborn/issues/3892>.
15784 ;; KeyError: 'labelleft'
15785 "--deselect=tests/_core/test_plot.py::TestLabelVisibility::test_1d_column_wrapped"
15786 "--deselect=tests/_core/test_plot.py::TestLabelVisibility::test_1d_row_wrapped"
15787 ;; AttributeError: module 'numpy' has no attribute
15788 ;; 'VisibleDeprecationWarning'
15789 "--deselect=tests/test_distributions.py::TestKDEPlotBivariate::test_weights")))
15790 (native-inputs
15791 (list python-flit-core
15792 python-pytest
15793 python-pytest-xdist))
15794 (propagated-inputs
15795 (list python-matplotlib
15796 python-numpy
15797 python-pandas
15798 python-scipy
15799 python-statsmodels))
15800 (home-page "https://seaborn.pydata.org/")
15801 (synopsis "Statistical data visualization")
15802 (description
15803 "Seaborn is a library for making attractive and informative statistical
15804graphics in Python. It is built on top of matplotlib and tightly integrated
15805with the PyData stack, including support for numpy and pandas data structures
15806and statistical routines from scipy and statsmodels.")
15807 (license license:bsd-3)))
15808
15809(define-public python-session-info
15810 (package
15811 (name "python-session-info")
15812 (version "1.0.0")
15813 (source
15814 (origin
15815 (method git-fetch)
15816 (uri (git-reference
15817 (url "https://gitlab.com/joelostblom/session_info")
15818 (commit version)))
15819 (file-name (git-file-name name version))
15820 (sha256
15821 (base32 "0w6y764qci5w9925c75xdr8jizgf8189mzzaz4zk5lw1f182yqy4"))))
15822 (build-system pyproject-build-system)
15823 (arguments (list #:tests? #f)) ; No tests.
15824 (native-inputs (list python-setuptools))
15825 (propagated-inputs (list python-stdlib-list))
15826 (home-page "https://gitlab.com/joelostblom/session_info")
15827 (synopsis "Output version information for modules currently loaded")
15828 (description
15829 "This package outputs version information for modules loaded in the current
15830session, Python, and the OS.")
15831 (license license:bsd-3)))
15832
15833(define-public python-mpmath
15834 (package
15835 (name "python-mpmath")
15836 (version "1.3.0")
15837 (source
15838 (origin
15839 (method git-fetch)
15840 (uri (git-reference
15841 (url "https://github.com/fredrik-johansson/mpmath")
15842 (commit version)))
15843 (file-name (git-file-name name version))
15844 (sha256
15845 (base32 "058ahp0z0gn0z1hwvggrmiir1xag6rzgrfgfg138kjnk5ml9q4gl"))))
15846 (build-system pyproject-build-system)
15847 (native-inputs
15848 (list python-pytest
15849 python-setuptools
15850 python-setuptools-scm))
15851 (home-page "https://mpmath.org")
15852 (synopsis "Arbitrary-precision floating-point arithmetic in python")
15853 (description
15854 "@code{mpmath} can be used as an arbitrary-precision substitute for
15855Python's float/complex types and math/cmath modules, but also does much
15856more advanced mathematics.")
15857 (license license:bsd-3)))
15858
15859(define-public python-bigfloat
15860 (package
15861 (name "python-bigfloat")
15862 (version "0.4.0")
15863 (source
15864 (origin
15865 (method url-fetch)
15866 (uri (pypi-uri "bigfloat" version))
15867 (sha256
15868 (base32 "1f0c1hdr39bbl5rds5r1waa1papjmjiyp0ixs64mkjiahzg6pfaq"))
15869 (snippet '(delete-file "mpfr.c"))))
15870 (build-system pyproject-build-system)
15871 (arguments
15872 (list
15873 #:test-flags
15874 ;; This one fails with AssertionError: 0 != 8796082524191. Not good,
15875 ;; but I don't know what to do about it.
15876 '(list "-k" "not test_hash")
15877 #:phases
15878 '(modify-phases %standard-phases
15879 (add-before 'build 'cythonize
15880 (lambda _ (invoke "cython" "mpfr.pyx"))))))
15881 (inputs (list mpfr))
15882 (native-inputs
15883 (list python-cython python-pytest python-setuptools python-wheel))
15884 (propagated-inputs
15885 (list python-six))
15886 (home-page "https://github.com/mdickinson/bigfloat")
15887 (synopsis "Arbitrary precision floating-point arithmetic for Python")
15888 (description
15889 "This package provides a Python interface to the MPFR library for
15890multiprecision arithmetic.")
15891 (license license:lgpl3+)))
15892
15893(define-public python-plac
15894 (package
15895 (name "python-plac")
15896 (version "1.3.5")
15897 (source
15898 (origin
15899 (method git-fetch)
15900 (uri (git-reference
15901 (url "https://github.com/ialbert/plac")
15902 (commit (string-append "v" version))))
15903 (file-name (git-file-name name version))
15904 (sha256
15905 (base32 "1n0cbil1snbn0diw8zjm7qs77zpbgmf2k76mc2jknhk1hbnksyak"))))
15906 (build-system pyproject-build-system)
15907 (arguments
15908 (list
15909 #:phases
15910 #~(modify-phases %standard-phases
15911 (add-after 'unpack 'fix-tkinter
15912 (lambda _
15913 (substitute* "plac_tk.py"
15914 (("from Tkinter import Tk")
15915 "from tkinter import Tk")
15916 (("from ScrolledText import ScrolledText")
15917 "from tkinter.scrolledtext import ScrolledText")))))))
15918 (native-inputs
15919 (list (list python "tk") python-pytest python-setuptools))
15920 (home-page "https://github.com/ialbert/plac")
15921 (synopsis "Command line arguments parser")
15922 (description
15923 "This package can generate command line parameters from function
15924signatures.")
15925 (license license:bsd-3)))
15926
15927(define-public python-q
15928 (package
15929 (name "python-q")
15930 (properties '((commit . "cbad74095e20017f33d3ab75aa8375aa046ee697")
15931 (revision . "0")))
15932 (version (git-version "2.7"
15933 (assoc-ref properties 'revision)
15934 (assoc-ref properties 'commit)))
15935 (source
15936 (origin
15937 (method git-fetch)
15938 (uri (git-reference
15939 (url "https://github.com/zestyping/q")
15940 (commit (assoc-ref properties 'commit))))
15941 (file-name (git-file-name name version))
15942 (sha256
15943 (base32 "17bzi4xma4313waxanz5lly0cf0k6h33qrpy24sra2frh7gp0j0j"))))
15944 (build-system pyproject-build-system)
15945 (arguments
15946 (list
15947 ;; Deduced from the makefile.
15948 #:test-backend #~'custom
15949 #:test-flags #~(list "test/test_basic.py")
15950 #:phases
15951 #~(modify-phases %standard-phases
15952 (add-before 'check 'configure-tests
15953 (lambda* (#:key tests? #:allow-other-keys)
15954 (when tests?
15955 (setenv "TMPDIR" "/tmp")))))))
15956 (native-inputs (list python-setuptools))
15957 (home-page "https://github.com/zestyping/q")
15958 (synopsis "Quick-and-dirty debugging output for tired programmers")
15959 (description
15960 "q is a Python module for \"print\" style of debugging Python code. It
15961provides convenient short API for print out of values, tracebacks, and
15962falling into the Python interpreter.")
15963 (license license:asl2.0)))
15964
15965(define-public python-qnorm
15966 (package
15967 (name "python-qnorm")
15968 (version "0.9.0")
15969 (source
15970 (origin
15971 (method git-fetch)
15972 (uri (git-reference
15973 (url "https://github.com/Maarten-vd-Sande/qnorm")
15974 (commit (string-append "v" version))))
15975 (file-name (git-file-name name version))
15976 (sha256
15977 (base32 "0bgqxmqq8d3il0gnbvlb5sik50f6z8myx7p652lpv4llj9hrl2w8"))))
15978 (build-system pyproject-build-system)
15979 (propagated-inputs
15980 (list python-numba python-numpy python-pandas
15981 ;; XXX: pandas optional dependencies.
15982 python-tables python-pyarrow python-fastparquet))
15983 (native-inputs (list python-setuptools))
15984 (home-page "https://github.com/Maarten-vd-Sande/qnorm")
15985 (synopsis "Quantile normalization")
15986 (description
15987 "This tool implements quantile normalization. It properly resolves rank
15988ties, which is important when ties happen frequently, such as when working
15989with discrete numbers (integers) in count tables. This implementation should
15990be relatively fast, and can use multiple cores to sort the columns and
15991tie-resolvement is accelerated by numba.")
15992 (license license:expat)))
15993
15994(define-public python-quantlaw
15995 (package
15996 (name "python-quantlaw")
15997 (version "0.0.7")
15998 (source
15999 (origin
16000 (method git-fetch)
16001 (uri (git-reference
16002 (url "https://github.com/Quantlaw/quantlaw")
16003 (commit (string-append "v" version))))
16004 (file-name (git-file-name name version))
16005 (sha256
16006 (base32 "1ps0hcw2x2w9g0gipflka98zf1zsadgs161r6pgp7nh0sq8kpkrh"))))
16007 (build-system pyproject-build-system)
16008 (arguments
16009 (list
16010 #:test-flags
16011 #~(list "-k"
16012 ;; test expects network access
16013 "not test_load_statue_names")
16014 #:phases
16015 #~(modify-phases %standard-phases
16016 (add-after 'unpack 'fix-pytest-config
16017 (lambda _
16018 (substitute* "setup.cfg"
16019 (("--cov.*")
16020 "")))))))
16021 (native-inputs (list python-pytest python-setuptools))
16022 (propagated-inputs (list python-beautifulsoup4 python-networkx
16023 python-pandas python-regex python-requests))
16024 (home-page "https://quantlaw.readthedocs.io/")
16025 (synopsis "Coding utilities for quantitative legal studies")
16026 (description
16027 "This package provides coding utilities for quantitative legal studies.")
16028 (license license:bsd-3)))
16029
16030(define-public python-singledispatch
16031 (package
16032 (name "python-singledispatch")
16033 (version "4.0.0")
16034 (source
16035 (origin
16036 (method url-fetch)
16037 (uri (pypi-uri "singledispatch" version))
16038 (sha256
16039 (base32
16040 "1z5qbbvvjvh3cwcjv57p7vzhayx0j1ysnvjq0d5py6k5d2ljghzk"))))
16041 (build-system pyproject-build-system)
16042 (native-inputs
16043 (list python-pytest
16044 python-setuptools
16045 python-six ; required for conversion, not at run-time
16046 python-wheel))
16047 (home-page
16048 "https://docs.python.org/3/library/functools.html#functools.singledispatch")
16049 (synopsis "Backport of singledispatch feature from Python 3.4")
16050 (description
16051 "This library brings functools.singledispatch from Python 3.4 to Python
160522.6-3.3.")
16053 (license license:expat)))
16054
16055(define-public python-pyzmq
16056 (package
16057 (name "python-pyzmq")
16058 (version "27.0.1")
16059 (source
16060 (origin
16061 (method url-fetch)
16062 (uri (pypi-uri "pyzmq" version))
16063 (sha256
16064 (base32 "0jznvl7v41241pbbvwzjxi028mrfy1n5ymfjzy2783n29ch4kia5"))))
16065 (build-system pyproject-build-system)
16066 (arguments
16067 (list
16068 #:test-flags
16069 '(list "-m" "not flaky")
16070 #:phases
16071 #~(modify-phases %standard-phases
16072 (add-before 'build 'configure
16073 (lambda _
16074 ;; Our zeromq package is built with '--enable-drafts'; also
16075 ;; enable draft support for pyzmq so the draft test passes.
16076 (setenv "ZMQ_DRAFT_API" "1")
16077 ;; Make sure to prevent building bundled libzmq.
16078 (setenv "PYZMQ_NO_BUNDLE" "1")))
16079 (add-before 'check 'delete-source
16080 ;; To prevent loading it and skip build extensions one more times.
16081 (lambda _
16082 (delete-file-recursively "zmq"))))))
16083 (native-inputs
16084 (list cmake-minimal
16085 ;; python-cffi ; for PyPy
16086 python-cython
16087 python-packaging
16088 python-pytest
16089 python-pytest-asyncio
16090 python-scikit-build-core
16091 python-tornado))
16092 (inputs
16093 (list libsodium
16094 zeromq))
16095 (home-page "https://github.com/zeromq/pyzmq")
16096 (synopsis "Python bindings for 0MQ")
16097 (description
16098 "PyZMQ is the official Python binding for the ZeroMQ messaging library.")
16099 (license license:bsd-4)))
16100
16101(define-public python-immutabledict
16102 (package
16103 (name "python-immutabledict")
16104 (version "4.2.0")
16105 (source
16106 (origin
16107 (method url-fetch)
16108 (uri (pypi-uri "immutabledict" version))
16109 (sha256
16110 (base32 "0pvwfasa5l78pi32zk55x5ihpdzkdh4f3xwbfmd7ldyjma0zs0z0"))))
16111 (build-system pyproject-build-system)
16112 (native-inputs
16113 (list python-poetry-core python-pytest))
16114 (home-page "https://github.com/corenting/immutabledict")
16115 (synopsis "Immutable wrapper around dictionaries")
16116 (description
16117 "@dfn{immutabledict} is an immutable wrapper around dictionaries.
16118It implements the complete mapping interface and can be used as a drop-in
16119replacement for dictionaries where immutability is desired.")
16120 (license license:expat)))
16121
16122(define-public python-emoji
16123 (package
16124 (name "python-emoji")
16125 (version "2.12.1")
16126 (source
16127 (origin
16128 (method url-fetch)
16129 (uri (pypi-uri "emoji" version))
16130 (sha256
16131 (base32 "1svk94pad8gcvjwd329zmfrw09wakwh6qjvnhf6sa6k92y44i82a"))))
16132 (build-system pyproject-build-system)
16133 (propagated-inputs (list python-typing-extensions))
16134 (native-inputs
16135 (list python-pytest
16136 python-setuptools
16137 python-wheel))
16138 (home-page "https://github.com/carpedm20/emoji/")
16139 (synopsis "Emoji terminal output for Python")
16140 (description
16141 "This package provides Emoji terminal output for Python. The
16142entire set of Emoji codes as defined by the Unicode Consortium is supported in
16143addition to a bunch of aliases.")
16144 (license license:bsd-3)))
16145
16146;; TODO: Remove this package when upgrading python-gh-md-to-html to the
16147;; latest version. The latest gh-md-to-html does not build successfully from
16148;; the PyPI distribution. Let's resolve #72102 while keeping gh-md-to-html at
16149;; version 1.21.2 from failing.
16150;; https://issues.guix.gnu.org/72102
16151;; https://github.com/phseiff/github-flavored-markdown-to-html/issues/73
16152(define-public python-emoji-for-gh-md-to-html
16153 (package
16154 (inherit python-emoji)
16155 (version "1.6.1")
16156 (source
16157 (origin
16158 (method url-fetch)
16159 (uri (pypi-uri "emoji" version))
16160 (sha256
16161 (base32 "0923mpixwq6hdpkgvi4r46alfvf608iq975rb8lnqpq29j71mmjk"))))))
16162
16163(define-public python-sarge
16164 (package
16165 (name "python-sarge")
16166 (version "0.1.7.post1") ;post release only to correct errors in metadata
16167 (source
16168 (origin
16169 (method git-fetch)
16170 (uri (git-reference
16171 (url "https://github.com/vsajip/sarge")
16172 (commit version)))
16173 (file-name (git-file-name name version))
16174 (sha256
16175 (base32 "0kn577lnaznr2hz1w1617l1agd21xs1fq2qv8kg2dy92qinl6gbd"))))
16176 (build-system pyproject-build-system)
16177 (native-inputs (list python-pytest python-setuptools))
16178 (home-page "https://docs.red-dove.com/sarge/")
16179 (synopsis "Subprocess wrapper with command pipeline functionality")
16180 (description "@code{sarge} is a wrapper for subprocess which provides
16181command pipeline functionality.")
16182 (license license:bsd-3)))
16183
16184(define-public python-sentry-sdk
16185 (package
16186 (name "python-sentry-sdk")
16187 (version "1.5.5")
16188 (source
16189 (origin
16190 (method git-fetch) ; no tests in PyPI release
16191 (uri (git-reference
16192 (url "https://github.com/getsentry/sentry-python")
16193 (commit version)))
16194 (file-name (git-file-name name version))
16195 (sha256
16196 (base32 "0dygfaapvznpj2j7cfjb0vlwhsn5qa5kf0kq488xbhjg06n8rrc4"))))
16197 (build-system pyproject-build-system)
16198 (arguments
16199 (list
16200 #:test-flags
16201 ;; See <https://github.com/pytest-dev/pytest-forked/issues/88>.
16202 ;; AttributeError: module 'py' has no attribute 'process'
16203 '(list "--ignore=tests/integrations/django/test_basic.py"
16204 "--ignore=tests/utils/test_contextvars.py"
16205 ;; These try to use pip to install packages.
16206 "--ignore=tests/integrations/gcp/test_gcp.py"
16207 "-k"
16208 (string-append
16209 ;; This test requires extra dependencies.
16210 "not test_auto_enabling_integrations"
16211 ;; AttributeError: module 'py' has no attribute 'process'
16212 " and not test_threading"
16213 " and not test_transport"
16214 ;; Tests below require network.
16215 " and not test_crumb_capture"
16216 " and not test_crumb_capture_hint"
16217 " and not test_httplib_misuse"
16218 ;; Unclear assert error
16219 " and not test_auto_session_tracking_with_aggregates"
16220 ;; Fails with IndexError.
16221 " and not test_session_mode_defaults_to"
16222 "_request_mode_in_wsgi_handler"))
16223 #:phases
16224 '(modify-phases %standard-phases
16225 (add-before 'check 'fix-test
16226 ;; See https://github.com/getsentry/sentry-python/pull/2712
16227 (lambda _
16228 (substitute* "tests/__init__.py"
16229 (("import pytest")
16230 "import warnings")
16231 (("pytest.warns\\(None\\)")
16232 "warnings.catch_warnings(record=True)"))))
16233 (replace 'check
16234 (lambda* (#:key tests? test-flags #:allow-other-keys)
16235 (when tests?
16236 (apply invoke "python" "-m" "pytest" test-flags)))))))
16237 (native-inputs
16238 (list nss-certs-for-test
16239 python-django
16240 python-executing
16241 python-gevent
16242 python-jsonschema
16243 python-mock
16244 python-pyrsistent
16245 python-pytest
16246 python-pytest-cov
16247 python-pytest-django
16248 python-pytest-localserver
16249 python-setuptools
16250 python-werkzeug
16251 python-wheel))
16252 (propagated-inputs
16253 (list python-certifi python-urllib3))
16254 (home-page "https://github.com/getsentry/sentry-python")
16255 (synopsis "Python SDK for Sentry")
16256 (description "This package provides a Python SDK for the Sentry
16257application monitoring and error tracking software.")
16258 (license license:bsd-2)))
16259
16260(define-public python-pep440
16261 (package
16262 (name "python-pep440")
16263 (version "0.1.2")
16264 (source
16265 (origin
16266 (method url-fetch)
16267 (uri (pypi-uri "pep440" version))
16268 (sha256
16269 (base32 "0kfhysbyci4f2sxvv991yvn22kbhncn0jg1arbhzw4rbri375csq"))))
16270 (build-system pyproject-build-system)
16271 (arguments
16272 ;; This checks for "pep440" in the output, but we actually print
16273 ;; ".pep440-real" due to wrapping.
16274 (list #:test-flags '(list "-k" "not test_cli_help")))
16275 (propagated-inputs (list python-check-manifest python-mypy python-pytest
16276 python-pytest-console-scripts python-pytest-cov))
16277 (native-inputs (list python-flit-core))
16278 (home-page "https://pypi.org/project/pep440/")
16279 (synopsis "Utils to check whether versions number match PEP 440")
16280 (description
16281 "This package provides a simple package with utils to check whether
16282versions number match PEP 440.")
16283 (license license:expat)))
16284
16285(define-public python-pep517
16286 (package
16287 (inherit python-pep517-bootstrap)
16288 (name "python-pep517")
16289 (arguments
16290 '(#:phases (modify-phases %standard-phases
16291 (replace 'check
16292 (lambda* (#:key tests? #:allow-other-keys)
16293 (delete-file "pytest.ini")
16294 (delete-file "tests/test_meta.py")
16295 (if tests?
16296 (invoke "pytest") #t))))))
16297 (native-inputs (list python-mock python-pytest python-testpath))))
16298
16299(define-public python-pyproject-metadata
16300 (package
16301 (name "python-pyproject-metadata")
16302 (version "0.7.1")
16303 (source
16304 (origin
16305 (method git-fetch)
16306 (uri (git-reference
16307 (url "https://github.com/FFY00/python-pyproject-metadata")
16308 (commit version)))
16309 (file-name (git-file-name name version))
16310 (sha256
16311 (base32
16312 "0yvs59ymz5gdix34a95wxlxvk9bnvjgrzsnmnc3ws7whpfv3yasm"))))
16313 (build-system pyproject-build-system)
16314 (arguments
16315 (list
16316 #:test-flags
16317 ;; Two tests fail because the error message slightly changed, so the
16318 ;; tests' regular expressions no longer match.
16319 '(list "--ignore=tests/test_standard_metadata.py")))
16320 (propagated-inputs (list python-packaging))
16321 (native-inputs (list python-pypa-build python-pytest python-setuptools
16322 python-tomli python-wheel))
16323 (home-page "https://github.com/FFY00/python-pyproject-metadata")
16324 (synopsis "Dataclass for PEP 621 metadata")
16325 (description "This project does not implement the parsing of
16326@file{pyproject.toml} containing PEP 621 metadata. Instead, given a Python
16327data structure representing PEP 621 metadata (already parsed), it will
16328validate this input and generate a PEP 643-compliant metadata
16329file (e.g. @file{PKG-INFO}).")
16330 (license license:expat)))
16331
16332;; pep621 was renamed to pyproject-metadata.
16333(define-deprecated-package python-pep621
16334 python-pyproject-metadata)
16335
16336(define-public python-meson-python
16337 (package
16338 (name "python-meson-python")
16339 (version "0.15.0")
16340 (source
16341 (origin
16342 (method url-fetch)
16343 (uri (pypi-uri "meson_python" version))
16344 (sha256
16345 (base32 "0vyjhjabvm41hqijifk33idbdl62i76kfyf884f9rs29rpp77nzx"))))
16346 (build-system meson-build-system)
16347 (propagated-inputs (list python-pyproject-metadata python-tomli))
16348 (home-page "https://github.com/mesonbuild/meson-python")
16349 (synopsis "Meson Python build backend (PEP 517)")
16350 (description "This package provides a PEP 517 build backend that makes
16351use of the Meson build system.")
16352 (license license:expat)))
16353
16354(define-public python-mccabe
16355 (package
16356 (name "python-mccabe")
16357 (version "0.7.0")
16358 (source
16359 (origin
16360 (method url-fetch)
16361 (uri (pypi-uri "mccabe" version))
16362 (sha256
16363 (base32 "09b34c7jj2a0yya7fp3x7lncna4zj7pr4caj9vgvnq1vqd0053il"))))
16364 (build-system pyproject-build-system)
16365 (arguments
16366 (list
16367 ;; Test fixtures are not released yet, see
16368 ;; <https://github.com/PyCQA/mccabe/issues/93>
16369 #:tests? #f))
16370 (native-inputs
16371 (list python-toml
16372 python-setuptools
16373 python-wheel))
16374 (home-page "https://github.com/PyCQA/mccabe")
16375 (synopsis "McCabe checker, plugin for flake8")
16376 (description
16377 "This package provides a Flake8 plug-in to compute the McCabe cyclomatic
16378complexity of Python source code.")
16379 (license license:expat)))
16380
16381(define-public python-autoflake8
16382 (package
16383 (name "python-autoflake8")
16384 (version "0.4.0")
16385 (source (origin
16386 (method git-fetch) ;for tests
16387 (uri (git-reference
16388 (url "https://github.com/fsouza/autoflake8")
16389 (commit (string-append "v" version))))
16390 (file-name (git-file-name name version))
16391 (sha256
16392 (base32
16393 "0jx7bkslbhr24yvq60pl39faz2r6g93f1zm1gygswl0rzr5zmgnh"))))
16394 (build-system pyproject-build-system)
16395 (native-inputs
16396 (list python-aiofiles
16397 python-poetry-core
16398 python-pytest
16399 python-pytest-xdist))
16400 (propagated-inputs (list python-pyflakes))
16401 (home-page "https://github.com/fsouza/autoflake8")
16402 (synopsis "Automatically fix issues reported by flake8")
16403 (description "Tool to automatically fix some issues reported by
16404@command{flake8}.")
16405 (license license:expat)))
16406
16407(define-public python-flake8
16408 (package
16409 (name "python-flake8")
16410 (version "7.1.1")
16411 (source
16412 (origin
16413 (method git-fetch) ; no tests data in PyPi package
16414 (uri (git-reference
16415 (url "https://github.com/pycqa/flake8")
16416 (commit version)))
16417 (file-name (git-file-name name version))
16418 (sha256
16419 (base32 "0qbj2m1ljyvpnncnkbm1cscy726c1if4n2c9ysfpmd2zm88rj87a"))))
16420 (build-system pyproject-build-system)
16421 (native-inputs
16422 (list python-pytest
16423 python-setuptools
16424 python-wheel))
16425 (propagated-inputs
16426 (list python-mccabe
16427 python-pycodestyle
16428 python-pyflakes))
16429 (home-page "https://flake8.pycqa.org/en/latest/")
16430 (synopsis "The modular source code checker: pep8, pyflakes and co")
16431 (description
16432 "Flake8 is a wrapper around PyFlakes, pep8 and python-mccabe.")
16433 (license license:expat)))
16434
16435(define-public python-flake8-blind-except
16436 (package
16437 (name "python-flake8-blind-except")
16438 (version "0.2.1")
16439 (source
16440 (origin
16441 (method git-fetch)
16442 (uri (git-reference
16443 (url "https://github.com/elijahandrews/flake8-blind-except")
16444 (commit (string-append "v" version))))
16445 (file-name (git-file-name name version))
16446 (sha256
16447 (base32 "09zrfrm0896miysrpb7fhxzqjn6pm8y0b638nncswm2wvw9by72q"))))
16448 (build-system pyproject-build-system)
16449 (arguments (list #:tests? #f)) ;no tests
16450 (native-inputs (list python-setuptools))
16451 (propagated-inputs (list python-pycodestyle))
16452 (home-page "https://github.com/elijahandrews/flake8-blind-except")
16453 (synopsis "Check for blind @code{except:} statements")
16454 (description
16455 "This package provides a flake8 extension that checks for blind
16456@code{except:} statements.")
16457 (license license:expat)))
16458
16459(define-public python-flake8-bugbear
16460 (package
16461 (name "python-flake8-bugbear")
16462 (version "24.10.31")
16463 (source
16464 (origin
16465 (method url-fetch)
16466 (uri (pypi-uri "flake8_bugbear" version))
16467 (sha256
16468 (base32 "1nrrwhfmk49riflmng26qqjzvfang5lij14ripzqwzxjf8f56ns3"))))
16469 (build-system pyproject-build-system)
16470 (native-inputs
16471 (list python-hypothesmith
16472 python-pytest
16473 python-setuptools
16474 python-wheel))
16475 (propagated-inputs
16476 (list python-attrs
16477 python-flake8))
16478 (home-page "https://github.com/PyCQA/flake8-bugbear")
16479 (synopsis "Flake8 plugin for finding likely bugs and design problems in your program")
16480 (description
16481 "This package contains a plugin for Flake8 finding likely bugs and design
16482problems in your program. It contains warnings that don't belong in pyflakes
16483and pycodestyle.")
16484 (license license:expat)))
16485
16486(define-public python-flake8-continuation
16487 (package
16488 (name "python-flake8-continuation")
16489 (version "1.0.5")
16490 (source
16491 (origin
16492 (method git-fetch)
16493 (uri (git-reference
16494 (url "https://github.com/planetlabs/flake8-continuation")
16495 (commit version)))
16496 (file-name (git-file-name name version))
16497 (sha256
16498 (base32 "04fsd361x03mgyydsdm9vr28ikr2mdip13c805i2wzxc45qsc9x7"))))
16499 (build-system pyproject-build-system)
16500 (arguments
16501 (list
16502 #:phases
16503 #~(modify-phases %standard-phases
16504 (add-after 'unpack 'remove-python-six-dependency
16505 (lambda _
16506 (substitute* "flake8_continuation.py"
16507 (("import six|six\\.moves\\.")
16508 ""))
16509 (substitute* "setup.py"
16510 ((", \"six\"")
16511 "")))))))
16512 (native-inputs (list python-pytest python-setuptools))
16513 (propagated-inputs (list python-flake8 python-pycodestyle))
16514 (home-page "https://github.com/planetlabs/flake8-continuation")
16515 (synopsis "Flake8 Line Continuation Plugin")
16516 (description
16517 "A Flake8 plugin that checks for the line continuation style to be in the
16518preferred method according to PEP-8, specifically:
16519@quotation
16520The preferred way of wrapping long lines is by using Python's implied line
16521continuation inside parentheses, brackets and braces. Long lines can be
16522broken over multiple lines by wrapping expressions in parentheses. These
16523should be used in preference to using a backslash for line continuation.
16524@end quotation")
16525 (license license:asl2.0)))
16526
16527(define-public python-flake8-debugger
16528 (package
16529 (name "python-flake8-debugger")
16530 (version "4.1.2")
16531 (source
16532 (origin
16533 (method git-fetch)
16534 (uri (git-reference
16535 (url "https://github.com/jbkahn/flake8-debugger")
16536 (commit version)))
16537 (file-name (git-file-name name version))
16538 (sha256
16539 (base32 "1nmqs238a02ypld32lwbagbk1jppm3pddrjdrrngc1xpbzb9nyl0"))))
16540 (build-system pyproject-build-system)
16541 (native-inputs (list python-poetry-core python-pytest python-setuptools))
16542 (propagated-inputs (list python-flake8 python-pycodestyle))
16543 (home-page "https://github.com/jbkahn/flake8-debugger")
16544 (synopsis "@code{ipdb} and @code{pdb} statement checker plugin for flake8")
16545 (description
16546 "This package provides a Flake8 plugin that checks for @code{ipdb} and
16547@code{pdb} imports and set traces, as well as @code{from
16548IPython.terminal.embed}, @code{import InteractiveShellEmbed} and
16549@code{InteractiveShellEmbed()()}.")
16550 (license license:expat)))
16551
16552(define-public python-flake8-implicit-str-concat
16553 (package
16554 (name "python-flake8-implicit-str-concat")
16555 (version "0.5.0")
16556 (source
16557 (origin
16558 (method url-fetch)
16559 (uri (pypi-uri "flake8_implicit_str_concat" version))
16560 (sha256
16561 (base32 "1s59w4x053j4794n6h9c7hafa8jjjymx6aar5q23pjw4vrdis7hh"))))
16562 (build-system pyproject-build-system)
16563 (arguments
16564 (list
16565 #:tests? #f)) ; no tests in PiPY or git checkout
16566 (native-inputs
16567 (list python-hatchling))
16568 (propagated-inputs
16569 (list python-attrs
16570 python-more-itertools))
16571 (home-page "https://github.com/keisheiled/flake8-implicit-str-concat")
16572 (synopsis "Flake8 plugin to encourage correct string literal concatenation")
16573 (description
16574 "This is a plugin for the Python code checking tool Flake8 to encourage
16575correct string literal concatenation.
16576
16577It looks for style problems like implicitly concatenated string literals on
16578the same line (which can be introduced by the code formatting tool Black), or
16579unnecessary plus operators for explicit string literal concatenation.")
16580 (license license:expat)))
16581
16582(define-public python-flake8-print
16583 (package
16584 (name "python-flake8-print")
16585 (version "5.0.0")
16586 (source
16587 (origin
16588 (method url-fetch)
16589 (uri (pypi-uri "flake8-print" version))
16590 (sha256
16591 (base32 "1ydx92xck090ajp8vk2378fm0f4wj3mikhinjs3w1hcw70m5m4bn"))))
16592 (build-system pyproject-build-system)
16593 (arguments
16594 (list
16595 #:tests? #f)) ; no tests in PiPY or git checkout
16596 (native-inputs
16597 (list python-poetry-core))
16598 (propagated-inputs
16599 (list python-flake8
16600 python-pycodestyle))
16601 (home-page "https://github.com/jbkahn/flake8-print")
16602 (synopsis "Print statement checker plugin for Flake8")
16603 (description
16604 "This plugin for Flake8 checks for @code{print} statements in Python
16605files.")
16606 (license license:expat)))
16607
16608(define-public python-flake8-pyi
16609 (package
16610 (name "python-flake8-pyi")
16611 (version "24.9.0")
16612 (source
16613 (origin
16614 (method url-fetch)
16615 (uri (pypi-uri "flake8_pyi" version))
16616 (sha256
16617 (base32 "1n8cqbqq9cfyn952kwqqs4s7lcyycgr829ymxnplg0cm49877yv4"))))
16618 (build-system pyproject-build-system)
16619 (arguments
16620 (list
16621 #:phases
16622 #~(modify-phases %standard-phases
16623 (add-after 'unpack 'fix-pytest-config
16624 (lambda _
16625 ;; Prevent full threads utilization.
16626 (substitute* "pyproject.toml"
16627 (("-nauto") "")))))))
16628 (native-inputs
16629 (list python-hatchling
16630 python-pytest))
16631 (propagated-inputs
16632 (list python-attrs
16633 python-flake8
16634 python-pyflakes))
16635 (home-page "https://github.com/ambv/flake8-pyi")
16636 (synopsis "Flake8 plugin that provides specializations for type hinting stub files")
16637 (description
16638 "This package contains a plugin that provides specializations for type
16639hinting stub files, especially interesting for linting typeshed. It adds the
16640@file{.pyi} extension to the default value of the @code{--filename}
16641command-line argument to Flake8. This means stubs are linted by default with
16642this plugin enabled, without needing to explicitly list every file. It
16643modifies PyFlakes runs for @file{.pyi} files to defer checking type annotation
16644expressions after the entire file has been read. This enables support for
16645first-class forward references that stub files use.")
16646 (license license:expat)))
16647
16648(define-public python-flake8-quotes
16649 (package
16650 (name "python-flake8-quotes")
16651 (version "3.4.0")
16652 (source
16653 (origin
16654 (method url-fetch)
16655 (uri (pypi-uri "flake8-quotes" version))
16656 (sha256
16657 (base32 "0v1762x0819xqha7w4l4hh66bpi82imgiib8pvmd78hhnwplkn5a"))))
16658 (build-system pyproject-build-system)
16659 (native-inputs
16660 (list python-pytest
16661 python-setuptools
16662 python-wheel))
16663 (propagated-inputs
16664 (list python-flake8))
16665 (home-page "https://github.com/zheller/flake8-quotes/")
16666 (synopsis "Flake8 lint for quotes")
16667 (description "This package provides a Flake8 lint for quotes.")
16668 (license license:expat)))
16669
16670(define-public python-flake8-todo
16671 (package
16672 (name "python-flake8-todo")
16673 (version "0.7")
16674 (source
16675 (origin
16676 (method git-fetch)
16677 (uri (git-reference
16678 (url "https://github.com/schlamar/flake8-todo")
16679 (commit (string-append "v" version))))
16680 (file-name (git-file-name name version))
16681 (sha256
16682 (base32 "0bx4bs9l6cvqk5v21my4dn0zmkrr0sajsw6f3x1dj4fpg3dp5d8s"))))
16683 (build-system pyproject-build-system)
16684 (arguments (list #:tests? #f)) ; No tests.
16685 (native-inputs (list python-setuptools))
16686 (propagated-inputs (list python-pycodestyle))
16687 (home-page "https://github.com/schlamar/flake8-todo")
16688 (synopsis "TODO notes checker, plugin for flake8")
16689 (description
16690 "This package provides the @code{flake8-todo} Python module, a
16691TODO notes checker plugin for flake8.")
16692 (license license:expat)))
16693
16694(define-public python-flake8-isort
16695 (package
16696 (name "python-flake8-isort")
16697 (version "6.1.1")
16698 (source
16699 (origin
16700 (method url-fetch)
16701 (uri (pypi-uri "flake8_isort" version))
16702 (sha256
16703 (base32 "1cvh0d18scgq36gqa2vqbifjarln1r3axgq93lzc303ay0y2zy61"))))
16704 (build-system pyproject-build-system)
16705 (arguments
16706 (list
16707 #:tests? #f)) ; no tests in PiPY or git checkout
16708 (native-inputs
16709 (list python-hatchling))
16710 (propagated-inputs
16711 (list python-flake8
16712 python-isort))
16713 (home-page "https://github.com/gforcada/flake8-isort")
16714 (synopsis "Flake8 plugin integrating isort")
16715 (description
16716 "This package provides a flake8 plugin that integrates isort,
16717extending flake8 so that it can warn about badly sorted Python import
16718directives.")
16719 (license license:gpl2+)))
16720
16721(define-public python-autoflake
16722 (package
16723 (name "python-autoflake")
16724 (version "2.3.1")
16725 (source
16726 (origin
16727 (method url-fetch)
16728 (uri (pypi-uri "autoflake" version))
16729 (sha256
16730 (base32 "17lhrmz6h7pz2nald90p8gn3hhzbqwmd78819yf4b1habgf7b2y9"))))
16731 (build-system pyproject-build-system)
16732 (arguments
16733 (list
16734 #:phases
16735 #~(modify-phases %standard-phases
16736 (replace 'check
16737 (lambda _
16738 (invoke "python" "test_autoflake.py"))))))
16739 (native-inputs
16740 (list python-hatchling))
16741 (propagated-inputs
16742 (list python-pyflakes))
16743 (home-page "https://github.com/myint/autoflake")
16744 (synopsis "Removes unused imports and unused variables")
16745 (description
16746 "@code{autoflake} removes unused imports and unused variables from Python
16747code as reported by @code{pyflakes}.
16748
16749By default, it only removes unused imports for modules that are part of the
16750standard library. Removal of unused variables is also disabled by default.
16751It also removes useless @code{pass} statements.")
16752 (license license:expat)))
16753
16754(define-public python-mistune
16755 (package
16756 (name "python-mistune")
16757 (version "3.1.3")
16758 (source
16759 (origin
16760 (method url-fetch)
16761 (uri (pypi-uri "mistune" version))
16762 (sha256
16763 (base32 "1802kx9hdbqmbd9acxx4dx6wn77q7mfz5y32psvfqarbg0hmq0x7"))))
16764 (build-system pyproject-build-system)
16765 (native-inputs
16766 (list python-pytest
16767 python-setuptools
16768 python-wheel))
16769 (home-page "https://github.com/lepture/mistune")
16770 (synopsis "Markdown parser in pure Python")
16771 (description "This package provides a fast markdown parser in pure
16772Python.")
16773 (license license:bsd-3)))
16774
16775(define-public python-markdown
16776 (package
16777 (name "python-markdown")
16778 (version "3.10")
16779 (source
16780 (origin
16781 (method url-fetch)
16782 (uri (pypi-uri "markdown" version))
16783 (sha256
16784 (base32
16785 "03lcnvr39pmfiids6jdr1iwwr0hg62m0zf7g5arvdcm4597js1ip"))))
16786 (build-system pyproject-build-system)
16787 (native-inputs
16788 (list python-pyyaml
16789 python-setuptools))
16790 (home-page "https://python-markdown.github.io/")
16791 (synopsis "Python implementation of Markdown")
16792 (description
16793 "This package provides a Python implementation of John Gruber's
16794Markdown. The library features international input, various Markdown
16795extensions, and several HTML output formats. A command line wrapper
16796markdown_py is also provided to convert Markdown files to HTML.")
16797 (license license:bsd-3)))
16798
16799(define-public python-markdown2
16800 (package
16801 (name "python-markdown2")
16802 (version "2.5.3")
16803 (source
16804 (origin
16805 (method git-fetch) ; no tests data in PyPi package
16806 (uri (git-reference
16807 (url "https://github.com/trentm/python-markdown2")
16808 (commit version)))
16809 (file-name (git-file-name name version))
16810 (sha256
16811 (base32 "136lwfhrbgdy3ci7qrkvcm5qx5c4xv4zwbnn57yfqg37pymflima"))))
16812 (build-system pyproject-build-system)
16813 (arguments
16814 (list
16815 #:test-backend #~'custom
16816 #:test-flags #~(list "test.py" "--" "-knownfailure")
16817 #:phases
16818 #~(modify-phases %standard-phases
16819 (add-before 'check 'pre-check
16820 (lambda _
16821 (chdir "test"))))))
16822 (native-inputs
16823 (list ;; python-pygments ;optinal, tests fail when added
16824 ;; python-wavedrom ;optinal, not packaged
16825 ;; python-latex2mathml ;optinal, not packaged
16826 python-setuptools))
16827 (home-page "https://github.com/trentm/python-markdown2")
16828 (synopsis "Fast and complete Python implementation of Markdown")
16829 (description
16830 "This package provides a fast and complete Python implementation of
16831Markdown. It was written to closely match the behaviour of the original
16832Perl-implemented Markdown.pl. It also comes with a number of
16833extensions (called @code{extras}) for things like syntax coloring, tables,
16834header-ids.")
16835 (license license:expat)))
16836
16837(define-public python-mdx-include
16838 (package
16839 (name "python-mdx-include")
16840 (version "1.4.2")
16841 (source
16842 (origin
16843 (method git-fetch)
16844 (uri (git-reference
16845 (url "https://github.com/neurobin/mdx_include")
16846 (commit (string-append "v" version))))
16847 (file-name (git-file-name name version))
16848 (sha256
16849 (base32 "01fk4y7hkl8a06qfd4a258l8rgcx7z7j4dzb80gk9md48l6p516a"))))
16850 (build-system pyproject-build-system)
16851 (arguments
16852 (list
16853 #:test-backend #~'unittest
16854 #:phases
16855 (let* ((django-hello-url "\
16856https://gist.github.com/drgarcia1986/3cce1d134c3c3eeb01bd/raw/\
1685773951574d6b62a18b4c342235006ff89d299f879/django_hello.py")
16858 (django-hello
16859 (origin
16860 (method url-fetch)
16861 (uri django-hello-url)
16862 (sha256 (base32 "\
1686313bqmfqwypnv3apxs9akpk3fqsk0yzys5slxfllj285npnka550r")))))
16864 #~(modify-phases %standard-phases
16865 (add-before 'check 'disable-test-requiring-network
16866 (lambda _
16867 (substitute* "mdx_include/test/test.py"
16868 (("(\\s+def )test_(config|non_existent)\\(" _ pre post)
16869 (string-append pre "__off__test_" post "("))
16870 (((string-join (string-split #$django-hello-url #\.) "\\."))
16871 #+django-hello))))))))
16872 (native-inputs (list python-setuptools))
16873 (propagated-inputs (list python-cyclic python-markdown python-rcslice))
16874 (home-page "https://github.com/neurobin/mdx_include")
16875 (synopsis "Python Markdown extension to include local or remote files")
16876 (description "Include extension for Python Markdown. It lets you include
16877local or remote (downloadable) files into your markdown at arbitrary
16878positions.
16879
16880This project is motivated by markdown-include and provides the same
16881functionalities with some extras.")
16882 (license license:bsd-3)))
16883
16884(define-public python-ptyprocess
16885 (package
16886 (name "python-ptyprocess")
16887 (version "0.7.0")
16888 (source
16889 (origin
16890 (method url-fetch)
16891 (uri (pypi-uri "ptyprocess" version))
16892 (sha256
16893 (base32
16894 "081j893x6c9qrfszp8swfqlpvk8agh1jc32y9140pvnf90xhlpaw"))))
16895 (build-system pyproject-build-system)
16896 (native-inputs
16897 (list python-flit-core
16898 python-pytest))
16899 (home-page "https://github.com/pexpect/ptyprocess")
16900 (synopsis "Run a subprocess in a pseudo terminal")
16901 (description
16902 "This package provides a Python library used to launch a subprocess in a
16903pseudo terminal (pty), and interact with both the process and its pty.")
16904 (license license:isc)))
16905
16906(define-public python-configshell-fb
16907 (package
16908 (name "python-configshell-fb")
16909 (version "1.1.30")
16910 (source
16911 (origin
16912 (method url-fetch)
16913 (uri (pypi-uri "configshell-fb" version))
16914 ;; XXX: Snippet below is required because on v1.1.30 the source code
16915 ;; has configshell_fb as softlink to configshell and guix
16916 ;; pyproject-build-system doesn't work with symlinks very well.
16917 ;;
16918 ;; This package is only used in spdk for now and it's crucial to keep
16919 ;; it locked on version and keep the snipped for spdk to build
16920 ;; successfully.
16921 (snippet #~(begin
16922 (use-modules (guix build utils))
16923 (delete-file "setup.py")
16924 (delete-file-recursively "configshell_fb")
16925 (rename-file "configshell" "configshell_fb")))
16926 (sha256
16927 (base32 "1zkhf62qsfcbxwzlc62r6qx37wwyscppc469rlm45zy9lzmbgxj1"))))
16928 (build-system pyproject-build-system)
16929 (arguments
16930 (list #:tests? #f)) ;; this package has no tests
16931 (native-inputs
16932 (list python-setuptools
16933 python-six
16934 python-wheel))
16935 (propagated-inputs
16936 (list python-pyparsing))
16937 (home-page "https://github.com/open-iscsi/configshell-fb")
16938 (synopsis "Framework to implement simple but nice CLIs")
16939 (description
16940 "This package provides a framework to implement simple but nice CLIs.")
16941 (license license:asl2.0)))
16942
16943(define-public python-crccheck
16944 (package
16945 (name "python-crccheck")
16946 (version "1.3.0")
16947 (source
16948 (origin
16949 (method git-fetch) ; no tests in PyPI
16950 (uri (git-reference
16951 (url "https://github.com/MartinScharrer/crccheck")
16952 (commit (string-append "v" version))))
16953 (file-name (git-file-name name version))
16954 (sha256
16955 (base32 "1sagpmsh95si77nhqmxx6mbal2jbxpl4a3mqjfnz19mf2pfyvs4y"))))
16956 (build-system pyproject-build-system)
16957 (native-inputs (list python-pytest python-setuptools python-wheel))
16958 (home-page "https://github.com/MartinScharrer/crccheck")
16959 (synopsis "Calculation library for CRCs and checksums")
16960 (description "@code{crccheck} is a calculation library for CRCs and
16961checksums. It implement more than a hundred checksum routines.")
16962 (license license:gpl3+)))
16963
16964(define-public python-crashtest
16965 (package
16966 (name "python-crashtest")
16967 (version "0.4.1")
16968 (source
16969 (origin
16970 (method git-fetch)
16971 (uri (git-reference
16972 (url "https://github.com/sdispater/crashtest")
16973 (commit version)))
16974 (file-name (git-file-name name version))
16975 (sha256
16976 (base32 "180xrr1iw1614z7yrrnsigy0211q9985f9pbzjsj6rvrs6w7fm2d"))))
16977 (build-system pyproject-build-system)
16978 (native-inputs (list python-poetry-core python-pytest))
16979 (home-page "https://github.com/sdispater/crashtest")
16980 (synopsis "Manage Python errors with ease")
16981 (description
16982 "Python library that makes exceptions handling and inspection easier.")
16983 (license license:expat)))
16984
16985(define-public python-pysendfile
16986 (package
16987 (name "python-pysendfile")
16988 (version "2.0.1")
16989 (source
16990 (origin
16991 (method git-fetch)
16992 (uri (git-reference
16993 (url "https://github.com/giampaolo/pysendfile")
16994 (commit (string-append "release-" version))))
16995 (file-name (git-file-name name version))
16996 (sha256
16997 (base32 "1d2pcqad57l5ilc2icabybzzjgsg46djklhvyf17fgbkb0x3yc7c"))))
16998 (build-system pyproject-build-system)
16999 (arguments
17000 (list
17001 #:phases
17002 #~(modify-phases %standard-phases
17003 (replace 'check
17004 (lambda* (#:key tests? #:allow-other-keys)
17005 (when tests?
17006 (setenv "HOME" "/tmp")
17007 (invoke "make" "test")))))))
17008 (native-inputs (list python-pytest python-setuptools))
17009 (home-page "https://github.com/giampaolo/pysendfile")
17010 (synopsis "Python interface to sendfile(2)")
17011 (description "The @code{pysendfile} Python library provides an interface to
17012the @code{sendfile(2)} system call.")
17013 (license license:expat)))
17014
17015(define-public python-pyftpdlib
17016 (package
17017 (name "python-pyftpdlib")
17018 (version "1.5.7")
17019 (source
17020 (origin
17021 (method url-fetch)
17022 (uri (pypi-uri "pyftpdlib" version))
17023 (sha256
17024 (base32 "0vk5gcx4svjrpm014ykwxmijqihgb4ha17kb3yphk0nv6x0wx8vy"))))
17025 (build-system pyproject-build-system)
17026 ;; Using Pytest instead of the Makefile causes the command line tests to
17027 ;; fail on unknown Pytest arguments.
17028 (arguments
17029 (list
17030 #:test-flags
17031 #~(list "-k" "not TestCommandLineParser"
17032 #$@(if (target-aarch64?)
17033 ;; TimeoutError: timed out
17034 '((string-append "--deselect=pyftpdlib/test/test_functional.py"
17035 "::TestTimeouts::test_idle_data_timeout2"))
17036 '()))))
17037 (native-inputs
17038 (list python-psutil
17039 python-pytest
17040 python-setuptools
17041 python-wheel))
17042 (propagated-inputs
17043 (list python-pyopenssl
17044 python-pysendfile))
17045 (home-page "https://github.com/giampaolo/pyftpdlib/")
17046 (synopsis "Asynchronous and scalable Python FTP server library")
17047 (description "The Python FTP server library provides a high-level
17048interface to write efficient, scalable and asynchronous FTP servers with
17049Python. It is the most complete @url{http://www.faqs.org/rfcs/rfc959.html,
17050RFC-959} FTP server implementation available for Python, and has the following
17051traits:
17052@itemize
17053@item
17054It is lightweight, fast and scalable.
17055@item
17056It uses the @code{sendfile(2)} system call for uploads.
17057@item
17058It uses @code{epoll}, @code{kqueue} and @code{select} to handle concurrency
17059asynchronously.
17060@item
17061It supports FTPS (@url{http://tools.ietf.org/html/rfc4217, RFC-4217}),
17062IPv6 (RFC-2428), Unicode file names (@url{http://tools.ietf.org/html/rfc2640,
17063RFC-2640}) and MLSD/MLST commands (RFC-3659).
17064@item
17065It has a flexible system of @samp{authorizers} able to manage both
17066@samp{virtual} and @samp{real} users.
17067@end itemize")
17068 (license license:expat)))
17069
17070(define-public python-fs
17071 (package
17072 (name "python-fs")
17073 (version "2.4.16")
17074 (source
17075 (origin
17076 (method git-fetch)
17077 (uri (git-reference
17078 (url "https://github.com/PyFilesystem/pyfilesystem2/")
17079 (commit (string-append "v" version))))
17080 (file-name (git-file-name name version))
17081 (sha256
17082 (base32 "1wrkhsv57kv4jcadn7w330mgbjjsimgzfvicni8cka6y1a8chbjs"))))
17083 (build-system pyproject-build-system)
17084 (arguments
17085 (list
17086 ;; tests: 1995 passed, 21 skipped, 411 deselected, 14 warnings
17087 #:test-flags #~(list "-m" "not slow")
17088 #:tests? (and (not (%current-target-system))
17089 (->bool (this-package-native-input "python-pytest")))
17090 #:phases
17091 #~(modify-phases %standard-phases
17092 (add-before 'check 'pre-check
17093 (lambda _
17094 (setenv "HOME" "/tmp"))))))
17095 (native-inputs
17096 (append
17097 (list python-setuptools)
17098 ;; 'python-pyftpdlib' is needed for tests but it indirectly depends Rust,
17099 ;; which is currently unavailable on aarch64-linux. Remove all the test
17100 ;; dependencies in that case.
17101 (if (and (not (%current-target-system))
17102 (supported-package? python-pyftpdlib))
17103 (list python-mock
17104 python-parameterized
17105 python-pyftpdlib
17106 python-pytest)
17107 '())))
17108 (propagated-inputs
17109 (list python-appdirs
17110 python-pytz
17111 python-six)) ;still hard itegrated
17112 (home-page "https://github.com/PyFilesystem/pyfilesystem2/")
17113 (synopsis "File system abstraction layer for Python")
17114 (description
17115 "PyFilesystem's @code{FS} object is a file system abstraction sharing
17116similarities with Python's own @code{file} object for single files. It allows
17117opening all the files under a given directory recursively, as a single
17118@code{FS} object. This enables, for example, counting the combined number of
17119lines in the contained files easily.")
17120 (license license:expat)))
17121
17122;;; Tests are left out in the main package to avoid cycles.
17123;; XXX: When updating, solve comment in python-cu2qu.
17124(define-public python-fonttools-minimal
17125 (hidden-package
17126 (package
17127 (name "python-fonttools-minimal")
17128 (version "4.59.2")
17129 (source (origin
17130 (method url-fetch)
17131 (uri (pypi-uri "fonttools" version ".tar.gz"))
17132 (sha256
17133 (base32
17134 "08pgq9nrj3r81gzb6gbf5mcak0xyqrj26cw0rc5za4v1n14hfb77"))))
17135 (build-system python-build-system)
17136 (arguments '(#:tests? #f))
17137 (home-page "https://github.com/fonttools/fonttools")
17138 (synopsis "Tools to manipulate font files")
17139 (description
17140 "FontTools/TTX is a library to manipulate font files from Python. It
17141supports reading and writing of TrueType/OpenType fonts, reading and writing
17142of AFM files, reading (and partially writing) of PS Type 1 fonts. The package
17143also contains a tool called “TTX” which converts TrueType/OpenType fonts to and
17144from an XML-based format.")
17145 (license license:expat))))
17146
17147(define-public python-fonttools
17148 (let ((base python-fonttools-minimal))
17149 (package/inherit base
17150 (name "python-fonttools")
17151 (arguments
17152 (substitute-keyword-arguments (package-arguments base)
17153 ((#:tests? _ #f)
17154 (not (%current-target-system)))
17155 ((#:phases phases '%standard-phases)
17156 `(modify-phases ,phases
17157 (replace 'check
17158 (lambda* (#:key tests? #:allow-other-keys)
17159 (when tests?
17160 (invoke "pytest" "-vv"
17161 "-k"
17162 ;; XXX: These tests need data files that are not
17163 ;; shipped with the PyPI release.
17164 (format #f "not ~a"
17165 (string-join
17166 '("test_cli_vtp"
17167 "test_group_order"
17168 "test_read_fontdimens_mathsy"
17169 "test_read_fontdimens_mathex"
17170 "test_read_fontdimens_vanilla"
17171 "test_read_boundary_char"
17172 "test_reading_supplement_encoding"
17173 "fontTools.tfmLib"
17174 ;; The MtiTest tests fail for unknown
17175 ;; reasons (see:
17176 ;; https://github.com/fonttools/
17177 ;; fonttools/issues/3078)
17178 "MtiTest")
17179 " and not "))))))))))
17180 (native-inputs
17181 (modify-inputs (package-native-inputs base)
17182 (append python-pytest)))
17183 (propagated-inputs
17184 (list python-brotli
17185 python-fs
17186 python-lxml
17187 python-lz4
17188 python-scipy
17189 python-unicodedata2
17190 python-zopfli))
17191 (properties (alist-delete 'hidden? (package-properties base))))))
17192
17193(define-public python-ly
17194 (package
17195 (name "python-ly")
17196 (version "0.9.9")
17197 (source
17198 (origin
17199 (method git-fetch)
17200 (uri (git-reference
17201 (url "https://github.com/frescobaldi/python-ly")
17202 (commit (string-append "v" version))))
17203 (file-name (git-file-name name version))
17204 (sha256
17205 (base32 "1q9jdvc4mrv3xkp7jm4g4kisq1k1d05b5d3wfvhpd85a9yqjrhq8"))))
17206 (build-system pyproject-build-system)
17207 (arguments
17208 (list
17209 #:phases
17210 (let ((namespace-url "http://www.w3.org/2001/03/xml.xsd")
17211 (xlink-url "http://www.w3.org/XML/2008/06/xlink.xsd"))
17212 #~(modify-phases %standard-phases
17213 (add-after 'unpack 'inject-data
17214 (lambda _
17215 (substitute* "tests/musicxml.xsd"
17216 (((string-join (string-split #$namespace-url #\.) "\\."))
17217 #$(origin
17218 (method url-fetch)
17219 (uri namespace-url)
17220 (sha256 (base32 "\
172211j6h0sp0pcqi5dv9m6sxwr8brrb59fyx091ld1x6wlh28js4vn8f"))))
17222 (((string-join (string-split #$xlink-url #\.) "\\."))
17223 #$(origin
17224 (method url-fetch)
17225 (uri xlink-url)
17226 (sha256 (base32 "\
172270jpjha5iiq4rf4hx3qfnmyya9cf17ysxz0rbhsffn5nwgxnghgf8")))))))))))
17228 (native-inputs (list python-hatchling python-lxml python-pytest))
17229 (synopsis "Tool and library for manipulating LilyPond files")
17230 (description
17231 "This package provides a Python library to parse, manipulate or create
17232documents in LilyPond format. A command line program ly is also provided that
17233can be used to do various manipulations with LilyPond files.")
17234 (home-page "https://pypi.org/project/python-ly/")
17235 (license license:gpl2+)))
17236
17237(define-public python-appdirs
17238 (package
17239 (name "python-appdirs")
17240 (version "1.4.4")
17241 (source
17242 (origin
17243 (method url-fetch)
17244 (uri (pypi-uri "appdirs" version))
17245 (sha256
17246 (base32 "0hfzmwknxqhg20aj83fx80vna74xfimg8sk18wb85fmin9kh2pbx"))))
17247 (build-system pyproject-build-system)
17248 (arguments (list #:test-backend #~'unittest))
17249 (native-inputs (list python-setuptools))
17250 (home-page "https://github.com/ActiveState/appdirs")
17251 (synopsis "Determine platform-specific dirs, e.g. a \"user data dir\"")
17252 (description
17253 "This module provides a portable way of finding out where user data
17254should be stored on various operating systems.")
17255 (license license:expat)))
17256
17257(define-public python-google-pasta
17258 (package
17259 (name "python-google-pasta")
17260 (version "0.2.0")
17261 (source
17262 (origin
17263 (method url-fetch)
17264 (uri (pypi-uri "google-pasta" version))
17265 (sha256
17266 (base32 "0vm1r1jlaiagj0l9yf7j6zn9w3733dr2169911c0svgrr3gwiwn9"))))
17267 (build-system pyproject-build-system)
17268 (propagated-inputs (list python-six))
17269 (native-inputs (list python-pytest python-setuptools))
17270 (home-page "https://github.com/google/pasta")
17271 (synopsis "AST-based Python refactoring library")
17272 (description "This package provides \"pasta\", an AST-based Python
17273refactoring library.")
17274 (license license:asl2.0)))
17275
17276(define-public python-gorilla
17277 (package
17278 (name "python-gorilla")
17279 (version "0.3.0")
17280 (source
17281 (origin
17282 (method git-fetch)
17283 (uri (git-reference
17284 (url "https://github.com/christophercrouzet/gorilla")
17285 (commit (string-append "v" version))))
17286 (file-name (git-file-name name version))
17287 (sha256
17288 (base32 "0hm5ynswhz6i763s6cjlh8lv5ai0f3x17mjvlihqs8idlk4vbrn0"))))
17289 (build-system pyproject-build-system)
17290 (arguments (list #:test-backend #~'unittest))
17291 (native-inputs (list python-setuptools))
17292 (home-page "https://github.com/christophercrouzet/gorilla")
17293 (synopsis "Convenient monkey patching with Python")
17294 (description
17295 "Gorilla is a Python library that provides a convenient approach to
17296monkey patching. Monkey patching is the process of modifying module and
17297class attributes at runtime with the purpose of replacing or extending
17298third-party code.")
17299 (license license:expat)))
17300
17301(define-public python-llfuse
17302 (package
17303 (name "python-llfuse")
17304 (version "1.5.1")
17305 (source
17306 (origin
17307 (method git-fetch)
17308 (uri (git-reference
17309 (url "https://github.com/python-llfuse/python-llfuse")
17310 (commit (string-append "release-" version))))
17311 (file-name (git-file-name name version))
17312 (sha256
17313 (base32 "16wsrg1py4gvcxfgsfkll73lfq62psc0hcqvs73az7s4b1pvyy62"))))
17314 (build-system pyproject-build-system)
17315 (arguments
17316 (list
17317 #:test-flags
17318 #~(list "-k" "not test_listdir") ; requires /usr/bin access.
17319 #:phases
17320 #~(modify-phases %standard-phases
17321 (add-before 'build 'build-cython
17322 (lambda _
17323 (invoke "python" "setup.py" "build_cython"))))))
17324 (inputs (list fuse-2 attr))
17325 (native-inputs
17326 (list pkg-config python-cython python-pytest python-setuptools))
17327 (synopsis "Python bindings for FUSE")
17328 (description
17329 "Python-LLFUSE is a set of Python bindings for the low level FUSE API.")
17330 (home-page "https://github.com/python-llfuse/python-llfuse")
17331 (license license:lgpl2.0+)))
17332
17333(define-public python-msgpack
17334 (package
17335 (name "python-msgpack")
17336 (version "1.1.2")
17337 (source
17338 (origin
17339 (method url-fetch)
17340 (uri (pypi-uri "msgpack" version))
17341 (sha256
17342 (base32 "0zpl4sb9zk7fh3abaxqlf65d0g3hvjy6k028k3rn1pbk2cy7cq1v"))))
17343 (build-system pyproject-build-system)
17344 (native-inputs
17345 (list python-pytest
17346 python-setuptools))
17347 (home-page "https://msgpack.org/")
17348 (synopsis "MessagePack (de)serializer")
17349 (description "MessagePack is a fast, compact binary serialization format,
17350suitable for similar data to JSON. This package provides CPython bindings for
17351reading and writing MessagePack data.")
17352 (license license:asl2.0)))
17353
17354(define-public python-msgpack-for-borg
17355 (hidden-package
17356 (package
17357 (inherit python-msgpack)
17358 (version "1.0.4")
17359 (source
17360 (origin
17361 (method url-fetch)
17362 (uri (pypi-uri "msgpack" version))
17363 (sha256
17364 (base32 "0pqzy1zclyhd42gfibhkcqymbspy5a6v421g87mh40h3iz0nkn7m")))))))
17365
17366(define-public python-openstep-plist
17367 (package
17368 (name "python-openstep-plist")
17369 (version "0.3.0")
17370 (source
17371 (origin
17372 (method git-fetch)
17373 (uri (git-reference
17374 (url "https://github.com/fonttools/openstep-plist")
17375 (commit (string-append "v" version))))
17376 (file-name (git-file-name name version))
17377 (sha256
17378 (base32 "1rxjgzh0p069ncsr2986rn32vhdqyq35irbqg2559jh18456mkca"))))
17379 (build-system pyproject-build-system)
17380 (arguments
17381 (list
17382 #:phases
17383 #~(modify-phases %standard-phases
17384 (add-after 'unpack 'pretend-version
17385 (lambda _
17386 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION"
17387 #$(package-version this-package)))))))
17388 (native-inputs (list python-cython-0 python-pytest python-setuptools-scm
17389 python-setuptools))
17390 (home-page "https://github.com/fonttools/openstep-plist")
17391 (synopsis "OpenStep plist parser and writer")
17392 (description
17393 "This package provides a parser for the \"old style\" OpenStep property
17394list format (also known as ASCII plist), written in Cython.")
17395 (license license:expat)))
17396
17397(define-public python-resolvelib
17398 (package
17399 (name "python-resolvelib")
17400 (version "1.1.0")
17401 (source
17402 (origin
17403 ;; Tests are missing from the PyPI release.
17404 (method git-fetch)
17405 (uri (git-reference
17406 (url "https://github.com/sarugaku/resolvelib")
17407 (commit version)))
17408 (file-name (git-file-name name version))
17409 (sha256
17410 (base32 "0pw99897mm2y7pa2g35z0f7vcmgh42xglz5szbrvigczvwa605sh"))))
17411 (build-system pyproject-build-system)
17412 (native-inputs
17413 (list python-packaging
17414 python-pytest
17415 python-setuptools
17416 python-wheel))
17417 (home-page "https://github.com/sarugaku/resolvelib")
17418 (synopsis "Abstract dependencies resolver")
17419 (description
17420 "The ResolveLib library provides a @code{Resolver} class that includes
17421dependency resolution logic.")
17422 (license license:isc)))
17423
17424;; XXX: Deprecated package: this project was archived by the owner on Mar 26,
17425;; 2022. It is now read-only.
17426(define-public python-commonmark
17427 (package
17428 (name "python-commonmark")
17429 (version "0.9.1")
17430 (source
17431 (origin
17432 (method url-fetch)
17433 (uri (pypi-uri "commonmark" version))
17434 (sha256
17435 (base32 "0q7d39lm8kcingpmykk5r959hrwwj6v2icyw3mihczxyb749sbs5"))))
17436 (build-system pyproject-build-system)
17437 (native-inputs
17438 (list python-setuptools))
17439 (home-page "https://github.com/readthedocs/commonmark.py")
17440 (synopsis "Python parser for the CommonMark Markdown spec")
17441 (description
17442 "This module is a pure Python port of jgm's @code{commonmark.js}, a
17443Markdown parser and renderer for the CommonMark specification, using only
17444native modules.")
17445 (license license:bsd-3)))
17446
17447(define-public python-immutables
17448 (package
17449 (name "python-immutables")
17450 (version "0.21")
17451 (source
17452 (origin
17453 (method url-fetch)
17454 (uri (pypi-uri "immutables" version))
17455 (sha256
17456 (base32 "0jpw9nr2mbzqykigjhqa3a095bx7krwsnmjcxcpj944p8kqglpxm"))))
17457 (build-system pyproject-build-system)
17458 (native-inputs
17459 (list python-mypy python-pytest python-setuptools python-wheel))
17460 (home-page "https://github.com/MagicStack/immutables")
17461 (synopsis "High-performance immutable mapping type for Python")
17462 (description
17463 "An immutable mapping type for Python. The underlying datastructure is a
17464Hash Array Mapped Trie (HAMT) used in Clojure, Scala, Haskell, and other
17465functional languages.")
17466 (license license:asl2.0)))
17467
17468(define-public python-prettytable
17469 (package
17470 (name "python-prettytable")
17471 (version "3.12.0")
17472 (source
17473 (origin
17474 (method url-fetch)
17475 (uri (pypi-uri "prettytable" version))
17476 (sha256
17477 (base32 "0168xqdr0i9r4p3a3hjd4n7f133lp4xkxhvfx63aqisplcdkwjzh"))))
17478 (build-system pyproject-build-system)
17479 (native-inputs
17480 (list python-hatchling
17481 python-hatch-vcs
17482 python-pytest
17483 python-pytest-cov
17484 python-pytest-lazy-fixtures
17485 python-setuptools-scm))
17486 (propagated-inputs
17487 (list python-wcwidth))
17488 (home-page "https://github.com/jazzband/prettytable")
17489 (synopsis "Display tabular data in an ASCII table format")
17490 (description
17491 "A library designed to represent tabular data in visually appealing ASCII
17492tables. PrettyTable allows for selection of which columns are to be printed,
17493independent alignment of columns (left or right justified or centred) and
17494printing of sub-tables by specifying a row range.")
17495 (license license:bsd-3)))
17496
17497(define-public python-rtf-tokenize
17498 (package
17499 (name "python-rtf-tokenize")
17500 (version "1.0.1")
17501 (source (origin
17502 (method url-fetch)
17503 (uri (pypi-uri "rtf_tokenize" version))
17504 (sha256
17505 (base32
17506 "1ljs0dcg2p1iad4zrxgn1pbrrcjcrswhjxrbprhdxd822n0al84h"))))
17507 (build-system pyproject-build-system)
17508 (native-inputs (list python-pytest python-setuptools python-wheel))
17509 (home-page "https://github.com/benoit-pierre/rtf_tokenize")
17510 (synopsis "Simple RTF tokenizer")
17511 (description "This package is a simple RTF tokenizer.")
17512 (license license:gpl2+)))
17513
17514(define-public python-curio
17515 (package
17516 (name "python-curio")
17517 (version "1.6")
17518 (source
17519 (origin
17520 (method url-fetch)
17521 (uri (pypi-uri "curio" version))
17522 (sha256
17523 (base32 "0isj3jl5mx6m25nr1f7r91hfaydhkvmks9p85dyvl5h2n9nmhajn"))))
17524 (build-system pyproject-build-system)
17525 (arguments
17526 (list
17527 #:test-flags
17528 #~(list ;; AttributeError: 'NoneType' object has no attribute
17529 ;; 'terminate'
17530 "--deselect=tests/test_workers.py::test_exception"
17531 ;; Tries to open an outgoing connection.
17532 "--deselect=tests/test_network.py::test_ssl_outgoing"
17533 ;; This test fails since Python 3.9.9, see
17534 ;; <https://github.com/dabeaz/curio/issues/347>.
17535 ;; AttributeError: 'NoneType' object has no attribute
17536 ;; 'terminate'
17537 "--deselect=tests/test_workers.py::test_worker_timeout"
17538 ;; AttributeError: 'NoneType' object has no attribute
17539 ;; 'terminate'
17540 "--deselect=tests/test_workers.py::test_bad_cpu"
17541 "--deselect=tests/test_workers.py::test_cpu"
17542 "--deselect=tests/test_workers.py::test_worker_cancel")))
17543 (native-inputs
17544 (list python-pytest
17545 python-setuptools
17546 python-wheel))
17547 (home-page "https://github.com/dabeaz/curio")
17548 (synopsis "Coroutine-based library for concurrent Python")
17549 (description
17550 "Curio is a coroutine-based library for concurrent Python systems
17551programming. It provides standard programming abstractions such as as
17552tasks, sockets, files, locks, and queues.")
17553 (license license:bsd-3)))
17554
17555(define-public python-sniffio
17556 (package
17557 (name "python-sniffio")
17558 (version "1.3.1")
17559 (source
17560 (origin
17561 (method url-fetch)
17562 (uri (pypi-uri "sniffio" version))
17563 (sha256
17564 (base32 "1p496yran6zwg47m7w26r8y89nrsbkrrbf4119slj3qaczf4wcpl"))))
17565 (build-system pyproject-build-system)
17566 (native-inputs
17567 (list python-curio python-pytest python-setuptools))
17568 (home-page "https://github.com/python-trio/sniffio")
17569 (synopsis "Detect which async library a program is running under")
17570 (description
17571 "This package detects which async library a program is running under. It
17572supports multiple async I/O packages, like Trio, and asyncio.")
17573 ;; Either license applies.
17574 (license (list license:expat license:asl2.0))))
17575
17576(define-public python-snuggs
17577 (package
17578 (name "python-snuggs")
17579 (version "1.4.7")
17580 (source (origin
17581 (method url-fetch)
17582 (uri (pypi-uri "snuggs" version))
17583 (sha256
17584 (base32
17585 "0yv1wayrw9g6k0c2f721kha7wsv0s1fdlxpf5x7f34iqzq9z272h"))))
17586 (build-system pyproject-build-system)
17587 (propagated-inputs (list python-numpy python-pyparsing))
17588 (native-inputs (list python-hypothesis python-pytest python-setuptools
17589 python-wheel))
17590 (home-page "https://github.com/mapbox/snuggs")
17591 (synopsis "Snuggs are S-expressions for Numpy")
17592 (description "Snuggs are S-expressions for Numpy.")
17593 (license license:expat)))
17594
17595(define-public python-geojson
17596 (package
17597 (name "python-geojson")
17598 (version "3.2.0")
17599 (source
17600 (origin
17601 (method url-fetch)
17602 (uri (pypi-uri "geojson" version))
17603 (sha256
17604 (base32 "00s9h22vs4ppncwg3a0gh90czb2dd6d99qznypw72vwc3sxblq5q"))))
17605 (build-system pyproject-build-system)
17606 (native-inputs (list python-pytest python-setuptools))
17607 (home-page "https://github.com/jazzband/geojson")
17608 (synopsis "Python bindings and utilities for GeoJSON")
17609 (description
17610 "This package provides Python bindings and utilities for
17611@uref{http://geojson.org/, GeoJSON}, a format for encoding geographic data
17612structures.")
17613 (license license:bsd-3)))
17614
17615;; pyowm only accepts a version less than version 3.
17616(define-public python-geojson-for-pyowm
17617 (package
17618 (inherit python-geojson)
17619 (version "2.5.0")
17620 (source
17621 (origin
17622 (method url-fetch)
17623 (uri (pypi-uri "geojson" version))
17624 (sha256
17625 (base32 "12k5bzqskvq3gqzkryarhdjl0df47y5k9cf8r3clasi2wjnbfjvf"))))
17626 (arguments
17627 ;; https://github.com/jazzband/geojson/issues/175
17628 (list #:tests? #f))))
17629
17630(define-public python-gpxpy
17631 (package
17632 (name "python-gpxpy")
17633 (version "1.6.2")
17634 (source
17635 (origin
17636 (method url-fetch)
17637 (uri (pypi-uri "gpxpy" version))
17638 (sha256
17639 (base32 "1bh1dkrbmcqb46r7j4fazzq7j6zfr2f04frm6h4bhhpcjx5lhb57"))))
17640 (build-system pyproject-build-system)
17641 (arguments
17642 (list #:test-backend #~'unittest))
17643 (native-inputs
17644 (list python-setuptools))
17645 (home-page "https://github.com/tkrajina/gpxpy")
17646 (synopsis "Python GPX parser")
17647 (description "GPX file parser and GPS track manipulation library.")
17648 (license license:asl2.0)))
17649
17650(define-public python-get-version
17651 (package
17652 (name "python-get-version")
17653 (version "3.5.5")
17654 (source
17655 (origin
17656 (method url-fetch)
17657 (uri (pypi-uri "get_version" version))
17658 (sha256
17659 (base32
17660 "01afv4fkgrm8v9hiww3qymmx201b6z3f8lc4g6nzq7djappn581x"))))
17661 (build-system pyproject-build-system)
17662 (arguments
17663 ;; XXX: No tests in PyPI and building from GitHub fails because of the
17664 ;; lack of git metadata in the checkout.
17665 (list #:tests? #f))
17666 (native-inputs (list python-flit-core))
17667 (propagated-inputs (list python-dunamai))
17668 (home-page "https://github.com/flying-sheep/get_version")
17669 (synopsis "Version helper in the spirit of versioneer")
17670 (description
17671 "This package provides a version helper that lets you automatically use
17672the latest @code{vX.X.X} Git tag as the version in your Python package. It
17673also supports getting the version from Python source distributions or, once
17674your package is installed, via @code{pkg_resources} (part of
17675@code{setuptools}).")
17676 (license license:gpl3+)))
17677
17678(define-public python-filetype
17679 (package
17680 (name "python-filetype")
17681 (version "1.2.0")
17682 (source
17683 (origin
17684 (method url-fetch)
17685 (uri (pypi-uri "filetype" version))
17686 (sha256
17687 (base32 "1nxa91szfbhhbhvdwj06jz8zghzwgb9lf0v6aj61vx2b8zb6rdb6"))))
17688 (build-system pyproject-build-system)
17689 (native-inputs (list python-pytest
17690 python-pytest-benchmark
17691 python-setuptools
17692 python-wheel))
17693 (home-page "https://github.com/h2non/filetype.py")
17694 (synopsis "Infer file type and MIME type of any file/buffer")
17695 (description "@code{filetype} is a small and dependency free Python
17696package to infer file type and MIME type checking the magic numbers
17697signature of a file or buffer.")
17698 (license license:expat)))
17699
17700(define-public python-cachelib
17701 (package
17702 (name "python-cachelib")
17703 (version "0.13.0")
17704 (source
17705 (origin
17706 (method url-fetch)
17707 (uri (pypi-uri "cachelib" version))
17708 (sha256
17709 (base32 "0j0s5vyhgka6g16a7n9g1fcc8wqxdl8rgzvlwaz9axf5wfb8k790"))))
17710 (build-system pyproject-build-system)
17711 (arguments
17712 ;; These tests use a remote connection.
17713 (list #:test-flags #~(list "--ignore" "tests/test_dynamodb_cache.py"
17714 "--ignore" "tests/test_mongodb_cache.py")))
17715 (native-inputs
17716 (list python-pytest python-pytest-xprocess python-setuptools python-wheel))
17717 (home-page "https://github.com/pallets-eco/cachelib")
17718 (synopsis "Collection of cache libraries")
17719 (description "Cachelib is a library extracted from @code{werkzeug} which
17720provides a collection of cache libraries in the same API interface.")
17721 (license license:bsd-3)))
17722
17723(define-public python-pylru
17724 (package
17725 (name "python-pylru")
17726 (version "1.2.0")
17727 (source
17728 (origin
17729 (method git-fetch)
17730 (uri (git-reference
17731 (url "https://github.com/jlhutch/pylru")
17732 (commit (string-append "v" version))))
17733 (file-name (git-file-name name version))
17734 (sha256
17735 (base32 "0sqai530d7fpjzny476f3zqq9mv05xqbyw500jmbhrpj9yy1l9xp"))))
17736 (build-system pyproject-build-system)
17737 (arguments
17738 (list
17739 #:test-backend #~'custom
17740 #:test-flags #~(list "test.py")))
17741 (native-inputs (list python-pytest python-setuptools))
17742 (home-page "https://github.com/jlhutch/pylru")
17743 (synopsis "Least recently used (LRU) cache implementation")
17744 (description
17745 "Pylru implements a true LRU cache along with several support classes.
17746Pylru provides a cache class with a simple dict interface. It also provides
17747classes to wrap any object that has a dict interface with a cache. Both
17748write-through and write-back semantics are supported. Pylru also provides
17749classes to wrap functions in a similar way, including a function decorator.")
17750 (license license:gpl2+)))
17751
17752(define-public python-legacy-api-wrap
17753 (package
17754 (name "python-legacy-api-wrap")
17755 (version "1.4.1")
17756 (source
17757 (origin
17758 (method url-fetch)
17759 (uri (pypi-uri "legacy_api_wrap" version))
17760 (sha256
17761 (base32
17762 "1d5jyd8d2wxm6y0s39wwqw87gdm4zqlbyz78cf3yqbrim1xdch4w"))))
17763 (build-system pyproject-build-system)
17764 (native-inputs
17765 (list python-hatch-vcs
17766 python-hatchling
17767 python-pytest))
17768 (home-page "https://github.com/flying-sheep/legacy-api-wrap")
17769 (synopsis "Legacy API wrapper")
17770 (description "This module defines a decorator to wrap legacy APIs. The
17771primary use case is APIs defined before keyword-only parameters existed.")
17772 (license license:gpl3+)))
17773
17774(define-public python-langdetect
17775 (package
17776 (name "python-langdetect")
17777 (version "1.0.9")
17778 (source
17779 (origin
17780 (method url-fetch)
17781 (uri (pypi-uri "langdetect" version))
17782 (sha256
17783 (base32 "1805svvb7xjm4sf1j7b6nc3409x37pd1xmabfwwjf1ldkzwgxhfb"))))
17784 (build-system pyproject-build-system)
17785 (native-inputs
17786 (list python-pytest
17787 python-setuptools))
17788 (propagated-inputs
17789 (list python-six))
17790 (home-page "https://github.com/Mimino666/langdetect")
17791 (synopsis "Language detection library")
17792 (description
17793 "This library is a port of Nakatani Shuyo's language-detection library
17794(version from 03/03/2014) to Python.")
17795 (license license:expat)))
17796
17797(define-public python-pyasn1
17798 (package
17799 (name "python-pyasn1")
17800 (version "0.6.1")
17801 (source
17802 (origin
17803 (method url-fetch)
17804 (uri (pypi-uri "pyasn1" version))
17805 (sha256
17806 (base32
17807 "0d5h500ig8sp72pabd1wcyglc4951xalbkqahf056dl4vlmhsn3g"))))
17808 (build-system pyproject-build-system)
17809 (arguments
17810 (list #:test-backend #~'unittest
17811 #:test-flags #~(list "discover" "tests")))
17812 (native-inputs
17813 (list python-setuptools))
17814 (home-page "https://github.com/pyasn1/pyasn1")
17815 (synopsis "ASN.1 types and codecs")
17816 (description
17817 "This is an implementation of ASN.1 types and codecs in Python. It is
17818suitable for a wide range of protocols based on the ASN.1 specification.")
17819 (license license:bsd-2)))
17820
17821(define-public python-pyasn1-modules
17822 (package
17823 (name "python-pyasn1-modules")
17824 (version "0.4.2")
17825 (source
17826 (origin
17827 (method url-fetch)
17828 (uri (pypi-uri "pyasn1_modules" version))
17829 (sha256
17830 (base32
17831 "1rj1x4333b20chwslljsihngllj6yls63jmi8klam00ahzg92w37"))))
17832 (build-system pyproject-build-system)
17833 (arguments
17834 (list #:test-backend #~'unittest
17835 #:test-flags #~(list "discover" "tests")))
17836 (native-inputs
17837 (list python-setuptools))
17838 (propagated-inputs
17839 (list python-pyasn1))
17840 (home-page "https://github.com/pyasn1/pyasn1-modules")
17841 (synopsis "ASN.1 codec implementations")
17842 (description
17843 "Pyasn1-modules is a collection of Python modules providing ASN.1 types and
17844implementations of ASN.1-based codecs and protocols.")
17845 (license license:bsd-3)))
17846
17847(define-public python-asn1tools
17848 (package
17849 (name "python-asn1tools")
17850 (version "0.167.0")
17851 (source
17852 (origin
17853 (method url-fetch)
17854 (uri (pypi-uri "asn1tools" version))
17855 (sha256
17856 (base32 "1cpm6m3znagc553bc5l0rhwg2fccrl0k8m1pbvn6x2kqdmpkzmfa"))))
17857 (build-system pyproject-build-system)
17858 (arguments
17859 (list
17860 #:test-flags
17861 #~(list "-k" (string-join
17862 ;; Tests fail with error: IndexError: string index out of
17863 ;; range. It may be some incompatability wit pyparsing,
17864 ;; see <https://github.com/eerimoq/asn1tools/issues/167>.
17865 (list "not test_c_source"
17866 "test_command_line_generate_c_source_oer"
17867 "test_command_line_generate_c_source_uper"
17868 "test_command_line_generate_rust_source_uper"
17869 "test_missing_parameterized_value"
17870 "test_c_source"
17871 "test_parse_parameterization")
17872 " and not "))))
17873 (native-inputs
17874 (list python-pytest
17875 python-setuptools
17876 python-wheel))
17877 (propagated-inputs
17878 (list python-bitstruct
17879 python-diskcache
17880 python-prompt-toolkit
17881 python-pyparsing))
17882 (home-page "https://github.com/eerimoq/asn1tools")
17883 (synopsis "ASN.1 parsing, encoding and decoding")
17884 (description "This package provides ASN.1 parsing, encoding and decoding
17885for Python, including constraints checking. It supports several
17886codecs (e.g. BER, PER, UPER, XER) as well as limited C source code generating
17887for OER and UPER.")
17888 (license license:expat)))
17889
17890(define-public python-idna
17891 (package
17892 (name "python-idna")
17893 (version "3.10")
17894 (source
17895 (origin
17896 (method url-fetch)
17897 (uri (pypi-uri "idna" version))
17898 (sha256
17899 (base32
17900 "1a9yn40rph0amwq61j7j3nqm472baz6673ng6pfadg8a8ydmrxhj"))))
17901 (build-system pyproject-build-system)
17902 (native-inputs
17903 (list python-flit-core))
17904 (home-page "https://github.com/kjd/idna")
17905 (synopsis "Internationalized domain names in applications")
17906 (description
17907 "This is a library to support the Internationalised Domain Names in
17908Applications (IDNA) protocol as specified in RFC 5891. This version of the
17909protocol is often referred to as “IDNA2008” and can produce different results
17910from the earlier standard from 2003. The library is also intended to act as a
17911suitable drop-in replacement for the “encodings.idna” module that comes with
17912the Python standard library but currently only supports the older 2003
17913specification.")
17914 (license license:bsd-4)))
17915
17916(define-public python-libsass
17917 (package
17918 (name "python-libsass")
17919 (version "0.23.0")
17920 (source
17921 (origin
17922 ;; PyPI tarball is missing some test files.
17923 (method git-fetch)
17924 (uri (git-reference
17925 (url "https://github.com/sass/libsass-python")
17926 (commit version)))
17927 (file-name (git-file-name name version))
17928 (sha256
17929 (base32 "04jpk4y15k69chdnd64ks85bfn82071mbfiv2d1hl3y4zpvsn90a"))))
17930 (build-system pyproject-build-system)
17931 (arguments
17932 '(#:phases
17933 (modify-phases %standard-phases
17934 ;; Use Guix package of libsass instead of compiling from a checkout.
17935 (add-before 'build 'set-libsass
17936 (lambda _ (setenv "SYSTEM_SASS" "indeed")))
17937 ;; XXX: Silent 2 failing tests, reported to upstream (closed), see
17938 ;; https://github.com/sass/libsass-python/issues/440. It passed with
17939 ;; [email protected] which requires rebuild the world (1200+ packages),
17940 ;; remove when v3.6.5 is available.
17941 (add-before 'check 'silent-failing-tests
17942 (lambda _
17943 (substitute* "sasstests.py"
17944 (("def test_build_one")
17945 "def __off_test_build_one")
17946 (("def test_stack_trace_formatting")
17947 "def __off_test_stack_trace_formatting"))))
17948 (replace 'check
17949 (lambda* (#:key tests? #:allow-other-keys)
17950 (when tests?
17951 (invoke "pytest" "sasstests.py"))))
17952 (add-after 'install 'delete-test
17953 (lambda* (#:key inputs outputs #:allow-other-keys)
17954 ;; Delete sasstests.py because it attempts to open a file
17955 ;; that is not installed when loaded, which breaks the sanity
17956 ;; check.
17957 (delete-file (string-append
17958 (assoc-ref outputs "out")
17959 "/lib/python"
17960 (python-version
17961 (dirname (dirname
17962 (search-input-file inputs "bin/python"))))
17963 "/site-packages/sasstests.py")))))))
17964 (native-inputs
17965 (list python-pytest python-setuptools python-werkzeug python-wheel))
17966 (inputs
17967 (list libsass))
17968 (home-page "https://sass.github.io/libsass-python/")
17969 (synopsis "Straightforward binding of libsass for Python")
17970 (description
17971 "This package provides a simple Python extension module @code{sass} which
17972is binding LibSass.")
17973 (license license:expat)))
17974
17975(define-public python-idna-ssl
17976 (package
17977 (name "python-idna-ssl")
17978 (version "1.0.1")
17979 (source
17980 (origin
17981 (method git-fetch)
17982 (uri (git-reference
17983 (url "https://github.com/aio-libs/idna-ssl")
17984 (commit (string-append "v" version))))
17985 (file-name (git-file-name name version))
17986 (sha256
17987 (base32 "1fj4zkcnx3mk7kbnf4d6pjgv331n17wzpphpwdnmr498ghbsph9k"))))
17988 (build-system pyproject-build-system)
17989 (arguments (list #:tests? #f)) ;circular dependency with python-aiohttp
17990 (native-inputs (list python-setuptools))
17991 (propagated-inputs (list python-idna))
17992 (home-page "https://github.com/aio-libs/idna-ssl")
17993 (synopsis "Support Unicode(idna) domains for Python's @code{ssl} module")
17994 (description
17995 "This package provides Unicode(idna) domains support for Python's
17996@code{ssl} module. It patches @code{ssl.match_hostname} for that purpose.")
17997 (license license:expat)))
17998
17999(define-public python-path
18000 (package
18001 (name "python-path")
18002 (version "17.1.0")
18003 (source
18004 (origin
18005 (method url-fetch)
18006 (uri (pypi-uri "path" version))
18007 (sha256
18008 (base32 "1scqbwgcbisx8mb28hw789a7np953851wg6z0bbzdm519znha7nl"))))
18009 (build-system pyproject-build-system)
18010 (arguments
18011 (list
18012 #:tests? (not (%current-target-system))
18013 #:test-flags
18014 #~(list "-k"
18015 (string-append
18016 ;; Do not test the myproject.toml build as it tries
18017 ;; to pull dependencies from the Internet.
18018 "not project "
18019 ;; This tests assumes a root user exists.
18020 "and not test_get_owner"))))
18021 (native-inputs
18022 (list python-appdirs
18023 python-more-itertools
18024 python-packaging
18025 python-pygments
18026 python-pytest
18027 python-setuptools
18028 python-setuptools-scm))
18029 (home-page "https://github.com/jaraco/path")
18030 (synopsis "Object-oriented file system path manipulation library")
18031 (description "@code{path} (formerly @code{path.py}) implements path
18032objects as first-class entities, allowing common operations on files to be
18033invoked on those path objects directly.")
18034 (license license:expat)))
18035
18036;; It may be removed after 2026-01-24.
18037(define-deprecated/public-alias python-path-bootstrap python-path)
18038(define-deprecated/public-alias python-pathpy python-path)
18039
18040(define-public python-pretend
18041 (package
18042 (name "python-pretend")
18043 (version "1.0.9")
18044 (source
18045 (origin
18046 (method git-fetch) ;no tests in PyPI archive
18047 (uri (git-reference
18048 (url "https://github.com/alex/pretend")
18049 (commit (string-append "v" version))))
18050 (file-name (git-file-name name version))
18051 (sha256
18052 (base32 "156l685r9mg7i4xyrk9ql3sxk088irxlg8x7md5i0d05hdw1z8rs"))))
18053 (build-system pyproject-build-system)
18054 (native-inputs
18055 (list python-pytest
18056 python-setuptools))
18057 (home-page "https://github.com/alex/pretend")
18058 (synopsis "Library for stubbing in Python")
18059 (description
18060 "Pretend is a library to make stubbing with Python easier. Stubbing is a
18061technique for writing tests. You may hear the term mixed up with mocks,fakes,
18062or doubles. Basically, a stub is an object that returns pre-canned responses,
18063rather than doing any computation.")
18064 (license license:bsd-3)))
18065
18066(define-public python-pip-run
18067 (package
18068 (name "python-pip-run")
18069 (version "8.8.0")
18070 (source
18071 (origin
18072 (method git-fetch)
18073 (uri (git-reference
18074 (url "https://github.com/jaraco/pip-run")
18075 (commit (string-append "v" version))))
18076 (file-name (git-file-name name version))
18077 (sha256
18078 (base32 "0ycrjj3jgqcr9c2k7y8vprq65iblg0q0hvwz8zwi13gmb0ffds0c"))))
18079 (build-system pyproject-build-system)
18080 (arguments
18081 (list
18082 #:tests? (not (%current-target-system))
18083 #:test-flags
18084 #~(list "-k" (string-append
18085 ;; Do not test the myproject.toml build as it tries
18086 ;; to pull dependencies from the internet.
18087 "not project "
18088 ;; These tests attempt to install dependencies from
18089 ;; the network and fail.
18090 "and not test_pkg_imported "
18091 "and not test_pkg_loaded_from_alternate_index "
18092 "and not test_pkg_loaded_from_url "))
18093 #:phases
18094 #~(modify-phases %standard-phases
18095 (add-before 'build 'pretend-version
18096 (lambda _
18097 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
18098 (native-inputs
18099 (list python-nbformat
18100 python-pygments
18101 python-pytest
18102 python-setuptools
18103 python-setuptools-scm))
18104 (propagated-inputs
18105 (list python-autocommand
18106 python-packaging
18107 python-path
18108 python-pip))
18109 (home-page "https://github.com/jaraco/pip-run")
18110 (synopsis "Dynamic dependency loader for Python")
18111 (description "The @command{pip-run} command provides on-demand temporary
18112package installation for a single interpreter run. It replaces this series of
18113commands:
18114@example
18115$ virtualenv --python pythonX.X --system-site-packages /tmp/env
18116$ /tmp/env/bin/pip install pkg1 pkg2 -r reqs.txt
18117$ /tmp/env/bin/python ...
18118$ rm -rf /tmp/env
18119@end example")
18120 (license license:expat)))
18121
18122;; It may be removed after 2026-01-24.
18123(define-deprecated/public-alias python-pip-run-bootstrap python-pip-run)
18124
18125(define-public python-libarchive-c
18126 (package
18127 (name "python-libarchive-c")
18128 (version "5.2")
18129 (source (origin
18130 (method url-fetch)
18131 (uri (pypi-uri "libarchive_c" version))
18132 (sha256
18133 (base32
18134 "05vl0pjpv5wqy9xybzixjv9anvih9yjx361c4rw6xbq9hpiahi7x"))))
18135 (build-system pyproject-build-system)
18136 (arguments
18137 (list
18138 #:phases
18139 #~(modify-phases %standard-phases
18140 (add-before 'build 'reference-libarchive
18141 (lambda* (#:key inputs #:allow-other-keys)
18142 ;; Retain the absolute file name of libarchive.so.
18143 (substitute* "libarchive/ffi.py"
18144 (("find_library\\('archive'\\)")
18145 (string-append
18146 "'"
18147 (search-input-file inputs "/lib/libarchive.so")
18148 "'"))))))))
18149 (native-inputs
18150 (list python-setuptools python-wheel python-pytest))
18151 (inputs
18152 (list libarchive))
18153 (home-page "https://github.com/Changaco/python-libarchive-c")
18154 (synopsis "Python interface to libarchive")
18155 (description
18156 "This package provides Python bindings to libarchive, a C library to
18157access possibly compressed archives in many different formats. It uses
18158Python's @code{ctypes} foreign function interface (FFI).")
18159 (license license:lgpl2.0+)))
18160
18161(define-public python-file
18162 (package/inherit file
18163 (name "python-file")
18164 (build-system pyproject-build-system)
18165 (arguments
18166 (list
18167 #:tests? #f ;no tests
18168 #:phases
18169 #~(modify-phases %standard-phases
18170 (add-before 'build 'change-directory
18171 (lambda _
18172 (chdir "python")))
18173 (add-before 'build 'set-library-file-name
18174 (lambda* (#:key inputs #:allow-other-keys)
18175 (substitute* "magic.py"
18176 (("find_library\\('magic'\\)")
18177 (format #f "~s" (search-input-file inputs
18178 "lib/libmagic.so")))))))))
18179 (inputs (list file))
18180 (native-inputs (cons* python-setuptools
18181 (if (%current-target-system)
18182 (list this-package)
18183 '())))
18184 (synopsis "Python bindings to the libmagic file type guesser")
18185 (description "This package provides Python bindings to the libmagic file
18186type guesser.
18187
18188Note that this module and the @code{python-magic} module both provide a
18189@file{magic.py} file; these two modules, which are different and were
18190developed separately, both serve the same purpose: provide Python bindings for
18191libmagic.")))
18192
18193(define-public python-pydevd
18194 (package
18195 (name "python-pydevd")
18196 (version "3.2.3")
18197 (source
18198 (origin
18199 (method git-fetch)
18200 (uri (git-reference
18201 (url "https://github.com/fabioz/PyDev.Debugger")
18202 (commit (string-append
18203 "pydev_debugger_"
18204 (string-join (string-split version #\.) "_")))))
18205 (modules '((guix build utils)))
18206 (snippet '(begin
18207 ;; Delete pre-built binaries.
18208 (for-each delete-file (find-files "." "\\.(so|dylib|dll)"))
18209 ;; This source is generated via Cython.
18210 (delete-file "_pydevd_bundle/pydevd_cython.c")))
18211 (file-name (git-file-name name version))
18212 (sha256
18213 (base32
18214 "0a40574f0rx23gissxmrpjq9cimhjxqsq9wbv5l7620h3blb5510"))))
18215 (build-system pyproject-build-system)
18216 (arguments
18217 (list
18218 #:test-flags
18219 #~(list "-n" (number->string (parallel-job-count))
18220 "-m" "not flaky"
18221 "-k"
18222 (string-join
18223 (list
18224 ;; The two "break_01" tests have been failing on
18225 ;; Python 3.10:
18226 ;; <https://github.com/fabioz/PyDev.Debugger/issues/222>.
18227 "not test_set_pydevd_break_01 "
18228 ;; the GUI event loop requires an X server.
18229 "test_gui_event_loop_custom"
18230 ;; This test validates that 'pydevd' is not in the
18231 ;; exception message, but it is due to being part
18232 ;; of the build file name present in the message.
18233 "test_evaluate_exception_trace"
18234 ;; This test fail with TimeoutError, no message on stderr.
18235 "test_soft_terminate"
18236 "test_debugger_case_deadlock_interrupt_thread"
18237 ;; subprocess.CalledProcessError
18238 ;; Python 3.11/3.12 specific issue:
18239 ;; <https://github.com/fabioz/PyDev.Debugger/issues/284>.
18240 "test_find_main_thread_id")
18241 " and not "))
18242 #:phases
18243 #~(modify-phases %standard-phases
18244 (add-after 'unpack 'fix-tests
18245 (lambda _
18246 (substitute* "tests_python/test_convert_utilities.py"
18247 ;; Add missing trailing '/'.
18248 (("\"\\\\\\\\usr\\\\\\\\bin\\\\\\\\\") == \"/usr/bin" all)
18249 (string-append all "/")))))
18250 (add-after 'unpack 'patch-command-paths
18251 (lambda* (#:key inputs #:allow-other-keys)
18252 (substitute* "_pydevd_bundle/pydevd_api.py"
18253 (("'kill'")
18254 (format #f "~s" (search-input-file inputs "bin/kill")))
18255 (("'pgrep'")
18256 (format #f "~s" (search-input-file inputs "bin/pgrep"))))))
18257 (add-after 'unpack 'generate-sources
18258 (lambda _
18259 (setenv "PYTHONPATH" (getcwd))
18260 (invoke "python" "build_tools/build.py")))
18261 (add-after 'unpack 'adjust-attach-binary-name
18262 (lambda _
18263 (substitute*
18264 '("pydevd_tracing.py"
18265 "pydevd_attach_to_process/add_code_to_python_process.py")
18266 (("def get_(target|python_helper_lib)_filename.*" all)
18267 (format #f "~a return ~s~%" all
18268 (string-append #$output "/lib/attach.so"))))))
18269 (add-after 'unpack 'patch-gdb
18270 (lambda* (#:key inputs #:allow-other-keys)
18271 (substitute*
18272 "pydevd_attach_to_process/add_code_to_python_process.py"
18273 (("'gdb',")
18274 (format #f "~s," (search-input-file inputs "bin/gdb"))))))
18275 (add-after 'build 'build-attach-linux-binary
18276 (lambda _
18277 (invoke #+(cxx-for-target) "-shared" "-o" "attach.so"
18278 "-fPIC" "-nostartfiles"
18279 "pydevd_attach_to_process/linux_and_mac/attach.cpp")))
18280 (add-before 'check 'pre-check
18281 (lambda* (#:key tests? #:allow-other-keys)
18282 (when tests?
18283 (setenv "PYDEVD_USE_CYTHON" "YES"))))
18284 (add-after 'install 'install-attach-binary
18285 (lambda _
18286 (install-file "attach.so"
18287 (string-append #$output "/lib"))))
18288 ;; Some modules aren't designed to be loadable by themselves, such
18289 ;; as 'pydev_app_engine_debug_startup' and fail.
18290 (delete 'sanity-check))))
18291 (native-inputs
18292 (list python-cython
18293 python-numpy
18294 python-psutil
18295 python-pytest
18296 python-pytest-xdist
18297 python-setuptools
18298 python-trio
18299 python-untangle
18300 python-wheel))
18301 (inputs (list coreutils gdb/pinned procps))
18302 (home-page "https://github.com/fabioz/PyDev.Debugger/")
18303 (synopsis "Python debugger")
18304 (description "PyDev.Debugger is a capable Python debugger used in PyDev
18305and other @acronym{IDEs, Integrated Development Environments}.")
18306 (license license:epl1.0)))
18307
18308(define-public python-debugpy
18309 (package
18310 (name "python-debugpy")
18311 (version "1.8.17")
18312 (source
18313 (origin
18314 (method git-fetch)
18315 (uri (git-reference ;no tests in PyPI archive
18316 (url "https://github.com/microsoft/debugpy")
18317 (commit (string-append "v" version))))
18318 (file-name (git-file-name name version))
18319 (modules '((guix build utils)))
18320 ;; Remove the bundled PyDev-Debugger copy, including its pre-built
18321 ;; attach binary.
18322 (snippet '(delete-file-recursively "src/debugpy/_vendored"))
18323 (patches (search-patches "python-debugpy-unbundle-pydevd.patch"))
18324 (sha256
18325 (base32
18326 "12yhmayc21zcq16dv5hrp4n896d9v3b88hh1biqvj8gnrmsxvcwb"))))
18327 (build-system pyproject-build-system)
18328 (arguments
18329 (list
18330 #:tests? #f ;FIXME: Fail on systems with YAMA LSM’s ptrace scope > 0.
18331 #:phases
18332 #~(modify-phases %standard-phases
18333 (add-after 'unpack 'patch-sh-in-tests
18334 (lambda _
18335 (substitute* "tests/debugpy/test_run.py"
18336 (("#!/bin/sh")
18337 (string-append "#!" (which "sh"))))))
18338 (add-after 'unpack 'fix-version
18339 ;; Versioneer is useless when there is no git metadata.
18340 (lambda _
18341 (substitute* "setup.py"
18342 (("version=versioneer.get_version\\(),")
18343 (format #f "version=~s," #$version)))))
18344 (add-before 'build 'configure
18345 (lambda _
18346 ;; This adjusts the behavior of debugpy to load pydevd from
18347 ;; Python site packages.
18348 (setenv "DEBUGPY_BUNDLING_DISABLED" "1"))))))
18349 (native-inputs
18350 (list python-setuptools))
18351 (propagated-inputs
18352 (list python-pydevd))
18353 (home-page "https://aka.ms/debugpy")
18354 (synopsis "Debug Adapter Protocol Python implementation")
18355 (description "An implementation of the Debug Adapter Protocol for
18356Python.")
18357 (license license:expat)))
18358
18359(define-public python-debian
18360 (package
18361 (name "python-debian")
18362 (home-page "https://salsa.debian.org/python-debian-team/python-debian")
18363 (version "0.1.49")
18364 (source
18365 (origin
18366 ;; Use git-fetch, as pypi doesn't include test suite.
18367 (method git-fetch)
18368 (uri (git-reference
18369 (url home-page)
18370 (commit version)))
18371 (file-name (git-file-name name version))
18372 (sha256
18373 (base32
18374 "190vy2ns0650icpwvv4qp6kr3c3i9jszy1vkdwpigxb96fs1bqf3"))
18375 (modules '((guix build utils)))
18376 (snippet
18377 #~(begin
18378 ;; python-apt, apt and dpkg are not yet available in guix,
18379 ;; and these tests heavily depend on them.
18380 (for-each delete-file
18381 '("lib/debian/tests/test_deb822.py"
18382 "lib/debian/tests/test_debfile.py"))
18383
18384 ;; for reproducible builds, otherwise python-debian
18385 ;; generates a _version.py including the date
18386 (copy-file "lib/debian/_version.py.in" "lib/debian/_version.py")
18387 (substitute* "lib/debian/_version.py"
18388 (("__CHANGELOG_VERSION__") #$version))))))
18389 (build-system pyproject-build-system)
18390 (native-inputs
18391 (list python-pytest python-setuptools))
18392 (propagated-inputs
18393 (list python-six python-chardet))
18394 (synopsis "Debian package related modules")
18395 (description
18396 "This package provides Python modules that abstract many formats of
18397Debian-related files, such as:
18398@itemize
18399@item Debtags information;
18400@item @file{debian/changelog} files;
18401@item packages files, pdiffs;
18402@item control files of single or multiple RFC822-style paragraphs---e.g.
18403 @file{debian/control}, @file{.changes}, @file{.dsc};
18404@item Raw @file{.deb} and @file{.ar} files, with (read-only) access to
18405 contained files and meta-information.
18406@end itemize")
18407 ;; Modules are either GPLv2+ or GPLv3+.
18408 (license license:gpl3+)))
18409
18410(define-public python-json-spec
18411 (package
18412 (name "python-json-spec")
18413 (version "0.12.0")
18414 (source
18415 (origin
18416 (method git-fetch) ;no tests in PyPI archive
18417 (uri (git-reference
18418 (url "https://github.com/johnnoone/json-spec")
18419 (commit version)))
18420 (file-name (git-file-name name version))
18421 (sha256
18422 (base32 "14lzvpfi8vpwn2hsizljcyiiywfc1fssj0hh079jxw4xwjkm9328"))))
18423 (build-system pyproject-build-system)
18424 (native-inputs
18425 (list python-pytest
18426 python-poetry-core))
18427 (propagated-inputs
18428 (list python-termcolor)) ;for the CLI
18429 (home-page "https://json-spec.readthedocs.io/")
18430 (synopsis "JSON Schema, JSON Pointer and JSON Reference for Python")
18431 (description
18432 "This Python library implements several JSON specs, like JSON Schema,
18433JSON Reference and JSON Pointer.")
18434 (license license:bsd-3)))
18435
18436(define-public python-fastbencode
18437 (package
18438 (name "python-fastbencode")
18439 (version "0.3.2") ;the last non Rust version
18440 (source
18441 (origin
18442 (method url-fetch)
18443 (uri (pypi-uri "fastbencode" version))
18444 (modules '((guix build utils)))
18445 ;; Delete pre-generated Cython C files.
18446 (snippet '(for-each delete-file (find-files "." "\\.c$")))
18447 (sha256
18448 (base32 "1daal7xgsl2sjxq8pcilcas9wd9j9796wd4rlkhrvv5h0k2k4k53"))))
18449 (build-system pyproject-build-system)
18450 (arguments
18451 (list
18452 #:test-backend #~'unittest
18453 #:test-flags #~(list "fastbencode.tests.test_suite")))
18454 (native-inputs
18455 (list python-cython
18456 python-setuptools))
18457 (home-page "https://github.com/breezy-team/fastbencode")
18458 (synopsis "Python Bencode (de)serializer with optional fast C extensions")
18459 (description
18460 "The fastbencode Python package implements the bencode serialization
18461format for storing and transmitting loosely structured data, originally used
18462by BitTorrent.
18463
18464The format can encode four different types of values: byte strings, integers,
18465lists, and dictionaries (associative arrays). It's simple and unaffected by
18466endianness,
18467
18468This package includes both a pure-Python version and an optional C extension
18469based on Cython. Both provide the same functionality, but the C version has
18470significantly better performance.")
18471 (license (list license:expat ; _bencode_py.py
18472 license:gpl2+)))) ; __init__.py
18473
18474(define-public python-fastjsonschema
18475 (package
18476 (name "python-fastjsonschema")
18477 (version "2.21.1")
18478 (source
18479 (origin
18480 (method git-fetch) ; no tests in PyPI release
18481 (uri (git-reference
18482 (url "https://github.com/horejsek/python-fastjsonschema")
18483 (commit (string-append "v" version))))
18484 (file-name (git-file-name name version))
18485 (sha256
18486 (base32 "1j7dc8hlvrlhzkiv0vqzd6shhjaf14g9v3zlfn7x17j04c1g3iz7"))))
18487 (build-system pyproject-build-system)
18488 (arguments
18489 (list
18490 #:test-flags #~(list "--ignore=tests/benchmarks/test_benchmark.py")))
18491 (native-inputs
18492 (list python-json-spec
18493 python-jsonschema
18494 python-pytest
18495 python-pytest-benchmark
18496 python-setuptools))
18497 (home-page "https://github.com/horejsek/python-fastjsonschema")
18498 (synopsis "Fast Python implementation of JSON schema")
18499 (description
18500 "This library implements validation of JSON documents by JSON schema for
18501drafts 04, 06 and 07.")
18502 (license license:bsd-3)))
18503
18504(define-public python-nbformat
18505 (package
18506 (name "python-nbformat")
18507 (version "5.10.4")
18508 ;; The PyPi release tarball lacks some test cases and test data.
18509 (source (origin
18510 (method git-fetch)
18511 (uri (git-reference
18512 (url "https://github.com/jupyter/nbformat")
18513 (commit (string-append "v" version))))
18514 (sha256
18515 (base32
18516 "0abd1d8iq21dwh17m72na2f3kr6a5p6ji1gnykf06jshikalj2x3"))
18517 (file-name (git-file-name name version))))
18518 (build-system pyproject-build-system)
18519 (arguments
18520 (list
18521 #:phases
18522 #~(modify-phases %standard-phases
18523 ;; We don't want to use hatch-nodejs just to get a version string.
18524 (add-after 'unpack 'patch-pyproject
18525 (lambda _
18526 (substitute* "pyproject.toml"
18527 ((", \"hatch-nodejs-version\"") "")
18528 (("dynamic = \\[\"version\"\\]")
18529 (string-append "version = \"" #$version "\""))))))))
18530 (propagated-inputs
18531 (list python-fastjsonschema python-jsonschema python-jupyter-core
18532 python-traitlets))
18533 (native-inputs
18534 (list python-hatchling
18535 python-pep440
18536 python-pytest
18537 python-testpath))
18538 (home-page "https://jupyter.org")
18539 (synopsis "Jupyter Notebook format")
18540 (description "This package provides the reference implementation of the
18541Jupyter Notebook format and Python APIs for working with notebooks.")
18542 (license license:bsd-3)))
18543
18544(define-public python-nb-clean
18545 (package
18546 (name "python-nb-clean")
18547 (version "4.0.1")
18548 (source
18549 (origin
18550 (method git-fetch) ; no tests in PyPI
18551 (uri (git-reference
18552 (url "https://github.com/srstevenson/nb-clean")
18553 (commit version)))
18554 (file-name (git-file-name name version))
18555 (sha256
18556 (base32 "1pa4m1qn7gx77lg3vy7y7vlyl45cg9ai9z93ds9ax108mbnrbdw7"))))
18557 (build-system pyproject-build-system)
18558 (native-inputs (list python-poetry-core
18559 python-pytest
18560 python-pytest-cov ; runs by default
18561 python-pytest-mock))
18562 (propagated-inputs (list python-nbformat))
18563 (home-page "https://github.com/srstevenson/nb-clean")
18564 (synopsis "Clean Jupyter notebooks for versioning")
18565 (description "This package cleans Jupyter notebooks of cell execution
18566counts, metadata, outputs, and empty cells, preparing them for committing to
18567version control. It provides a Git filter to automatically clean notebooks
18568before they're staged, and can also be used with other version control
18569systems, as a command line tool, and as a Python library.")
18570 (license license:isc)))
18571
18572(define-public python-bleach
18573 (package
18574 (name "python-bleach")
18575 (version "6.2.0")
18576 (source
18577 (origin
18578 (method url-fetch)
18579 (uri (pypi-uri "bleach" version))
18580 (sha256
18581 (base32 "07wrbzlmd6x63dz7lcdih9c4xkn79inimv6kh3yrk9dq310qjghj"))
18582 (snippet
18583 #~(begin
18584 (use-modules (guix build utils))
18585 (substitute* (find-files "." "\\.py$")
18586 (("bleach\\._vendor\\.html5lib") "html5lib"))
18587 (delete-file-recursively "bleach/_vendor/html5lib")))))
18588 (build-system pyproject-build-system)
18589 (native-inputs
18590 (list python-pytest
18591 python-setuptools))
18592 (propagated-inputs
18593 (list python-html5lib
18594 python-webencodings))
18595 (home-page "https://github.com/mozilla/bleach")
18596 (synopsis "Whitelist-based HTML-sanitizing tool")
18597 (description "Bleach is an easy whitelist-based HTML-sanitizing tool.")
18598 (license license:asl2.0)))
18599
18600(define-public python-entrypoints
18601 (package
18602 (name "python-entrypoints")
18603 (version "0.4")
18604 (source
18605 (origin
18606 (method url-fetch)
18607 (uri (pypi-uri "entrypoints" version))
18608 (sha256
18609 (base32 "1m5crkagmbvlgdwqv7nan64pbcjvy0c6idb7rpmik2i1m7dfs1mp"))))
18610 (build-system pyproject-build-system)
18611 (native-inputs
18612 (list python-flit-core
18613 python-pytest))
18614 (home-page "https://github.com/takluyver/entrypoints")
18615 (synopsis "Discover and load entry points from installed Python packages")
18616 (description "Entry points are a way for Python packages to advertise
18617objects with some common interface. The most common examples are
18618@code{console_scripts} entry points, which define shell commands by
18619identifying a Python function to run. The @code{entrypoints} module contains
18620functions to find and load entry points.")
18621 (license license:expat)))
18622
18623(define-public python-epc
18624 (package
18625 (name "python-epc")
18626 (properties '((commit . "f3673ae5c35f20a0f71546ab34c28e3dde3595c1")
18627 (revision . "0")))
18628 (version (git-version "0.0.5"
18629 (assoc-ref properties 'revision)
18630 (assoc-ref properties 'commit)))
18631 (source
18632 (origin
18633 (method git-fetch)
18634 (uri (git-reference
18635 (url "https://github.com/tkf/python-epc")
18636 (commit (assoc-ref properties 'commit))))
18637 (file-name (git-file-name name version))
18638 (sha256
18639 (base32 "0q27bj49yan2qg6i8m5czs5b5jv26ff42yz7j4r5652s7j3f42mm"))))
18640 (build-system pyproject-build-system)
18641 (arguments (list #:test-backend #~'nose))
18642 (propagated-inputs (list python-sexpdata))
18643 (native-inputs (list python-pynose python-setuptools))
18644 (home-page "https://github.com/tkf/python-epc")
18645 (synopsis "Remote procedure call (RPC) stack for Emacs Lisp and Python")
18646 (description
18647 "Python-EPC can call elisp functions from Python and Python functions
18648from elisp.")
18649 (license license:gpl3)))
18650
18651(define-public python-forex-python
18652 (package
18653 (name "python-forex-python")
18654 (version "1.5")
18655 (source
18656 (origin
18657 (method git-fetch)
18658 (uri (git-reference
18659 (url "https://github.com/MicroPyramid/forex-python")
18660 (commit version)))
18661 (file-name (git-file-name name version))
18662 (sha256
18663 (base32 "0pl5sfd0wkv1a2y324l518h6sing7wkadrbr5xcf6hjykn2mbi5h"))))
18664 (build-system pyproject-build-system)
18665 (arguments (list #:tests? #f)) ; Tests require online data.
18666 (native-inputs (list python-setuptools))
18667 (propagated-inputs (list python-requests python-simplejson))
18668 (home-page "https://github.com/MicroPyramid/forex-python")
18669 (synopsis "Foreign exchange rates and currency conversion")
18670 (description
18671 "@code{python-forex-python} can be used to manipulate foreign
18672exchange rates and to operate currency conversions.
18673
18674Features:
18675@itemize
18676@item List all currency rates.
18677@item BitCoin price for all currencies.
18678@item Converting amount to BitCoins.
18679@item Get historical rates for any day since 1999.
18680@item Conversion rate for one currency(ex; USD to INR).
18681@item Convert amount from one currency to other.('USD 10$' to INR).
18682@item Currency symbols.
18683@item Currency names.
18684@end itemize")
18685 (license license:expat)))
18686
18687(define-public python-simpleeval
18688 (package
18689 (name "python-simpleeval")
18690 (version "0.9.12")
18691 (source
18692 (origin
18693 (method git-fetch)
18694 (uri (git-reference
18695 (url "https://github.com/danthedeckie/simpleeval")
18696 (commit version)))
18697 (file-name (git-file-name name version))
18698 (sha256
18699 (base32 "0khgl729q5133fgc00d550f4r77707rkkn7r56az4v8bvx0q8xp4"))))
18700 (build-system pyproject-build-system)
18701 (native-inputs (list python-pytest python-setuptools))
18702 (home-page "https://github.com/danthedeckie/simpleeval")
18703 (synopsis "Simple, safe single expression evaluator library")
18704 (description
18705 "This package provides a quick single file library for easily adding
18706evaluatable expressions into python projects. Say you want to allow a user
18707to set an alarm volume, which could depend on the time of day, alarm level,
18708how many previous alarms had gone off, and if there is music playing at the
18709time.")
18710 (license license:expat)))
18711
18712(define-public python-nbconvert
18713 (package
18714 (name "python-nbconvert")
18715 (version "7.16.6")
18716 (source
18717 (origin
18718 (method url-fetch)
18719 (uri (pypi-uri "nbconvert" version))
18720 (sha256
18721 (base32
18722 "10pmq31p2srwcdrc7k71dj0l6hl42xnadvsy8swaf3a8qqvpwsjp"))))
18723 (build-system pyproject-build-system)
18724 (arguments
18725 (list
18726 #:test-flags
18727 '(list "-k"
18728 (string-append
18729 ;; These tests require pyppeteer, not yet
18730 ;; available in Guix.
18731 "not test_webpdf_with_chromium"
18732 " and not test_webpdf.py"
18733 ;; These tests require ipywidgets, which would
18734 ;; introduce a dependency cycle.
18735 " and not test_execute_widgets_from_nbconvert"
18736 " and not test_execute_multiple_notebooks"
18737
18738 ;; This test calls nbconvert itself via "sys.executable -m
18739 ;; nbconvert". It's probably harmless.
18740 " and not test_default_config"))
18741 #:phases
18742 #~(modify-phases %standard-phases
18743 (add-after 'unpack 'fix-paths
18744 (lambda* (#:key inputs #:allow-other-keys)
18745 ;; Use pandoc binary from input.
18746 (substitute* "nbconvert/utils/pandoc.py"
18747 (("'pandoc'")
18748 (format #f "~s" (search-input-file inputs "bin/pandoc"))))
18749 ;; Same for LaTeX.
18750 (substitute* "nbconvert/exporters/pdf.py"
18751 (("\"xelatex\"")
18752 (format #f "~s" (search-input-file inputs "bin/xelatex")))
18753 (("\"bibtex\"")
18754 (format #f "~s" (search-input-file inputs "bin/bibtex"))))
18755 ;; Likewise for Inkscape.
18756 (substitute* "nbconvert/preprocessors/svg2pdf.py"
18757 (("inkscape_path = which\\(\"inkscape\")")
18758 (format #f "inkscape_path = ~s"
18759 (search-input-file inputs "bin/inkscape"))))))
18760 (add-after 'unpack 'ignore-deprecation-warnings
18761 (lambda _
18762 (substitute* "pyproject.toml"
18763 (("\"ignore:nbconvert.utils" m)
18764 (string-append "\"ignore:zmq.eventloop.ioloop is deprecated:DeprecationWarning\",\n"
18765 m)))))
18766 (add-before 'check 'pre-check
18767 (lambda _
18768 ;; Tests depend on templates installed to output.
18769 (setenv "JUPYTER_PATH"
18770 (string-append #$output "/share/jupyter:"
18771 (getenv "JUPYTER_PATH")))
18772 ;; jupyter-core demands this
18773 (setenv "JUPYTER_PLATFORM_DIRS" "1")
18774 ;; Tests need writable HOME and TEXMFVAR.
18775 (setenv "HOME" "/tmp")
18776 (setenv "TEXMFVAR" "/tmp"))))))
18777 (inputs
18778 (list inkscape/pinned pandoc))
18779 (native-inputs
18780 (list python-flaky
18781 python-hatchling
18782 python-ipykernel
18783 ;; Adding ipywidgets would create a cycle.
18784 ;;python-ipywidgets
18785 python-pytest
18786 (texlive-local-tree
18787 (list texlive-adjustbox
18788 texlive-booktabs
18789 texlive-caption
18790 texlive-enumitem
18791 texlive-eurosym
18792 texlive-fancyvrb
18793 texlive-float
18794 texlive-fontspec
18795 texlive-grffile
18796 texlive-jknapltx
18797 texlive-parskip
18798 texlive-pdfcol
18799 texlive-rsfs
18800 texlive-soul
18801 texlive-tcolorbox
18802 texlive-titling
18803 texlive-ulem
18804 texlive-unicode-math
18805 texlive-upquote
18806 texlive-xetex))))
18807 (propagated-inputs
18808 (list python-beautifulsoup4
18809 python-bleach
18810 python-defusedxml
18811 python-importlib-metadata
18812 python-jinja2
18813 python-jupyter-core
18814 python-jupyterlab-pygments
18815 python-markupsafe
18816 python-mistune
18817 python-nbclient
18818 python-nbformat
18819 python-packaging
18820 python-pandocfilters
18821 python-pygments
18822 python-tinycss2
18823 python-traitlets
18824 ;; Required, even if [serve] is not used.
18825 python-tornado-6
18826 ;; Required at runtime for `jupyter nbconvert --to=pdf`.
18827 texlive-adjustbox
18828 texlive-amsmath
18829 texlive-booktabs
18830 texlive-caption
18831 texlive-collection-basic
18832 texlive-enumitem
18833 texlive-environ
18834 texlive-etoolbox
18835 texlive-eurosym
18836 texlive-etoolbox
18837 texlive-fancyvrb
18838 texlive-float
18839 texlive-fontspec
18840 texlive-geometry
18841 texlive-grffile
18842 texlive-hyperref
18843 texlive-infwarerr
18844 texlive-jknapltx
18845 texlive-kvoptions
18846 texlive-lm
18847 texlive-lm-math
18848 texlive-mathpazo
18849 texlive-parskip
18850 texlive-pdfcol
18851 texlive-pgf
18852 texlive-rsfs
18853 texlive-soul
18854 texlive-stringenc
18855 texlive-tcolorbox
18856 texlive-titling
18857 texlive-tools
18858 texlive-trimspaces
18859 texlive-ucs
18860 texlive-ulem
18861 texlive-unicode-math
18862 texlive-upquote
18863 texlive-xcolor
18864 texlive-xetex
18865 texlive-zapfding))
18866 (home-page "https://jupyter.org")
18867 (synopsis "Converting Jupyter Notebooks")
18868 (description "The @code{nbconvert} tool, @code{jupyter nbconvert}, converts
18869notebooks to various other formats via Jinja templates. It allows you to
18870convert an @code{.ipynb} notebook file into various static formats including:
18871
18872@enumerate
18873@item HTML
18874@item LaTeX
18875@item PDF
18876@item Reveal JS
18877@item Markdown (md)
18878@item ReStructured Text (rst)
18879@item executable script
18880@end enumerate\n")
18881 (license license:bsd-3)))
18882
18883(define-public python-ipywidgets
18884 (package
18885 (name "python-ipywidgets")
18886 ;; XXX: Newer version requires python-jupyterlab, see guix/guix#2073.
18887 (version "8.1.4")
18888 (source
18889 (origin
18890 (method url-fetch)
18891 ;; Git: <https://github.com/jupyter-widgets/ipywidgets/tree/8.1.8/python/ipywidgets>
18892 (uri (pypi-uri "ipywidgets" version))
18893 (sha256
18894 (base32
18895 "0f9i3ycyc8c3rs3xk30hvq7mjs37phbxv4p8parrm02cxn9yzdc5"))))
18896 (build-system pyproject-build-system)
18897 (native-inputs
18898 (list python-ipykernel
18899 python-jsonschema
18900 python-pytest
18901 python-pytz
18902 python-setuptools))
18903 (propagated-inputs
18904 (list python-comm
18905 python-ipython
18906 python-jupyterlab-widgets
18907 python-traitlets
18908 python-widgetsnbextension))
18909 (home-page "https://ipython.org")
18910 (synopsis "IPython HTML widgets for Jupyter")
18911 (description "Ipywidgets are interactive HTML widgets for Jupyter
18912notebooks and the IPython kernel. Notebooks come alive when interactive
18913widgets are used. Users gain control of their data and can visualize changes
18914in the data.")
18915 (license license:bsd-3)))
18916
18917(define-public python-jsbeautifier
18918 (package
18919 (name "python-jsbeautifier")
18920 (version "1.15.3")
18921 (home-page "https://github.com/beautify-web/js-beautify")
18922 (source
18923 (origin
18924 (method git-fetch)
18925 (uri (git-reference
18926 (url home-page)
18927 (commit (string-append "v" version))))
18928 (file-name (git-file-name name version))
18929 (sha256
18930 (base32 "1zl1g6w5zn2hxk5qq83j52cxa1ig75ryjwsjxv9wiwkar4qq88zg"))))
18931 (build-system pyproject-build-system)
18932 (arguments
18933 (list
18934 #:phases
18935 #~(modify-phases %standard-phases
18936 (add-after 'unpack 'chdir
18937 (lambda _
18938 (chdir "python")
18939 (rename-file "setup-js.py" "setup.py"))))))
18940 (propagated-inputs (list python-editorconfig python-six))
18941 (native-inputs (list python-pytest python-setuptools))
18942 (synopsis "JavaScript unobfuscator and beautifier")
18943 (description
18944 "This packages provides tooling to beautify, unpack or deobfuscate
18945JavaScript, leveraging popular online obfuscators.")
18946 (license license:expat)))
18947
18948(define-public python-chardet
18949 (package
18950 (name "python-chardet")
18951 (version "5.2.0")
18952 (source
18953 (origin
18954 (method url-fetch)
18955 (uri (pypi-uri "chardet" version))
18956 (sha256
18957 (base32
18958 "1xqwkjijq2fxn8rhcvfddl14lp39jllqbh527yy19i58g7s6yfqv"))))
18959 (native-inputs
18960 (list python-pytest python-setuptools python-wheel))
18961 (build-system pyproject-build-system)
18962 (arguments
18963 (list #:test-flags
18964 ;; Disable test that fails sporadically:
18965 ;; https://github.com/chardet/chardet/issues/256
18966 #~'("-k" "not test_detect_all_and_detect_one_should_agree")
18967 #:phases
18968 #~(modify-phases %standard-phases
18969 ;; This package provides a 'chardetect' executable that only
18970 ;; depends on Python, so customize the wrap phase to avoid
18971 ;; adding pytest and friends in order to save size.
18972 ;; (See also <https://bugs.gnu.org/25235>.)
18973 (replace 'wrap
18974 (lambda* (#:key inputs outputs #:allow-other-keys)
18975 (let* ((sitedir (site-packages inputs outputs))
18976 (python (dirname (dirname
18977 (search-input-file
18978 inputs "bin/python"))))
18979 (python-sitedir
18980 (string-append python "/lib/python"
18981 (python-version python)
18982 "/site-packages")))
18983 (wrap-program (string-append #$output "/bin/chardetect")
18984 `("GUIX_PYTHONPATH" ":" suffix
18985 ,(list sitedir python-sitedir)))))))))
18986 (home-page "https://github.com/chardet/chardet")
18987 (synopsis "Universal encoding detector for Python 2 and 3")
18988 (description
18989 "This package provides @code{chardet}, a Python module that can
18990automatically detect a wide range of file encodings.")
18991 (license license:lgpl2.1+)))
18992
18993(define-public python-charset-normalizer
18994 (package
18995 (name "python-charset-normalizer")
18996 (version "3.4.2")
18997 (source
18998 (origin
18999 (method url-fetch)
19000 (uri (pypi-uri "charset_normalizer" version))
19001 (sha256
19002 (base32 "0qqfk84ka3d9hh0yf7n8y0qa0yn08ncdacjjckzix8ybkv5cxbjv"))))
19003 (build-system pyproject-build-system)
19004 (arguments
19005 (list
19006 #:phases
19007 #~(modify-phases %standard-phases
19008 ;; https://github.com/jawah/charset_normalizer/issues/625
19009 ;; https://github.com/jawah/charset_normalizer/pull/626
19010 (add-after 'unpack 'fix-scripts
19011 (lambda _
19012 (substitute* "pyproject.toml"
19013 (("charset_normalizer:cli.cli_detect")
19014 "charset_normalizer.cli:cli_detect")))))))
19015 (native-inputs
19016 (list python-pytest
19017 python-setuptools))
19018 (home-page "https://github.com/ousret/charset_normalizer")
19019 (synopsis "Universal Charset Detector, alternative to Chardet")
19020 (description "This library helps you read text from an unknown charset
19021encoding. Motivated by @code{chardet}, it tries to resolve the issue by
19022taking a new approach. All IANA character set names for which the Python core
19023library provides codecs are supported.")
19024 (license license:expat)))
19025
19026(define-deprecated/public-alias python-charset-normalizer-3
19027 python-charset-normalizer) ;may be removed after 2025-12-01
19028
19029(define-public python-docopt
19030 (package
19031 (name "python-docopt")
19032 (version "0.6.2")
19033 (source
19034 (origin
19035 (method git-fetch) ;no tests in PyPI archive
19036 (uri (git-reference
19037 (url "https://github.com/docopt/docopt")
19038 (commit version)))
19039 (file-name (git-file-name name version))
19040 (sha256
19041 (base32 "0aad9gbswnnhssin2q0m5lmpm0ahyf80ahs2zjigbn5y7fvljnd0"))
19042 (patches (search-patches "python-docopt-pytest6-compat.patch"))))
19043 (build-system pyproject-build-system)
19044 (native-inputs
19045 (list python-pytest python-setuptools))
19046 (home-page "http://docopt.org")
19047 (synopsis "Command-line interface description language for Python")
19048 (description
19049 "This library allows the user to define a command-line interface from a
19050program's help message rather than specifying it programmatically with
19051command-line parsers like @code{getopt} and @code{argparse}.")
19052 (license license:expat)))
19053
19054(define-public python-pythonanywhere
19055 (package
19056 (name "python-pythonanywhere")
19057 (version "0.17.0")
19058 (source
19059 (origin
19060 (method git-fetch)
19061 (uri (git-reference
19062 (url "https://github.com/pythonanywhere/helper_scripts")
19063 (commit (string-append "v" version))))
19064 (file-name (git-file-name name version))
19065 (sha256
19066 (base32 "0hsxrw1inqqnxbfvjk0j218ijx5xv4lkfh1qzvay7pzk9ifc0sfz"))))
19067 (build-system pyproject-build-system)
19068 (arguments
19069 (list
19070 #:test-flags
19071 #~(list "--ignore=tests/test_django_project.py" ;depedns on submodule
19072 "-k" (string-join
19073 ;; Network access is required to clone external
19074 ;; repositories.
19075 (list "not test_actually_creates_django_project_in_vir"
19076 "test_actually_downloads_repo"
19077 "test_actually_installing_a_real_package"
19078 "test_actually_works_against_example_repo"
19079 "test_autoconfigure_actually_works_against_example_repo"
19080 "test_exits_because_boolean_not_satisfied"
19081 "test_gets_version"
19082 "test_nuke_option_lets_you_run_twice"
19083 "test_nuke_option_lets_you_run_twice"
19084 "test_start_actually_creates_django_project_in_vir")
19085 " and not "))
19086 #:phases
19087 #~(modify-phases %standard-phases
19088 (add-before 'check 'change-home
19089 (lambda _
19090 (setenv "HOME" "/tmp"))))))
19091 (native-inputs
19092 (list python-psutil
19093 python-pytest
19094 python-pytest-mock
19095 python-responses
19096 python-setuptools))
19097 (propagated-inputs
19098 (list python-dateutil
19099 python-docopt
19100 python-packaging
19101 python-pythonanywhere-core
19102 python-requests
19103 python-schema
19104 python-snakesay
19105 python-tabulate
19106 python-typer))
19107 (home-page "https://github.com/pythonanywhere/helper_scripts/")
19108 (synopsis "PythonAnywhere helper tools for users")
19109 (description
19110 "PythonAnywhere provides a command-line interface and an application
19111programming interface that allows managing files Web apps, scheduled
19112tasks and students. It includes single-command deployment for the Django Girls
19113tutorial.")
19114 (license license:expat)))
19115
19116(define-public python-pythonanywhere-core
19117 (package
19118 (name "python-pythonanywhere-core")
19119 (version "0.2.7")
19120 (source
19121 (origin
19122 (method git-fetch)
19123 (uri (git-reference
19124 (url "https://github.com/pythonanywhere/pythonanywhere-core")
19125 (commit (string-append "v" version))))
19126 (file-name (git-file-name name version))
19127 (sha256
19128 (base32 "1p9zlq3is0jvbni9ydiv6f0fw89lm44hkgbj6nari2a3gb3qw856"))))
19129 (build-system pyproject-build-system)
19130 (arguments
19131 (list
19132 #:phases
19133 #~(modify-phases %standard-phases
19134 (add-before 'check 'pre-check
19135 (lambda _
19136 (setenv "HOME" "/tmp"))))))
19137 (native-inputs
19138 (list python-poetry-core
19139 python-pytest
19140 python-pytest-mock
19141 python-responses))
19142 (propagated-inputs
19143 (list python-dateutil
19144 python-requests
19145 python-snakesay
19146 python-typing-extensions))
19147 (home-page "https://github.com/pythonanywhere/pythonanywhere-core")
19148 (synopsis "API wrapper for PythonAnywhere services")
19149 (description
19150 "This package provides an API wrapper for programmatic management of
19151@code{PythonAnywhere} services.")
19152 (license license:expat)))
19153
19154(define-public python-dialog
19155 (package
19156 (name "python-dialog")
19157 (version "3.5.3")
19158 (source
19159 (origin
19160 (method url-fetch)
19161 (uri (pypi-uri "pythondialog" version))
19162 (sha256
19163 (base32 "08v3flvbhpc0p20drniiaalc3ijghlxk9ka5vz5mqqm6y254m8xj"))
19164 (modules '((guix build utils)))
19165 (snippet #~(delete-file-recursively "doc"))))
19166 (build-system pyproject-build-system)
19167 (arguments
19168 (list
19169 ;; XXX: There are no tests, but some examples. However, they need to
19170 ;; be run on a terminal.
19171 #:tests? #f
19172 #:phases
19173 #~(modify-phases %standard-phases
19174 (add-after 'unpack 'patch-path
19175 (lambda* (#:key inputs #:allow-other-keys)
19176 (substitute* "dialog.py"
19177 (("_path_to_executable\\(dialog\\)")
19178 (format #f "os.path.realpath(~s)"
19179 (search-input-file inputs "bin/dialog")))))))))
19180 (native-inputs (list python-setuptools))
19181 (inputs (list dialog))
19182 (home-page "https://pythondialog.sourceforge.net/")
19183 (synopsis "Python interface to the UNIX dialog utility")
19184 (description
19185 "A Python wrapper for the dialog utility. Its purpose is to provide an
19186easy to use, pythonic and comprehensive Python interface to dialog. This
19187allows one to make simple text-mode user interfaces on Unix-like systems")
19188 (license license:lgpl2.1)))
19189
19190(define-public python-pythondialog
19191 (deprecated-package "python-pythondialog" python-dialog))
19192
19193(define-public python-confection
19194 (package
19195 (name "python-confection")
19196 (version "0.1.5")
19197 (source (origin
19198 (method url-fetch)
19199 (uri (pypi-uri "confection" version))
19200 (sha256
19201 (base32
19202 "03hgb6601mx6iip4nr8i0is8x5vmh85z286j7j8lhkxxlqydswlf"))))
19203 (build-system pyproject-build-system)
19204 (propagated-inputs (list python-pydantic python-srsly))
19205 (native-inputs (list python-pytest python-setuptools python-wheel))
19206 (home-page "https://github.com/explosion/confection")
19207 (synopsis "Config system for Python")
19208 (description "Confection is a lightweight library that offers a
19209configuration system letting you conveniently describe arbitrary trees of
19210objects.")
19211 (license license:expat)))
19212
19213(define-public python-configobj
19214 (package
19215 (name "python-configobj")
19216 (version "5.0.9")
19217 (source
19218 (origin
19219 (method url-fetch)
19220 (uri (pypi-uri "configobj" version))
19221 (sha256
19222 (base32 "0j3872id3ngxkaapz9bv8as4lg4rfmch0dxqy767p81syaxq3j03"))))
19223 (build-system pyproject-build-system)
19224 (native-inputs
19225 (list python-pytest
19226 python-setuptools))
19227 (home-page "https://github.com/DiffSK/configobj")
19228 (synopsis "Config file reading, writing and validation")
19229 (description
19230 "ConfigObj is a simple but powerful config file reader and writer: an
19231 ini file round tripper. Its main feature is that it is very easy to use,
19232with a straightforward programmer’s interface and a simple syntax for config
19233files.")
19234 (license license:bsd-3)))
19235
19236(define-public python-omegaconf
19237 (let ((commit "117f7de07285e4d1324b9229eaf873de15279457")
19238 (revision "0"))
19239 (package
19240 (name "python-omegaconf")
19241 (version (git-version "2.3.0" revision commit))
19242 (source
19243 (origin
19244 (method git-fetch)
19245 (uri (git-reference
19246 (url "https://github.com/omry/omegaconf")
19247 (commit commit)))
19248 (file-name (git-file-name name version))
19249 (modules '((guix build utils)))
19250 (snippet
19251 #~(begin
19252 (delete-file-recursively "build_helpers/bin")
19253 (substitute* "build_helpers/build_helpers.py"
19254 (("java") "antlr4")
19255 (("\"-jar\",") "")
19256 (("str\\(build_dir / \"bin\" / \"antlr.*\"\\),") ""))))
19257 (sha256
19258 (base32 "0f922dar5dwyyfk1bwsbs9gws0vyj1w2h9n3148hcfa8c4hg2ysv"))))
19259 (build-system pyproject-build-system)
19260 (arguments
19261 (list
19262 #:test-flags
19263 ;; XXX: Those tests currently fail collection.
19264 #~(list "--ignore=tests/structured_conf/test_structured_config.py"
19265 "--ignore=tests/test_basic_ops_list.py"
19266 "--ignore=tests/test_merge.py"
19267 "--ignore=tests/test_select.py")
19268 #:phases
19269 #~(modify-phases %standard-phases
19270 (add-after 'unpack 'loosen-requirements
19271 (lambda _
19272 (substitute* "requirements/base.txt"
19273 (("antlr4-python3-runtime==.*")
19274 "antlr4-python3-runtime >=4.9\n"))
19275 ;; Ignore deprecation warnings.
19276 (substitute* "pyproject.toml"
19277 (("-Werror") "")))))))
19278 (native-inputs
19279 (list icedtea
19280 antlr4
19281 python-pytest
19282 python-pytest-mock
19283 python-setuptools
19284 python-wheel))
19285 (propagated-inputs
19286 (list java-antlr4-runtime-python
19287 python-pydevd
19288 python-pyyaml))
19289 (home-page "https://github.com/omry/omegaconf")
19290 (synopsis "Flexible configuration system")
19291 (description
19292 "OmegaConf is a hierarchical configuration system and supports merging
19293configurations from multiple sources. It provides a consistent API regardless
19294of how the configuration was created.")
19295 (license license:bsd-3))))
19296
19297(define-public python-configargparse
19298 (package
19299 (name "python-configargparse")
19300 (version "1.7")
19301 (source (origin
19302 (method url-fetch)
19303 (uri (pypi-uri "ConfigArgParse" version))
19304 (sha256
19305 (base32
19306 "1l866g1dcf2ljf8fl7ggpxk1rggry0lya4d5b264gradi1qp81p7"))))
19307 (build-system pyproject-build-system)
19308 (propagated-inputs
19309 (list python-pyyaml))
19310 (native-inputs
19311 (list python-mock python-pytest python-setuptools python-wheel))
19312 (synopsis "Replacement for argparse")
19313 (description "A drop-in replacement for argparse that allows options to also
19314be set via config files and/or environment variables.")
19315 (home-page "https://github.com/bw2/ConfigArgParse")
19316 (license license:expat)))
19317
19318(define-public python-connection-pool
19319 (package
19320 (name "python-connection-pool")
19321 (version "0.0.3")
19322 (source
19323 (origin
19324 (method git-fetch)
19325 (uri (git-reference
19326 (url "https://github.com/zhouyl/ConnectionPool")
19327 (commit version)))
19328 (file-name (git-file-name name version))
19329 (sha256
19330 (base32 "1c6676vga0p4xxa3f0jpbwgp3n69mxjisnfcwibd9x23iyxf3sr2"))))
19331 (build-system pyproject-build-system)
19332 (arguments (list #:tests? #f)) ; No tests.
19333 (native-inputs (list python-setuptools))
19334 (home-page "https://github.com/zhouyl/ConnectionPool")
19335 (synopsis "Thread-safe connection pool")
19336 (description
19337 "This package provides a library implementing a thread-safe connection
19338pool.")
19339 (license license:expat)))
19340
19341(define-public python-argparse-dataclass
19342 (package
19343 (name "python-argparse-dataclass")
19344 (version "2.0.0")
19345 (source
19346 (origin
19347 (method git-fetch) ;no tests in PyPI archive
19348 (uri (git-reference
19349 (url "https://github.com/mivade/argparse_dataclass")
19350 (commit version)))
19351 (file-name (git-file-name name version))
19352 (sha256
19353 (base32 "0fbxs2a4jk5bvy42jlnqw4l02zs1s6mmfn4sr8rknyc4ngl4y9q1"))))
19354 (build-system pyproject-build-system)
19355 (native-inputs (list python-pytest python-setuptools python-wheel))
19356 (home-page "https://github.com/mivade/argparse_dataclass")
19357 (synopsis "Declarative command-line interfaces using argparse and dataclasses")
19358 (description
19359 "This package provides declarative command-line interfaces using argparse
19360and dataclasses.")
19361 (license license:expat)))
19362
19363(define-public python-argparse-manpage
19364 (package
19365 (name "python-argparse-manpage")
19366 (version "4.7")
19367 (source
19368 (origin
19369 (method url-fetch)
19370 (uri (pypi-uri "argparse_manpage" version))
19371 (sha256
19372 (base32 "0clb20scp408gxac675v731vnj89pk9d5fb7pcy7bj1a45mvgshx"))))
19373 (build-system pyproject-build-system)
19374 (arguments
19375 (list
19376 #:test-flags
19377 ;; Tests require PIP.
19378 #~(list "--ignore=tests/test_examples.py")))
19379 (native-inputs
19380 (list python-pytest
19381 python-setuptools))
19382 (home-page "https://github.com/praiskup/argparse-manpage")
19383 (synopsis "Build manual page from Python's ArgumentParser object")
19384 (description
19385 "This package provides tools to build manual pages from Python's
19386@code{ArgumentParser} object.")
19387 (license license:asl2.0)))
19388
19389(define-public python-atomicwrites
19390 (package
19391 (name "python-atomicwrites")
19392 (version "1.4.0")
19393 (source
19394 (origin
19395 (method git-fetch)
19396 (uri (git-reference
19397 (url "https://github.com/untitaker/python-atomicwrites")
19398 (commit version)))
19399 (file-name (git-file-name name version))
19400 (sha256
19401 (base32 "1f21l5fyh8qmsacbsknwwgnd1b9x4i0aw0zpczr05wklkkbvd58y"))))
19402 (build-system pyproject-build-system)
19403 (native-inputs (list python-pytest python-setuptools))
19404 (synopsis "Atomic file writes in Python")
19405 (description
19406 "Library for atomic file writes using platform dependent tools
19407for atomic file system operations.")
19408 (home-page "https://github.com/untitaker/python-atomicwrites")
19409 (license license:expat)))
19410
19411(define-public python-qstylizer
19412 (package
19413 (name "python-qstylizer")
19414 (version "0.2.4")
19415 (source
19416 (origin
19417 (method git-fetch)
19418 (uri (git-reference
19419 (url "https://github.com/blambright/qstylizer")
19420 (commit version)))
19421 (file-name (git-file-name name version))
19422 (sha256
19423 (base32 "0413msw23kv87fgs14ajp9wb2qxkcw6ydvwjzabz7xcp8iif9kr2"))))
19424 (build-system pyproject-build-system)
19425 (arguments
19426 (list
19427 #:phases
19428 #~(modify-phases %standard-phases
19429 (add-before 'build 'set-pbr-version
19430 (lambda _
19431 (setenv "PBR_VERSION" "3.0.1"))))))
19432 (native-inputs
19433 (list python-pbr
19434 python-pytest
19435 python-pytest-mock
19436 python-setuptools
19437 python-wheel))
19438 (propagated-inputs
19439 (list python-inflection
19440 python-tinycss2))
19441 (home-page "https://github.com/blambright/qstylizer")
19442 (synopsis "Qt stylesheet generation utility for PyQt/PySide")
19443 (description "@code{qstylizer} is a Python package designed to help with
19444the construction of PyQt/PySide stylesheets.")
19445 (license license:expat)))
19446
19447(define-public python-click-threading
19448 (package
19449 (name "python-click-threading")
19450 (version "0.5.0")
19451 (source
19452 (origin
19453 (method git-fetch)
19454 (uri (git-reference
19455 (url "https://github.com/click-contrib/click-threading")
19456 (commit version)))
19457 (file-name (git-file-name name version))
19458 (sha256
19459 (base32 "185pzw12ap7wrjpyxhsyrkhh7i1l5qclaa3zlpn8qvm39fz0kjni"))))
19460 (build-system pyproject-build-system)
19461 (native-inputs (list python-pytest python-setuptools))
19462 (propagated-inputs (list python-click))
19463 (synopsis "Utilities for multithreading in Click")
19464 (description
19465 "This package provides utilities for multithreading in Click
19466applications.")
19467 (home-page "https://github.com/click-contrib/click-threading")
19468 (license license:expat)))
19469
19470(define-public python-click-log
19471 (package
19472 (name "python-click-log")
19473 (version "0.3.2")
19474 (source
19475 (origin
19476 (method git-fetch)
19477 (uri (git-reference
19478 (url "https://github.com/click-contrib/click-log")
19479 (commit version)))
19480 (file-name (git-file-name name version))
19481 (sha256
19482 (base32 "01zpjyqnyzrx6xi7cii2180bqdcg2a6b1sdbjijri8jv755r7ray"))))
19483 (build-system pyproject-build-system)
19484 (native-inputs (list python-pytest python-setuptools))
19485 (propagated-inputs (list python-click))
19486 (synopsis "Logging for click applications")
19487 (description
19488 "This package provides a Python library for logging Click applications.")
19489 (home-page "https://github.com/click-contrib/click-log")
19490 (license license:expat)))
19491
19492(define-public python-click-default-group
19493 (package
19494 (name "python-click-default-group")
19495 (version "1.2.4")
19496 (source
19497 (origin
19498 (method git-fetch) ; no tests in PyPI release
19499 (uri (git-reference
19500 (url "https://github.com/click-contrib/click-default-group")
19501 (commit (string-append "v" version))))
19502 (file-name (git-file-name name version))
19503 (sha256
19504 (base32 "06h12qwg0lhvxlgfm9768afibwp8j6r3r440v630a30bv0nkhngm"))))
19505 (build-system pyproject-build-system)
19506 (propagated-inputs
19507 (list python-click))
19508 (native-inputs
19509 (list python-flit-core python-pytest))
19510 (synopsis "Extends click.Group")
19511 (description "This package extends click.Group to invoke a command without
19512explicit subcommand name.")
19513 (home-page "https://github.com/click-contrib/click-default-group")
19514 (license license:bsd-3)))
19515
19516(define-public python-apipkg
19517 (package
19518 (name "python-apipkg")
19519 (version "3.0.2")
19520 (source
19521 (origin
19522 (method url-fetch)
19523 (uri (pypi-uri "apipkg" version))
19524 (sha256
19525 (base32 "03ay7j57mfh4sa8vh9qwid1ggwdc0lasyw3ycsmgv5r6z2j63an7"))))
19526 (build-system pyproject-build-system)
19527 (arguments (list #:tests? #f)) ;no tests in PyPI archvie
19528 (native-inputs
19529 (list python-hatch-vcs
19530 python-hatchling))
19531 (home-page "https://github.com/pytest-dev/apipkg")
19532 (synopsis "Namespace control and lazy-import mechanism")
19533 (description "With apipkg you can control the exported namespace of a Python
19534package and greatly reduce the number of imports for your users. It is a small
19535pure Python module that works on virtually all Python versions.")
19536 (license license:expat)))
19537
19538(define-public python-essentials
19539 (package
19540 (name "python-essentials")
19541 (version "1.1.8")
19542 (source
19543 (origin
19544 (method git-fetch)
19545 (uri (git-reference
19546 (url "https://github.com/Neoteroi/essentials")
19547 (commit (string-append "v" version))))
19548 (file-name (git-file-name name version))
19549 (sha256
19550 (base32 "1k8ybgxh0xvwxjc22pkmyvdhm0jgmj77rlg656r81iiibc0l7zj8"))))
19551 (build-system pyproject-build-system)
19552 (native-inputs
19553 (list python-hatchling
19554 python-pydantic
19555 python-pytest-asyncio))
19556 (home-page "https://github.com/Neoteroi/essentials/wiki")
19557 (synopsis
19558 "Utility functions, exceptions, and classes for Python applications")
19559 (description
19560 "Essentials is a collection of functions, exceptions, and classes for Python
19561applications. Examples of utilities are exceptions for common scenarios,
19562friendly JSON encoder, decorators for retries and logging.")
19563 (license license:expat)))
19564
19565(define-public python-execnet
19566 (package
19567 (name "python-execnet")
19568 (version "2.1.1")
19569 (source (origin
19570 (method git-fetch)
19571 (uri (git-reference
19572 (url "https://github.com/pytest-dev/execnet")
19573 (commit (string-append "v" version))))
19574 (file-name (git-file-name name version))
19575 (sha256
19576 (base32
19577 "0xlfd0h9sjl0jpc2fc689a497chwbagali7qr364k75hdyax3jfq"))))
19578 (build-system pyproject-build-system)
19579 (arguments
19580 (list
19581 ;; ;; This test hasn't been updated for the latest Pytest yet:
19582 ;; #:test-flags #~(list "--ignore" "testing/test_rsync.py")
19583 #:phases
19584 #~(modify-phases %standard-phases
19585 (add-after 'unpack 'adjust-for-pytest-7.2+
19586 (lambda _
19587 ;; This test fails with an error because @py.test has been
19588 ;; deprecated for @pytest in recent Pytest.
19589 (substitute* "testing/test_rsync.py"
19590 (("@py.test")
19591 "@pytest"))))
19592 (add-before 'build 'pretend-version
19593 ;; The version string is usually derived via setuptools-scm, but
19594 ;; without the git metadata available this fails.
19595 (lambda _
19596 ;; hatch-vcs uses setuptools under the hood.
19597 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION"
19598 ;; Massage the version string to a PEP-0440 compatible
19599 ;; one.
19600 #$(car (string-split version #\-)))))
19601 (add-before 'check 'prepare-for-tests
19602 (lambda _
19603 ;; Unset PYTHONDONTWRITEBYTECODE to match the
19604 ;; expectations of a test in
19605 ;; 'testing/test_gateway.py'.
19606 (unsetenv "PYTHONDONTWRITEBYTECODE"))))))
19607 (native-inputs
19608 (list python-hatchling
19609 python-hatch-vcs
19610 python-pytest-bootstrap))
19611 (synopsis "Rapid multi-Python deployment")
19612 (description "Execnet provides a share-nothing model with
19613channel-send/receive communication for distributing execution across many
19614Python interpreters across version, platform and network barriers. It has a
19615minimal and fast API targeting the following uses:
19616@enumerate
19617@item distribute tasks to (many) local or remote CPUs
19618@item write and deploy hybrid multi-process applications
19619@item write scripts to administer multiple environments
19620@end enumerate")
19621 (home-page "https://codespeak.net/execnet/")
19622 (license license:expat)))
19623
19624(define-public python-icalendar
19625 (package
19626 (name "python-icalendar")
19627 (version "5.0.13")
19628 (source (origin
19629 (method url-fetch)
19630 (uri (pypi-uri "icalendar" version))
19631 (sha256
19632 (base32
19633 "01lp0advx60z8wgng8aga1p1668ydn1r6d9qm3d622yfikg9yycj"))))
19634 (build-system pyproject-build-system)
19635 (arguments
19636 (list
19637 #:phases
19638 #~(modify-phases %standard-phases
19639 (replace 'check
19640 (lambda* (#:key tests? #:allow-other-keys)
19641 (when tests?
19642 (invoke "pytest" "-vv" "src/icalendar/tests")))))))
19643 (propagated-inputs
19644 (list python-dateutil python-pytz python-tzdata))
19645 (native-inputs
19646 (list python-pytest python-pytz python-setuptools python-wheel))
19647 (synopsis "Python library for parsing and generating iCalendar files")
19648 (description
19649 "@code{icalendar} is a Python library for parsing and generating iCalendar files.")
19650 (home-page "https://github.com/collective/icalendar")
19651 (license license:bsd-2)))
19652
19653(define-public python-args
19654 (let ((commit "9460f1a35eb3055e9e4de1f0a6932e0883c72d65")
19655 (revision "0"))
19656 (package
19657 (name "python-args")
19658 (version (git-version "0.1.0" revision commit))
19659 (source
19660 (origin
19661 (method git-fetch)
19662 (uri (git-reference
19663 (url "https://github.com/kennethreitz-archive/args")
19664 (commit commit)))
19665 (file-name (git-file-name name version))
19666 (sha256
19667 (base32 "1zfxpbp9vldqdrjmd0c6y3wisl35mx5v8zlyp3nhwpy1730wrc9j"))))
19668 (build-system pyproject-build-system)
19669 (arguments
19670 (list
19671 #:tests? #f ; XXX: python-nose is deprecated.
19672 #:phases
19673 #~(modify-phases %standard-phases
19674 (add-after 'unpack 'patch-args.py
19675 (lambda _
19676 (substitute* "args.py"
19677 (("basestring")
19678 "str")))))))
19679 (native-inputs (list python-setuptools python-wheel))
19680 (home-page "https://github.com/kennethreitz-archive/args")
19681 (synopsis "Command-line argument parser")
19682 (description
19683 "This library provides a Python module to parse command-line arguments.")
19684 (license license:bsd-3))))
19685
19686(define-public python-clint
19687 (package
19688 (name "python-clint")
19689 (version "0.5.1")
19690 (source (origin
19691 (method url-fetch)
19692 (uri (pypi-uri "clint" version))
19693 (sha256
19694 (base32
19695 "1an5lkkqk1zha47198p42ji3m94xmzx1a03dn7866m87n4r4q8h5"))))
19696 (build-system pyproject-build-system)
19697 (native-inputs
19698 (list python-pytest python-setuptools python-wheel))
19699 (propagated-inputs
19700 (list python-args))
19701 (home-page "https://github.com/kennethreitz/clint")
19702 (synopsis "Command-line interface tools")
19703 (description
19704 "Clint is a Python module filled with a set of tools for developing
19705command-line applications, including tools for colored and indented
19706output, progress bar display, and pipes.")
19707 (license license:isc)))
19708
19709(define-public python-rply
19710 (package
19711 (name "python-rply")
19712 (version "0.7.8")
19713 (source
19714 (origin
19715 (method git-fetch)
19716 (uri (git-reference
19717 (url "https://github.com/alex/rply")
19718 (commit (string-append "v" version))))
19719 (file-name (git-file-name name version))
19720 (sha256
19721 (base32 "0kn8vikyf95mr8l9g3324b7gk4cgxlvvy1abqpl1h803idqg1vwq"))))
19722 (build-system pyproject-build-system)
19723 (arguments
19724 (list
19725 #:test-flags #~(list "--ignore=tests/test_ztranslation.py")
19726 #:phases
19727 #~(modify-phases %standard-phases
19728 (add-before 'check 'fix-pytest-use
19729 (lambda _
19730 (substitute* (find-files "tests" "\\.py$")
19731 (("import py")
19732 "import pytest")
19733 (("py\\.test")
19734 "pytest"))
19735 (setenv "HOME" (getcwd)))))))
19736 (native-inputs (list python-pytest python-setuptools))
19737 (propagated-inputs (list python-appdirs))
19738 (home-page "https://github.com/alex/rply")
19739 (synopsis "Parser generator for Python")
19740 (description
19741 "This package provides a pure Python based parser generator, that also
19742works with RPython. It is a more-or-less direct port of David Bazzley's PLY,
19743with a new public API, and RPython support.")
19744 (license license:bsd-3)))
19745
19746(define-public python-hy
19747 (package
19748 (name "python-hy")
19749 (version "1.1.0")
19750 (source
19751 (origin
19752 (method git-fetch) ;no tests in PyPI release
19753 (uri (git-reference
19754 (url "https://github.com/hylang/hy")
19755 (commit version)))
19756 (file-name (git-file-name name version))
19757 (sha256
19758 (base32 "1g7h7c9zwbcvsi1l3mydhv27bjkiz5wawmdklmryjnv6qkvdx96d"))))
19759 (build-system pyproject-build-system)
19760 (arguments
19761 (list
19762 ;; This test expects the hy executable to be called 'hy', but in Guix
19763 ;; it's .hy-real.
19764 #:test-flags #~(list "-k" "not test_sys_executable")))
19765 (native-inputs (list python-pytest python-setuptools python-wheel))
19766 (propagated-inputs (list python-funcparserlib))
19767 (home-page "https://docs.hylang.org/en/stable/")
19768 (synopsis "Lisp frontend to Python")
19769 (description
19770 "Hy is a dialect of Lisp that's embedded in Python. Since Hy transforms
19771its Lisp code into the Python Abstract Syntax Tree, you have the whole world of
19772Python at your fingertips, in Lisp form.")
19773 (license license:expat)))
19774
19775(define-public python-hissp
19776 (package
19777 (name "python-hissp")
19778 (version "0.5.0")
19779 (source
19780 (origin
19781 (method git-fetch)
19782 (uri (git-reference
19783 (url "https://github.com/gilch/hissp")
19784 (commit (string-append "v" version))))
19785 (file-name (git-file-name name version))
19786 (sha256
19787 (base32 "03lxna935c0qs3lppb2xrvvgh0dkwz8lh5pmgqrmpddin1kxyjri"))))
19788 (build-system pyproject-build-system)
19789 (arguments (list #:test-backend #~'unittest))
19790 (native-inputs (list python-hypothesis python-setuptools))
19791 (home-page "https://github.com/gilch/hissp")
19792 (synopsis "It's Python with a Lissp")
19793 (description
19794 "Hissp is a modular Lisp implementation that compiles to a functional
19795subset of Python—Syntactic macro metaprogramming with full access to the
19796Python ecosystem.")
19797 (license license:asl2.0)))
19798
19799(define-public python-promise
19800 (package
19801 (name "python-promise")
19802 (version "2.3.0")
19803 (source
19804 (origin
19805 (method git-fetch)
19806 (uri (git-reference
19807 (url "https://github.com/syrusakbary/promise")
19808 (commit (string-append "v" version))))
19809 (file-name (git-file-name name version))
19810 (sha256
19811 (base32 "17mq1bm78xfl0x1g50ng502m5ldq6421rzz35hlqafsj0cq8dkp6"))))
19812 (build-system pyproject-build-system)
19813 (arguments
19814 (list
19815 #:test-flags
19816 #~(list "--ignore=tests/test_benchmark.py"
19817 ;; Issues with pytest-asyncio
19818 "--ignore=tests/test_awaitable.py"
19819 "-k" (string-join
19820 (list "not test_issue_9_safe"
19821 ;; Stacktrace issues.
19822 "test_thrown_exceptions_have_stacktrace"
19823 "test_thrown_exceptions_preserve_stacktrace")
19824 " and not "))))
19825 (native-inputs
19826 (list python-mock
19827 python-pytest
19828 python-pytest-asyncio
19829 python-setuptools))
19830 (propagated-inputs (list python-six))
19831 (home-page "https://github.com/syrusakbary/promise")
19832 (synopsis "Promises/A+ implementation for Python")
19833 (description
19834 "This package provides an implementation of Promises in Python. It is a
19835super set of Promises/A+ designed to have readable, performant code and to
19836provide just the extensions that are absolutely necessary for using promises
19837in Python.")
19838 (license license:expat)))
19839
19840(define-public python-progress
19841 (package
19842 (name "python-progress")
19843 (version "1.6")
19844 (source
19845 (origin
19846 (method git-fetch)
19847 (uri (git-reference
19848 (url "https://github.com/verigak/progress/")
19849 (commit version)))
19850 (file-name (git-file-name name version))
19851 (sha256
19852 (base32 "0qz5b9d3cvfdy2f1gb4r20f1qgcsihhmbc2bm2jgbvryxylp0f5k"))
19853 (snippet #~(delete-file "demo.gif"))))
19854 (build-system pyproject-build-system)
19855 (arguments
19856 (list
19857 #:test-backend #~'custom
19858 #:test-flags #~(list "test_progress.py")))
19859 (native-inputs (list python-setuptools))
19860 (home-page "https://github.com/verigak/progress/")
19861 (synopsis "Progress reporting bars for Python")
19862 (description
19863 "This Python package provides progress reporting for visual of progress
19864of long running operations. There are multiple choices of progress bars and
19865spinners, with customizable options, such as width, fill character, and
19866suffix.")
19867 (license license:isc)))
19868
19869(define-public python-progressbar2
19870 (package
19871 (name "python-progressbar2")
19872 (version "4.5.0")
19873 (source
19874 (origin
19875 (method url-fetch)
19876 (uri (pypi-uri "progressbar2" version))
19877 (sha256
19878 (base32 "1yw8j3sz9y3nw2x1ffiqqzml8l9vb0kixxnsjkmk3vc691icnqk6"))))
19879 (build-system pyproject-build-system)
19880 (arguments
19881 (list
19882 #:test-flags #~(list "--pyargs" "progressbar" "tests")
19883 #:phases
19884 #~(modify-phases %standard-phases
19885 (add-after 'unpack 'fix-pytest-config
19886 (lambda _
19887 ;; Drop test coverage requirements.
19888 (substitute* "pytest.ini"
19889 ((".*-cov.*") "")))))))
19890 (native-inputs
19891 (list python-dill
19892 python-pytest
19893 python-freezegun
19894 python-setuptools
19895 python-setuptools-scm
19896 python-wheel))
19897 (propagated-inputs
19898 (list python-utils))
19899 (home-page "https://github.com/WoLpH/python-progressbar")
19900 (synopsis "Text progress bar library for Python")
19901 (description
19902 "This package provides a Python progressbar library to provide
19903visual (yet text based) progress to long running operations.")
19904 (license license:bsd-3)))
19905
19906(define-public python-progressbar33
19907 (package
19908 (name "python-progressbar33")
19909 (version "2.4")
19910 (source
19911 (origin
19912 (method git-fetch)
19913 (uri (git-reference
19914 (url "https://github.com/germangh/python-progressbar")
19915 (commit (string-append "v" version))))
19916 (file-name (git-file-name name version))
19917 (sha256
19918 (base32 "0vyn2l6i7fgqskqfx3nfs1dibc5v1cxydg3v3422xf41pkba282c"))))
19919 (build-system pyproject-build-system)
19920 (arguments
19921 (list
19922 #:test-backend #~'custom
19923 #:test-flags #~(list "examples.py")))
19924 (native-inputs (list python-setuptools))
19925 (home-page "https://github.com/germangh/python-progressbar")
19926 (synopsis "Text progress bar library for Python")
19927 (description
19928 "This package provides a text progress bar library for Python. This
19929version only differs from the original @code{progressbar} package in that it
19930uses relative package imports instead of absolute imports, which is necessary
19931for the module to work under Python 3.3.")
19932 ;; Either or both of these licenses may be selected.
19933 (license (list license:lgpl2.1+ license:bsd-3))))
19934
19935(define-public python-colorama
19936 (package
19937 (name "python-colorama")
19938 (version "0.4.6")
19939 (source
19940 (origin
19941 (method url-fetch)
19942 (uri (pypi-uri "colorama" version))
19943 (sha256
19944 (base32 "0i3fpq0w5mbfdpy3z9p5raw4fg17jxr6jwh5l8qhavpdnxf5ys88"))))
19945 (build-system pyproject-build-system)
19946 (native-inputs (list python-hatchling python-pytest))
19947 (home-page "https://pypi.org/project/colorama/")
19948 (synopsis "Colored terminal text rendering for Python")
19949 (description "Colorama is a Python library for rendering colored terminal
19950text.")
19951 (license license:bsd-3)))
19952
19953;; XXX: Not maintained since 2012.
19954(define-public python-monthdelta
19955 (package
19956 (name "python-monthdelta")
19957 (version "0.9.1")
19958 (source
19959 (origin
19960 (method url-fetch)
19961 (uri (pypi-uri "MonthDelta" version))
19962 (sha256
19963 (base32 "0iwcsk7ryjw5h1wp10ykwd01f3am8gdlga6461q1v1njsk0rxh41"))))
19964 (build-system pyproject-build-system)
19965 (arguments
19966 (list #:test-backend #~'unittest))
19967 (native-inputs (list python-setuptools))
19968 (home-page "http://packages.python.org/MonthDelta")
19969 (synopsis "Date computations with months")
19970 (description
19971 "MonthDelta provides functionality to do date computations with months.")
19972 (license license:expat)))
19973
19974(define-public python-moto
19975 (package
19976 (name "python-moto")
19977 (version "5.1.5")
19978 (source (origin
19979 (method url-fetch)
19980 (uri (pypi-uri "moto" version))
19981 (sha256
19982 (base32 "0kpqdn96gw9h2bq05bp943q85f4lq89c4nk1gf71w60nkbm65cs2"))))
19983 (build-system pyproject-build-system)
19984 (arguments
19985 (list
19986 ;; tests: 10158 passed, 41 skipped, 143 deselected, 2 xfailed, 4 warnings
19987 #:test-flags
19988 #~(list "-m" "not network and not requires_docker"
19989 ;; Not all of the tests are thread save, see:
19990 ;; <https://github.com/getmoto/moto/issues/7786>.
19991 ;; "--numprocesses" (number->string (min 8 (parallel-job-count)))
19992 "-k" (string-join
19993 ;; Outbound access to AWS servcies is required to reach
19994 ;; endpoint URLs:
19995 ;; "https://s3.amazonaws.com/"
19996 ;; "https://realbucket.s3.amazonaws.com/"
19997 ;; "https://s3.amazonaws.com/companyname_prod"
19998 (list "not test_passthrough_calls_for_entire_service"
19999 "test_passthrough_calls_for_specific_url"
20000 "test_passthrough_calls_for_wildcard_urls"
20001 ;; TypeError: Got unexpected keyword argument
20002 ;; 'account_id_endpoint_mode'
20003 "test_dynamodb_with_account_id_routing[disabled]"
20004 "test_dynamodb_with_account_id_routing[preferred]"
20005 "test_dynamodb_with_account_id_routing[required]"
20006 ;; botocore.exceptions.ParamValidationError:
20007 ;; Parameter validation failed: Missing required
20008 ;; parameter in input: "VpcId"; Missing required
20009 ;; parameter in input: "SubnetMappings"
20010 "test_create_firewall"
20011 "test_describe_logging_configuration"
20012 "test_list_firewalls"
20013 "test_update_logging_configuration"
20014 ;; RuntimeError: Firehose PutRecord(Batch) to HTTP
20015 ;; destination failed
20016 "test_put_record_http_destination"
20017 "test_put_record_batch_http_destination"
20018 ;; Timed out to connect to foo.localhost:5001
20019 "test_with_custom_request_header"
20020 ;; Timed out to connect to testcors.localhost:6789
20021 "test_s3_server_post_cors_multiple_origins"
20022 ;; AttributeError: 'TimestreamInfluxDB' object has
20023 ;; no attribute 'list_db_clusters'
20024 "test_list_db_clusters"
20025 "test_get_db_cluster"
20026 "test_create_db_cluster"
20027 ;; Checksum error
20028 "test_upload_file_with_checksum_algorithm"
20029 "test_list_objects_v2_checksum_algo"
20030 ;; Assertion is not equal
20031 "test_create_describe_update_and_delete_ledger"
20032 "test_s3tables_get_table"
20033 "test_tag_resource_and_list_tags_for_resource"
20034
20035 ;; XXX: Probably will be resolved in the next
20036 ;; release, as botocore's refresh pace is fast.
20037 ;;
20038 ;; botocore.exceptions.UnknownServiceError: Unknown
20039 ;; service: <...>
20040 "test_create_app_response"
20041 "test_describe_apps"
20042 "test_create_instance"
20043 "test_describe_instances"
20044 "test_ec2_integration"
20045 "test_create_layer_response"
20046 "test_describe_layers"
20047 "test_create_stack_response"
20048 "test_describe_stacks"
20049 "test_robot_application"
20050 "test_create_describe_update_and_delete_ledger"
20051 "test_tag_resource_and_list_tags_for_resource"
20052 ;; botocore.exceptions.ClientError: An error
20053 ;; occurred (404) when calling <...>
20054 "test_create_event_source_mapping"
20055 "test_delete_event_source_mapping"
20056 "test_delete_table_deletes_underlying_table_storage"
20057 "test_event_source_mapping_create_from_cloudformation_json"
20058 "test_event_source_mapping_delete_from_cloudformation_json"
20059 "test_event_source_mapping_delete_stack"
20060 "test_event_source_mapping_update_from_cloudformation_json"
20061 "test_get_event_source_mapping"
20062 "test_get_table"
20063 "test_invoke_fake_function_from_sqs_queue"
20064 "test_list_event_source_mappings"
20065 "test_rename_table"
20066 "test_underlying_table_storage_does_not_support_delete_object"
20067 "test_underlying_table_storage_does_not_support_list_objects"
20068 "test_update_event_source_mapping"
20069 "test_update_table_metadata_location"
20070 "test_write_metadata_to_table"
20071 ;; botocore.exceptions.ParamValidationError:
20072 ;; Parameter validation failed <...>
20073 "test_create_db_proxy"
20074 "test_create_db_proxy_duplicate_name"
20075 "test_create_db_proxy_invalid_subnet"
20076 "test_describe_db_proxies"
20077 "test_list_tags_db_proxy")
20078 " and not ")
20079 "tests")
20080 #:phases
20081 #~(modify-phases %standard-phases
20082 (add-after 'unpack 'patch-hardcoded-executable-names
20083 (lambda* (#:key inputs #:allow-other-keys)
20084 (let ((bash-exec (search-input-file inputs "/bin/sh")))
20085 (substitute* "moto/batch/models.py"
20086 (("/bin/sh") bash-exec))
20087 (substitute* (find-files "tests" "\\.py$")
20088 (("#!/bin/bash") (string-append "#!" bash-exec))))))
20089 (add-before 'check 'pre-check
20090 (lambda _
20091 (setenv "AWS_ACCESS_KEY_ID" "guix-access-key-id")
20092 (setenv "AWS_SECRET_ACCESS_KEY" "guix-secret-access-key")
20093 (setenv "TESTS_SKIP_REQUIRES_DOCKER" "true"))))))
20094 (native-inputs
20095 (list python-flask
20096 python-flask-cors
20097 python-freezegun
20098 python-pycognito
20099 python-pyotp
20100 python-pytest
20101 python-setuptools))
20102 (inputs
20103 (list bash-minimal))
20104 (propagated-inputs
20105 (list java-antlr4-runtime-python
20106 python-aws-xray-sdk
20107 python-boto3
20108 python-botocore
20109 python-cfn-lint
20110 python-cryptography
20111 python-dateutil
20112 python-graphql-core
20113 python-jinja2
20114 python-joserfc
20115 python-jsonpath-ng
20116 python-multipart
20117 python-openapi-spec-validator
20118 python-py-partiql-parser
20119 python-pyparsing
20120 python-requests
20121 python-responses
20122 python-werkzeug
20123 python-xmltodict))
20124 (home-page "https://github.com/spulec/moto")
20125 (synopsis "Mock out the boto library")
20126 (description
20127 "@code{moto} is a library designed to easily mock out the
20128@code{boto} library.")
20129 (license license:asl2.0)))
20130
20131(define-public python-plumbum
20132 (package
20133 (name "python-plumbum")
20134 (version "1.7.0")
20135 (source
20136 (origin
20137 (method git-fetch)
20138 (uri (git-reference
20139 (url "https://github.com/tomerfiliba/plumbum")
20140 (commit (string-append "v" version))))
20141 (file-name (git-file-name name version))
20142 (sha256
20143 (base32 "1vlaiz4bwgrcay51knj6a20lh3lwihjqxhxhdk6nqkn9ijg0hc81"))))
20144 (build-system pyproject-build-system)
20145 (arguments
20146 (list
20147 #:test-flags
20148 #~(list "--ignore=tests/test_remote.py"
20149 "--ignore=tests/test_putty.py"
20150 "--ignore=tests/test_sudo.py"
20151 "-k"
20152 (string-join (list "not test_home"
20153 "test_iter_lines_error"
20154 "test_quoting"
20155 "test_copy_move_delete")
20156 " and not "))
20157 #:phases
20158 #~(modify-phases %standard-phases
20159 (add-before 'build 'set-version
20160 (lambda _
20161 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
20162 (native-inputs
20163 (list procps
20164 python-psutil
20165 python-pytest
20166 python-pytest-cov
20167 python-setuptools
20168 python-setuptools-scm
20169 python-wheel))
20170 (home-page "https://plumbum.readthedocs.io")
20171 (synopsis "Python shell combinators library")
20172 (description
20173 "Plumbum is a library of tools for replacing shell scripts with Python
20174code.")
20175 (license license:expat)))
20176
20177(define-public python-deprecation
20178 (package
20179 (name "python-deprecation")
20180 (version "2.1.0")
20181 (source
20182 (origin
20183 (method url-fetch)
20184 (uri (pypi-uri "deprecation" version))
20185 (sha256
20186 (base32
20187 "1zqqjlgmhgkpzg9ss5ki8wamxl83xn51fs6gn2a8cxsx9vkbvcvj"))))
20188 (build-system pyproject-build-system)
20189 (arguments
20190 (list
20191 #:test-backend #~'unittest
20192 #:phases
20193 #~(modify-phases %standard-phases
20194 (add-after 'unpack 'drop-unittest2
20195 ;; See: <https://github.com/briancurtin/deprecation/issues/54>.
20196 (lambda _
20197 (substitute* "tests/test_deprecation.py"
20198 (("import unittest2")
20199 "import unittest as unittest2")))))))
20200 (native-inputs
20201 (list python-setuptools))
20202 (propagated-inputs
20203 (list python-packaging))
20204 (home-page "https://deprecation.readthedocs.io/")
20205 (synopsis "Python library to handle automated deprecations")
20206 (description
20207 "This is a library that enables automated deprecations. It offers the
20208@code{deprecated()} decorator to wrap functions, providing proper warnings
20209both in documentation and via Python’s warnings system, as well as the
20210@code{deprecation.fail_if_not_removed()} decorator for test methods to ensure
20211that deprecated code is eventually removed.")
20212 (license license:asl2.0)))
20213
20214(define-public python-jmespath
20215 (package
20216 (name "python-jmespath")
20217 (version "1.0.1")
20218 (source
20219 (origin
20220 (method url-fetch)
20221 (uri (pypi-uri "jmespath" version))
20222 (sha256
20223 (base32 "1gpdc1f0q5c9scmbw1l9g40jjfk3pxwg91ayvn7xbvvddlh1n9lh"))))
20224 (build-system pyproject-build-system)
20225 (native-inputs
20226 (list python-pytest
20227 python-setuptools))
20228 (home-page "https://github.com/jmespath/jmespath.py")
20229 (synopsis "JSON Matching Expressions")
20230 (description
20231 "JMESPath (pronounced “james path”) is a Python library that allows one
20232to declaratively specify how to extract elements from a JSON document.")
20233 (license license:expat)))
20234
20235(define-public python-asteval
20236 (package
20237 (name "python-asteval")
20238 (version "1.0.6")
20239 (source
20240 (origin
20241 (method url-fetch)
20242 (uri (pypi-uri "asteval" version))
20243 (sha256
20244 (base32 "17x1qk07cixj1nn59pp5dzjc9jna92v6kljdss81l5rf9cqfga0s"))))
20245 (build-system pyproject-build-system)
20246 (native-inputs
20247 (list python-pytest
20248 python-pytest-cov
20249 python-setuptools
20250 python-setuptools-scm))
20251 (home-page "https://github.com/newville/asteval")
20252 (synopsis "Minimalistic evaluator of Python expressions")
20253 (description
20254 "This package provides a minimalistic evaluator of Python expression
20255using the @code{ast} module.")
20256 (license license:expat)))
20257
20258(define-public python-lmfit
20259 (package
20260 (name "python-lmfit")
20261 (version "1.3.4")
20262 (source
20263 (origin
20264 (method url-fetch)
20265 (uri (pypi-uri "lmfit" version))
20266 (sha256
20267 (base32
20268 "15z4zcyc4crfdw22qnbaq8wrf552jgl83gd3nk2zc5zp8f6c48iw"))))
20269 (build-system pyproject-build-system)
20270 (arguments
20271 (list
20272 #:test-flags
20273 ;; Costly tests that may fail with multiprocessing.context.TimeoutError.
20274 #~(list "--ignore=tests/test_jacobian_pickling.py")
20275 #:phases
20276 #~(modify-phases %standard-phases
20277 ;; XXX: Unclear why, but the phase seems broken.
20278 ;; asteval>=1.0 is not understood correctly.
20279 (delete 'sanity-check))))
20280 (propagated-inputs
20281 (list python-asteval python-dill python-numpy python-scipy
20282 python-uncertainties))
20283 (native-inputs
20284 (list python-pytest python-pytest-cov python-setuptools))
20285 (home-page "https://lmfit.github.io/lmfit-py/")
20286 (synopsis "Least-Squares minimization with bounds and constraints")
20287 (description
20288 "Lmfit provides a high-level interface to non-linear optimization and
20289curve fitting problems for Python. It builds on and extends many of the
20290optimization methods of @code{scipy.optimize}. Initially inspired by (and
20291named for) extending the Levenberg-Marquardt method from
20292@code{scipy.optimize.leastsq}, lmfit now provides a number of useful
20293enhancements to optimization and data fitting problems.")
20294 (license license:bsd-3)))
20295
20296(define-public python-bokeh
20297 (package
20298 (name "python-bokeh")
20299 (version "3.7.3")
20300 (source (origin
20301 (method url-fetch)
20302 (uri (pypi-uri "bokeh" version))
20303 (sha256
20304 (base32
20305 "0argn4fadyswnz86x6fsy1f13nmd8iwzn5ddwrg3s43vg6grma3h"))))
20306 (build-system pyproject-build-system)
20307 (arguments
20308 (list
20309 ;; FIXME: Most of the tests do not work, figure out how to enable some
20310 ;; portion.
20311 #:tests? #f
20312 #:test-flags
20313 '(list
20314 ;; These require selenium.
20315 "--ignore=tests/unit/bokeh/io/test_export.py"
20316 "--ignore=tests/unit/bokeh/io/test_webdriver.py"
20317 "--ignore=tests/unit/bokeh/embed/test_standalone.py"
20318
20319 ;; Doesn't find ManagedServerLoop fixture
20320 "--ignore=tests/unit/bokeh/test_client_server.py"
20321
20322 ;; This fails because of the Guix wrapper around pytest
20323 "--ignore=tests/unit/bokeh/io/test_util__io.py"
20324
20325 ;; Fixture ipython not found.
20326 "--ignore=tests/unit/bokeh/application/handlers/test_notebook__handlers.py"
20327 "--ignore=tests/unit/bokeh/command/subcommands/test_info.py"
20328
20329 ;; pd fixture not found.
20330 "--ignore=tests/unit/bokeh/models/test_mappers.py"
20331 "--ignore=tests/unit/bokeh/models/util/test_structure.py"
20332 "--ignore=tests/unit/bokeh/plotting/test__plot.py"
20333 "--ignore=tests/unit/bokeh/plotting/test__graph.py"
20334 "--ignore=tests/unit/bokeh/plotting/test_figure.py"
20335 "--ignore=tests/unit/bokeh/core/test_json_encoder.py"
20336 "--ignore=tests/unit/bokeh/core/property/test_bases.py"
20337 "--ignore=tests/unit/bokeh/core/property/test_container.py"
20338 "--ignore=tests/unit/bokeh/core/property/test_dataspec.py"
20339 "--ignore=tests/unit/bokeh/core/property/test_datetime.py"
20340 "--ignore=tests/unit/bokeh/core/property/test_pandas.py"
20341
20342 ;; nx fixture not found.
20343 "--ignore=tests/unit/bokeh/plotting/test_graph.py"
20344 "--ignore=tests/unit/bokeh/models/test_graphs.py"
20345 "--ignore=tests/unit/bokeh/io/test_showing.py"
20346 "--ignore=tests/unit/bokeh/document/test_events__document.py"
20347
20348 ;; These tests need external sample data
20349 "--ignore-glob=tests/unit/bokeh/sampledata/*"
20350
20351 ;; Attempts to install something via npm.
20352 "--ignore=tests/unit/bokeh/test_ext.py"
20353
20354 ;; More failures due to set up problems.
20355 "--ignore=tests/unit/bokeh/server/test_server__server.py"
20356 "--ignore=tests/unit/bokeh/server/test_tornado__server.py"
20357 "--ignore=tests/unit/bokeh/util/test_serialization.py"
20358 "--ignore=tests/unit/bokeh/util/test_hex.py"
20359 "--ignore=tests/unit/bokeh/models/test_sources.py"
20360 "--ignore=tests/unit/bokeh/embed/test_bundle.py"
20361
20362 "-k"
20363 (string-append
20364 ;; Fails with: 'called_once_with' is not a valid assertion. [...]
20365 ;; Did you mean: 'assert_called_once_with'?
20366 "not test_set_from_json"
20367
20368 ;; XXX: This one test transforms a gif of a red box. It transforms
20369 ;; it all right but the base64 doesn't look as expected, probably
20370 ;; because of a change in pillow.
20371 " and not test_transform_PIL"))
20372 #:phases
20373 #~(modify-phases %standard-phases
20374 (add-before 'build 'set-version
20375 (lambda _
20376 (substitute* "pyproject.toml"
20377 ((", \"setuptools-git-versioning\"") "")
20378 (("dynamic = \\[\"version\"\\]")
20379 (string-append "version = '" #$version "'"))))))))
20380 (propagated-inputs
20381 (list node-lts
20382 python-contourpy
20383 python-jinja2
20384 python-narwhals
20385 python-numpy
20386 python-packaging
20387 python-pandas
20388 python-pillow
20389 python-pyyaml
20390 python-tornado-6
20391 python-xyzservices))
20392 (native-inputs
20393 (list python-beautifulsoup4
20394 python-dateutil
20395 python-flaky
20396 python-mock
20397 python-nbconvert
20398 python-pandas
20399 python-pytest
20400 python-pytz
20401 python-requests
20402 python-setuptools
20403 python-wheel))
20404 (home-page "https://github.com/bokeh/bokeh")
20405 (synopsis "Interactive plots and applications in the browser from Python")
20406 (description
20407 "This package provides tools for interactive plots and applications in the
20408browser from Python.")
20409 (license license:bsd-3)))
20410
20411(define-public python-botocore
20412 ;; Note: When updating botocore, also make sure that boto3 and awscli
20413 ;; are compatible.
20414 (package
20415 (name "python-botocore")
20416 (version "1.40.61")
20417 (source
20418 (origin
20419 (method url-fetch)
20420 (uri (pypi-uri "botocore" version))
20421 (sha256
20422 (base32
20423 "1kajxzrh4nq4hx7rgbam0sffx06d45q7rw2csv69q3q9kgb7lj52"))))
20424 (build-system pyproject-build-system)
20425 (arguments
20426 (list
20427 ;; tests: 4491 passed, 72 skipped
20428 #:test-flags
20429 #~(list "--numprocesses" (number->string (min (parallel-job-count) 8))
20430 ;; The full test suite is huge, run some of it's portion.
20431 "--ignore=tests/integration"
20432 "--ignore=tests/functional")))
20433 (native-inputs
20434 (list python-jsonschema
20435 python-pytest
20436 python-pytest-xdist
20437 python-setuptools))
20438 (propagated-inputs
20439 (list python-dateutil
20440 python-jmespath
20441 python-urllib3))
20442 (home-page "https://github.com/boto/botocore")
20443 (synopsis "Low-level interface to AWS")
20444 (description
20445 "Botocore is a Python library that provides a low-level interface to the
20446Amazon Web Services (AWS) API.")
20447 (license license:asl2.0)))
20448
20449(define-public python-boto3
20450 (package
20451 (name "python-boto3")
20452 (version "1.40.61")
20453 (source
20454 (origin
20455 (method git-fetch)
20456 (uri (git-reference
20457 (url "https://github.com/boto/boto3")
20458 (commit version)))
20459 (file-name (git-file-name name version))
20460 (sha256
20461 (base32 "0rjcs9grnrcak6w4l5plqcbwvknmg1k3q0xzg11kpp0sfiszbdph"))))
20462 (build-system pyproject-build-system)
20463 (arguments
20464 (list
20465 ;; tests: 1415 passed, 17 skipped, 1 warning
20466 #:test-flags
20467 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
20468 ;; Integration tests are trying to connect to AWS.
20469 "--ignore=tests/integration")))
20470 (native-inputs
20471 (list python-mock
20472 python-pytest
20473 python-pytest-xdist
20474 python-setuptools))
20475 (propagated-inputs
20476 (list python-botocore
20477 python-jmespath
20478 python-s3transfer))
20479 (home-page "https://github.com/boto/boto3")
20480 (synopsis "AWS SDK for Python")
20481 (description
20482 "Boto3 is a Python library for writing programs that interact with
20483@acronym{AWS,Amazon Web Services}.")
20484 (license license:asl2.0)))
20485
20486(define-public python-pyfiglet
20487 (package
20488 (name "python-pyfiglet")
20489 (version "1.0.4")
20490 (source
20491 (origin
20492 (method git-fetch)
20493 (uri (git-reference
20494 (url "https://github.com/pwaller/pyfiglet")
20495 (commit (string-append "v" version))))
20496 (file-name (git-file-name name version))
20497 (sha256
20498 (base32 "1r1fyphz99jar2xfk761cl740zxk4b0gygajgjfx6i1kf0dxdv40"))))
20499 (build-system pyproject-build-system)
20500 (arguments
20501 (list
20502 #:phases
20503 #~(modify-phases %standard-phases
20504 (add-after 'unpack 'fallback-on-default-build
20505 (lambda _
20506 ;; This pyproject has little value and fails because of the
20507 ;; :__legacy__ suffix. Removing it to rely on defaults.
20508 (delete-file "pyproject.toml"))))))
20509 (native-inputs (list python-pytest python-setuptools))
20510 (home-page "https://github.com/pwaller/pyfiglet")
20511 (synopsis "Draw ASCII art big letters in Python")
20512 (description
20513 "This module lets you draw large letter from ordinary characters in pure
20514 Python.")
20515 (license license:expat)))
20516
20517(define-public python-mako
20518 (package
20519 (name "python-mako")
20520 (version "1.3.10")
20521 (source
20522 (origin
20523 (method url-fetch)
20524 (uri (pypi-uri "mako" version))
20525 (sha256
20526 (base32 "0a7ala6k7kn094k3g02b85xfkr20yk0w6a0acgjsfgsq75prlmwr"))))
20527 (build-system pyproject-build-system)
20528 (native-inputs
20529 (list python-pytest
20530 python-setuptools
20531 python-wheel))
20532 (propagated-inputs
20533 (list python-markupsafe))
20534 (home-page "https://www.makotemplates.org/")
20535 (synopsis "Templating language for Python")
20536 (description "Mako is a templating language for Python that compiles
20537templates into Python modules.")
20538 (license license:expat)))
20539
20540(define-public python-cookiecutter
20541 (package
20542 (name "python-cookiecutter")
20543 (version "2.6.0")
20544 (source
20545 (origin
20546 (method url-fetch)
20547 (uri (pypi-uri "cookiecutter" version))
20548 (sha256
20549 (base32 "0762882zrvf3sslr9r7v8wkdwjckhm2clj4d831gvx54kqbgh8fv"))))
20550 (build-system pyproject-build-system)
20551 (arguments
20552 (list
20553 #:phases #~(modify-phases %standard-phases
20554 (add-before 'check 'pre-check
20555 (lambda _
20556 ;; test_get_user_config.py requires a writable home
20557 ;; directory.
20558 (setenv "HOME"
20559 (getcwd))
20560 ;; test_hooks.py dynamically creates shell scripts
20561 ;; with a /bin/bash shebang. We have to patch these.
20562 (substitute* "tests/test_hooks.py"
20563 (("/bin/bash")
20564 (string-append #$(this-package-native-input
20565 "bash-minimal") "/bin/bash"))))))))
20566 (native-inputs (list bash-minimal
20567 git-minimal
20568 python-freezegun
20569 python-pytest
20570 python-pytest-cov
20571 python-pytest-mock
20572 python-setuptools
20573 python-wheel))
20574 (propagated-inputs (list python-arrow
20575 python-binaryornot
20576 python-click
20577 python-jinja2
20578 python-pyyaml
20579 python-requests
20580 python-rich
20581 python-slugify))
20582 (home-page "https://github.com/cookiecutter/cookiecutter")
20583 (synopsis
20584 "Command-line utility that creates projects from project templates")
20585 (description
20586 "This package provides a command-line utility that creates projects from
20587project templates, e.g. creating a Python package project from a Python package
20588project template.")
20589 (license license:bsd-3)))
20590
20591(define-public python-pyquery
20592 (package
20593 (name "python-pyquery")
20594 (version "2.0.1")
20595 (source
20596 (origin
20597 (method url-fetch)
20598 (uri (pypi-uri "pyquery" version))
20599 (sha256
20600 (base32
20601 "1brg6aawb9m5mdfmc6g7v5r6pczbx67r4l9cn5yh6bdi0qkvp501"))))
20602 (build-system pyproject-build-system)
20603 (arguments
20604 (list
20605 #:test-flags
20606 #~(list #$@(map (lambda (test) (string-append
20607 "--deselect=tests/test_pyquery.py::"
20608 test))
20609 (list
20610 ;; AssertionError: 'REQUEST_METHOD: POST' not found in ''
20611 "TestWebScrapping::test_post"
20612 ;; AssertionError: 'HTTP_X_FOO: bar' not found in ''
20613 "TestWebScrapping::test_session"
20614 ;; Assertion is not equal.
20615 "TestManipulating::test_val_for_textarea"
20616 "TestHTMLParser::test_replaceWith"
20617 "TestHTMLParser::test_replaceWith_with_function"
20618 ;; Network access is required.
20619 "TestWebScrapping::test_get"
20620 "TestWebScrappingEncoding::test_get")))))
20621 (native-inputs
20622 (list python-pytest
20623 python-pytest-cov
20624 python-requests
20625 python-setuptools
20626 python-webob
20627 python-webtest
20628 python-wheel))
20629 (propagated-inputs
20630 (list python-cssselect python-lxml))
20631 (home-page "https://github.com/gawel/pyquery")
20632 (synopsis "Make jQuery-like queries on xml documents")
20633 (description "pyquery allows you to make jQuery queries on xml documents.
20634The API is as much as possible the similar to jQuery. pyquery uses lxml for
20635fast xml and html manipulation.")
20636 (license license:bsd-3)))
20637
20638(define-public python-amqp
20639 (package
20640 (name "python-amqp")
20641 (version "5.1.1")
20642 (source
20643 (origin
20644 (method url-fetch)
20645 (uri (pypi-uri "amqp" version))
20646 (sha256
20647 (base32 "1qmmffiy48nady7is8529vxcyqbq88v5zgawqr3fk4q8rkz166rc"))))
20648 (build-system pyproject-build-system)
20649 (arguments
20650 (list ; Integration tests require network connectivity.
20651 #:test-flags '(list "--ignore=t/integration/test_rmq.py")))
20652 (native-inputs (list python-pytest python-setuptools python-wheel))
20653 (propagated-inputs (list python-vine))
20654 (home-page "https://github.com/celery/py-amqp")
20655 (synopsis "Low-level AMQP client for Python (fork of amqplib)")
20656 (description
20657 "This is a fork of amqplib which was originally written by Barry Pederson.
20658It is maintained by the Celery project, and used by kombu as a pure python
20659alternative when librabbitmq is not available.")
20660 (license license:lgpl2.1+)))
20661
20662(define-public python-benchmark-4dn
20663 (package
20664 (name "python-benchmark-4dn")
20665 (version "0.5.24")
20666 (source (origin
20667 (method url-fetch)
20668 (uri (pypi-uri "benchmark_4dn" version))
20669 (sha256
20670 (base32
20671 "1cjin99p8mrh4nkbr4hsdfks9c22dfw3gk5ad80b4rxngs8mwj0s"))))
20672 (properties '(("upstream-name" . "benchmark_4dn")))
20673 (build-system pyproject-build-system)
20674 ;; There are none.
20675 (arguments (list #:tests? #false))
20676 (native-inputs
20677 (list python-poetry-core))
20678 (home-page "https://github.com/SooLee/Benchmark/")
20679 (synopsis "Benchmark functions for CWL workflows")
20680 (description
20681 "This package provides benchmark functions that return total space, memory,
20682CPUs required per given input size, and parameters for CWL workflows.")
20683 (license license:expat)))
20684
20685(define-public python-beniget
20686 (package
20687 (name "python-beniget")
20688 (version "0.4.2.post1")
20689 (source
20690 (origin
20691 (method url-fetch)
20692 (uri (pypi-uri "beniget" version))
20693 (sha256
20694 (base32 "1bjjl12pqbz4amnn8wvcpd4zjrx6cpw04s586gn18zjywqvqa9d0"))))
20695 (build-system pyproject-build-system)
20696 (native-inputs
20697 (list python-pytest
20698 python-setuptools))
20699 (propagated-inputs
20700 (list python-gast))
20701 (home-page "https://github.com/serge-sans-paille/beniget")
20702 (synopsis "Extract semantic information about static Python code")
20703 (description
20704 "Beniget is a collection of analyzers for Python @acronym{AST,
20705Abstract Syntax Tree}. It is a building block for writing a static analyzer
20706or compiler for Python.")
20707 (license license:bsd-3)))
20708
20709(define-public python-kombu
20710 (package
20711 (name "python-kombu")
20712 (version "5.6.0")
20713 (source
20714 (origin
20715 (method git-fetch)
20716 (uri (git-reference
20717 (url "https://github.com/celery/kombu")
20718 (commit (string-append "v" version))))
20719 (file-name (git-file-name name version))
20720 (sha256
20721 (base32 "10h73mxfqy8g02bmibc9m2xklcm4pxc9r674c8l6j0v2igf3ycmb"))))
20722 (build-system pyproject-build-system)
20723 (arguments
20724 (list
20725 ;; tests: 854 passed, 196 skipped
20726 #:test-flags
20727 #~(list
20728 ;; TODO: Package azure-identity (required for this file)
20729 "--ignore=t/unit/transport/test_azurestoragequeues.py"
20730 ;; XXX: Requires google-cloud-pubsub.
20731 "--ignore=t/unit/transport/test_gcpubsub.py")
20732 #:phases
20733 #~(modify-phases %standard-phases
20734 (add-after 'unpack 'relax-requirements
20735 (lambda _
20736 (substitute* "requirements/default.txt"
20737 (("tzdata>=2025.2")
20738 "tzdata>=2025.1")))))))
20739 (native-inputs
20740 (list python-botocore
20741 python-pyro4
20742 python-pytest
20743 python-pytest-freezer
20744 python-pytest-sugar
20745 python-setuptools))
20746 (propagated-inputs
20747 (list python-amqp
20748 python-packaging
20749 python-tzdata
20750 python-vine))
20751 (home-page "https://kombu.readthedocs.io")
20752 (synopsis "Message passing library for Python")
20753 (description
20754 "The aim of Kombu is to make messaging in Python as easy as possible by
20755providing an idiomatic high-level interface for the AMQ protocol, and also
20756provide proven and tested solutions to common messaging problems. AMQP is the
20757Advanced Message Queuing Protocol, an open standard protocol for message
20758orientation, queuing, routing, reliability and security, for which the
20759RabbitMQ messaging server is the most popular implementation.")
20760 (license license:bsd-3)))
20761
20762(define-public python-billiard
20763 (package
20764 (name "python-billiard")
20765 (version "4.2.2")
20766 (source
20767 (origin
20768 (method git-fetch)
20769 (uri (git-reference
20770 (url "https://github.com/celery/billiard")
20771 (commit (string-append "v" version))))
20772 (file-name (git-file-name name version))
20773 (sha256
20774 (base32 "1p08w9msiajhg23ifcgnkv8jlbnh3ip3qhxahl5q0338sk4kah19"))))
20775 (build-system pyproject-build-system)
20776 (arguments
20777 (list
20778 #:phases
20779 #~(modify-phases %standard-phases
20780 (add-after 'unpack 'remove-win-files
20781 (lambda _
20782 (for-each delete-file-recursively
20783 '("billiard/popen_spawn_win32.py"
20784 "billiard/_win.py")))))))
20785 (native-inputs (list python-psutil python-pytest python-setuptools))
20786 (home-page "https://github.com/celery/billiard")
20787 (synopsis "Python multiprocessing fork with improvements and bugfixes")
20788 (description
20789 "Billiard is a fork of the Python 2.7 multiprocessing package. The
20790multiprocessing package itself is a renamed and updated version of R Oudkerk's
20791pyprocessing package. This standalone variant is intended to be compatible with
20792Python 2.4 and 2.5, and will draw its fixes/improvements from python-trunk.")
20793 (license license:bsd-3)))
20794
20795(define-public python-celery
20796 (package
20797 (name "python-celery")
20798 (version "5.6.2")
20799 (source
20800 (origin
20801 (method url-fetch)
20802 (uri (pypi-uri "celery" version))
20803 (sha256
20804 (base32 "16q0hlsw9p2mri1c1i2l4knq2d8hf83h4a9vglqpdbgjzk1j32aa"))))
20805 (build-system pyproject-build-system)
20806 (arguments
20807 (list
20808 ;; tests: 3248 passed, 26 skipped, 8 deselected, 3 xfailed, 54 warnings,
20809 ;; 28958 subtests passed
20810 #:test-flags
20811 ;; The MongoDB backend test appears to expect an older version of
20812 ;; MongoDB which provided its own bson module, fails with "
20813 ;; AttributeError: module 'bson' has no attribute 'encode'".
20814 #~(list "--ignore=t/unit/backends/test_mongodb.py"
20815 ;; XXX: Requires google-cloud-firestore
20816 "--ignore=t/unit/backends/test_gcs.py"
20817 "-k" (string-join
20818 (list ;; AssertionError.
20819 "not test_check_privileges_no_fchown"
20820 ;; These 3 tests error out on ci.guix.gnu.org with
20821 ;; OSError: [Errno 24] Too many open files
20822 "test_register_with_event_loop__no_on_tick_dupes"
20823 "test_with_autoscaler_file_descriptor_safety"
20824 "test_with_file_descriptor_safety"
20825 ;; XXX: Fails to compare local timezones.
20826 "test_use_local_timezone")
20827 " and not "))))
20828 (native-inputs
20829 (list python-azure-core
20830 python-dnspython
20831 python-flaky
20832 python-gevent
20833 python-google-cloud-storage
20834 python-iniconfig
20835 python-moto
20836 python-msgpack
20837 python-pymongo
20838 python-pytest
20839 python-pytest-celery
20840 python-pytest-click
20841 python-pytest-order
20842 python-pytest-subtests
20843 python-pytest-timeout
20844 python-redis
20845 python-setuptools))
20846 (propagated-inputs
20847 (list python-billiard
20848 python-click
20849 python-click-didyoumean
20850 python-click-plugins-1
20851 python-click-repl
20852 python-dateutil
20853 python-kombu
20854 python-tzlocal
20855 python-vine))
20856 (home-page "https://celeryproject.org")
20857 (synopsis "Distributed Task Queue")
20858 (description
20859 "Celery is an asynchronous task queue/job queue based on distributed
20860message passing. It is focused on real-time operation, but supports
20861scheduling as well. The execution units, called tasks, are executed
20862concurrently on a single or more worker servers using multiprocessing,
20863Eventlet, or gevent. Tasks can execute asynchronously (in the background) or
20864synchronously (wait until ready).")
20865 (license license:bsd-3)))
20866
20867;; A bare minimal package, mainly to use in tests and reduce closure
20868;; size. Tests are left out in the main package to slim down native-inputs.
20869(define-public python-celery-minimal
20870 (package/inherit python-celery
20871 (name "python-celery-minimal")
20872 (arguments
20873 (list #:tests? #f))
20874 (native-inputs
20875 (list python-setuptools))))
20876
20877(define-public python-anyqt
20878 (package
20879 (name "python-anyqt")
20880 (version "0.2.1")
20881 (source
20882 (origin
20883 (method git-fetch)
20884 (uri (git-reference
20885 (url "https://github.com/ales-erjavec/anyqt")
20886 (commit version)))
20887 (file-name (git-file-name name version))
20888 (sha256
20889 (base32 "0dci4sx53icd3jxv5gm22yr5g4dcyqbyvkkwliqpmbkxxjxj0dc8"))))
20890 (build-system pyproject-build-system)
20891 (arguments
20892 (list
20893 ;; XXX: Qt tests require Qt modules, see test/test_import.py.
20894 ;; TODO Add/configure the right Qt inputs.
20895 #:test-flags
20896 #~(list "--ignore-glob=tests/test_q*.py")
20897 #:phases
20898 #~(modify-phases %standard-phases
20899 (add-after 'unpack 'delete-files
20900 ;; Delete files related to other operating systems.
20901 (lambda _
20902 (delete-file "AnyQt/QtMacExtras.py")
20903 (delete-file "AnyQt/QtWinExtras.py"))))))
20904 (native-inputs
20905 (list python-pyqt-6
20906 python-pytest
20907 python-pytest-qt
20908 python-setuptools))
20909 (home-page "https://github.com/ales-erjavec/anyqt")
20910 (synopsis "PyQt compatibility layer")
20911 (description
20912 "This package provides a PyQt/PySide compatibility layer. More precisely,
20913it provides compatibility for the following modules: PyQt4, PyQt5, PyQt6,
20914PySide, PySide2.")
20915 (license license:gpl3)))
20916
20917(define-public python-qasync
20918 (package
20919 (name "python-qasync")
20920 (version "0.28.0")
20921 (source
20922 (origin
20923 (method git-fetch)
20924 (uri (git-reference
20925 (url "https://github.com/CabbageDevelopment/qasync/")
20926 (commit (string-append "v" version))))
20927 (file-name (git-file-name name version))
20928 (sha256
20929 (base32 "13i5riq7ig4csxlx61fzb8xl12ny0dkwj4h8f8r95xz5rii7a0kr"))))
20930 (build-system pyproject-build-system)
20931 (arguments
20932 (list
20933 #:build-backend "poetry.core.masonry.api" ;XXX: python-uv-build is required
20934 #:phases
20935 #~(modify-phases %standard-phases
20936 (add-before 'check 'set-qpa
20937 (lambda _
20938 (setenv "QT_QPA_PLATFORM" "offscreen"))))))
20939 (native-inputs
20940 (list python-poetry-core python-pytest))
20941 (propagated-inputs
20942 (list python-pyqt-6))
20943 (home-page "https://github.com/CabbageDevelopment/qasync")
20944 (synopsis "Implementation of the PEP 3156 Event-Loop with Qt")
20945 (description
20946 "@code{qasync} allows coroutines to be used in PyQt/PySide applications
20947by providing an implementation of the PEP 3156 event-loop.")
20948 (license license:bsd-2)))
20949
20950(define-public python-editor
20951 (package
20952 (name "python-editor")
20953 (version "1.0.4")
20954 (source
20955 (origin
20956 (method git-fetch)
20957 (uri (git-reference
20958 (url "https://github.com/fmoo/python-editor")
20959 (commit version)))
20960 (file-name (git-file-name name version))
20961 (sha256
20962 (base32 "0hm5gcz5117dsq39bqfxpwazk4khqd272ran0n12x0x84mnqvfxa"))))
20963 (build-system pyproject-build-system)
20964 (arguments (list #:tests? #f)) ;XXX: needs a TTY and an editor
20965 (native-inputs (list python-setuptools))
20966 (home-page "https://github.com/fmoo/python-editor")
20967 (synopsis "Programmatically open an editor, capture the result")
20968 (description
20969 "This package provides the editor module for programmatically interfacing
20970with your system's $EDITOR.")
20971 (license license:asl2.0)))
20972
20973(define-public python-multiprocessing-logging
20974 (package
20975 (name "python-multiprocessing-logging")
20976 (version "0.3.4")
20977 (home-page "https://github.com/jruere/multiprocessing-logging")
20978 (source
20979 (origin
20980 (method git-fetch)
20981 (uri (git-reference
20982 (url home-page)
20983 (commit (string-append "v" version))))
20984 (file-name (git-file-name name version))
20985 (sha256
20986 (base32 "0ib1plsyi4g68n0crc2cqhk54fccsmcijzh66g89fd3lgababgxd"))))
20987 (build-system pyproject-build-system)
20988 (arguments (list #:test-backend #~'unittest))
20989 (native-inputs (list python-setuptools))
20990 (synopsis "Manage logs from multiple processes")
20991 (description
20992 "This Python module implements a multiprocessing-aware @code{Handler}
20993that, when set on the root @code{Logger}, will tunnel log records to the
20994main process so that they are handled correctly.")
20995 (license license:lgpl3+)))
20996
20997(define-public python-munkres
20998 (package
20999 (name "python-munkres")
21000 (version "1.1.4")
21001 (source
21002 (origin
21003 (method url-fetch)
21004 (uri (pypi-uri "munkres" version))
21005 (sha256
21006 (base32 "00yvj8bxmhhhhd74v7j0x673is7vizmxwgb3dd5xmnkr74ybyi7w"))))
21007 (build-system pyproject-build-system)
21008 (arguments
21009 (list
21010 ;; See https://github.com/bmc/munkres/issues/40
21011 #:test-flags
21012 (if (member (%current-system) %32bit-supported-systems)
21013 #~(list "-k" "not test_profit_float")
21014 #~(list))))
21015 (native-inputs (list python-pytest python-setuptools))
21016 (home-page "https://software.clapper.org/munkres/")
21017 (synopsis "Implementation of the Munkres algorithm")
21018 (description
21019 "The Munkres module provides an implementation of the Munkres algorithm
21020(also called the Hungarian algorithm or the Kuhn-Munkres algorithm), useful
21021for solving the Assignment Problem.")
21022 (license license:bsd-3)))
21023
21024(define-public python-codespell
21025 (package
21026 (name "python-codespell")
21027 (version "2.3.0")
21028 (source
21029 (origin
21030 (method url-fetch)
21031 (uri (pypi-uri "codespell" version))
21032 (sha256
21033 (base32 "07s72zfxkznigqdc23k7jp9saq0hgq0gf2kjmmxzcrayyw87s31n"))))
21034 (build-system pyproject-build-system)
21035 (arguments
21036 (list
21037 #:phases
21038 #~(modify-phases %standard-phases
21039 (add-after 'unpack 'fix-pytest-config
21040 (lambda _
21041 ;; Drop test coverage requirements.
21042 (substitute* "pyproject.toml"
21043 (("\"--cov=codespell_lib\",") "")
21044 (("\"--cov-report=\",") "")))))))
21045 (native-inputs
21046 (list python-pygments
21047 python-pytest
21048 python-pytest-dependency
21049 python-setuptools
21050 python-setuptools-scm
21051 python-wheel))
21052 (propagated-inputs
21053 (list python-chardet))
21054 (home-page "https://github.com/codespell-project/codespell/")
21055 (synopsis "Spellchecker for code")
21056 (description
21057 "Codespell fixes common misspellings in text files. It's designed
21058primarily for checking misspelled words in source code, but it can be used
21059with other files as well. It does not check for word membership in a complete
21060dictionary, but instead looks for a set of common misspellings. Therefore it
21061should catch errors like \"adn\", but it will not catch \"adnasdfasdf\". This
21062also means it shouldn't generate false-positives when you use a niche term it
21063doesn't know about.")
21064 (license
21065 (list
21066 ; for codespell and codespell_lib
21067 license:gpl2
21068 ; for dictionary*.txt
21069 license:cc-by-sa3.0))))
21070
21071(define-public python-jellyfish
21072 (package
21073 (name "python-jellyfish")
21074 (version "1.2.1")
21075 (source
21076 (origin
21077 (method git-fetch)
21078 (uri (git-reference
21079 (url "https://github.com/jamesturk/jellyfish")
21080 (commit (string-append "v" version))))
21081 (file-name (git-file-name name version))
21082 (sha256
21083 (base32 "1zsbvyq608yrfv29hlwjkr6ycrghy8s5hpwnj3aa9symihazpb4c"))))
21084 (build-system pyproject-build-system)
21085 (arguments
21086 (list
21087 #:imported-modules (append %cargo-build-system-modules
21088 %pyproject-build-system-modules)
21089 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
21090 (guix build pyproject-build-system)
21091 (guix build utils))
21092 #:phases
21093 #~(modify-phases %standard-phases
21094 (add-after 'unpack 'prepare-cargo-build-system
21095 (lambda args
21096 (for-each
21097 (lambda (phase)
21098 (format #t "Running cargo phase: ~a~%" phase)
21099 (apply (assoc-ref cargo:%standard-phases phase)
21100 #:cargo-target #$(cargo-triplet)
21101 args))
21102 '(unpack-rust-crates
21103 configure
21104 check-for-pregenerated-files
21105 patch-cargo-checksums)))))))
21106 (inputs (cons* maturin (cargo-inputs 'jellyfish)))
21107 (native-inputs
21108 (append
21109 (list python-pytest
21110 python-setuptools
21111 rust
21112 `(,rust "cargo"))
21113 (or (and=> (%current-target-system)
21114 (compose list make-rust-sysroot))
21115 '())))
21116 (home-page "https://www.jpt.sh/projects/jellyfish/")
21117 (synopsis "Approximate and phonetic matching of strings")
21118 (description "Jellyfish uses a variety of string comparison and phonetic
21119encoding algorithms to do fuzzy string matching.")
21120 (license license:bsd-2)))
21121
21122(define-public python-pdfminer-six
21123 (package
21124 (name "python-pdfminer-six")
21125 (version "20240706")
21126 ;; There are no tests in the PyPI tarball.
21127 (source
21128 (origin
21129 (method git-fetch)
21130 (uri (git-reference
21131 (url "https://github.com/pdfminer/pdfminer.six")
21132 (commit version)))
21133 (file-name (git-file-name name version))
21134 (sha256
21135 (base32 "0vdwps38q2414lwjz266rabxrcw2a5s1pgxyjsffiifi010cd3k9"))))
21136 (build-system pyproject-build-system)
21137 (arguments
21138 (list #:phases
21139 #~(modify-phases %standard-phases
21140 ;; Tests write to the source tree.
21141 (add-after 'unpack 'make-git-checkout-writable
21142 (lambda _
21143 (for-each make-file-writable (find-files ".")))))))
21144 (propagated-inputs
21145 (list python-charset-normalizer python-cryptography))
21146 (native-inputs
21147 (list python-pytest python-setuptools python-wheel))
21148 (home-page "https://github.com/pdfminer/pdfminer.six")
21149 (synopsis "PDF parser and analyzer")
21150 (description "@code{pdfminer.six} is a community maintained fork of
21151the original PDFMiner. It is a tool for extracting information from PDF
21152documents. It focuses on getting and analyzing text data. Pdfminer.six
21153extracts the text from a page directly from the sourcecode of the PDF. It
21154can also be used to get the exact location, font or color of the text.")
21155 (license license:expat)))
21156
21157(define-public python-rarfile
21158 (package
21159 (name "python-rarfile")
21160 (version "4.2")
21161 (source
21162 (origin
21163 (method git-fetch)
21164 (uri (git-reference
21165 (url "https://github.com/markokr/rarfile")
21166 (commit (string-append "v" version))))
21167 (file-name (git-file-name name version))
21168 (sha256
21169 (base32 "1lm4vz4w0hrnzln7w10ijhdiwxy7gz45m44zw4fz7rdnn7c06b36"))))
21170 (build-system pyproject-build-system)
21171 (arguments
21172 (list
21173 #:tests? #f ;The bsdtar utility is very limited and most tests fail.
21174 #:phases
21175 #~(modify-phases %standard-phases
21176 (add-after 'unpack 'patch
21177 (lambda* (#:key inputs #:allow-other-keys)
21178 (substitute* "rarfile.py"
21179 ;; Disable unrar and unar, which are unavailable on Guix.
21180 (("(unrar|unar)=True" all tool)
21181 (string-append tool "=False"))
21182 ;; Hardcode path to bsdtar
21183 (("\"bsdtar\"")
21184 (format #f "~s"
21185 (search-input-file inputs "bin/bsdtar")))))))))
21186 (native-inputs (list python-pytest python-setuptools))
21187 (inputs (list libarchive))
21188 (home-page "https://github.com/markokr/rarfile")
21189 (synopsis "RAR archive reader for Python")
21190 (description
21191 "This is Python module for RAR archive reading. The interface is made as
21192zipfile like as possible.")
21193 (license license:isc)))
21194
21195(define-public python-slugid
21196 (package
21197 (name "python-slugid")
21198 (version "2.0.0")
21199 (source
21200 (origin
21201 (method git-fetch)
21202 (uri (git-reference
21203 (url "https://github.com/taskcluster/slugid.py")
21204 (commit (string-append "v" version))))
21205 (file-name (git-file-name name version))
21206 (sha256
21207 (base32 "1h64p2jlqv6lsmw8h2j203kx3bhv72cwzpk5gdhsaamw30cp3h1i"))))
21208 (build-system pyproject-build-system)
21209 (arguments (list #:test-backend #~'nose))
21210 (native-inputs (list python-pynose python-setuptools))
21211 (home-page "http://taskcluster.github.io/slugid.py")
21212 (synopsis "Module for Base64 encoded UUID v4 slugs")
21213 (description
21214 "This package provides a module for generating v4 UUIDs and encoding them
21215into 22 character URL-safe base64 slug representation.")
21216 (license license:mpl2.0)))
21217
21218(define-public python-rich
21219 (package
21220 (name "python-rich")
21221 (version "13.7.1")
21222 (source
21223 (origin
21224 ;; There are no tests in the PyPI tarball.
21225 (method git-fetch)
21226 (uri (git-reference
21227 (url "https://github.com/willmcgugan/rich")
21228 (commit (string-append "v" version))))
21229 (file-name (git-file-name name version))
21230 (sha256
21231 (base32
21232 "0jvkcp473c0icbb8md3grc3285j2cy0z0swxgk2g67d9n0zfdfzc"))))
21233 (build-system pyproject-build-system)
21234 (arguments
21235 (list
21236 #:test-flags
21237 ;; These fail for unknown reasons, but the results look identical.
21238 ;; Perhaps only the terminal escape sequences are superficially
21239 ;; different?
21240 '(list "-k" (string-append "not test_card_render"
21241 " and not test_markdown_render"
21242 " and not test_python_render"
21243 " and not test_python_render_simple"
21244 " and not test_python_render_simple_passing_lexer_instance"
21245 " and not test_python_render_indent_guides"
21246 " and not test_option_no_wrap"
21247 " and not test_syntax_highlight_ranges"
21248 " and not test_inline_code"
21249 " and not test_blank_lines"))))
21250 (propagated-inputs
21251 (list python-markdown-it-py python-pygments))
21252 (native-inputs
21253 (list python-poetry-core python-pytest))
21254 (home-page "https://github.com/willmcgugan/rich")
21255 (synopsis "Render rich text and more to the terminal")
21256 (description
21257 "This is a Python package for rendering rich text, tables, progress bars,
21258syntax highlighting, markdown and more to the terminal.")
21259 (license license:expat)))
21260
21261(define-public python-rich-next
21262 (package
21263 (inherit python-rich)
21264 (name "python-rich")
21265 (version "14.2.0")
21266 (source
21267 (origin
21268 (method git-fetch)
21269 (uri (git-reference
21270 (url "https://github.com/willmcgugan/rich")
21271 (commit (string-append "v" version))))
21272 (file-name (git-file-name name version))
21273 (sha256
21274 (base32 "0zwjry4ylqncqvxrywp0km96jng4f288dgz8kz5vymk7nr2z21m1"))))
21275 (native-inputs (modify-inputs (package-native-inputs python-rich)
21276 (append which)))))
21277
21278(define-public python-rich-click
21279 (package
21280 (name "python-rich-click")
21281 (version "1.8.9")
21282 (source
21283 (origin
21284 (method git-fetch)
21285 (uri (git-reference
21286 (url "https://github.com/ewels/rich-click")
21287 (commit (string-append "v" version))))
21288 (file-name (git-file-name name version))
21289 (sha256
21290 (base32 "0kc2wcb5dpgxhdcz8fy6gfhl7vra03xwgwfg7h0qxxibr8yzhmmq"))))
21291 (build-system pyproject-build-system)
21292 (native-inputs
21293 (list python-pytest
21294 python-setuptools))
21295 (propagated-inputs
21296 (list python-click
21297 python-rich
21298 python-typing-extensions))
21299 (home-page "https://github.com/ewels/rich-click")
21300 (synopsis "Format click help output nicely with rich")
21301 (description "Click is a \"Python package for creating beautiful command
21302line interfaces\". Rich is a \"Python library for rich text and beautiful
21303formatting in the terminal\". The intention of rich-click is to provide
21304attractive help output from click, formatted with rich, with minimal
21305customization required.")
21306 (license license:expat)))
21307
21308(define-public python-magic
21309 (package
21310 (name "python-magic")
21311 (version "0.4.27")
21312 (home-page "https://github.com/ahupp/python-magic")
21313 (source
21314 (origin
21315 (method git-fetch)
21316 (uri (git-reference (url home-page) (commit version)))
21317 (file-name (git-file-name name version))
21318 (sha256
21319 (base32 "1x11kfn4g244fia9a7y4ly8dqv5zsxfg3l5azc54dl6gkp2bk7vx"))))
21320 (build-system pyproject-build-system)
21321 (arguments
21322 (list
21323 #:test-backend #~'custom
21324 #:test-flags #~(list "test/libmagic_test.py")
21325 #:phases
21326 #~(modify-phases %standard-phases
21327 (add-after 'unpack 'fix-tests
21328 (lambda _
21329 ;; Adjust expected output for [email protected].
21330 (substitute* "test/libmagic_test.py"
21331 (("PDF document, version 1\\.2, 2 pages")
21332 "PDF document, version 1.2, 2 page(s)"))))
21333 ;; Replace a specific method call with a hard-coded path to the
21334 ;; necessary libmagic.so file in the store.
21335 (add-before 'build 'hard-code-path-to-libmagic
21336 (lambda* (#:key inputs #:allow-other-keys)
21337 (substitute* "magic/loader.py"
21338 (("find_library\\('magic'\\)")
21339 (format #f "~s"
21340 (search-input-file inputs "lib/libmagic.so")))))))))
21341 (native-inputs (list which python-setuptools))
21342 (inputs
21343 ;; python-magic needs to be able to find libmagic.so.
21344 (list file))
21345 (synopsis "File type identification using libmagic")
21346 (description
21347 "This module uses ctypes to access the libmagic file type identification
21348library. It makes use of the local magic database and supports both textual
21349and MIME-type output. Note that this module and the python-file module both
21350provide a \"magic.py\" file; these two modules, which are different and were
21351developed separately, both serve the same purpose: to provide Python bindings
21352for libmagic.")
21353 (license license:expat)))
21354
21355(define-public python-securetar
21356 (package
21357 (name "python-securetar")
21358 (version "2025.1.4")
21359 (source
21360 (origin
21361 (method git-fetch)
21362 (uri (git-reference
21363 (url "https://github.com/pvizeli/securetar")
21364 (commit version)))
21365 (file-name (git-file-name name version))
21366 (sha256
21367 (base32 "1b9m29j4mjiv7925wrbiyj6vyx7m9qmdz40zqd4vgxhz4pq6x3xw"))))
21368 (build-system pyproject-build-system)
21369 (native-inputs (list python-setuptools python-wheel python-pytest))
21370 (propagated-inputs (list python-cryptography))
21371 (home-page "https://github.com/pvizeli/securetar")
21372 (synopsis "Python module to handle tarfile backups")
21373 (description
21374 "This library provides a streaming wrapper around python tarfile and allow
21375secure handling files and support encryption.")
21376 (license license:asl2.0)))
21377
21378(define-public python-pkgconfig
21379 (package
21380 (name "python-pkgconfig")
21381 (version "1.5.5")
21382 (source
21383 (origin
21384 (method url-fetch)
21385 (uri (pypi-uri "pkgconfig" version))
21386 (sha256
21387 (base32
21388 "16dqm2g7b2c6s09vf6wv62s629s63xf51n92v0hbax8zy4z1dd6y"))))
21389 (build-system pyproject-build-system)
21390 (arguments
21391 (list
21392 #:tests? #false ;there are none
21393 #:phases
21394 '(modify-phases %standard-phases
21395 (add-before 'build 'patch
21396 ;; Hard-code the path to pkg-config.
21397 (lambda _
21398 (substitute* "pkgconfig/pkgconfig.py"
21399 (("'pkg-config'")
21400 (string-append "'" (which "pkg-config") "'"))))))))
21401 (native-inputs (list python-poetry-core))
21402 (inputs (list pkg-config))
21403 (home-page "https://github.com/matze/pkgconfig")
21404 (synopsis "Python interface for pkg-config")
21405 (description "This module provides a Python interface to pkg-config. It
21406can be used to find all pkg-config packages, check if a package exists,
21407check if a package meets certain version requirements, query CFLAGS and
21408LDFLAGS and parse the output to build extensions with setup.py.")
21409 (license license:expat)))
21410
21411;; This package is unmaintained since 2014, but still used in `khmer'.
21412(define-public python-bz2file
21413 (package
21414 (name "python-bz2file")
21415 (version "0.98")
21416 (source
21417 (origin
21418 (method url-fetch)
21419 (uri (pypi-uri "bz2file" version))
21420 (sha256
21421 (base32 "126s53fkpx04f33a829yqqk8fj4png3qwg4m66cvlmhmwc8zihb4"))))
21422 (build-system pyproject-build-system)
21423 (arguments (list #:tests? #f)) ; Tests use deprecated python modules.
21424 (native-inputs (list python-setuptools))
21425 (home-page "https://github.com/nvawda/bz2file")
21426 (synopsis "Read and write bzip2-compressed files")
21427 (description
21428 "Bz2file is a Python library for reading and writing bzip2-compressed
21429files. It contains a drop-in replacement for the I/O interface in the
21430standard library's @code{bz2} module, including features from the latest
21431development version of CPython that are not available in older releases.")
21432 (license license:asl2.0)))
21433
21434(define-public python-future
21435 (package
21436 (name "python-future")
21437 (version "1.0.0")
21438 (source
21439 (origin
21440 (method url-fetch)
21441 (uri (pypi-uri "future" version))
21442 (sha256
21443 (base32 "01bvq2a5vgxffq8555rvwhxw161m9y54z2j5w7d1x1h7jcq6hadx"))))
21444 (build-system pyproject-build-system)
21445 (arguments
21446 (list
21447 #:test-flags
21448 ;; Self tests failed.
21449 #~(list "--ignore=tests/test_future/test_futurize.py"
21450 "-k" (string-join
21451 ;; Self tests failed.
21452 (list "not test_division"
21453 "test_functions_unchanged"
21454 "test_mixed_annotations"
21455 "test_multiple_param_annotations"
21456 "test_print"
21457 "test_range_slice"
21458 ;; Network access is required.
21459 "test_ftp"
21460 "test_main"
21461 "test_moves_urllib_request_http"
21462 "test_urllib_request_http")
21463 " and not "))))
21464 (native-inputs
21465 (list python-pytest
21466 python-setuptools))
21467 (home-page "https://python-future.org")
21468 (synopsis "Single-source support for Python 3 and 2")
21469 (description
21470 "@code{python-future} is the missing compatibility layer between Python 2
21471and Python 3. It allows you to use a single, clean Python 3.x-compatible
21472codebase to support both Python 2 and Python 3 with minimal overhead.")
21473 (license license:expat)))
21474
21475(define-public python-cysignals
21476 (package
21477 (name "python-cysignals")
21478 (version "1.12.3")
21479 (source
21480 (origin
21481 (method url-fetch)
21482 (uri (pypi-uri "cysignals" version))
21483 (sha256
21484 (base32 "1syixz6xlmy1pjcr03ij7hcvaklgjy4mmwggssrmmnr9pxnn5xw9"))))
21485 (build-system pyproject-build-system)
21486 (native-inputs (list meson-python
21487 pkg-config
21488 python-cython
21489 python-pytest
21490 python-sphinx))
21491 (home-page "https://github.com/sagemath/cysignals")
21492 (synopsis "Handling of interrupts and signals for Cython")
21493 (description
21494 "The cysignals package provides mechanisms to handle interrupts (and
21495other signals and errors) in Cython code, using two related approaches,
21496for mixed Cython/Python code or external C libraries and pure Cython code,
21497respectively.")
21498 (license license:lgpl3+)))
21499
21500(define-public python-rope
21501 (package
21502 (name "python-rope")
21503 (version "1.13.0")
21504 (source
21505 (origin
21506 (method url-fetch)
21507 (uri (pypi-uri "rope" version))
21508 (sha256
21509 (base32
21510 "1078mkzivz45my8x2y5gxisr0vba630xj7yxx7anr068xhnpshsi"))))
21511 (build-system pyproject-build-system)
21512 (arguments
21513 (list
21514 #:test-flags
21515 #~(list "-k" "test_version_hash_varies_on_get_file_content")))
21516 (propagated-inputs (list python-pytoolconfig))
21517 (native-inputs
21518 (list python-pytest python-pytest-timeout python-setuptools))
21519 (home-page "https://github.com/python-rope/rope")
21520 (synopsis "Refactoring library for Python")
21521 (description
21522 "Rope is a refactoring library for Python. It facilitates the renaming,
21523moving and extracting of attributes, functions, modules, fields and parameters
21524in Python source code. These refactorings can also be applied to occurrences
21525in strings and comments.")
21526 (license license:lgpl3+)))
21527
21528(define-public python-py3status
21529 (package
21530 (name "python-py3status")
21531 (version "3.62")
21532 (source
21533 (origin
21534 (method git-fetch)
21535 (uri (git-reference
21536 (url "https://github.com/ultrabug/py3status")
21537 (commit version)))
21538 (file-name (git-file-name name version))
21539 (sha256
21540 (base32 "13ggwr35w5isylrg1n7akhycm18r03bxin95hdpcmqg7fvqyfppz"))))
21541 (build-system pyproject-build-system)
21542 (arguments
21543 (list
21544 #:phases
21545 #~(modify-phases %standard-phases
21546 (add-before 'build 'hardcode-file-path
21547 (lambda* (#:key inputs #:allow-other-keys)
21548 (substitute* "py3status/parse_config.py"
21549 (("\\[\"file\", \"-b\"")
21550 (format #f "[~s, \"-b\""
21551 (search-input-file inputs "bin/file")))))))))
21552 (native-inputs (list python-hatchling python-pytest))
21553 (inputs (list file))
21554 (home-page "https://github.com/ultrabug/py3status")
21555 (synopsis "Extensible i3status wrapper written in Python")
21556 (description
21557 "py3status is an i3status wrapper which extends i3status functionality in
21558a modular way, allowing you to extend your panel with your own code,
21559responding to click events and updating clock every second.")
21560 (license license:bsd-3)))
21561
21562(define-public python-greenlet
21563 (package
21564 (name "python-greenlet")
21565 (version "3.1.1")
21566 (source
21567 (origin
21568 (method url-fetch)
21569 (uri (pypi-uri "greenlet" version))
21570 (sha256
21571 (base32 "0rsla5f2vgc6g450fziprjy98vf2fwbz6zjx8x37kpvavdnarqsc"))))
21572 (build-system pyproject-build-system)
21573 (arguments
21574 (list
21575 ;; AssertionError: 'Exception' not found in ''
21576 #:test-flags
21577 #~(list (string-join
21578 (list "--deselect=src/greenlet/tests/test_greenlet.py"
21579 "TestGreenlet"
21580 "test_dealloc_catches_GreenletExit_throws_other")
21581 "::"))
21582 #:phases
21583 #~(modify-phases %standard-phases
21584 (add-before 'check 'build-extensions
21585 (lambda _
21586 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
21587 (native-inputs
21588 (list python-objgraph
21589 python-pytest
21590 python-psutil
21591 python-setuptools
21592 python-wheel))
21593 (home-page "https://greenlet.readthedocs.io/")
21594 (synopsis "Lightweight in-process concurrent programming")
21595 (description
21596 "Greenlet package is a spin-off of Stackless, a version of CPython
21597that supports micro-threads called \"tasklets\". Tasklets run
21598pseudo-concurrently (typically in a single or a few OS-level threads) and
21599are synchronized with data exchanges on \"channels\".")
21600 (license (list license:psfl license:expat))))
21601
21602(define-public python-greenlet-2
21603 (hidden-package
21604 (package
21605 (inherit python-greenlet)
21606 (version "2.0.2")
21607 (source
21608 (origin
21609 (method url-fetch)
21610 (uri (pypi-uri "greenlet" version))
21611 (sha256
21612 (base32 "1h1l1mll5s4y1b09asf2jps0m7wyshnis1aassz9gc3xmw9xrj77")))))))
21613
21614(define-public python-objgraph
21615 (package
21616 (name "python-objgraph")
21617 (version "3.6.2")
21618 (source
21619 (origin
21620 (method url-fetch)
21621 (uri (pypi-uri "objgraph" version))
21622 (sha256
21623 (base32 "1n0swlq11w36r2p6x7b4y0zz10dgzpdc8qasyk3y68kl1zsg5f80"))))
21624 (build-system pyproject-build-system)
21625 (arguments
21626 (list
21627 #:test-flags
21628 #~(list "tests.py"
21629 ;; AssertionError: [0, 1, 2] not found in [[], [], [], [], [],
21630 ;; [], [], [], [], [], [], [], ...
21631 "-k" "not test_at_addrs")))
21632 (native-inputs
21633 (list graphviz
21634 python-pytest
21635 python-setuptools
21636 python-wheel))
21637 (propagated-inputs
21638 (list python-graphviz))
21639 (home-page "https://mg.pov.lt/objgraph/")
21640 (synopsis "Draw Python object reference graphs with graphviz")
21641 (description
21642 "This package provides tools to draw Python object reference graphs with
21643graphviz.")
21644 (license license:expat)))
21645
21646(define-public python-gevent
21647 (package
21648 (name "python-gevent")
21649 (version "24.11.1")
21650 (source (origin
21651 (method url-fetch)
21652 (uri (pypi-uri "gevent" version))
21653 (sha256
21654 (base32
21655 "1jhs1k49nfhv59c0li6bcpvkr6pzmxkdgfm56gns7r792j8l3lcb"))
21656 (modules '((guix build utils)))
21657 (snippet
21658 '(begin
21659 ;; unbunding libev and c-ares
21660 (delete-file-recursively "deps")
21661 ;; Remove cythonized files.
21662 (with-directory-excursion "src/gevent"
21663 (for-each delete-file
21664 (append (list "resolver/cares.c"
21665 "queue.c"
21666 "local.c"
21667 "libev/corecext.h"
21668 "libev/corecext.c"
21669 "greenlet.c"
21670 "event.c"
21671 "_waiter.c"
21672 "_tracer.c"
21673 "_semaphore.c"
21674 "_imap.c"
21675 "_ident.c"
21676 "_hub_primitives.c"
21677 "_hub_local.c"
21678 "_greenlet_primitives.c"
21679 "_abstract_linkable.c")
21680 (find-files "." "\\.html$"))))))))
21681 (build-system pyproject-build-system)
21682 (arguments
21683 (list
21684 #:test-flags
21685 '(list
21686 ;; These tests relies on networking which is
21687 ;; not available in the build container.
21688 "test__getaddrinfo_import.py"
21689 ;; These tests rely on KeyboardInterrupts which do not
21690 ;; work inside the build container for some reason
21691 ;; (lack of controlling terminal?).
21692 "test__issues461_471.py"
21693 ;; TODO: Patch out the tests that use getprotobyname, etc
21694 ;; instead of disabling all the tests from these files.
21695 "test__resolver_dnspython.py"
21696 ;; This test contains 'test_unlink', which
21697 ;; fails on i686 (see: https://github.com/gevent/gevent/issues/1558).
21698 "test__core_stat.py")
21699 #:phases
21700 #~(modify-phases %standard-phases
21701 (add-before 'patch-source-shebangs 'patch-hard-coded-paths
21702 (lambda _
21703 (substitute* "src/gevent/subprocess.py"
21704 (("/bin/sh") (which "sh")))
21705 (for-each (lambda (file)
21706 (substitute* file
21707 (("/bin/sh") (which "sh"))
21708 (("/bin/true") (which "true"))))
21709 (find-files "src/greentest" "\\.py$"))))
21710 (add-before 'build 'do-not-use-bundled-sources
21711 (lambda _
21712 (setenv "GEVENTSETUP_EMBED" "0")
21713
21714 ;; Prevent building bundled libev.
21715 (substitute* "setup.py"
21716 (("run_make=_BUILDING")
21717 "run_make=False"))))
21718 (add-before 'build 'augment-C_INCLUDE_PATH
21719 (lambda* (#:key inputs #:allow-other-keys)
21720 (let* ((python (dirname (dirname
21721 (search-input-file
21722 inputs "bin/python"))))
21723 (version (python-version python))
21724 (greenlet (string-append
21725 #$(this-package-input "python-greenlet")
21726 "/include/python" version)))
21727 (setenv "C_INCLUDE_PATH"
21728 (string-append greenlet "/:"
21729 (or (getenv "C_INCLUDE_PATH")
21730 ""))))))
21731 (add-before 'check 'pretend-to-be-CI
21732 (lambda _
21733 ;; A few tests are skipped due to network constraints or
21734 ;; get longer timeouts when running in a CI environment.
21735 ;; Piggy-back on that, as we need the same adjustments.
21736 (setenv "TRAVIS" "1")
21737 (setenv "APPVEYOR" "1")))
21738 (add-before 'check 'adjust-tests
21739 (lambda* (#:key test-flags #:allow-other-keys)
21740 (call-with-output-file "skipped_tests.txt"
21741 (lambda (port)
21742 (format port "~a~%" (string-join test-flags "\n"))))))
21743 (replace 'check
21744 (lambda* (#:key tests? #:allow-other-keys)
21745 (when tests?
21746 ;; Use the build daemons configured number of workers.
21747 (setenv "NWORKERS" (number->string (parallel-job-count)))
21748 (invoke "python" "-m" "gevent.tests" "-unone" "--config"
21749 "known_failures.py" "--ignore" "skipped_tests.txt")))))))
21750 (propagated-inputs
21751 (list python-greenlet python-zope-event python-zope-interface))
21752 (native-inputs
21753 (list python-cffi
21754 python-cython
21755 python-dnspython
21756 python-idna
21757 python-objgraph
21758 python-psutil
21759 python-requests
21760 python-setuptools))
21761 (inputs
21762 (list c-ares libev libuv))
21763 (home-page "https://www.gevent.org/")
21764 (synopsis "Coroutine-based network library")
21765 (description
21766 "@code{gevent} is a coroutine-based Python networking library that uses
21767@code{greenlet} to provide a high-level synchronous API on top of the
21768@code{libev} event loop.")
21769 (license license:expat)))
21770
21771(define-public python-fastimport
21772 (package
21773 (name "python-fastimport")
21774 (version "0.9.16")
21775 (source
21776 (origin
21777 (method git-fetch)
21778 (uri (git-reference
21779 (url "https://github.com/jelmer/python-fastimport")
21780 (commit (string-append "v" version))))
21781 (file-name (git-file-name name version))
21782 (sha256
21783 (base32 "1pbnp9ffjs09ngva9qcizpscxl9s47rmd4dhxl62f5iwl6c46798"))))
21784 (build-system pyproject-build-system)
21785 (arguments (list #:test-backend #~'unittest))
21786 (native-inputs (list python-setuptools))
21787 (home-page "https://github.com/jelmer/python-fastimport")
21788 (synopsis "VCS fastimport parser and generator in Python")
21789 (description
21790 "This package provides a parser for and generator of the Git
21791@url{https://www.kernel.org/pub/software/scm/git/docs/git-fast-import.html,fastimport}
21792format.")
21793 (license license:gpl2+)))
21794
21795(define-public python-pika
21796 (package
21797 (name "python-pika")
21798 (version "1.3.2")
21799 (source
21800 (origin
21801 (method git-fetch)
21802 (uri (git-reference
21803 (url "https://github.com/pika/pika")
21804 (commit version)))
21805 (file-name (git-file-name name version))
21806 (sha256
21807 (base32 "0bmp79lds26y2976xrpf53r3acqzpf3wpkprhlh3asqpfv5pwipb"))))
21808 (build-system pyproject-build-system)
21809 (arguments
21810 (list
21811 #:test-flags
21812 ;; XXX: These test most likely require a running RabbitMQ server.
21813 #~(list "--ignore=tests/acceptance/blocking_adapter_test.py")
21814 #:phases
21815 #~(modify-phases %standard-phases
21816 (add-before 'check 'configure-tests
21817 (lambda* (#:key tests? #:allow-other-keys)
21818 (when tests?
21819 (setenv "PYTHONPATH" (getcwd))))))))
21820 (native-inputs (list python-pytest
21821 python-gevent
21822 python-tornado
21823 python-twisted
21824 python-setuptools))
21825 (home-page "https://pika.readthedocs.org")
21826 (synopsis "Pure Python AMQP Client Library")
21827 (description
21828 "Pika is a pure-Python implementation of the AMQP (Advanced Message Queuing
21829Protocol) 0-9-1 protocol that tries to stay fairly independent of the underlying
21830network support library.")
21831 (license license:bsd-3)))
21832
21833;; WARNING: This package is a dependency of mesa.
21834(define-public python-ply
21835 (package
21836 (name "python-ply")
21837 (version "3.11")
21838 (source
21839 (origin
21840 (method url-fetch)
21841 (uri (pypi-uri "ply" version))
21842 (sha256
21843 (base32 "18qx113g9bi1ac4indd5phma82zcdq601lxncp3vjn43m2mc3iq0"))))
21844 (build-system pyproject-build-system)
21845 (arguments (list #:tests? #f)) ;XXX: not tests in PyPI archvie, there are in Git
21846 (native-inputs
21847 (list python-setuptools
21848 python-wheel))
21849 (home-page "http://www.dabeaz.com/ply/")
21850 (synopsis "Python Lex & Yacc")
21851 (description "PLY is a @code{lex}/@code{yacc} implemented purely in Python.
21852It uses LR parsing and does extensive error checking.")
21853 (license license:bsd-3)))
21854
21855(define-public python-kazoo
21856 (package
21857 (name "python-kazoo")
21858 (version "2.10.0")
21859 (source
21860 (origin
21861 (method git-fetch)
21862 (uri (git-reference
21863 (url "https://github.com/python-zk/kazoo")
21864 (commit version)))
21865 (file-name (git-file-name name version))
21866 (sha256
21867 (base32 "1ic1ky4v64jw59in02hqmyxskd98v32msd46pmsp39l7iighjrn2"))))
21868 (build-system pyproject-build-system)
21869 (arguments (list #:tests? #f)) ; XXX: needs zookeeper
21870 (native-inputs (list python-setuptools))
21871 (home-page "https://kazoo.readthedocs.org")
21872 (synopsis "High-level Zookeeper client library")
21873 (description
21874 "Kazoo is a Python client library for the Apache Zookeeper distributed
21875application service. It is designed to be easy to use and to avoid common
21876programming errors.")
21877 (license license:asl2.0)))
21878
21879(define-public python-columnize
21880 (package
21881 (name "python-columnize")
21882 (version "0.3.11")
21883 (source
21884 (origin
21885 (method url-fetch)
21886 (uri (pypi-uri "columnize" version))
21887 (sha256
21888 (base32 "1clb3lfw694crq8m767q0yjaazkplcrbzdr9fr2w39hhndivhcd6"))))
21889 (build-system pyproject-build-system)
21890 (native-inputs (list python-pytest python-setuptools))
21891 (home-page "https://github.com/rocky/pycolumnize")
21892 (synopsis "Format a simple (i.e. not nested) list into aligned columns.")
21893 (description
21894 "This package provides a way to format a simple (i.e. not nested) list
21895into aligned columns.")
21896 (license license:expat)))
21897
21898(define-public python-chai
21899 (package
21900 (name "python-chai")
21901 (version "1.1.2")
21902 (source
21903 (origin
21904 (method url-fetch)
21905 (uri (pypi-uri "chai" version))
21906 (sha256
21907 (base32 "1k6n6zbgrrs83crp6mr3yqj9zlv40b8rpisyrliwsq7naml2p3gz"))
21908 (patches (search-patches "python-chai-drop-python2.patch"))))
21909 (build-system pyproject-build-system)
21910 (native-inputs (list python-pytest python-setuptools))
21911 (home-page "https://github.com/agoragames/chai")
21912 (synopsis "Mocking framework for Python")
21913 (description
21914 "Chai provides an api for mocking, stubbing and spying your python
21915objects, patterned after the Mocha library for Ruby.")
21916 (license license:bsd-3)))
21917
21918(define-public python-pysol-cards
21919 (package
21920 (name "python-pysol-cards")
21921 (version "0.24.0")
21922 (source
21923 (origin
21924 (method url-fetch)
21925 (uri (pypi-uri "pysol_cards" version))
21926 (sha256
21927 (base32 "0jsd7mqp0ak8zidg540b9hjncgx8diy9lv85zj6mi88sm0nlk1d9"))))
21928 (build-system pyproject-build-system)
21929 (arguments
21930 (list
21931 #:phases
21932 #~(modify-phases %standard-phases
21933 (replace 'check
21934 (lambda* (#:key test-flags tests? #:allow-other-keys)
21935 (when tests?
21936 (apply invoke
21937 "python"
21938 "-m"
21939 "unittest"
21940 "discover"
21941 "tests"
21942 test-flags)))))))
21943 (native-inputs (list python-setuptools python-wheel))
21944 (home-page "https://github.com/shlomif/pysol_cards")
21945 (synopsis "Deal PySol FC Cards")
21946 (description
21947 "The pysol-cards python modules provide code to generate the initial deals of
21948some PySol games.")
21949 (license license:expat)))
21950
21951(define-public python-freecell-solver
21952 (package
21953 (name "python-freecell-solver")
21954 (version "0.6.0")
21955 (source
21956 (origin
21957 (method url-fetch)
21958 (uri (pypi-uri "freecell_solver" version))
21959 (sha256
21960 (base32 "0cq77dmq21laqk8fhl61m33lbckymzk312r263x2mv93mccf8jrm"))))
21961 (build-system pyproject-build-system)
21962 (arguments
21963 (list
21964 #:phases
21965 #~(modify-phases %standard-phases
21966 (replace 'check
21967 (lambda* (#:key test-flags tests? #:allow-other-keys)
21968 (when tests?
21969 (apply invoke
21970 "python"
21971 "-m"
21972 "unittest"
21973 "discover"
21974 "tests"
21975 test-flags)))))))
21976 (propagated-inputs (list python-cffi))
21977 (native-inputs (list python-setuptools python-wheel))
21978 (home-page "https://pypi.org/project/freecell-solver/")
21979 (synopsis "Freecell Solver bindings")
21980 (description
21981 "This package provides Python bindings for the freecell-solver
21982package. Freecell Solver is a program that automatically solves layouts of
21983Freecell and similar variants of Card Solitaire such as Eight Off, Forecell,
21984and Seahaven Towers, as well as Simple Simon boards.")
21985 (license license:expat)))
21986
21987(define-public python-inflect
21988 (package
21989 (name "python-inflect")
21990 (version "7.5.0")
21991 (source (origin
21992 (method url-fetch)
21993 (uri (pypi-uri "inflect" version))
21994 (sha256
21995 (base32
21996 "07spmlkmskwhxc0j5j4ms3w0f6pyv3h8iqwcbahdabklqc0riwgs"))))
21997 (build-system pyproject-build-system)
21998 (propagated-inputs (list python-more-itertools python-typeguard
21999 python-typing-extensions))
22000 (native-inputs (list python-pygments python-pytest python-setuptools
22001 python-setuptools-scm python-wheel))
22002 (home-page "https://github.com/jaraco/inflect")
22003 (synopsis "Correctly generate plurals, singular nouns, ordinals, indefinite articles")
22004 (description
22005 "This Python module lets you correctly generate plurals, singular nouns,
22006ordinals, indefinite articles; it also can convert numbers to words.")
22007 (license license:expat)))
22008
22009(define-public python-inflection
22010 (package
22011 (name "python-inflection")
22012 (version "0.5.1")
22013 (source
22014 (origin
22015 (method git-fetch)
22016 (uri (git-reference
22017 (url "https://github.com/jpvanhal/inflection")
22018 (commit version)))
22019 (file-name (git-file-name name version))
22020 (sha256
22021 (base32 "0mvs6wgpi963k7mqrwzdkh32m29zcm772q0fy7pwszlcsh3l50kg"))))
22022 (build-system pyproject-build-system)
22023 (native-inputs (list python-pytest python-setuptools))
22024 (home-page "https://github.com/jpvanhal/inflection")
22025 (synopsis "Python string transformation library")
22026 (description
22027 "Inflection is a string transformation library. It singularizes
22028and pluralizes English words, and transforms strings from CamelCase to
22029underscored string.")
22030 (license license:expat)))
22031
22032(define-public python-krb5
22033 (package
22034 (name "python-krb5")
22035 (version "0.5.1")
22036 (source
22037 (origin
22038 (method url-fetch)
22039 (uri (pypi-uri "krb5" version))
22040 (sha256
22041 (base32 "1jivws8dsscsmyqngbc71r4qw8qmn98pqmhylz01r5dd1ljfw9bi"))))
22042 (build-system pyproject-build-system)
22043 (inputs (list mit-krb5))
22044 (native-inputs (list python-cython python-k5test python-pytest
22045 python-setuptools python-wheel))
22046 (home-page "https://github.com/jborean93/pykrb5")
22047 (synopsis "Kerberos API bindings for Python")
22048 (description "This library provides Python functions that wraps the
22049Kerberos 5 C API.")
22050 (license license:expat)))
22051
22052(define-public python-pylev
22053 (package
22054 (name "python-pylev")
22055 (version "1.4.0")
22056 (source
22057 (origin
22058 (method git-fetch)
22059 (uri (git-reference
22060 (url "https://github.com/toastdriven/pylev")
22061 (commit (string-append "v" version))))
22062 (file-name (git-file-name name version))
22063 (sha256
22064 (base32 "0fgxjdnvnvavnxmxxd0fl5jyr2f31g3a26bwyxcpy56mgpd095c1"))))
22065 (build-system pyproject-build-system)
22066 (arguments
22067 (list
22068 #:test-backend #~'custom
22069 #:test-flags #~(list "tests.py")))
22070 (native-inputs (list python-setuptools))
22071 (home-page "https://github.com/toastdriven/pylev")
22072 (synopsis "Levenshtein distance implementation in Python")
22073 (description
22074 "Pure Python Levenshtein implementation, based off the Wikipedia code
22075samples at @url{http://en.wikipedia.org/wiki/Levenshtein_distance}.")
22076 (license license:bsd-3)))
22077
22078(define-public python-cleo
22079 (package
22080 (name "python-cleo")
22081 (version "2.1.0")
22082 (source (origin
22083 (method url-fetch)
22084 (uri (pypi-uri "cleo" version))
22085 (sha256
22086 (base32
22087 "08ym7xaalxzka3k9wp7i05n6j9xmmjs1y02ilrz0lrhkbl5qhb0b"))))
22088 (build-system pyproject-build-system)
22089 (native-inputs
22090 (list python-poetry-core
22091 python-mock
22092 python-pytest-mock
22093 python-pytest))
22094 (propagated-inputs
22095 (list python-crashtest python-rapidfuzz))
22096 (home-page "https://github.com/sdispater/cleo")
22097 (synopsis "Command-line arguments library for Python")
22098 (description
22099 "Cleo allows you to create command-line commands with signature in
22100docstring and colored output.")
22101 (license license:expat)))
22102
22103(define-public python-shellingham
22104 (package
22105 (name "python-shellingham")
22106 (version "1.5.4")
22107 (source
22108 (origin
22109 (method url-fetch)
22110 (uri (pypi-uri "shellingham" version))
22111 (sha256
22112 (base32 "1ph46hv920ha9clwxgrllbrphh0ww4v4pjmkbb9mnzj8kmrs1g4d"))))
22113 (build-system pyproject-build-system)
22114 (native-inputs
22115 (list python-pytest python-pytest-mock python-setuptools python-wheel))
22116 (home-page "https://github.com/sarugaku/shellingham")
22117 (synopsis "Tool to detect surrounding shell")
22118 (description
22119 "Shellingham detects what shell the current Python executable is
22120running in.")
22121 (license license:isc)))
22122
22123(define-public python-shshsh
22124 (package
22125 (name "python-shshsh")
22126 (version "1.0.5")
22127 (source
22128 (origin
22129 (method git-fetch)
22130 (uri
22131 (git-reference
22132 (url "https://github.com/zqqqqz2000/shshsh")
22133 (commit
22134 "fd21c8696aebaae04507760c16cb45979291fef5")))
22135 (file-name (git-file-name name version))
22136 (sha256
22137 (base32
22138 "1wzqyj1a6jj6cyv5ymzy834qm2lyq80yy1kfz0q0zayq9gm1cj7f"))))
22139 (build-system pyproject-build-system)
22140 (native-inputs
22141 (list python-poetry-core
22142 python-pytest))
22143 (home-page "https://github.com/zqqqqz2000/shshsh")
22144 (synopsis "Write Shell commands simply and safely within Python")
22145 (description "This package provides a way to write Shell commands from
22146within Python. Python functions can be chained together to process input
22147Bash control characters are escapted so that parameters can be passed
22148without worrying about command injection.")
22149 (license license:expat)))
22150
22151(define-public python-memcached
22152 (package
22153 (name "python-memcached")
22154 (version "1.62")
22155 (source
22156 (origin
22157 (method git-fetch)
22158 (uri (git-reference
22159 (url "https://github.com/linsomniac/python-memcached")
22160 (commit version)))
22161 (file-name (git-file-name name version))
22162 (sha256
22163 (base32 "1chw36v1g4zz32s2qc2ql1hzrd1ys8d4abjdjnjgg8anpx13hjj2"))))
22164 (build-system pyproject-build-system)
22165 (arguments
22166 (list
22167 #:tests? #f ;Requires a connection to a socket.
22168 #:test-backend #~'unittest))
22169 (native-inputs (list python-setuptools))
22170 (home-page "https://github.com/linsomniac/python-memcached")
22171 (synopsis "Pure python memcached client")
22172 (description
22173 "This software is a pure Python interface to the memcached memory cache
22174daemon. It is the client side software which allows storing values in one or
22175more, possibly remote, memcached servers.")
22176 (license license:psfl)))
22177
22178(define-public python-mergedeep
22179 (package
22180 (name "python-mergedeep")
22181 (version "1.3.4")
22182 (source
22183 (origin
22184 (method git-fetch)
22185 (uri (git-reference
22186 (url "https://github.com/clarketm/mergedeep")
22187 (commit (string-append "v" version))))
22188 (file-name (git-file-name name version))
22189 (sha256
22190 (base32 "1msvvdzk33sxzgyvs4fs8dlsrsi7fjj038z83s0yw5h8m8d78469"))))
22191 (build-system pyproject-build-system)
22192 (arguments (list #:test-backend #~'unittest))
22193 (native-inputs (list python-setuptools))
22194 (home-page "https://github.com/clarketm/mergedeep")
22195 (synopsis "Deep merge function for Python")
22196 (description
22197 "This package provides a deep merge function for Python, useful to
22198combine multiple data objects as one.")
22199 (license license:expat)))
22200
22201(define-public python-clikit
22202 (package
22203 (name "python-clikit")
22204 (version "0.6.2")
22205 (source
22206 (origin
22207 (method git-fetch)
22208 (uri (git-reference
22209 (url "https://github.com/sdispater/clikit")
22210 (commit version)))
22211 (file-name (git-file-name name version))
22212 (sha256
22213 (base32 "1l11iriqc61m30fp17yxwkgl5900kiw8x8vw2i93n1jh2lv182y4"))))
22214 (build-system pyproject-build-system)
22215 (arguments
22216 (list
22217 #:phases
22218 #~(modify-phases %standard-phases
22219 (add-after 'unpack 'relax-requirements
22220 (lambda _
22221 (substitute* "pyproject.toml"
22222 (("^crashtest.*")
22223 (format #f "crashtest=~s"
22224 #$(package-version
22225 (this-package-input "python-crashtest"))))))))))
22226 (native-inputs (list python-poetry-core python-pytest python-pytest-mock))
22227 (propagated-inputs (list python-crashtest python-pastel python-pylev))
22228 (home-page "https://github.com/sdispater/clikit")
22229 (synopsis "Group of utilities to build command line interfaces")
22230 (description
22231 "CliKit is a group of utilities to build testable command line
22232interfaces.")
22233 (license license:expat)))
22234
22235(define-public python-cattrs
22236 (package
22237 (name "python-cattrs")
22238 (version "24.1.2")
22239 (source (origin
22240 (method git-fetch) ;for tests
22241 (uri (git-reference
22242 (url "https://github.com/python-attrs/cattrs")
22243 (commit (string-append "v" version))))
22244 (file-name (git-file-name name version))
22245 (sha256
22246 (base32
22247 "0l806xs0insnvnd1c2l6f6bcaa7wgfrpvbbcyhhsvf2xy9mzq8rd"))))
22248 (build-system pyproject-build-system)
22249 (arguments
22250 (list
22251 #:test-flags
22252 '(list "--numprocesses" (number->string (parallel-job-count))
22253 ;; Skip all benchmark tests.
22254 "--ignore=bench/test_attrs_collections.py"
22255 "--ignore=bench/test_attrs_nested.py"
22256 "--ignore=bench/test_attrs_primitives.py"
22257 "--ignore=bench/test_primitives.py"
22258 "-k"
22259 (string-join
22260 ;; XXX: Tests fail with error: AssertionError: assert ...,
22261 ;; check why.
22262 (list "not test_msgspec_json_converter"
22263 "test_structure_simple_from_dict_default"
22264 "test_310_optional_field_roundtrip"
22265 "test_310_union_field_roundtrip"
22266 "test_individual_overrides"
22267 "test_nested_roundtrip"
22268 "test_nested_roundtrip_tuple"
22269 "test_omit_default_roundtrip"
22270 "test_optional_field_roundtrip"
22271 "test_renaming"
22272 ;; 'utf-8' codec can't encode character '\ud800' in
22273 ;; position 0: surrogates not allowed
22274 "test_simple_classes"
22275 ;; This test fails with an assertion error on the build
22276 ;; farm, but not on my laptop.
22277 "test_nodefs_generated_unstructuring_cl"
22278 ;; See https://github.com/python-attrs/cattrs/issues/575
22279 "test_simple_roundtrip"
22280 "test_simple_roundtrip_defaults"
22281 "test_simple_roundtrip_defaults_tuple"
22282 "test_simple_roundtrip_tuple"
22283 "test_simple_roundtrip_with_extra_keys_forbidden"
22284 "test_structure_simple_from_dict_default"
22285 "test_union_field_roundtrip"
22286 "test_unmodified_generated_structuring")
22287 " and not "))
22288 #:phases
22289 #~(modify-phases %standard-phases
22290 (add-after 'unpack 'patch-pyproject
22291 (lambda _
22292 (substitute* "pyproject.toml"
22293 ;; Fix version string
22294 (("dynamic = \\[\"version\"\\]")
22295 (string-append "version = \"" #$version "\""))
22296 ;; Just run pytest with no frills
22297 (("addopts = \"-l.*") ""))))
22298 ;; XXX Our python-hypothesis package is too old.
22299 (add-after 'unpack 'compatibility
22300 (lambda _
22301 (substitute* "tests/typed.py"
22302 (("characters\\(codec=codec\\)")
22303 "characters()")))))))
22304 (native-inputs
22305 (list python-hatchling
22306 python-hatch-vcs
22307 python-hypothesis
22308 python-immutables
22309 python-msgpack
22310 python-msgspec
22311 python-poetry-core
22312 python-pymongo ;for the bson module
22313 python-pytest
22314 python-pytest-benchmark
22315 python-pytest-xdist))
22316 (propagated-inputs
22317 (list python-attrs
22318 python-cbor2
22319 python-exceptiongroup
22320 python-orjson
22321 python-pyyaml
22322 python-tomlkit
22323 python-typing-extensions
22324 python-ujson))
22325 (home-page "https://github.com/python-attrs/cattrs")
22326 (synopsis "Python library for structuring and unstructuring data")
22327 (description "@code{cattrs} is an Python library for structuring and
22328unstructuring data. @code{cattrs} works best with @code{attrs} classes,
22329@code{dataclasses} and the usual Python collections, but other kinds of
22330classes can also be supported by manually registering converters.")
22331 (license license:expat)))
22332
22333(define-public python-cachy
22334 (package
22335 (name "python-cachy")
22336 (version "0.3.0")
22337 (source
22338 (origin
22339 (method url-fetch)
22340 (uri (pypi-uri "cachy" version))
22341 (sha256
22342 (base32 "1cb9naly8ampzlky7h74n5wj628l7jkpsh0c0jz0namlrvs82r8q"))))
22343 (build-system pyproject-build-system)
22344 (arguments
22345 (list
22346 #:phases
22347 #~(modify-phases %standard-phases
22348 (replace 'check
22349 (lambda* (#:key tests? #:allow-other-keys)
22350 (when tests?
22351 ;; Make it compatible with python-flexmock 0.12.
22352 (substitute* (find-files "tests" "\\.py$")
22353 (("from flexmock import flexmock, flexmock_teardown")
22354 (string-append "from flexmock import flexmock\n"
22355 "from flexmock._api import flexmock_teardown")))
22356 (invoke "pifpaf" "run" "memcached" "--port" "11211" "--"
22357 "pytest")))))))
22358 (native-inputs
22359 (list memcached
22360 python-fakeredis
22361 python-flexmock
22362 python-pifpaf
22363 python-pytest
22364 python-setuptools
22365 python-wheel))
22366 (propagated-inputs
22367 (list python-memcached
22368 python-msgpack
22369 python-redis))
22370 (home-page "https://github.com/sdispater/cachy")
22371 (synopsis "Simple yet effective caching library")
22372 (description
22373 "Cachy provides a simple yet effective caching library. A simple but
22374powerful API: thread-safety; decorator syntax; support for memcached, redis,
22375database, file, dict stores. Cachy supports python versions 2.7+ and 3.2+.")
22376 (license license:expat)))
22377
22378(define-public python-pyproject-api
22379 (package
22380 (name "python-pyproject-api")
22381 (version "1.8.0")
22382 (source
22383 (origin
22384 (method url-fetch)
22385 (uri (pypi-uri "pyproject_api" version))
22386 (sha256
22387 (base32 "15l4fx1v4dqhhysxd2mcm1vn4qvrwbqmf6y2zkp36pgb5ygh9f3p"))))
22388 (build-system pyproject-build-system)
22389 (arguments
22390 (list
22391 #:test-flags
22392 '(list "-k" (string-append
22393 ;; This fails because of extraneous parentheses
22394 "not test_setuptools_prepare_metadata_for_build_wheel"
22395 ;; This fails because wheel shows up in requirements
22396 " and not test_setuptools_get_requires_for_build_wheel"))))
22397 (native-inputs
22398 (list python-covdefaults
22399 python-hatch-vcs
22400 python-hatchling
22401 python-pytest
22402 python-pytest-cov
22403 python-pytest-mock
22404 python-setuptools
22405 python-wheel))
22406 (propagated-inputs
22407 (list python-packaging python-tomli))
22408 (home-page "https://pyproject-api.readthedocs.io/latest/")
22409 (synopsis "API to interact with the Python pyproject.toml based projects")
22410 (description
22411 "@code{pyproject-api} aims to abstract away interaction with
22412@code{pyproject.toml} style projects in a flexible way.")
22413 (license license:expat)))
22414
22415(define-public python-pyproject-hooks
22416 (package
22417 (name "python-pyproject-hooks")
22418 (version "1.2.0")
22419 (source
22420 (origin
22421 (method url-fetch)
22422 (uri (pypi-uri "pyproject_hooks" version))
22423 (sha256
22424 (base32 "1y511nblr0lslz1d5s46844f5raryjnp3n1dci499bhgqkarp18y"))))
22425 (build-system pyproject-build-system)
22426 (native-inputs
22427 (list python-flit-core
22428 python-pytest
22429 python-testpath))
22430 (home-page "https://github.com/pypa/pyproject-hooks")
22431 (synopsis "Low-level library for calling @file{pyproject.toml} backends")
22432 (description
22433 "@code{pyproject-hooks} is a low-level library for calling build backends
22434in @file{pyproject.toml}-based projects. It provides basic functionality to
22435write tooling that generates distribution files from Python projects.")
22436 (license license:expat)))
22437
22438(define-public python-lark
22439 (package
22440 (name "python-lark")
22441 (version "1.2.2")
22442 (source
22443 (origin
22444 (method url-fetch)
22445 (uri (pypi-uri "lark" version))
22446 (sha256
22447 (base32 "107d1w24b3ln4zwsw4yvkfhff6bk5n3cpvlgbbqww5ndc80pv06a"))))
22448 (build-system pyproject-build-system)
22449 (native-inputs (list python-pytest python-setuptools python-wheel))
22450 (home-page "https://github.com/lark-parser/lark")
22451 (synopsis "Multi-language parser for Python")
22452 (description
22453 "Lark is a parser built with a focus on ergonomics, performance and
22454resilience. Lark can parse all context-free languages. That means it is
22455capable of parsing almost any programming language out there, and to
22456some degree most natural languages too.")
22457 (license license:expat)))
22458
22459(define-public python-find-libpython
22460 (package
22461 (name "python-find-libpython")
22462 (version "0.4.1")
22463 (source
22464 (origin
22465 (method git-fetch)
22466 (uri (git-reference
22467 (url "https://github.com/ktbarrett/find_libpython")
22468 (commit (string-append "v" version))))
22469 (file-name (git-file-name name version))
22470 (sha256
22471 (base32 "173qxif277vc23kgidwbkxx7z7b7676f8lv5kxy9pd82228m8m79"))))
22472 (build-system pyproject-build-system)
22473 (native-inputs (list python-setuptools python-wheel
22474 ;; tests
22475 python-pytest))
22476 (home-page "https://github.com/ktbarrett/find_libpython")
22477 (synopsis "Find the path to the @code{libpython} dynamic library")
22478 (description
22479 "@code{find_libpython} helps find the path to the
22480@code{libpython} dynamic library for the current Python environment. It is
22481both a script and a Python package.")
22482 (license license:expat)))
22483
22484(define-public python-libcst
22485 (package
22486 (name "python-libcst")
22487 (version "1.6.0")
22488 (source (origin
22489 (method url-fetch)
22490 (uri (pypi-uri "libcst" version))
22491 (sha256
22492 (base32
22493 "1nzhvg52whpmfv8fkrnv7rlrmgc5m43hpyp8ra9kffx47yzcs3p8"))
22494 (snippet
22495 #~(begin (use-modules (guix build utils))
22496 ;; This is mostly to keep the cargo-build-system happy
22497 (with-output-to-file "Cargo.toml"
22498 (lambda ()
22499 (format #t "\
22500[workspace]
22501
22502members = [
22503 \"native\",]")))))))
22504 (build-system cargo-build-system)
22505 (arguments
22506 (list
22507 #:install-source? #false
22508 #:cargo-test-flags
22509 ;; According to .github/workflows/ci.yml
22510 '(list "--manifest-path=native/Cargo.toml"
22511 "--release"
22512 "--no-default-features")
22513 #:imported-modules `(,@%pyproject-build-system-modules
22514 ,@%cargo-build-system-modules)
22515 #:modules `((guix build cargo-build-system)
22516 ((guix build pyproject-build-system) #:prefix py:)
22517 (guix build utils))
22518 #:phases
22519 (with-extensions (list (pyproject-guile-json))
22520 #~(modify-phases %standard-phases
22521 (add-after 'unpack 'prepare-source
22522 (lambda _
22523 (delete-file "native/Cargo.lock")))
22524 (replace 'build
22525 (assoc-ref py:%standard-phases 'build))
22526 (add-after 'install 'wrap
22527 (lambda _
22528 ;; Collection of python- and pyproject-build-system phases
22529 ;; between 'install and 'check.
22530 (assoc-ref py:%standard-phases 'add-install-to-pythonpath)
22531 (assoc-ref py:%standard-phases 'add-install-to-path)
22532 (assoc-ref py:%standard-phases 'wrap)
22533 (assoc-ref py:%standard-phases 'create-entrypoints)
22534 (assoc-ref py:%standard-phases 'compile-bytecode)))
22535 ;; We are not the only ones who cannot load libcst.native
22536 ;; during the 'check phase
22537 ;; https://github.com/Instagram/LibCST/issues/1176
22538 ;; (add-after 'wrap 'python-check
22539 ;; (lambda args
22540 ;; (apply (assoc-ref py:%standard-phases 'check)
22541 ;; #:test-flags '()
22542 ;; args)))
22543 (replace 'install
22544 (assoc-ref py:%standard-phases 'install))))))
22545 (native-inputs
22546 (list python-minimal-wrapper
22547 python-hypothesmith
22548 python-pytest
22549 python-setuptools
22550 python-setuptools-rust
22551 python-setuptools-scm
22552 python-wheel))
22553 (inputs (cons maturin (cargo-inputs 'python-libcst)))
22554 (propagated-inputs
22555 (list python-pyyaml))
22556 (home-page "https://github.com/Instagram/LibCST")
22557 (synopsis "Concrete Syntax Tree (CST) parser and serializer library for Python")
22558 (description
22559 "LibCST parses Python source code as a CST tree that keeps all
22560formatting details (comments, whitespaces, parentheses, etc). It's useful
22561for building automated refactoring (codemod) applications and linters.
22562LibCST creates a compromise between an Abstract Syntax Tree (AST) and
22563a traditional Concrete Syntax Tree (CST). By carefully reorganizing and
22564naming node types and fields, LibCST creates a lossless CST that looks and
22565feels like an AST.")
22566 (license (list license:expat
22567 ;; Some files unde libcst/_parser/ are under Python Software
22568 ;; Foundation license (see LICENSE file for details)
22569 license:psfl
22570 ;; libcst/_add_slots.py
22571 license:asl2.0))))
22572
22573(define-public python-libcst-minimal
22574 (hidden-package
22575 (package
22576 (inherit python-libcst)
22577 (name "python-libcst-minimal")
22578 (arguments
22579 (substitute-keyword-arguments (package-arguments python-libcst)
22580 ((#:tests? _ #t) #f)))
22581 (native-inputs
22582 (list python-minimal-wrapper
22583 python-setuptools
22584 python-setuptools-rust
22585 python-setuptools-scm
22586 python-wheel)))))
22587
22588(define-public python-lazy-loader
22589 (package
22590 (name "python-lazy-loader")
22591 (version "0.4")
22592 (source (origin
22593 (method url-fetch)
22594 (uri (pypi-uri "lazy_loader" version))
22595 (sha256
22596 (base32
22597 "1lacaz292qxpgw6kxiirkx6sv9c5883nq4ssm3hs94cvb2153is7"))))
22598 (build-system pyproject-build-system)
22599 (native-inputs
22600 (list python-numpy python-pytest python-setuptools))
22601 (propagated-inputs
22602 (list python-flit-core
22603 python-setuptools
22604 python-wheel))
22605 (home-page "https://scientific-python.org/specs/spec-0001/")
22606 (synopsis "Load subpackages and functions on demand")
22607 (description "@code{python-lazy-loader} makes it easy to load subpackages
22608and functions on demand. Its main features are:
22609
22610@itemize
22611@item Allow subpackages to be made visible to users without incurring import
22612costs.
22613@item Allow external libraries to be imported only when used, improving import
22614times.
22615@end itemize")
22616 (license license:bsd-3)))
22617
22618(define-public python-lazy-object-proxy
22619 (package
22620 (name "python-lazy-object-proxy")
22621 (version "1.11.0")
22622 (source
22623 (origin
22624 (method url-fetch)
22625 (uri (pypi-uri "lazy_object_proxy" version))
22626 (sha256
22627 (base32 "174fswfrsqr7yj72f8fyry34qxgagbfw37vzljxbp7schq8l91qq"))))
22628 (build-system pyproject-build-system)
22629 (native-inputs
22630 (list python-pytest
22631 python-pytest-benchmark
22632 python-setuptools
22633 python-setuptools-scm
22634 python-wheel))
22635 (home-page "https://github.com/ionelmc/python-lazy-object-proxy")
22636 (synopsis "Lazy object proxy for Python")
22637 (description
22638 "Lazy object proxy is an object that wraps a callable but defers the call
22639until the object is actually required, and caches the result of said call.")
22640 (license license:bsd-2)))
22641
22642(define-public python-dnspython
22643 (package
22644 (name "python-dnspython")
22645 (version "2.7.0")
22646 (source
22647 (origin
22648 (method url-fetch)
22649 (uri (pypi-uri "dnspython" version))
22650 (sha256
22651 (base32 "1wgsbiz90npdi47cilmwdccm29hl9qddzkm533v1rj8dv8p4776f"))))
22652 (build-system pyproject-build-system)
22653 (arguments
22654 (list
22655 #:test-flags
22656 #~(list
22657 ;; AssertionError: assert False
22658 "--deselect=tests/test_features.py::test_have"
22659 ;; dns.exception.SyntaxError: protocol not found
22660 "--deselect=tests/test_rdata.py::RdataTestCase::test_misc_good_WKS_text"
22661 ;; ECDSA with deterministic signature (RFC 6979) is not supported by
22662 ;; this version of OpenSSL.
22663 "-k" (string-append "not testDeterministicSignatureECDSAP256SHA256"
22664 " and not testSignatureECDSAP256SHA256"
22665 " and not testSignatureECDSAP384SHA384"
22666 " and not test_ecdsa"))
22667 #:phases
22668 #~(modify-phases %standard-phases
22669 (add-after 'unpack 'patch-getprotobyname-calls
22670 ;; These calls are problematic in the build environment as there is
22671 ;; no /etc/protocols. This breaks the sanity-check phase of any
22672 ;; package depending on this one.
22673 (lambda _
22674 (substitute* "dns/rdtypes/IN/WKS.py"
22675 (("socket.getprotobyname\\('tcp'\\)")
22676 "6")
22677 (("socket.getprotobyname\\('udp'\\)")
22678 "17")))))))
22679 (native-inputs
22680 (list python-hatchling
22681 python-pytest))
22682 (propagated-inputs
22683 (append
22684 (if (supported-package? python-cryptography)
22685 (list ;; DNSSEC
22686 python-cryptography
22687 ;; DNS over Quic
22688 python-aioquic
22689 ;; DNS over HTTPS
22690 python-h2
22691 python-httpcore
22692 python-httpx)
22693 '())
22694 (list python-idna
22695 python-trio)))
22696 (home-page "https://www.dnspython.org")
22697 (synopsis "DNS toolkit for Python")
22698 (description
22699 "dnspython is a DNS toolkit for Python. It supports almost all record
22700types. It can be used for queries, zone transfers, and dynamic updates.
22701It supports TSIG authenticated messages and EDNS0.")
22702 (license license:expat)))
22703
22704(define-public python-dnspython-1.16
22705 (package
22706 (inherit python-dnspython)
22707 (version "1.16.0")
22708 (source (origin
22709 (method url-fetch)
22710 (uri (string-append "http://www.dnspython.org/kits/"
22711 version "/dnspython-" version ".tar.gz"))
22712 (sha256
22713 (base32
22714 "1yaw7irazy42n0kdhlk7wyg8ki34rxcnc5xbc1wfwy245b0wbxab"))))
22715 (arguments
22716 (list
22717 #:phases
22718 #~(modify-phases %standard-phases
22719 (add-after 'unpack 'compatibility
22720 (lambda _
22721 (substitute* "dns/namedict.py"
22722 (("collections.MutableMapping")
22723 "collections.abc.MutableMapping"))))
22724 (add-after 'unpack 'patch-getprotobyname-calls
22725 ;; These calls are problematic in the build environment as there is
22726 ;; no /etc/protocols. This breaks the sanity-check phase of any
22727 ;; package depending on this one.
22728 (lambda _
22729 (substitute* "dns/rdtypes/IN/WKS.py"
22730 (("socket.getprotobyname\\('tcp'\\)")
22731 "6")
22732 (("socket.getprotobyname\\('udp'\\)")
22733 "17")))))))
22734 (native-inputs (list python-pytest python-setuptools python-wheel))))
22735
22736(define-public python-py3dns
22737 (package
22738 (name "python-py3dns")
22739 (version "4.0.2")
22740 (source
22741 (origin
22742 (method url-fetch)
22743 (uri (pypi-uri "py3dns" version))
22744 (sha256
22745 (base32 "0fcac412kh34r3gxvn7dc1srmjii2qs6n3lgyxh3q57cxj02wrcq"))))
22746 (build-system pyproject-build-system)
22747 (arguments
22748 ;; This package wants to read /etc/resolv.conf. We can't patch it without
22749 ;; removing functionality so we don't run tests.
22750 (list #:tests? #f))
22751 (native-inputs (list python-flit-core))
22752 (home-page "https://launchpad.net/py3dns")
22753 (synopsis "Python 3 DNS library")
22754 (description
22755 "This Python 3 module provides a DNS API for looking up DNS entries from
22756within Python 3 modules and applications. This module is a simple,
22757lightweight implementation.")
22758 (license license:psfl)))
22759
22760(define-public python-email-validator
22761 (package
22762 (name "python-email-validator")
22763 (version "2.2.0")
22764 (source
22765 (origin
22766 (method url-fetch)
22767 (uri (pypi-uri "email_validator" version))
22768 (sha256
22769 (base32 "1dw28lv9lpsw2s7dylhih93fn72s8iqyfsp6497p2yk19hs0ysfb"))))
22770 (build-system pyproject-build-system)
22771 (arguments
22772 (list
22773 #:test-flags
22774 ;; dns.resolver.NoResolverConfiguration: cannot open /etc/resolv.conf
22775 #~(list "-k" "not test_caching_dns_resolver")))
22776 (native-inputs
22777 (list python-pytest
22778 python-setuptools
22779 python-wheel))
22780 (propagated-inputs
22781 (list python-dnspython
22782 python-idna))
22783 (home-page "https://github.com/JoshData/python-email-validator")
22784 (synopsis "Email address validation library for Python")
22785 (description
22786 "This library validates email address syntax and deliverability.")
22787 (license license:cc0)))
22788
22789(define-public python-faker
22790 (package
22791 (name "python-faker")
22792 (version "37.4.2")
22793 (source
22794 (origin
22795 (method url-fetch)
22796 (uri (pypi-uri "faker" version))
22797 (sha256
22798 (base32 "02kbql0mgjh98ilz5crxlkrsl9qdqlfa5gmqjn46br9hxax1na4f"))))
22799 (build-system pyproject-build-system)
22800 ;; tests: 2104 passed, 12 skipped, 2 warnings
22801 (native-inputs
22802 (list python-freezegun
22803 python-pytest
22804 python-setuptools
22805 python-ukpostcodeparser
22806 python-validators))
22807 (propagated-inputs
22808 (list python-tzdata))
22809 (home-page "https://github.com/joke2k/faker")
22810 (synopsis "Python package that generates fake data")
22811 (description
22812 "Faker is a Python package that generates fake data such as names,
22813addresses, and phone numbers.")
22814 (license license:expat)))
22815
22816(define-public python-pyaml
22817 (package
22818 (name "python-pyaml")
22819 (version "25.7.0")
22820 (source
22821 (origin
22822 (method url-fetch)
22823 (uri (pypi-uri "pyaml" version))
22824 (sha256
22825 (base32 "16yrflm7iyz82igpzlba16cbvwfwny2fnarf14mvz0b8q57ac4z1"))))
22826 (build-system pyproject-build-system)
22827 (native-inputs
22828 (list python-pytest
22829 python-setuptools))
22830 (propagated-inputs
22831 (list python-pyyaml))
22832 (home-page "https://github.com/mk-fg/pretty-yaml")
22833 (synopsis "YAML pretty-print library for Python")
22834 (description
22835 "pyaml is a PyYAML based python module to produce pretty and readable
22836YAML-serialized data.")
22837 (license license:wtfpl2)))
22838
22839(define-public python-pyyaml-env-tag
22840 (package
22841 (name "python-pyyaml-env-tag")
22842 (version "1.1")
22843 (source
22844 (origin
22845 (method git-fetch)
22846 (uri (git-reference
22847 (url "https://github.com/waylan/pyyaml-env-tag")
22848 (commit version)))
22849 (file-name (git-file-name name version))
22850 (sha256
22851 (base32 "16zkwmnlzzsdlxs9ww3b51mcarni2ykmi0v7752l7j4najxw875n"))))
22852 (build-system pyproject-build-system)
22853 (native-inputs (list python-pytest python-setuptools))
22854 (propagated-inputs (list python-pyyaml))
22855 (home-page "https://github.com/waylan/pyyaml-env-tag")
22856 (synopsis "Custom YAML tag for environment variables")
22857 (description
22858 "This package provides a custom YAML tag for referencing environment
22859variables in YAML files.")
22860 (license license:expat)))
22861
22862(define-public python-prompt-toolkit
22863 (package
22864 (name "python-prompt-toolkit")
22865 (version "3.0.51")
22866 (source
22867 (origin
22868 (method url-fetch)
22869 (uri (pypi-uri "prompt_toolkit" version))
22870 (sha256
22871 (base32 "1valgcf324yy0sf7rrbm2ivc4a65n8gvnj0vdz491z177cp1c6lk"))))
22872 (build-system pyproject-build-system)
22873 (arguments
22874 (list
22875 #:phases
22876 #~(modify-phases %standard-phases
22877 (add-before 'check 'pre-check
22878 (lambda _
22879 ;; HOME is needed for the test
22880 ;; "test_pathcompleter_can_expanduser".
22881 (setenv "HOME" "/tmp"))))))
22882 (native-inputs
22883 (list python-pytest
22884 python-setuptools))
22885 (propagated-inputs
22886 (list python-wcwidth))
22887 (home-page "https://github.com/prompt-toolkit/python-prompt-toolkit")
22888 (synopsis "Library for building command line interfaces in Python")
22889 (description
22890 "Prompt-Toolkit is a library for building interactive command line
22891interfaces in Python. It's like GNU Readline but it also features syntax
22892highlighting while typing, out-of-the-box multi-line input editing, advanced
22893code completion, incremental search, support for Chinese double-width
22894characters, mouse support, and auto suggestions.")
22895 (license license:bsd-3)))
22896
22897(define-public python-proselint
22898 (package
22899 (name "python-proselint")
22900 (version "0.14.0")
22901 (source
22902 (origin
22903 (method url-fetch)
22904 (uri (pypi-uri "proselint" version))
22905 (sha256
22906 (base32 "11hfd207bhsvb0iznlnbr0w7jxihvn3ismpjbmz7c57a5ckn8jb2"))))
22907 (build-system pyproject-build-system)
22908 (arguments
22909 (list
22910 #:phases
22911 #~(modify-phases %standard-phases
22912 (add-after 'unpack 'set-home-directory
22913 (lambda _
22914 (setenv "HOME" "/tmp"))))))
22915 (native-inputs
22916 (list python-poetry-core
22917 python-pytest))
22918 (propagated-inputs
22919 (list python-click))
22920 (home-page "http://proselint.com/")
22921 (synopsis "Linter for prose")
22922 (description "@code{python-proselint} is a linter for English prose, that
22923scans through a file and detects issues.")
22924 (license license:bsd-3)))
22925
22926(define-public python-jedi
22927 (package
22928 (name "python-jedi")
22929 (version "0.19.2")
22930 (source
22931 (origin
22932 (method git-fetch)
22933 (uri (git-reference
22934 (url "https://github.com/davidhalter/jedi")
22935 (commit (string-append "v" version))
22936 (recursive? #true)))
22937 (file-name (git-file-name name version))
22938 (sha256
22939 (base32
22940 "0w8rrw6s4bzr5csds8bhasrmzh9q77zh5dzisjysl8cb5qjx0w6s"))))
22941 (build-system pyproject-build-system)
22942 (arguments
22943 (list
22944 #:phases
22945 '(modify-phases %standard-phases
22946 (add-before 'check 'set-HOME
22947 (lambda _ (setenv "HOME" "/tmp"))))))
22948 (native-inputs
22949 (list python-docopt
22950 python-pytest
22951 python-setuptools
22952 python-wheel))
22953 (propagated-inputs
22954 (list python-parso))
22955 (home-page "https://github.com/davidhalter/jedi")
22956 (synopsis "Autocompletion and static analysis library for Python")
22957 (description
22958 "Jedi is a static analysis tool for Python that can be used in Integrated
22959Development Environments (@dfn{IDE}s) and text editors. It understands Python
22960on a deeper level than many other static analysis frameworks for Python.
22961
22962Jedi understands docstrings and you can use Jedi autocompletion in your REPL
22963as well.")
22964 (license license:expat)))
22965
22966(define-public ptpython
22967 (package
22968 (name "ptpython")
22969 (version "3.0.20")
22970 (source
22971 (origin
22972 (method git-fetch)
22973 (uri (git-reference
22974 (url "https://github.com/jonathanslenders/ptpython")
22975 (commit version)))
22976 (file-name (git-file-name name version))
22977 (sha256
22978 (base32 "0qbj7d4qkzl8l05kpmm19953lmqk379i17ab8g3sfnmfpsy3ji5m"))))
22979 (build-system pyproject-build-system)
22980 (arguments
22981 (list
22982 ;; XXX: There is a tests/run_tests.py file but all it does is a
22983 ;; sanity check.
22984 #:tests? #f))
22985 (native-inputs (list python-setuptools))
22986 (propagated-inputs
22987 (list python-appdirs python-jedi python-prompt-toolkit python-pygments))
22988 (home-page "https://github.com/jonathanslenders/ptpython")
22989 (synopsis "Python Read-Eval-Print-Loop with nice IDE-like features")
22990 (description
22991 "ptpython is a Python read-eval-print loop with IDE-like features.
22992It supports syntax highlighting, multiline editing, autocompletion, mouse,
22993color schemes, bracketed paste, Vi and Emacs keybindings, Chinese characters
22994etc.")
22995 (license license:bsd-3)))
22996
22997(define-public python-easyprocess
22998 (package
22999 (name "python-easyprocess")
23000 (version "1.1")
23001 (source
23002 (origin
23003 (method git-fetch)
23004 (uri (git-reference
23005 (url "https://github.com/ponty/easyprocess")
23006 (commit version)))
23007 (file-name (git-file-name name version))
23008 (sha256
23009 (base32 "1dysr0z2mijhxl4z86wxf4w94sszdm4i2w3id0a6qwyid6xqjksp"))))
23010 (build-system pyproject-build-system)
23011 (arguments
23012 ;; Tests require pyvirtualdisplay, which requires this package.
23013 (list #:tests? #f))
23014 (native-inputs (list python-setuptools))
23015 (home-page "https://github.com/ponty/easyprocess")
23016 (synopsis "Python subprocess interface")
23017 (description
23018 "@code{easyprocess} is an easy to use Python subprocess interface.")
23019 (license license:bsd-3)))
23020
23021(define-public python-entrypoint2
23022 (package
23023 (name "python-entrypoint2")
23024 (version "0.2.4")
23025 (source
23026 (origin
23027 (method url-fetch)
23028 (uri (pypi-uri "entrypoint2" version))
23029 (sha256
23030 (base32 "1qyxq54r2fbh09ab5sffbxajy8arbk6czxz5lq3ccr9qrypw6w27"))))
23031 (build-system pyproject-build-system)
23032 (native-inputs (list python-easyprocess python-pytest python-pytest-runner
23033 python-setuptools python-wheel))
23034 (home-page "https://github.com/ponty/entrypoint2")
23035 (synopsis "Command-line interface for Python modules")
23036 (description
23037 "@code{entrypoint2} is an easy to use command-line interface for Python
23038 modules based on @code{argparse}. It translates function signature and
23039 documentation to argparse configuration.")
23040 (license license:bsd-3)))
23041
23042(define-public python-pyvirtualdisplay
23043 (package
23044 (name "python-pyvirtualdisplay")
23045 (version "3.0")
23046 (source
23047 (origin
23048 (method url-fetch)
23049 (uri (pypi-uri "PyVirtualDisplay" version))
23050 (sha256
23051 (base32 "0nb1s7nilakrkcm0vq08pz9mh8rzyhjm9jkyn1gp5sxnrv1mnx89"))))
23052 (build-system pyproject-build-system)
23053 (arguments
23054 (list
23055 ;; tests: 27 passed, 8 deselected
23056 #:test-flags
23057 ;; TODO: Add libxcb to python-pillow on the next python-team cycle.
23058 ;; OSError: Pillow was built without XCB support
23059 #~(list #$@(map (lambda (test) (string-append "--deselect="
23060 "tests/"
23061 test))
23062 (list "test_smart.py::test_slowshot"
23063 "test_smart.py::test_slowshot_with"
23064 "test_smart.py::test_slowshot_nocrop"
23065 "test_smart.py::test_slowshot_timeout"
23066 "test_smart.py::test_slowshot_timeout_nocrop"
23067 "test_smart2.py::test_double"
23068 "test_smart_thread.py::test_smart"
23069 "test_examples.py::test_screenshot")))))
23070 (native-inputs
23071 (list python-easyprocess
23072 python-entrypoint2
23073 python-psutil
23074 python-pytest
23075 python-setuptools
23076 python-vncdotool-bootstrap
23077 xmessage
23078 xorg-server-for-tests))
23079 (home-page "https://github.com/ponty/pyvirtualdisplay")
23080 (synopsis "Python wrapper for Xvfb, Xephyr and Xvnc")
23081 (description
23082 "@code{pyvirtualdisplay} is a Python wrapper for Xvfb, Xephyr and Xvnc.")
23083 (license license:bsd-3)))
23084
23085(define-public python-pyserial
23086 (package
23087 (name "python-pyserial")
23088 (version "3.5")
23089 (source
23090 (origin
23091 (method url-fetch)
23092 (uri (pypi-uri "pyserial" version))
23093 (sha256
23094 (base32
23095 "1nyd4m4mnrz8scbfqn4zpq8gnbl4x42w5zz62vcgpzqd2waf0xrw"))))
23096 (build-system pyproject-build-system)
23097 (native-inputs
23098 (list python-pytest
23099 python-setuptools
23100 python-wheel))
23101 (home-page "https://github.com/pyserial/pyserial")
23102 (synopsis "Python Serial Port Bindings")
23103 (description
23104 "@code{pyserial} provide serial port bindings for Python. It supports
23105different byte sizes, stop bits, parity and flow control with RTS/CTS and/or
23106Xon/Xoff. The port is accessed in RAW mode.")
23107 (license license:bsd-3)))
23108
23109(define-public python-pyserial-asyncio
23110 (package
23111 (name "python-pyserial-asyncio")
23112 (version "0.6")
23113 (source
23114 (origin
23115 (method git-fetch)
23116 (uri (git-reference
23117 (url "https://github.com/pyserial/pyserial-asyncio")
23118 (commit (string-append "v" version))))
23119 (file-name (git-file-name name version))
23120 (sha256
23121 (base32 "0c8kzy2a4awsh580qrniwq0vyydlsvicjw79r270sqflxmjlns6n"))))
23122 (build-system pyproject-build-system)
23123 (arguments (list #:test-backend #~'unittest))
23124 (native-inputs (list python-setuptools))
23125 (propagated-inputs (list python-pyserial))
23126 (home-page "https://github.com/pyserial/pyserial-asyncio")
23127 (synopsis "Pyserial asynchronous I/O extension")
23128 (description
23129 "This package extends Pyserial with asynchronous I/O support.")
23130 (license license:bsd-3)))
23131
23132(define-public python-pymemcache
23133 (package
23134 (name "python-pymemcache")
23135 (version "4.0.0")
23136 (source
23137 (origin
23138 (method url-fetch)
23139 (uri (pypi-uri "pymemcache" version))
23140 (sha256
23141 (base32 "157z9blr8pjg9x84jph5hm0z2l6yaq6n421jcf1hzqn1pg8rpgr7"))))
23142 (build-system pyproject-build-system)
23143 (arguments
23144 ;; We don't have the zstd module.
23145 (list
23146 #:test-flags
23147 '(list "--ignore=pymemcache/test/test_compression.py")))
23148 (native-inputs
23149 (list python-faker python-pytest python-pytest-cov python-setuptools
23150 python-wheel))
23151 (home-page "https://github.com/pinterest/pymemcache")
23152 (synopsis "Comprehensive, fast, pure Python memcached client")
23153 (description
23154 "This package provides a comprehensive, fast, pure Python memcached
23155client.")
23156 (license license:asl2.0)))
23157
23158(define-public python-pymodbus
23159 (package
23160 (name "python-pymodbus")
23161 (version "3.8.6")
23162 (source
23163 (origin
23164 (method git-fetch)
23165 (uri (git-reference
23166 (url "https://github.com/riptideio/pymodbus")
23167 (commit (string-append "v" version))))
23168 (file-name (git-file-name name version))
23169 (sha256
23170 (base32 "1sncllh01c6vqq4fh9k3yg9fchmmw661rcp0066l7fis6sp4yw82"))))
23171 (build-system pyproject-build-system)
23172 (arguments
23173 (list
23174 #:test-flags
23175 #~(list "--ignore"
23176 "test/server/test_simulator_api.py"
23177 ;; These tests require the presence of a certificate.
23178 "--ignore-glob"
23179 "test/examples/*"
23180 "--ignore"
23181 "test/client/test_client.py")))
23182 (native-inputs (list python-mock
23183 python-pytest
23184 python-pytest-asyncio
23185 python-pytest-cov
23186 python-pytest-xdist
23187 python-redis
23188 python-setuptools
23189 python-sqlalchemy
23190 python-tornado
23191 python-twisted
23192 python-wheel))
23193 (propagated-inputs (list python-pyserial
23194 python-six
23195 ;; For the REPL.
23196 python-aiohttp
23197 python-click
23198 python-prompt-toolkit
23199 python-pygments
23200 python-pyserial-asyncio))
23201 (home-page "https://github.com/riptideio/pymodbus/")
23202 (synopsis "Modbus protocol stack in Python")
23203 (description
23204 "Pymodbus is a full Modbus protocol implementation using
23205 @code{asyncio}, @code{tornado} or @code{twisted} for its asynchronous
23206 communications core. It includes the following @emph{client} features:
23207 @itemize
23208 @item full read/write protocol on discrete and register
23209 @item most of the extended protocol (diagnostic/file/pipe/setting/information)
23210 @item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary
23211 @item asynchronous and synchronous versions
23212 @item payload builder/decoder utilities
23213 @item pymodbus read eval print loop (REPL).
23214 @end itemize
23215 It also includes the following @emph{server} features:
23216 @itemize
23217 @item can function as a fully implemented Modbus server
23218 @item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary
23219 @item asynchronous and synchronous versions
23220 @item full server control context (device information, counters, etc)
23221 @item a number of backing contexts (database, redis, sqlite, a slave device).
23222 @end itemize")
23223 (license license:bsd-3)))
23224
23225(define-public python-exodriver
23226 (package
23227 (name "python-exodriver")
23228 (version "2.6.0")
23229 (source (origin
23230 (method git-fetch)
23231 (uri (git-reference
23232 (url "https://github.com/labjack/exodriver")
23233 (commit (string-append "v" version))))
23234 (file-name (git-file-name name version))
23235 (sha256
23236 (base32
23237 "1ikjz8147p14s814yabdq821y691klnr2yg54zgsymcc97kvwp2q"))))
23238 (outputs (list "out"
23239 "doc")) ;544 KiB of examples
23240 (build-system gnu-build-system)
23241 (arguments
23242 (list
23243 #:tests? #f ;no test suite
23244 #:make-flags #~(list (string-append "CC=" #$(cc-for-target))
23245 (string-append "PREFIX=" #$output)
23246 "RUN_LDCONFIG=0"
23247 "LINK_SO=1")
23248 #:phases
23249 #~(modify-phases %standard-phases
23250 (delete 'configure)
23251 (replace 'build
23252 (lambda* (#:key make-flags #:allow-other-keys #:rest args)
23253 (with-directory-excursion "liblabjackusb"
23254 (apply (assoc-ref %standard-phases 'build)
23255 `(,@args #:make-flags ,make-flags)))))
23256 (replace 'install
23257 (lambda* (#:key make-flags #:allow-other-keys #:rest args)
23258 (with-directory-excursion "liblabjackusb"
23259 (apply (assoc-ref %standard-phases 'install)
23260 `(,@args #:make-flags ,make-flags)))
23261 ;; Install udev rules.
23262 (install-file "90-labjack.rules"
23263 (string-append #$output "/lib/udev/rules.d"))
23264 ;; Install examples.
23265 (let ((doc (string-append #$output:doc "/share/doc/" #$name)))
23266 (mkdir-p doc)
23267 (copy-recursively "examples"
23268 (string-append doc "/examples"))))))))
23269 (inputs (list libusb))
23270 (home-page "https://github.com/labjack/exodriver")
23271 (synopsis "USB driver for LabJack data acquisition instruments")
23272 (description "This package provides @code{liblabjackusb}, a USB library for low-level
23273communication with the U3, U6, UE9, Digit, T4 and T7 LabJack data acquisition
23274instruments. A udev rule is also included to allow unprivileged users to
23275communicate with the instruments via USB.")
23276 (license license:expat))) ;see README
23277
23278(define-public python-labjack
23279 (package
23280 (name "python-labjack")
23281 (version "2.1.0")
23282 (source (origin
23283 (method url-fetch)
23284 (uri (pypi-uri "LabJackPython" version))
23285 (sha256
23286 (base32
23287 "0q516y0gzxlk298whiaw0qdi4jcmx7l5y3mp5g5lj68nrvhqzyy4"))))
23288 (build-system pyproject-build-system)
23289 (arguments
23290 (list
23291 #:tests? #f ;no test suite
23292 #:phases
23293 #~(modify-phases %standard-phases
23294 (add-after 'unpack 'patch-liblabjackusb.so
23295 (lambda* (#:key inputs #:allow-other-keys)
23296 (substitute* (find-files "." "\\.py$")
23297 (("ctypes.CDLL\\(\"liblabjackusb.so\"")
23298 (format #f "ctypes.CDLL(~s"
23299 (search-input-file inputs
23300 "lib/liblabjackusb.so")))))))))
23301 (native-inputs (list python-setuptools))
23302 ;; exodriver is provided as a regular input, as only its shared object is
23303 ;; used, not its Python API.
23304 (inputs (list python-exodriver))
23305 (home-page "https://labjack.com/support/software/examples/ud/labjackpython")
23306 (synopsis "Python library for LabJack U3, U6, UE9 and U12")
23307 (description
23308 "This Python library allows communicating with the U3, U6, UE9 and U12
23309LabJack data acquisition (DAQ) modules.")
23310 (license license:expat))) ;see setup.py
23311
23312(define-public python-kivy-garden
23313 (package
23314 (name "python-kivy-garden")
23315 (version "0.1.5")
23316 (source
23317 (origin
23318 (method git-fetch) ; source was removed from PyPI
23319 (uri (git-reference
23320 (url "https://github.com/kivy-garden/garden")
23321 (commit (string-append "v" version))))
23322 (file-name (git-file-name name version))
23323 (sha256
23324 (base32 "1pvjblaljrcmjkq6hsa89zkh9ggdval58d2lwzd69vlma8y03qy4"))))
23325 (build-system pyproject-build-system)
23326 (arguments
23327 (list
23328 #:tests? #f)) ; no tests in PyPI or Git distributions
23329 (native-inputs
23330 (list python-setuptools
23331 python-wheel))
23332 (propagated-inputs
23333 (list python-requests))
23334 (home-page "https://github.com/kivy-garden/garden")
23335 (synopsis "Garden tool for Kivy flowers")
23336 (description
23337 "This package provides the @command{garden} command to install packages
23338for Kivy, the multitouch application platform.")
23339 (license license:expat)))
23340
23341(define-public python-async-lru
23342 (package
23343 (name "python-async-lru")
23344 (version "2.0.4")
23345 (source
23346 (origin
23347 (method url-fetch)
23348 (uri (pypi-uri "async-lru" version))
23349 (sha256
23350 (base32 "09sn3bc3gc2flijm9k8kn4hmbnlkaddhqahb49izy188yrfrm9dq"))))
23351 (build-system pyproject-build-system)
23352 (native-inputs
23353 (list python-pytest
23354 python-pytest-asyncio
23355 python-pytest-cov
23356 python-pytest-timeout
23357 python-setuptools
23358 python-wheel))
23359 (propagated-inputs
23360 (list python-typing-extensions))
23361 (home-page "https://github.com/aio-libs/async-lru")
23362 (synopsis "Simple LRU cache for asyncio")
23363 (description
23364 "This package is a port of Python's built-in @code{functools.lru_cache}
23365function for @code{asyncio}. To better handle async behaviour, it also
23366ensures multiple concurrent calls will only result in 1 call to the wrapped
23367function, with all awaits receiving the result of that call when it
23368completes.")
23369 (license license:expat)))
23370
23371(define-public python-asyncinject
23372 (package
23373 (name "python-asyncinject")
23374 (version "0.6")
23375 (source
23376 (origin
23377 (method url-fetch)
23378 (uri (pypi-uri "asyncinject" version))
23379 (sha256
23380 (base32 "0x57idiy19lzyn32klgm06r223z8gr2aqqk91gysbshq7jg8g3pf"))))
23381 (build-system pyproject-build-system)
23382 (native-inputs (list python-pytest python-pytest-asyncio
23383 python-setuptools python-wheel))
23384 (home-page "https://github.com/simonw/asyncinject")
23385 (synopsis
23386 "Run async workflows using pytest-fixtures-style dependency injection")
23387 (description
23388 "This package lets you run asynchronous workflows using
23389pytest-fixtures-style dependency injection.")
23390 (license license:asl2.0)))
23391
23392(define-public python-binaryornot
23393 (package
23394 (name "python-binaryornot")
23395 (version "0.4.4")
23396 (source
23397 (origin
23398 (method url-fetch)
23399 (uri (pypi-uri "binaryornot" version))
23400 (sha256
23401 (base32 "0qc006986rb6bcbmiymwgcl1mns2jphr1j7sr7nk41nlr7gh359m"))))
23402 (build-system pyproject-build-system)
23403 (arguments
23404 (list
23405 #:test-backend #~'unittest
23406 #:test-flags #~(list "discover" "tests")
23407 #:phases
23408 #~(modify-phases %standard-phases
23409 (add-after 'unpack 'patch-tests
23410 (lambda _
23411 ;; TypeError: binary() got an unexpected keyword argument
23412 ;; 'average_size'.
23413 (substitute* "tests/test_check.py"
23414 (("average_size=512") "")))))))
23415 (native-inputs
23416 (list python-hypothesis
23417 python-setuptools))
23418 (propagated-inputs
23419 (list python-chardet))
23420 (home-page "https://github.com/audreyr/binaryornot")
23421 (synopsis "Package to check if a file is binary or text")
23422 (description "Ultra-lightweight pure Python package to check if a file is
23423 binary or text.")
23424 (license license:bsd-3)))
23425
23426(define-public python-bson
23427 (package
23428 (name "python-bson")
23429 (version "0.5.10")
23430 (source
23431 (origin
23432 (method git-fetch) ;for tests
23433 (uri (git-reference
23434 (url "https://github.com/py-bson/bson")
23435 (commit version)))
23436 (file-name (git-file-name name version))
23437 (sha256
23438 (base32
23439 "1vpy4rsvm3hhawvbg9rbw4j36ck8qylkhm8cjy0q6imvinkd2als"))))
23440 (build-system pyproject-build-system)
23441 (native-inputs
23442 (list python-pytest
23443 python-setuptools))
23444 (propagated-inputs
23445 (list python-dateutil
23446 python-six))
23447 (home-page "https://github.com/py-bson/bson")
23448 (synopsis "BSON (Binary JSON) codec for Python")
23449 (description "@code{bson} is a Python library implementing a BSON (Binary
23450JSON) codec.")
23451 (license license:asl2.0)))
23452
23453(define-public python-nltk
23454 (package
23455 (name "python-nltk")
23456 (version "3.9.1")
23457 (source
23458 (origin
23459 (method url-fetch)
23460 (uri (pypi-uri "nltk" version))
23461 (sha256
23462 (base32 "0s78gayd45vl1wvpa0a44ydij6ybb7xfar8jz2j8kgg47nyjglc7"))))
23463 (build-system pyproject-build-system)
23464 (arguments
23465 ;; Tests require some extra resources to be downloaded.
23466 ;; TODO Try packaging these resources.
23467 '(#:tests? #f))
23468 (propagated-inputs (list python-click python-joblib python-regex
23469 python-tqdm))
23470 (native-inputs (list python-setuptools python-wheel))
23471 (home-page "https://www.nltk.org/")
23472 (synopsis "Natural Language Toolkit")
23473 (description
23474 "NLTK provides interfaces to over 50 corpora and lexical resources such as
23475WordNet, along with a suite of text processing libraries for classification,
23476tokenization, stemming, tagging, parsing, and semantic reasoning, wrappers for
23477natural language processing libraries.")
23478 (license license:asl2.0)))
23479
23480(define-public python-pymongo
23481 (package
23482 (name "python-pymongo")
23483 (version "4.16.0")
23484 (source
23485 (origin
23486 (method url-fetch)
23487 (uri (pypi-uri "pymongo" version))
23488 (sha256
23489 (base32 "0330bj24xl0yq19p330p28x3i3x2jzbn5zkjz2k5iqpncm841a4b"))))
23490 (build-system pyproject-build-system)
23491 (arguments
23492 (list
23493 ;; tests: 1274 passed, 6231 skipped, 1441 deselected, 2 warnings
23494 #:test-flags
23495 ;; Tests need access to /etc/resolve.conf.
23496 #~(list "--ignore=test/asynchronous/test_srv_polling.py"
23497 "--ignore=test/test_srv_polling.py"
23498 "-k" (string-join
23499 ;; Tests need access to /etc/resolve.conf
23500 (list "not test_connection_timeout_ms_propagates_to_DNS_resolver"
23501 "test_detected_environment_warning"
23502 ;; XXX: Tests fail with assertion is not equal.
23503 "test_test_uri_options_srv-options_SRV_URI_with_custom_srvServiceName"
23504 "test_test_uri_options_srv-options_SRV_URI_with_invalid_type_for_srvMaxHosts"
23505 "test_test_uri_options_srv-options_SRV_URI_with_negative_integer_for_srvMaxHosts"
23506 "test_test_uri_options_srv-options_SRV_URI_with_positive_srvMaxHosts_and_loadBalanced"
23507 "test_test_uri_options_srv-options_SRV_URI_with_srvMaxHosts")
23508 " and not "))))
23509 (native-inputs
23510 (list python-hatch-requirements-txt
23511 python-hatchling
23512 python-pytest
23513 python-pytest-asyncio
23514 python-setuptools))
23515 (propagated-inputs
23516 (list python-certifi
23517 python-dnspython))
23518 (home-page "https://github.com/mongodb/mongo-python-driver")
23519 (synopsis "Python driver for MongoDB")
23520 (description "Python driver for MongoDB.")
23521 (license license:asl2.0)))
23522
23523(define-public python-py-consul
23524 (package
23525 (name "python-py-consul")
23526 (version "1.6.0")
23527 (source
23528 (origin
23529 (method git-fetch)
23530 (uri (git-reference
23531 ;; Fork from https://github.com/cablehead/python-consul
23532 (url "https://github.com/criteo/py-consul")
23533 (commit (string-append "v" version))))
23534 (file-name (git-file-name name version))
23535 (sha256
23536 (base32 "0jx0sx572akir5ks30d1hvxwmy2apc51idm5k73dfp9biyjhbllh"))))
23537 (build-system pyproject-build-system)
23538 (arguments (list #:tests? #f)) ; Tests require docker.
23539 (native-inputs (list python-setuptools))
23540 (propagated-inputs (list python-requests))
23541 (home-page "https://github.com/criteo/py-consul")
23542 (synopsis "Python client for Consul")
23543 (description
23544 "Python client for @url{http://www.consul.io/,Consul}, a tool for service
23545discovery, monitoring and configuration.")
23546 (license license:expat)))
23547
23548(define-deprecated-package python-consul python-py-consul)
23549
23550(define-public python-schematics
23551 (package
23552 (name "python-schematics")
23553 (version "2.1.1")
23554 (source
23555 (origin
23556 (method git-fetch)
23557 (uri (git-reference
23558 (url "https://github.com/schematics/schematics")
23559 (commit (string-append "v" version))))
23560 (file-name (git-file-name name version))
23561 (sha256
23562 (base32 "0nf14wy422f08zzxx4jv8kbym3asgfpjm7b2p51b8hgqgxqlmjcd"))))
23563 (build-system pyproject-build-system)
23564 (native-inputs
23565 (list python-dateutil python-mock python-pytest python-setuptools))
23566 (home-page "https://github.com/schematics/schematics")
23567 (synopsis "Python Data Structures for Humans")
23568 (description
23569 "Schematics is a Python library to combine types into structures,
23570validate them, and transform the shapes of your data based on simple
23571descriptions.
23572
23573The internals are similar to ORM type systems, but there is no database layer
23574in Schematics. Instead, building a database layer is easily made when
23575Schematics handles everything except for writing the query. Schematics can be
23576used for tasks where having a database involved is unusual.")
23577 (license license:bsd-3)))
23578
23579(define-public python-odfpy
23580 (package
23581 (name "python-odfpy")
23582 (version "1.4.2")
23583 (source
23584 (origin
23585 (method git-fetch)
23586 (uri (git-reference
23587 (url "https://github.com/eea/odfpy")
23588 (commit (string-append "release-" version))))
23589 (file-name (git-file-name name version))
23590 (sha256
23591 (base32 "15y0fvkk8akgx30dxld7mdqhdrrkwr16jy1q0znkzvwcgmpywrf4"))))
23592 (build-system pyproject-build-system)
23593 (native-inputs (list python-pytest python-setuptools))
23594 (propagated-inputs (list python-defusedxml))
23595 (home-page "https://github.com/eea/odfpy")
23596 (synopsis "Python API and tools to manipulate OpenDocument files")
23597 (description
23598 "Collection of libraries and utility programs written in Python to
23599manipulate OpenDocument 1.2 files.")
23600 (license
23601 ;; The software is mainly dual GPL2+ and ASL2.0, but includes a
23602 ;; number of files with other licenses.
23603 (list license:gpl2+ license:asl2.0 license:lgpl2.1+ license:cc-by-sa3.0))))
23604
23605(define-public python-namex
23606 (package
23607 (name "python-namex")
23608 (version "0.0.7")
23609 (source
23610 (origin
23611 (method url-fetch)
23612 (uri (pypi-uri "namex" version))
23613 (sha256
23614 (base32 "16ynrq245c3nywv476izrc4bcacm9gxjzgr67ng91g929ny6bfl4"))))
23615 (build-system pyproject-build-system)
23616 (arguments (list #:tests? #false)) ;there are none
23617 (native-inputs (list python-setuptools python-wheel))
23618 (home-page "https://github.com/fchollet/namex")
23619 (synopsis
23620 "Separate implementation and public API surface of Python packages")
23621 (description
23622 "This package provides a simple utility to separate the
23623implementation of your Python package and its public API surface.")
23624 (license license:asl2.0)))
23625
23626(define-public python-natsort
23627 (package
23628 (name "python-natsort")
23629 (version "8.4.0")
23630 (source
23631 (origin
23632 (method url-fetch)
23633 (uri (pypi-uri "natsort" version))
23634 (sha256
23635 (base32 "10d53q50zn2s8iiszv01nr9r4imimc2dvplkl4ymj1sm1r52qca5"))))
23636 (build-system pyproject-build-system)
23637 (native-inputs
23638 (list glibc-utf8-locales ;; Tests want en_US.UTF-8
23639 python-pytest
23640 python-pytest-mock
23641 python-setuptools))
23642 (propagated-inputs
23643 (list python-fastnumbers
23644 python-pyicu))
23645 (home-page "https://github.com/SethMMorton/natsort")
23646 (synopsis "Natural sorting for python and shell")
23647 (description
23648 "Natsort lets you apply natural sorting on lists instead of
23649lexicographical. If you use the built-in @code{sorted} method in python on a
23650list such as @code{[@code{a20}, @code{a9}, @code{a1}, @code{a4}, @code{a10}]},
23651it would be returned as @code{[@code{a1}, @code{a10}, @code{a20}, @code{a4},
23652@code{a9}]}. Natsort provides a function @code{natsorted} that identifies
23653numbers and sorts them separately from strings. It can also sort version
23654numbers, real numbers, mixed types and more, and comes with a shell command
23655@command{natsort} that exposes this functionality in the command line.")
23656 (license license:expat)))
23657
23658(define-public python-graphql-core
23659 (package
23660 (name "python-graphql-core")
23661 (version "3.1.2")
23662 (source
23663 (origin
23664 (method url-fetch)
23665 (uri (pypi-uri "graphql-core" version))
23666 (sha256
23667 (base32
23668 "0fjv5w2wvgdr8gb27v241bavliipyir9fdz48rsgc3xapm644mn0"))))
23669 (build-system pyproject-build-system)
23670 (arguments
23671 (list
23672 #:phases
23673 '(modify-phases %standard-phases
23674 (add-after 'unpack 'use-poetry-core
23675 (lambda _
23676 ;; Patch to use the core poetry API.
23677 (substitute* "pyproject.toml"
23678 (("poetry.masonry.api")
23679 "poetry.core.masonry.api")
23680 ;; Poetry does not like line breaks.
23681 (("description = \"\"\"")
23682 "description = \"GraphQL-core is a Python port of GraphQL.js.\"\n")
23683 (("^GraphQL-core is a Python.*") "")
23684 (("^ the JavaScript reference.*") ""))))
23685 (add-after 'unpack 'patch-setup.py
23686 (lambda _
23687 (substitute* "setup.py"
23688 ;; Relax hardcoded version
23689 (("'gevent==1.1rc1'") "'gevent'")
23690 ;; Poetry complains about this line break.
23691 (("a port of GraphQL.js,\"")
23692 (string-append "a port of GraphQL.js, "
23693 "the JavaScript reference implementation for GraphQL."))
23694 ((" \" the JavaScript reference.*") "")))))))
23695 (native-inputs
23696 (list python-gevent
23697 python-mock
23698 python-poetry-core
23699 python-pytest
23700 python-pytest-benchmark
23701 python-pytest-mock))
23702 (propagated-inputs
23703 (list python-promise python-six))
23704 (home-page "https://github.com/graphql-python/graphql-core")
23705 (synopsis "GraphQL implementation for Python")
23706 (description
23707 "GraphQL implementation for Python. GraphQL is a data query language and
23708 runtime designed and used to request and deliver data to mobile and web apps.
23709 This library is a port of @url{https://github.com/graphql/graphql-js,graphql-js}
23710 to Python.")
23711 (license license:expat)))
23712
23713(define-public python-graphql-relay
23714 (package
23715 (name "python-graphql-relay")
23716 (version "3.1.0")
23717 (source
23718 (origin
23719 (method git-fetch)
23720 (uri (git-reference
23721 (url "https://github.com/graphql-python/graphql-relay-py")
23722 (commit (string-append "v" version))))
23723 (file-name (git-file-name name version))
23724 (sha256
23725 (base32 "06ybi4bwqdffa5kn8xnns06wh3l0zj3qlzrxk1wpxqq320hyzx9x"))))
23726 (build-system pyproject-build-system)
23727 (arguments (list #:test-flags #~(list "tests")))
23728 (native-inputs
23729 (list python-pytest python-pytest-asyncio python-poetry-core))
23730 (propagated-inputs (list python-graphql-core))
23731 (home-page "https://github.com/graphql-python/graphql-relay-py")
23732 (synopsis "Relay implementation for Python")
23733 (description
23734 "This is a library to allow the easy creation of Relay-compliant servers
23735using the GraphQL Python reference implementation of a GraphQL server. It
23736should be noted that the code is a exact port of the original
23737@url{https://github.com/graphql/graphql-relay-js,graphql-relay js
23738implementation} from Facebook.")
23739 (license license:expat)))
23740
23741(define-public python-graphene
23742 (package
23743 (name "python-graphene")
23744 (version "3.4.3")
23745 (source
23746 (origin
23747 (method url-fetch)
23748 (uri (pypi-uri "graphene" version))
23749 (sha256
23750 (base32 "1aha3bnrafxd823q4swdmlvbprfb17v3fga4g3hffpz7ija8cdra"))))
23751 (build-system pyproject-build-system)
23752 (arguments
23753 (list #:tests? #f)) ;XXX: tests fail to load
23754 (native-inputs
23755 (list python-setuptools))
23756 (propagated-inputs
23757 (list python-dateutil
23758 python-graphql-core
23759 python-graphql-relay
23760 python-typing-extensions))
23761 (home-page "https://graphene-python.org/")
23762 (synopsis "GraphQL Framework for Python")
23763 (description
23764 "Graphene is a Python library for building GraphQL schemas/types. A
23765GraphQL schema describes your data model, and provides a GraphQL server with
23766an associated set of resolve methods that know how to fetch data.")
23767 (license license:expat)))
23768
23769(define-public python-rodi
23770 (package
23771 (name "python-rodi")
23772 (version "2.0.8")
23773 (source
23774 (origin
23775 (method git-fetch)
23776 (uri (git-reference
23777 (url "https://github.com/Neoteroi/rodi")
23778 (commit (string-append "v" version))))
23779 (file-name (git-file-name name version))
23780 (sha256
23781 (base32 "0kf98yjllrq7vqcp07r2gmkqcviqglsnai3sdigdsrwrfc0b44yp"))))
23782 (build-system pyproject-build-system)
23783 (native-inputs
23784 (list python-hatchling
23785 python-pytest
23786 python-pytest-asyncio))
23787 (home-page "https://github.com/Neoteroi/rodi")
23788 (synopsis "Dependency injection framework for Python")
23789 (description
23790 "Rodi is a dependency injection framework for Python applications.
23791
23792Its features include
23793
23794@itemize
23795@item Type resolution by signature types annotations.
23796@item Type resolution by class annotations.
23797@item Type resolution by names and aliases.
23798@item Build graph of objects without the need for source code changes.
23799@item Minimum overhead to obtain services, once the objects graph is built.
23800@item Support for singleton, transient, and scoped services.
23801@end itemize")
23802 (license license:expat)))
23803
23804;; XXX: The last time updated in 2015, consider to remove it when nothing is
23805;; depend on it.
23806(define-public python-snowballstemmer
23807 (package
23808 (name "python-snowballstemmer")
23809 (version "2.2.0")
23810 (source
23811 (origin
23812 (method url-fetch)
23813 (uri (pypi-uri "snowballstemmer" version))
23814 (sha256
23815 (base32 "1ccwy75i0f5yi1vy6fyvr1gf43ydhjani45mswm43ls7hpmnvc89"))))
23816 (build-system pyproject-build-system)
23817 (arguments
23818 (list
23819 #:tests? #f)) ; no tests
23820 (native-inputs
23821 (list python-setuptools
23822 python-wheel))
23823 (home-page "https://github.com/shibukawa/snowball_py")
23824 (synopsis "Snowball stemming library collection for Python")
23825 (description
23826 "This package provides 16 word stemmer algorithms generated from Snowball
23827algorithms. It includes the 15 original ones plus the Poerter English
23828stemmer.")
23829 (license license:bsd-3)))
23830
23831(define-public python-setproctitle
23832 (package
23833 (name "python-setproctitle")
23834 (version "1.3.7")
23835 (source
23836 (origin
23837 (method git-fetch)
23838 (uri (git-reference
23839 (url "https://github.com/dvarrazzo/py-setproctitle")
23840 (commit (string-append "version-" version))))
23841 (file-name (git-file-name name version))
23842 (sha256
23843 (base32 "0k51ypmr2p2c55dyl2pq3dclih9jk2zx7dxm8010li4pyfsrvwvm"))))
23844 (build-system pyproject-build-system)
23845 (arguments
23846 (list
23847 #:phases
23848 #~(modify-phases %standard-phases
23849 (add-before 'check 'configure-tests
23850 (lambda* (#:key tests? #:allow-other-keys)
23851 (when tests?
23852 (setenv "PYTHON"
23853 (or (which "python3")
23854 (which "python")))
23855 (setenv "PYCONFIG"
23856 (if (which "python3-config")
23857 "python3-config --embed"
23858 "python-config"))
23859 (substitute* "tests/conftest.py"
23860 (("cc") "gcc"))))))))
23861 (native-inputs (list procps python-pytest python-setuptools)) ;required for tests
23862 (home-page "https://github.com/dvarrazzo/py-setproctitle")
23863 (synopsis
23864 "Setproctitle implementation for Python to customize the process title")
23865 (description
23866 "The library allows a process to change its title (as displayed by system
23867tools such as @code{ps} and @code{top}).
23868
23869Changing the title is mostly useful in multi-process systems, for example when a
23870master process is forked: changing the children's title allows identifying the
23871task each process is busy with. The technique is used by PostgreSQL and the
23872OpenSSH Server for example.")
23873 (license license:bsd-3)))
23874
23875(define-public python-pyelftools
23876 (package
23877 (name "python-pyelftools")
23878 (version "0.32")
23879 (source
23880 (origin
23881 (method git-fetch)
23882 (uri (git-reference
23883 (url "https://github.com/eliben/pyelftools")
23884 (commit (string-append "v" version))))
23885 (file-name (git-file-name name version))
23886 (sha256
23887 (base32 "0wx18rj5hcra45ck407vfvg46rs1qcj3qjhfkprf6264zs6z1i77"))
23888 (snippet
23889 #~(begin
23890 ;; Delete bundled readelf and llvm-dwardump executables. Project
23891 ;; also ships quite a lot binary files mainly for tests, check
23892 ;; with:
23893 ;;
23894 ;; find . -type f ! -size 0 -exec grep -IL . "{}" \;
23895 ;;
23896 (delete-file "test/external_tools/readelf")
23897 (delete-file "test/external_tools/llvm-dwarfdump")))))
23898 (build-system pyproject-build-system)
23899 (arguments
23900 (list
23901 #:phases
23902 #~(modify-phases %standard-phases
23903 (replace 'check
23904 (lambda* (#:key tests? #:allow-other-keys)
23905 (when tests?
23906 ;; Run just basic unit and example tests, dwarfdump and
23907 ;; readelf tests are not selected as they are fragile and
23908 ;; arch-specific.
23909 (invoke "python" "test/run_all_unittests.py")
23910 (invoke "python" "test/run_examples_test.py")))))))
23911 (home-page "https://github.com/eliben/pyelftools")
23912 (native-inputs
23913 (list python-setuptools
23914 python-wheel))
23915 (synopsis "Analyze binary and library file information")
23916 (description
23917 "This Python library provides interfaces for parsing and analyzing two
23918binary and library file formats ; the Executable and Linking Format (ELF), and
23919debugging information in the Debugging With Attributed Record
23920Format (DWARF).")
23921 (license license:public-domain)))
23922
23923(define-public python-pefile
23924 (package
23925 (name "python-pefile")
23926 (version "2024.8.26")
23927 (source
23928 (origin
23929 (method git-fetch)
23930 (uri (git-reference
23931 (url "https://github.com/erocarrera/pefile")
23932 (commit (string-append "v" version))))
23933 (file-name (git-file-name name version))
23934 (sha256
23935 (base32 "14bh23b7jipf2pxjivyn2khifal6fmk0pjsddrd3h1gd9n0wl9zd"))
23936 (snippet #~(delete-file "tests/test_data.tar.bz2.enc"))))
23937 (build-system pyproject-build-system)
23938 (arguments
23939 ;; XXX: Taken from tox.ini. Unclear why devs don't supply test data.
23940 ;; It seems clear however that test_data.tar.bz2.enc needs to be
23941 ;; decrypted and unpacked before we can run them.
23942 (list #:test-flags #~(list "--ignore=tests/pefile_test.py")))
23943 (native-inputs (list python-pytest python-setuptools))
23944 (propagated-inputs (list python-future))
23945 (home-page "https://github.com/erocarrera/pefile")
23946 (synopsis "Portable Executable (PE) file parser")
23947 (description
23948 "This python library provides interfaces for parsing and working with
23949Portable Executable (PE) files. It makes to most information from the header,
23950as well as section details and data available.")
23951 (license license:expat)))
23952
23953(define-public python-pyemd
23954 (package
23955 (name "python-pyemd")
23956 (version "1.0.0")
23957 (source (origin
23958 (method url-fetch)
23959 (uri (pypi-uri "pyemd" version))
23960 (sha256
23961 (base32
23962 "1zh0v47lxa33xg04jyvblzl1g4m3k2khx0b3xr6isnyinbkmlaxl"))))
23963 (build-system pyproject-build-system)
23964 (native-inputs
23965 (list python-cython
23966 python-pytest
23967 python-setuptools
23968 python-setuptools-scm))
23969 (propagated-inputs
23970 (list python-numpy-1))
23971 (home-page "https://github.com/wmayner/pyemd")
23972 (synopsis
23973 "Wrapper for Pele and Werman's implementation of the Earth Mover's Distance")
23974 (description
23975 "This package provides a Python wrapper for Ofir Pele and Michael
23976Werman's implementation of the Earth Mover's Distance.")
23977 (license license:expat)))
23978
23979(define-public python-imagesize
23980 (package
23981 (name "python-imagesize")
23982 (version "1.4.1")
23983 (source
23984 (origin
23985 (method url-fetch)
23986 (uri (pypi-uri "imagesize" version))
23987 (sha256
23988 (base32 "0jndjx26p8qibrx997p3kb6vfbqbdxkv74jsrkav177vmx2085b9"))))
23989 (build-system pyproject-build-system)
23990 (arguments (list #:test-backend #~'unittest))
23991 (native-inputs
23992 (list python-setuptools
23993 python-wheel))
23994 (home-page "https://github.com/shibukawa/imagesize_py")
23995 (synopsis "Gets image size of files in various formats in Python")
23996 (description
23997 "This package allows determination of image size from PNG, JPEG,
23998JPEG2000 and GIF files in pure Python.")
23999 (license license:expat)))
24000
24001(define-public python-argcomplete
24002 (package
24003 (name "python-argcomplete")
24004 (version "3.6.2")
24005 (source
24006 (origin
24007 (method url-fetch)
24008 (uri (pypi-uri "argcomplete" version))
24009 (sha256
24010 (base32
24011 "1pvavik22prqdyqid5s40zqab93kp85ash9wf7sg9xb7r0drnlfh"))))
24012 (build-system pyproject-build-system)
24013 (arguments
24014 (list
24015 #:test-backend #~'custom
24016 #:test-flags #~(list "test/test.py" "-v")
24017 #:phases
24018 #~(modify-phases %standard-phases
24019 (add-before 'check 'disable-pip-tests
24020 (lambda _
24021 ;; pip: command not found
24022 (substitute* "test/test.py"
24023 (("def test_console_script")
24024 "def __disable_test_console_script")))))))
24025 (native-inputs
24026 (list python-hatch-vcs
24027 python-hatchling
24028 python-pexpect
24029 tcsh
24030 fish
24031 bash ;full Bash for 'test_file_completion'
24032 zsh))
24033 (home-page "https://github.com/kislyuk/argcomplete")
24034 (synopsis "Shell tab completion for Python argparse")
24035 (description "argcomplete provides extensible command line tab completion
24036of arguments and options for Python scripts using @code{argparse}. It's
24037particularly useful for programs with many options or sub-parsers that can
24038dynamically suggest completions ; for example, when browsing resources over
24039the network.")
24040 (license license:asl2.0)))
24041
24042(define-public python-csscompressor
24043 (package
24044 (name "python-csscompressor")
24045 (version "0.9.5")
24046 (source
24047 (origin
24048 (method git-fetch)
24049 (uri (git-reference
24050 (url "https://github.com/sprymix/csscompressor")
24051 (commit (string-append "v" version))))
24052 (file-name (git-file-name name version))
24053 (sha256
24054 (base32 "1gzzb474lgs8l539z2vyyvcvm1j7nxxnb5jk79ys63ysbg4jwmz8"))))
24055 (build-system pyproject-build-system)
24056 (native-inputs (list python-pytest python-setuptools))
24057 (home-page "https://github.com/sprymix/csscompressor")
24058 (synopsis "Python port of YUI CSS Compressor")
24059 (description "This package provides a python port of YUI CSS Compressor.")
24060 (license license:bsd-3)))
24061
24062(define-public python-rcssmin
24063 (package
24064 (name "python-rcssmin")
24065 (version "1.2.0")
24066 (source
24067 (origin
24068 (method url-fetch)
24069 (uri (pypi-uri "rcssmin" version))
24070 (sha256
24071 (base32
24072 "0k68sw163vc36nb3nck0kwwal4vb4hi6634rzx7z19ng28j8fdpl"))))
24073 (build-system pyproject-build-system)
24074 (native-inputs (list python-pytest python-setuptools python-wheel))
24075 (home-page "http://opensource.perlig.de/rcssmin/")
24076 (synopsis "CSS Minifier")
24077 (description "The minifier is based on the semantics of the YUI compressor,
24078 which itself is based on the rule list by Isaac Schlueter.")
24079 (license license:asl2.0)))
24080
24081(define-public python-rjsmin
24082 (package
24083 (name "python-rjsmin")
24084 (version "1.2.3")
24085 (source
24086 (origin
24087 (method url-fetch)
24088 (uri (pypi-uri "rjsmin" version))
24089 (sha256
24090 (base32
24091 "1ihcff58vz4xrv1180v46wy5m80z61y7ab8ajyy4zh54jcjbb20k"))
24092 (modules '((guix build utils)))
24093 (snippet
24094 '(for-each delete-file (find-files "bench" "\\.js$")))))
24095 (build-system pyproject-build-system)
24096 (native-inputs
24097 (list python-pytest python-setuptools python-wheel))
24098 (home-page "http://opensource.perlig.de/rjsmin/")
24099 (synopsis "Javascript Minifier")
24100 (description "@code{rJSmin} is a javascript minifier written in Python.
24101The minifier is based on the semantics of jsmin.c by Douglas Crockford. The
24102module is a re-implementation aiming for speed, so it can be used at
24103runtime (rather than during a preprocessing step).")
24104 (license license:asl2.0)))
24105
24106(define-public python-cheetah
24107 (package
24108 (name "python-cheetah")
24109 (version "3.3.1")
24110 (source
24111 (origin
24112 (method url-fetch)
24113 (uri (pypi-uri "CT3" version))
24114 (sha256
24115 (base32 "1j36vampqip18jx0jzngb9rnkhhhl8hqnscg117y0d6cgrgm57qw"))))
24116 (build-system pyproject-build-system)
24117 (arguments
24118 (list
24119 #:test-backend #~'custom
24120 #:test-flags #~(list "Cheetah/Tests/Test.py")
24121 #:phases
24122 #~(modify-phases %standard-phases
24123 (add-after 'unpack 'use-absolute-python
24124 (lambda _
24125 (substitute* "Cheetah/CheetahWrapper.py"
24126 (("#!/usr/bin/env python")
24127 (string-append "#!" (which "python"))))))
24128 (add-before 'check 'configure-tests
24129 (lambda* (#:key tests? #:allow-other-keys)
24130 (substitute* "Cheetah/Tests/ImportHooks.py"
24131 (("os.path.dirname\\(__file__\\)")
24132 (string-append "'" (getcwd) "/Cheetah/Tests'")))
24133 (substitute* "Cheetah/Tests/Test.py"
24134 (("unittest.TextTestRunner\\(\\)")
24135 "unittest.TextTestRunner(verbosity=2)"))
24136 (setenv "TMPDIR" "/tmp"))))))
24137 (native-inputs (list python-setuptools))
24138 (propagated-inputs (list python-markdown)) ;optional
24139 (home-page "https://cheetahtemplate.org/")
24140 (synopsis "Template engine")
24141 (description
24142 "Cheetah is a text-based template engine and Python code generator.
24143
24144 Cheetah can be used as a standalone templating utility or referenced as a
24145library from other Python applications. It has many potential uses, but web
24146developers looking for a viable alternative to ASP, JSP, PHP and PSP are
24147expected to be its principle user group.
24148
24149Features:
24150@enumerate
24151@item Generates HTML, SGML, XML, SQL, Postscript, form email, LaTeX, or any
24152other text-based format.
24153@item Cleanly separates content, graphic design, and program code.
24154@item Blends the power and flexibility of Python with a simple template
24155language that non-programmers can understand.
24156@item Gives template writers full access to any Python data structure, module,
24157function, object, or method in their templates.
24158@item Makes code reuse easy by providing an object-orientated interface to
24159templates that is accessible from Python code or other Cheetah templates. One
24160template can subclass another and selectively reimplement sections of it.
24161@item Provides a simple, yet powerful, caching mechanism that can dramatically
24162improve the performance of a dynamic website.
24163@item Compiles templates into optimized, yet readable, Python code.
24164@end enumerate")
24165 (license (license:x11-style "file://LICENSE"))))
24166
24167(define-public python-chevron
24168 (package
24169 (name "python-chevron")
24170 (version "0.14.0")
24171 (source (origin
24172 (method url-fetch)
24173 (uri (pypi-uri "chevron" version))
24174 (sha256
24175 (base32
24176 "1gqfh00ics2k1sm5g46l3bi8cl5fc5d1cwzh1ylvcxvdvypklqc7"))))
24177 (build-system pyproject-build-system)
24178 (arguments (list #:tests? #false)) ;there are none
24179 (native-inputs (list python-setuptools python-wheel))
24180 (home-page "https://github.com/noahmorrison/chevron")
24181 (synopsis "Mustache templating language renderer")
24182 (description "This package provides a Python implementation of the
24183Mustache templating language renderer.")
24184 (license license:expat)))
24185
24186(define-public python-dulwich
24187 (package
24188 (name "python-dulwich")
24189 (version "0.21.7")
24190 (source
24191 (origin
24192 (method url-fetch)
24193 (uri (list (string-append "https://www.dulwich.io/releases/"
24194 "dulwich-" version ".tar.gz")
24195 (pypi-uri "dulwich" version)))
24196 (sha256
24197 (base32
24198 "0s79c3g19m052jbxm66amxv5v60ijx5px4hjmk1q19ff6dlcdsd9"))))
24199 (build-system pyproject-build-system)
24200 (arguments
24201 (list
24202 #:test-flags
24203 ;; DULWICH_SWIFT_CFG is not set.
24204 '(list "--ignore=dulwich/contrib/test_swift_smoke.py"
24205 "-k"
24206 ;; 'HTTPClient' object has no attribute 'get_base_url'
24207 "not test_init_connector")
24208 #:phases
24209 '(modify-phases %standard-phases
24210 (add-after 'unpack 'fix-tests
24211 (lambda* (#:key inputs #:allow-other-keys)
24212 (substitute* '("dulwich/tests/test_repository.py"
24213 "dulwich/tests/test_porcelain.py"
24214 "dulwich/tests/test_hooks.py")
24215 (("/bin/sh") (search-input-file inputs "/bin/sh")))))
24216 (add-before 'check 'pre-check
24217 (lambda _ (setenv "PYTHONHASHSEED" "random"))))))
24218 (propagated-inputs
24219 (list python-fastimport python-urllib3))
24220 (native-inputs
24221 (list gnupg
24222 git-minimal/pinned
24223 python-geventhttpclient
24224 python-mypy
24225 python-paramiko
24226 python-pytest
24227 python-requests
24228 python-setuptools
24229 python-wheel))
24230 (home-page "https://www.dulwich.io/")
24231 (synopsis "Git implementation in Python")
24232 (description "Dulwich is an implementation of the Git file formats and
24233protocols written in pure Python.")
24234 ;; Can be used with either license.
24235 (license (list license:asl2.0 license:gpl2+))))
24236
24237(define-public python-dulwich-0.24
24238 (package/inherit python-dulwich
24239 (name "python-dulwich")
24240 (version "0.24.1")
24241 (source
24242 (origin
24243 (method url-fetch)
24244 (uri (pypi-uri "dulwich" version))
24245 (sha256
24246 (base32 "0n3p8jyxl4zwc63la10v8llc58fc5pcnfqdq9f1vn0hgy5jdi7z1"))))
24247 (build-system pyproject-build-system)
24248 (native-inputs
24249 (modify-inputs (package-native-inputs python-dulwich)
24250 (prepend python-setuptools-rust)))
24251 (arguments
24252 (list
24253 #:test-flags
24254 ;; DULWICH_SWIFT_CFG is not set.
24255 '(list "--ignore=tests/contrib/test_swift_smoke.py"
24256 ;; AttributeError: 'SwiftPackData' object has no attribute '_file'
24257 "--ignore=tests/contrib/test_swift.py"
24258 ;; No git repository was found at .
24259 "--ignore=tests/test_cli.py"
24260 ;; 'HTTPClient' object has no attribute 'get_base_url'
24261 ;; 'NoneType' object has no attribute 'Merge3'
24262 "--ignore=tests/test_cli_merge.py"
24263 "--ignore=tests/test_merge_drivers.py"
24264 "--ignore=tests/test_porcelain_cherry_pick.py"
24265 "--ignore=tests/test_porcelain_merge.py"
24266 "--ignore=tests/test_rebase.py"
24267 "--ignore=tests/test_repository.py"
24268 "--ignore=tests/test_worktree.py"
24269 "--ignore=tests/test_porcelain.py"
24270 "--ignore=tests/test_porcelain_filters.py"
24271 ;; False is not true (interesting capitalization?)
24272 "--ignore=tests/test_hooks.py")
24273 #:phases
24274 #~(modify-phases %standard-phases
24275 (add-after 'unpack 'patch-pyproject
24276 (lambda _
24277 ;; setuptools cannot handle both license and license-files
24278 (substitute* "pyproject.toml"
24279 (("^license = .*") "license = {text = \"Apache-2.0\"}\n")
24280 (("^license-files = .*") ""))))
24281 (add-before 'check 'pre-check
24282 (lambda* (#:key tests? #:allow-other-keys)
24283 (when tests?
24284 (setenv "HOME" "/tmp")))))))))
24285
24286(define-public python-dunamai
24287 (package
24288 (name "python-dunamai")
24289 (version "1.21.2")
24290 (source
24291 (origin
24292 (method url-fetch)
24293 (uri (pypi-uri "dunamai" version))
24294 (sha256
24295 (base32 "1i35i8ym6n8mpgrq31hivrvfciy12gv26jwlzimmkx9jy2spz0h5"))))
24296 (build-system pyproject-build-system)
24297 (arguments
24298 (list
24299 #:test-flags
24300 #~(list "-k" "not test__version__from_git__shallow")
24301 #:phases
24302 #~(modify-phases %standard-phases
24303 ;; These steps are taked from NixOS package definition:
24304 ;; nixpkgs/pkgs/development/python-modules/dunamai/default.nix
24305 (add-before 'check 'pre-check
24306 (lambda _
24307 (setenv "PATH" (string-append #$output "/bin:" (getenv "PATH")))
24308 (setenv "HOME" "/tmp")
24309 (invoke "git" "config" "--global" "user.email" "[email protected]")
24310 (invoke "git" "config" "--global" "user.name" "Nobody"))))))
24311 (propagated-inputs
24312 (list python-packaging))
24313 (native-inputs
24314 (list git-minimal
24315 python-poetry-core
24316 python-pytest))
24317 (home-page "https://github.com/mtkennerly/dunamai")
24318 (synopsis "Dynamic version generation")
24319 (description
24320 "Dunamai is Python library and command line tool for producing dynamic,
24321standards-compliant version strings, derived from tags in your version control
24322system. This facilitates uniquely identifying nightly or per-commit builds in
24323continuous integration and releasing new versions of your software simply by
24324creating a tag.")
24325 (license license:expat)))
24326
24327(define-public python-pbkdf2
24328 (package
24329 (name "python-pbkdf2")
24330 (version "1.3")
24331 (source
24332 (origin
24333 (method url-fetch)
24334 (uri (pypi-uri "pbkdf2" version))
24335 (sha256
24336 (base32 "0yb99rl2mbsaamj571s1mf6vgniqh23v98k4632150hjkwv9fqxc"))))
24337 (build-system pyproject-build-system)
24338 (arguments
24339 (list
24340 #:test-backend #~'custom
24341 #:test-flags #~(list "test/test_pbkdf2.py")))
24342 (native-inputs (list python-setuptools))
24343 (home-page "https://www.dlitz.net/software/python-pbkdf2/")
24344 (synopsis "Password-based key derivation")
24345 (description
24346 "This module implements the password-based key derivation function,
24347PBKDF2, specified in RSA PKCS#5 v2.0.
24348
24349PKCS#5 v2.0 Password-Based Key Derivation is a key derivation function which
24350is part of the RSA Public Key Cryptography Standards series. The provided
24351implementation takes a password or a passphrase and a salt value (and
24352optionally a iteration count, a digest module, and a MAC module) and provides
24353a file-like object from which an arbitrarily-sized key can be read.")
24354 (license license:expat)))
24355
24356(define-public python-qrcode
24357 (package
24358 (name "python-qrcode")
24359 (version "8.2")
24360 (source
24361 (origin
24362 (method url-fetch)
24363 (uri (pypi-uri "qrcode" version))
24364 (sha256
24365 (base32 "0v2h8vs1b80qhkc293w5dzvd439600ffzcznp5m16crb2yjg5hrm"))))
24366 (build-system pyproject-build-system)
24367 (native-inputs
24368 (list python-poetry-core
24369 python-pytest))
24370 (home-page "https://github.com/lincolnloop/python-qrcode")
24371 (synopsis "QR Code image generator")
24372 (description
24373 "This package provides a pure Python QR Code generator module. It uses
24374the Python Imaging Library (PIL) to allow for the generation of QR Codes.
24375
24376In addition this package provides a command line tool to generate QR codes and
24377either write these QR codes to a file or do the output as ascii art at the
24378console.")
24379 (license license:bsd-3)))
24380
24381(define-public python-rst2ansi
24382 (package
24383 (name "python-rst2ansi")
24384 (properties '((commit . "c6f390b45be689a5760060c990e3fe10f502e671")
24385 (revision . "0")))
24386 (version (git-version "0.1.5"
24387 (assoc-ref properties 'revision)
24388 (assoc-ref properties 'commit)))
24389 (source
24390 (origin
24391 (method git-fetch)
24392 (uri (git-reference
24393 (url "https://github.com/Snaipe/python-rst-to-ansi")
24394 (commit (assoc-ref properties 'commit))))
24395 (file-name (git-file-name name version))
24396 (sha256
24397 (base32 "0vsn1jjhm1hx0q5i954lyhny2yvn619am1di03aypfl0wm1mh7qd"))))
24398 (build-system pyproject-build-system)
24399 (arguments
24400 (list
24401 #:tests? #f ; 2 tests fail with additional line characters
24402 #:phases
24403 #~(modify-phases %standard-phases
24404 (replace 'check
24405 (lambda* (#:key tests? #:allow-other-keys)
24406 (when tests?
24407 (invoke "cram" "test" "-v")))))))
24408 (native-inputs (list python-cram python-setuptools))
24409 (propagated-inputs (list python-docutils))
24410 (home-page "https://github.com/Snaipe/python-rst-to-ansi")
24411 (synopsis "Convert RST to ANSI-decorated console output")
24412 (description
24413 "Python module dedicated to rendering RST (reStructuredText) documents to
24414ansi-escaped strings suitable for display in a terminal.")
24415 (license license:expat)))
24416
24417(define-public python-ansi2html
24418 (package
24419 (name "python-ansi2html")
24420 (version "1.9.2")
24421 (source
24422 (origin
24423 (method url-fetch)
24424 (uri (pypi-uri "ansi2html" version))
24425 (sha256
24426 (base32 "19f0ap4w66b35csmx4k97pnb9fkdfnmgliajn0kvhdsxaf3vylrl"))))
24427 (build-system pyproject-build-system)
24428 (native-inputs
24429 (list python-mock
24430 python-pytest
24431 python-setuptools
24432 python-wheel))
24433 (home-page "https://github.com/ralphbean/ansi2html")
24434 (synopsis "Convert ANSI-decorated console output to HTML")
24435 (description
24436 "@command{ansi2html} is a Python library and command line utility for
24437converting text with ANSI color codes to HTML or LaTeX.")
24438 (license license:gpl3+)))
24439
24440(define-public python-easy-ansi
24441 (package
24442 (name "python-easy-ansi")
24443 (version "2.1")
24444 (source
24445 (origin
24446 (method git-fetch)
24447 (uri (git-reference
24448 (url "https://gitlab.com/joeysbytes/easy-ansi")
24449 (commit (string-append "v" version))))
24450 (file-name (git-file-name name version))
24451 (sha256
24452 (base32 "16zk4vyrr3hhb6aijmqchjlz181mgk7mi9zyyjd8i53h9rr00wkx"))))
24453 (build-system pyproject-build-system)
24454 (arguments
24455 (list
24456 #:phases
24457 #~(modify-phases %standard-phases
24458 (add-after 'install 'remove-extra
24459 (lambda* (#:key inputs outputs #:allow-other-keys)
24460 (with-directory-excursion (site-packages inputs outputs)
24461 (delete-file-recursively "tests")
24462 (delete-file "setup.py")))))))
24463 (native-inputs (list python-pytest python-setuptools))
24464 (home-page "https://gitlab.com/joeysbytes/easy-ansi")
24465 (synopsis "Terminal framework API")
24466 (description
24467 "Easy ANSI is a terminal framework API to give you an easy way to use
24468colors, cursor control movements, and line/box drawing. It is not meant as a
24469replacement to more full-featured frameworks (such as curses or urwid), but as
24470a tool to quickly create nice-looking screens in your terminal window. You
24471can even create animations with the cursor controls.")
24472 (license license:expat)))
24473
24474(define-public python-easy-ansi-0.3
24475 (package
24476 (inherit python-easy-ansi)
24477 (name "python-easy-ansi")
24478 (version "0.3")
24479 (source
24480 (origin
24481 (method git-fetch)
24482 (uri (git-reference
24483 (url "https://gitlab.com/joeysbytes/easy-ansi")
24484 (commit (string-append "v" version))))
24485 (file-name (git-file-name name version))
24486 (sha256
24487 (base32 "0albh55ynzs98qy9pln4qaxw5qhhh3lk09jy9bx19gycrp1c3lc3"))))
24488 (arguments '())))
24489
24490(define-public python-pycosat
24491 (package
24492 (name "python-pycosat")
24493 (version "0.6.6")
24494 (source
24495 (origin
24496 (method git-fetch)
24497 (uri (git-reference
24498 (url "https://github.com/ContinuumIO/pycosat")
24499 (commit version)))
24500 (file-name (git-file-name name version))
24501 (sha256
24502 (base32 "1p62d7fqny4ayr218lshrp35g75ljaxlgza9yr2hm44aqggvmqbw"))))
24503 ;; TODO: Unundle picosat. http://fmv.jku.at/picosat/
24504 (build-system pyproject-build-system)
24505 (arguments (list #:test-backend #~'unittest))
24506 (native-inputs (list unzip python-setuptools))
24507 (home-page "https://github.com/ContinuumIO/pycosat")
24508 (synopsis "Bindings to picosat (a SAT solver)")
24509 (description
24510 "This package provides efficient Python bindings to @code{picosat} on the
24511C level. When importing pycosat, the @code{picosat} solver becomes part of
24512the Python process itself. @code{picosat} is a @dfn{Boolean Satisfiability
24513Problem} (SAT) solver.")
24514 (license license:expat)))
24515
24516(define-public python-pypeg2
24517 (package
24518 (name "python-pypeg2")
24519 (version "2.15.2")
24520 (source
24521 (origin
24522 (method url-fetch)
24523 (uri (pypi-uri "pyPEG2" version))
24524 (sha256
24525 (base32 "0v8ziaam2r637v94ra4dbjw6jzxz99gs5x4i585kgag1v204yb9b"))))
24526 (build-system pyproject-build-system)
24527 (native-inputs (list python-pytest python-setuptools))
24528 (propagated-inputs (list python-lxml))
24529 (home-page "https://fdik.org/pyPEG/")
24530 (synopsis "Parsing Expression Grammars in Python")
24531 (description
24532 "PyPEG is an intrinsic parser interpreter framework for Python. It is
24533based on Parsing Expression Grammars, PEG. With pyPEG you can parse many
24534formal languages.")
24535 (license license:gpl2)))
24536
24537(define-public python-pyformlang
24538 (package
24539 (name "python-pyformlang")
24540 (version "1.0.10")
24541 (source
24542 (origin
24543 (method url-fetch)
24544 (uri (pypi-uri "pyformlang" version))
24545 (sha256
24546 (base32 "0szgy4pqfixmswjs37qgma4qa3bsadpp3l1xflrpfi10aa8hh2sp"))))
24547 (build-system pyproject-build-system)
24548 (native-inputs
24549 (list python-pytest
24550 python-setuptools
24551 python-wheel))
24552 (propagated-inputs
24553 (list python-networkx
24554 python-numpy
24555 python-pydot))
24556 (home-page "https://github.com/Aunsiels/pyformlang")
24557 (synopsis "Framework for interacting with formal grammars")
24558 (description
24559 "This package provides a framework for working with formal
24560language grammars. The library was originally developed for educational
24561purposes and therefore implements many textbook algorithms regarding the
24562manipulation and interaction with formal grammars.")
24563 (license license:expat)))
24564
24565(define-public python-incremental
24566 (package
24567 (name "python-incremental")
24568 (version "24.7.2")
24569 (source
24570 (origin
24571 (method url-fetch)
24572 (uri (pypi-uri "incremental" version))
24573 (sha256
24574 (base32
24575 "1jb4skmy8awix345jk2pnar0sxmrf1gvn3kg9xyyivv0xr3iskzv"))))
24576 (build-system pyproject-build-system)
24577 (arguments
24578 ;; Tests require twisted, which needs this package.
24579 (list #:tests? #false
24580 #:build-backend "setuptools.build_meta"))
24581 (native-inputs
24582 (list python-setuptools))
24583 (home-page "https://github.com/hawkowl/incremental")
24584 (synopsis "Library for versioning Python projects")
24585 (description "Incremental is a small library that versions your Python
24586 projects.")
24587 (license license:expat)))
24588
24589(define-public python-invoke
24590 (package
24591 (name "python-invoke")
24592 (version "2.2.1")
24593 (source
24594 (origin
24595 (method url-fetch)
24596 (uri (pypi-uri "invoke" version))
24597 (sha256
24598 (base32 "01z73gmbmf5q3ynr3yfz894rrwr2v9406n94n1wjp4s89adz8nsi"))))
24599 ;; TODO: invoke/vendor contains:
24600 ;; - fluidity -> https://github.com/nsi-iff/fluidity (14y old)
24601 ;; - lexicon -> https://github.com/bitprophet/lexicon (2y old)
24602 ;; - yaml -> https://github.com/yaml/pyyaml (2y old)
24603 (build-system pyproject-build-system)
24604 (arguments
24605 (list
24606 ;; XXX: Requires many dependencies that are not yet in Guix.
24607 #:tests? #f
24608 #:phases
24609 #~(modify-phases %standard-phases
24610 (add-after 'unpack 'fix-bash-path
24611 (lambda _
24612 (let ((bash #$(this-package-input "bash-minimal")))
24613 (substitute* "invoke/config.py"
24614 (("shell = \"/bin/bash\"")
24615 (string-append "shell = \"" bash "/bin/bash\""))))))
24616 (add-after 'wrap 'fix-entry-points
24617 ;; TODO: Remove after https://codeberg.org/guix/guix/issues/4509
24618 ;; is fixed.
24619 (lambda _
24620 (substitute* (list (string-append #$output "/bin/.invoke-real")
24621 (string-append #$output "/bin/.inv-real"))
24622 (("from invoke.main import program.run")
24623 "from invoke.main import program")))))))
24624 (native-inputs
24625 (list python-setuptools
24626 python-wheel))
24627 (inputs
24628 (list bash-minimal))
24629 (home-page "https://www.pyinvoke.org/")
24630 (synopsis "Pythonic task execution")
24631 (description
24632 "Invoke is a Python task execution tool and library, drawing inspiration
24633from various sources to arrive at a powerful and clean feature set. It is
24634evolved from the Fabric project, but focuses on local and abstract concerns
24635instead of servers and network commands.")
24636 (license license:bsd-3)))
24637
24638(define-public python-automat
24639 (package
24640 (name "python-automat")
24641 (version "24.8.1")
24642 (source (origin
24643 (method url-fetch)
24644 (uri (pypi-uri "Automat" version))
24645 (sha256
24646 (base32
24647 "123d63k8wg9pfv9j7hr0kd1kw23m0rwdx7irsa55ncpncg7jfhmk"))))
24648 (build-system pyproject-build-system)
24649 (arguments
24650 (list
24651 #:phases
24652 #~(modify-phases %standard-phases
24653 (replace 'check
24654 (lambda* (#:key tests? test-flags #:allow-other-keys)
24655 (with-directory-excursion #$output
24656 (apply invoke "pytest" "-vv" test-flags))))
24657 ;; Remove script, because it depends on python-twisted.
24658 (add-after 'unpack 'remove-entrypoint
24659 (lambda _
24660 (substitute* "pyproject.toml"
24661 (("automat-visualize = \"automat._visualize:tool\"") "")))))))
24662 (native-inputs
24663 (list python-pytest python-setuptools python-setuptools-scm python-wheel))
24664 (propagated-inputs
24665 (list python-graphviz python-typing-extensions))
24666 (home-page "https://github.com/glyph/Automat")
24667 (synopsis "Self-service finite-state machines")
24668 (description "Automat is a library for concise, idiomatic Python
24669 expression of finite-state automata (particularly deterministic finite-state
24670 transducers).")
24671 (license license:expat)))
24672
24673(define-public python-constantly
24674 (package
24675 (name "python-constantly")
24676 (version "23.10.4")
24677 (source
24678 (origin
24679 (method url-fetch)
24680 (uri (pypi-uri "constantly" version))
24681 (sha256
24682 (base32 "1gbw3izhn1gx1rgc61jbfr4dr535fxhynifp7jrhpb726c5bg4ma"))))
24683 (build-system pyproject-build-system)
24684 (arguments
24685 (list #:tests? #f)) ;cycles with python-twisted
24686 (native-inputs
24687 (list python-setuptools
24688 python-versioneer))
24689 (home-page "https://github.com/twisted/constantly")
24690 (synopsis "Symbolic constants in Python")
24691 (description "Constantly is a Python library that provides symbolic
24692 constant support. It includes collections and constants with text, numeric,
24693 and bit flag values.")
24694 (license license:expat)))
24695
24696(define-public python-attrs
24697 (package
24698 (name "python-attrs")
24699 (version "25.3.0")
24700 (source
24701 (origin
24702 (method url-fetch)
24703 (uri (pypi-uri "attrs" version))
24704 (sha256
24705 (base32 "06xgyhxzsc0h3l0pqlkk168f072a9lnl9d415ixp8xmmgzycxmvm"))))
24706 (build-system pyproject-build-system)
24707 (native-inputs
24708 (list python-hatch-fancy-pypi-readme
24709 python-hatch-vcs
24710 python-hatchling
24711 python-hypothesis
24712 python-pytest))
24713 (home-page "https://github.com/python-attrs/attrs/")
24714 (synopsis "Attributes without boilerplate")
24715 (description "@code{attrs} is a Python package with class decorators that
24716 ease the chores of implementing the most common attribute-related object
24717 protocols.")
24718 (license license:expat)))
24719
24720(define-public python-attrs-bootstrap
24721 (package
24722 (inherit python-attrs)
24723 (name "python-attrs-bootstrap")
24724 (native-inputs (list python-hatchling
24725 python-hatch-fancy-pypi-readme
24726 python-hatch-vcs))
24727 (arguments `(#:tests? #f))))
24728
24729(define-public python-cliapp
24730 (package
24731 (name "python-cliapp")
24732 (version "1.20180812.1")
24733 (source
24734 (origin
24735 (method url-fetch)
24736 (uri (string-append
24737 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/cliapp/snapshot/cliapp-"
24738 version ".tar.gz"))
24739 (sha256
24740 (base32
24741 "1c1jlblbns8qhiaqjpg4xi6lip8xwfc5w643p43rg543havaj45x"))))
24742 (build-system python-build-system)
24743 (arguments
24744 `(;; XXX: The tests only do style and coverage checks, which
24745 ;; fails due to deprecation warnings, etc.
24746 #:tests? #f))
24747 (native-inputs
24748 (list python-coverage-test-runner))
24749 (propagated-inputs
24750 (list python-pyaml))
24751 (home-page "https://liw.fi/cliapp/")
24752 (synopsis "Python framework for command line programs")
24753 (description "@code{cliapp} is a Python framework for command line
24754 programs. It contains the typical stuff such programs need to do, such
24755 as parsing the command line for options, and iterating over input files.")
24756 (license license:gpl2+)))
24757
24758(define-public python-astroid
24759 (package
24760 (name "python-astroid")
24761 (version "3.3.11")
24762 (source
24763 (origin
24764 (method git-fetch)
24765 (uri (git-reference
24766 (url "https://github.com/PyCQA/astroid")
24767 (commit (string-append "v" version))))
24768 (file-name (git-file-name name version))
24769 (sha256
24770 (base32 "1x5903kmi47pc87r949lym2cwl0xg885xyy730adxv0g6r083zwn"))))
24771 (build-system pyproject-build-system)
24772 (arguments
24773 ;; UserWarning: pkg_resources is deprecated as an API. See
24774 ;; https://setuptools.pypa.io/en/latest/pkg_resources.html. The
24775 ;; pkg_resources package is slated for removal as early as
24776 ;; 2025-11-30. Refrain from using this package or pin to Setuptools<81.
24777 (list #:test-flags
24778 #~(list "-k" "not test_identify_old_namespace_package_protocol")))
24779 (native-inputs
24780 (list python-mypy-minimal
24781 python-pytest
24782 python-setuptools
24783 python-wheel))
24784 (propagated-inputs
24785 (list python-lazy-object-proxy
24786 python-typing-extensions
24787 python-wrapt))
24788 (home-page "https://github.com/PyCQA/astroid")
24789 (synopsis "Python source code base representation")
24790 (description "@code{python-astroid} provides a common base representation
24791of Python source code for projects such as pychecker, pyreverse, pylint, etc.
24792It provides a compatible representation which comes from the _ast module. It
24793rebuilds the tree generated by the builtin _ast module by recursively walking
24794down the AST and building an extended ast. The new node classes have
24795additional methods and attributes for different usages. They include some
24796support for static inference and local name scopes. Furthermore, astroid
24797builds partial trees by inspecting living objects.")
24798 (license license:lgpl2.1+)))
24799
24800(define-public python-isbnlib
24801 (package
24802 (name "python-isbnlib")
24803 (version "3.10.14")
24804 (source
24805 (origin
24806 (method git-fetch)
24807 (uri (git-reference
24808 (url "https://github.com/xlcnd/isbnlib")
24809 (commit (string-append "v" version))))
24810 (file-name (git-file-name name version))
24811 (sha256
24812 (base32 "07vpq8y0mn16489d1pl4zxgczgl1s2ydli4lci7f73z4zv179akp"))))
24813 (build-system pyproject-build-system)
24814 (arguments
24815 (list
24816 #:test-flags #~(list "-m" "not network")))
24817 (native-inputs (list python-pytest python-pytest-cov python-setuptools))
24818 (home-page "https://github.com/xlcnd/isbnlib")
24819 (synopsis "Python library to work with ISBN strings")
24820 (description
24821 "@code{python-isbnlib} is a (pure) python library that provides several
24822useful methods and functions to validate, clean, transform, hyphenate and get
24823metadata for ISBN strings. Its origin was as the core of isbntools. This
24824short version, is suitable to be include as a dependency in other projects.")
24825 (license license:lgpl3+)))
24826
24827(define-public python-isoduration
24828 (package
24829 (name "python-isoduration")
24830 (version "20.11.0")
24831 (source
24832 (origin
24833 (method url-fetch)
24834 (uri (pypi-uri "isoduration" version))
24835 (sha256
24836 (base32 "1n8vpa9fckhc5934kp7m83wq81dhkvw987v7mjg2fdbr2car0bxc"))))
24837 (build-system pyproject-build-system)
24838 (arguments '(#:tests? #f)) ;no tests in PyPI archive
24839 (propagated-inputs (list python-arrow))
24840 (native-inputs (list python-setuptools python-wheel))
24841 (home-page "https://github.com/bolsote/isoduration")
24842 (synopsis "Operations with ISO 8601 durations")
24843 (description "ISO 8601 is most commonly known as a way to exchange
24844datetimes in textual format. A lesser known aspect of the standard is the
24845representation of durations. The state of the art of ISO 8601 duration
24846handling in Python is more or less limited to what's offered by isodate. This
24847package attempts to address the shortcomings of @code{isodate}.")
24848 (license license:isc)))
24849
24850(define-public python-isort
24851 (package
24852 (name "python-isort")
24853 (version "6.0.1")
24854 (source
24855 (origin
24856 (method git-fetch) ;no tests in PyPI archive
24857 (uri (git-reference
24858 (url "https://github.com/timothycrosley/isort")
24859 (commit version)))
24860 (file-name (git-file-name name version))
24861 (modules '((guix build utils)))
24862 (snippet '(for-each delete-file (find-files "." "\\.whl$")))
24863 (sha256
24864 (base32 "1fcwv1dlq0d3is9s6scp6vy7yw4l845kk51ihxac8419n8hrpvpq"))))
24865 (build-system pyproject-build-system)
24866 (arguments
24867 (list
24868 #:test-flags
24869 ;; Ignore benchmark and integration to reduce closure size.
24870 #~(list "--ignore=tests/benchmark/"
24871 "--ignore=tests/integration/"
24872 "--ignore=tests/unit/profiles/test_black.py"
24873 "-k" (string-join
24874 (list "not test_gitignore"
24875 "test_isort_supports_shared_profiles_issue_970"
24876 "test_requirements_dir"
24877 "test_requirements_finder"
24878 "test_sort_configurable_sort_issue_1732"
24879 "test_sort_imports_error_handling")
24880 " and not "))
24881 ;; TODO: Package example plugins separately, available in PyPI:
24882 ;; - example_isort_formatting_plugin
24883 ;; - example_isort_sorting_plugin
24884 ;; - example_shared_isort_profile
24885 #:phases
24886 #~(modify-phases %standard-phases
24887 (add-before 'build 'pretend-version
24888 (lambda _
24889 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
24890 (native-inputs
24891 (list python-colorama
24892 python-hatch-vcs
24893 python-hatchling
24894 python-hypothesis
24895 python-pylama
24896 python-pytest))
24897 (home-page "https://github.com/PyCQA/isort")
24898 (synopsis "Python utility/library to sort python imports")
24899 (description
24900 "@code{python-isort} is a python utility/library to sort imports
24901alphabetically, and automatically separated into sections. It provides a
24902command line utility, a python library and plugins for various editors.")
24903 (license license:expat)))
24904
24905(define-public python-configparser
24906 (package
24907 (name "python-configparser")
24908 (version "7.2.0")
24909 (source
24910 (origin
24911 (method url-fetch)
24912 (uri (pypi-uri "configparser" version))
24913 (sha256
24914 (base32 "0w3vichm4igwvh7r560rw58xi4s1yf9x1cyi6syszqqnx65cqadn"))))
24915 (build-system pyproject-build-system)
24916 (native-inputs
24917 (list python-pytest
24918 python-setuptools
24919 python-setuptools-scm
24920 python-wheel))
24921 (home-page "https://github.com/jaraco/configparser/")
24922 (synopsis "Backport of configparser from python 3.5")
24923 (description "@code{python-configparser} is a backport of
24924 @code{configparser} from Python 3.5 so that it can be used directly
24925 in other versions.")
24926 (license license:expat)))
24927
24928(define-public python-iniconfig
24929 (package
24930 (name "python-iniconfig")
24931 (version "2.1.0")
24932 (source
24933 (origin
24934 (method url-fetch)
24935 (uri (pypi-uri "iniconfig" version))
24936 (sha256
24937 (base32 "1iz1fg3n6pv4q8jzv1q0izl5001diwqggizrg3p3ywrn1gix5frs"))))
24938 (build-system pyproject-build-system)
24939 (arguments (list #:tests? #f)) ;no tests in PyPI, tests introduce cycle with pytest
24940 (native-inputs
24941 (list python-hatch-vcs
24942 python-hatchling))
24943 (home-page "https://github.com/RonnyPfannschmidt/iniconfig")
24944 (synopsis "Simple INI-file parser")
24945 (description "The @code{iniconfig} package provides a small and simple
24946 INI-file parser module having a unique set of features ; @code{iniconfig}
24947 @itemize
24948 @item maintains the order of sections and entries ;
24949 @item supports multi-line values with or without line-continuations ;
24950 @item supports \"#\" comments everywhere ;
24951 @item raises errors with proper line-numbers ;
24952 @item raises an error when two sections have the same name.
24953 @end itemize")
24954 (license license:expat)))
24955
24956(define-public python-mando
24957 (package
24958 (name "python-mando")
24959 (version "0.8.2")
24960 (source
24961 (origin
24962 (method url-fetch)
24963 (uri (pypi-uri "mando" version))
24964 (sha256
24965 (base32 "1ddn4h1fvc9f8z2p8l88jyazxnp0h7rmh711i2hwkipxlbcmk5jk"))))
24966 (build-system pyproject-build-system)
24967 (native-inputs
24968 (list python-pytest python-setuptools))
24969 (home-page "https://mando.readthedocs.org/")
24970 (synopsis "Wrapper around argparse, allowing creation of complete CLI applications")
24971 (description
24972 "This package is a wrapper around argparse, allowing you to write complete CLI
24973applications in seconds while maintaining all the flexibility.")
24974 (license license:expat)))
24975
24976(define-public python-mwclient
24977 (package
24978 (name "python-mwclient")
24979 (version "0.11.0")
24980 (source
24981 (origin
24982 (method git-fetch)
24983 (uri (git-reference
24984 (url "https://github.com/mwclient/mwclient")
24985 (commit (string-append "v" version))))
24986 (file-name (git-file-name name version))
24987 (sha256
24988 (base32 "14kg353vzrwh7zks7zsza4hfb2n5vxprh9hnw4rjsimm8509axda"))))
24989 (build-system pyproject-build-system)
24990 (propagated-inputs
24991 (list python-requests-oauthlib))
24992 (native-inputs
24993 (list python-mock
24994 python-pytest
24995 python-pytest-cov
24996 python-responses
24997 python-setuptools))
24998 (home-page "https://github.com/btongminh/mwclient")
24999 (synopsis "MediaWiki API client")
25000 (description "This package provides a MediaWiki API client.")
25001 (license license:expat)))
25002
25003(define-public python-kneed
25004 (package
25005 (name "python-kneed")
25006 (version "0.8.5")
25007 (source
25008 (origin
25009 (method git-fetch)
25010 (uri (git-reference
25011 (url "https://github.com/arvkevi/kneed")
25012 (commit (string-append "v" version))))
25013 (file-name (git-file-name name version))
25014 (sha256
25015 (base32 "0kcglaql1nqvjv5q62myybznii1n1akln5yacp63rg8xv7l0zad1"))))
25016 (build-system pyproject-build-system)
25017 (arguments
25018 (list
25019 #:test-flags #~(list "--ignore=tests/test_no_matplotlib.py")))
25020 (native-inputs (list python-hatchling python-pytest python-pytest-cov))
25021 (propagated-inputs (list python-matplotlib python-numpy python-scipy))
25022 (home-page "https://github.com/arvkevi/kneed")
25023 (synopsis "Knee-point detection in Python")
25024 (description
25025 "This package implements the kneedle algorithm. Given a set of x and y
25026values, kneed will return the knee point of the function. The knee point is
25027the point of maximum curvature.")
25028 (license license:bsd-3)))
25029
25030(define-public python-diff-cover
25031 (package
25032 (name "python-diff-cover")
25033 (version "9.7.1")
25034 (source
25035 (origin
25036 (method url-fetch)
25037 (uri (pypi-uri "diff_cover" version))
25038 (sha256
25039 (base32 "0j1m8rfs080zsil516pvr0hy3x24dny4c77ilzfjgp5pcjy7hfx0"))))
25040 (build-system pyproject-build-system)
25041 (arguments
25042 (list
25043 #:test-flags
25044 ;; Dropp check of flake8 in tests.
25045 #~(list "-k" "not test_file_does_not_exist")))
25046 (native-inputs
25047 (list python-pycodestyle
25048 python-poetry-core
25049 python-pyflakes
25050 python-pylint
25051 python-pytest
25052 python-pytest-datadir
25053 python-pytest-mock))
25054 (propagated-inputs
25055 (list python-chardet
25056 python-jinja2
25057 python-pluggy
25058 python-pygments
25059 python-setuptools ; For pkg_resources.
25060 python-tomli))
25061 (home-page "https://github.com/Bachmann1234/diff_cover")
25062 (synopsis "Run coverage and linting reports on diffs")
25063 (description
25064 "Automatically find diff lines that need test coverage. It also finds
25065diff lines that have violations (according to tools such as pycodestyle,
25066pyflakes, flake8, or pylint). This is used as a code quality metric during
25067code reviews.")
25068 (license license:asl2.0)))
25069
25070(define-public python-diff-match-patch
25071 (package
25072 (name "python-diff-match-patch")
25073 (version "20241021")
25074 (source
25075 (origin
25076 (method url-fetch)
25077 (uri (pypi-uri "diff_match_patch" version))
25078 (sha256
25079 (base32
25080 "0wshhdnxvb7l45pjrj1fhrhvh7b6p1l2kvim559q9054kylmgbmy"))))
25081 (build-system pyproject-build-system)
25082 (native-inputs (list python-flit-core python-pytest))
25083 (home-page "https://github.com/diff-match-patch-python/diff-match-patch")
25084 (synopsis "Synchronize plain text")
25085 (description "Diff Match and Patch libraries offer robust algorithms to
25086 perform the operations required for synchronizing plain text.")
25087 (license license:asl2.0)))
25088
25089(define-public python-icdiff
25090 (package
25091 (name "python-icdiff")
25092 (version "2.0.7")
25093 (source (origin
25094 (method git-fetch)
25095 (uri (git-reference
25096 (url "https://github.com/jeffkaufman/icdiff")
25097 (commit (string-append "release-" version))))
25098 (file-name (git-file-name name version))
25099 (sha256
25100 (base32
25101 "0kwgglbnpvsv5qb59yl0pvihr1ca5m8l6cq8hjski5y62g33zv2w"))))
25102 (build-system pyproject-build-system)
25103 (arguments
25104 (list #:tests? #f)) ; there are no test scripts
25105 (native-inputs (list python-setuptools python-wheel))
25106 (home-page "https://www.jefftk.com/icdiff")
25107 (synopsis "Improved colored diff")
25108 (description "This package provides colored diff functions that highlight
25109parts of the lines that were modified.")
25110 (license license:psfl)))
25111
25112(define-public python-dirsync
25113 (package
25114 (name "python-dirsync")
25115 (version "2.2.6")
25116 (source
25117 (origin
25118 (method url-fetch)
25119 (uri (pypi-uri "dirsync" version))
25120 (sha256
25121 (base32
25122 "1g3h0lva0mgmm4i5z62h8jkv9y1mp5xlvl2w2nfa3galbgn5gdak"))))
25123 (build-system pyproject-build-system)
25124 (arguments
25125 ;; No tests in PyPI release and GitHub repository does not have the
25126 ;; latest release tag.
25127 (list #:tests? #f))
25128 (native-inputs (list python-setuptools python-wheel))
25129 (home-page "https://github.com/tkhyn/dirsync")
25130 (synopsis "Advanced directory tree synchronisation tool")
25131 (description
25132 "Dirsync is an advanced directory tree synchronisation tool.")
25133 (license license:expat)))
25134
25135(define-public python-levenshtein
25136 (package
25137 (name "python-levenshtein")
25138 (version "0.27.1")
25139 (source
25140 (origin
25141 (method git-fetch)
25142 (uri (git-reference
25143 (url "https://github.com/rapidfuzz/Levenshtein")
25144 (commit (string-append "v" version))))
25145 (file-name (git-file-name name version))
25146 (sha256
25147 (base32 "1khr1vjmrwakjfdsb22k508h3g8awjp0yb398ca8n1xanwzk4l8h"))))
25148 (build-system pyproject-build-system)
25149 (propagated-inputs (list python-rapidfuzz))
25150 (native-inputs
25151 (list cmake-minimal
25152 python-cython
25153 python-pytest
25154 python-scikit-build-core
25155 python-setuptools
25156 rapidfuzz-cpp))
25157 (home-page "https://github.com/rapidfuzz/Levenshtein")
25158 (synopsis "Fast computation of Levenshtein distance and string similarity")
25159 (description
25160 "The Levenshtein Python C extension module contains functions for fast computation of
25161@enumerate
25162@item Levenshtein (edit) distance, and edit operations
25163@item string similarity
25164@item approximate median strings, and generally string averaging
25165@item string sequence and set similarity
25166@end enumerate
25167It supports both normal and Unicode strings.")
25168 (license license:gpl2+)))
25169
25170(define-public python-factory-boy
25171 (package
25172 (name "python-factory-boy")
25173 (version "3.3.3")
25174 (source
25175 (origin
25176 (method url-fetch)
25177 (uri (pypi-uri "factory_boy" version))
25178 (sha256
25179 (base32 "00rx3v5y5l03vlkq6xqj4r7zbnlrx23h45mlyb3zm38j4v964s46"))))
25180 (build-system pyproject-build-system)
25181 (arguments
25182 ;; Tests are not included in the tarball.
25183 `(#:tests? #f))
25184 (native-inputs (list python-setuptools))
25185 (propagated-inputs (list python-faker))
25186 (home-page "https://github.com/FactoryBoy/factory_boy")
25187 (synopsis "Versatile test fixtures replacement")
25188 (description "Factory_boy is a fixtures replacement based on thoughtbot’s
25189factory_girl. As a fixtures replacement tool, it aims to replace static, hard
25190to maintain fixtures with easy-to-use factories for complex object. Instead
25191of building an exhaustive test setup with every possible combination of corner
25192cases, factory_boy allows you to use objects customized for the current test,
25193while only declaring the test-specific fields.")
25194 (license license:expat)))
25195
25196(define-public python-gtts
25197 (package
25198 (name "python-gtts")
25199 (version "2.3.1")
25200 (source (origin
25201 (method url-fetch)
25202 (uri (pypi-uri "gTTS" version))
25203 (sha256
25204 (base32
25205 "1jsg1prpzr7gj5sn385mkv2v1i8xfc83ycm87hvsi2j0y366plps"))))
25206 (build-system pyproject-build-system)
25207 (arguments
25208 ;; Disable tests that require internet.
25209 (list #:test-flags '(list "-k" "not net")))
25210 (native-inputs
25211 (list python-pytest python-testfixtures python-click python-requests
25212 python-setuptools python-wheel))
25213 (home-page "https://github.com/pndurette/gTTS")
25214 (synopsis "Google Translate text-to-speech interface")
25215 (description
25216 "Google Text-to-Speech (gTTS) is a Python library and CLI tool to
25217interface with the Google Translate text-to-speech API. It lets you write
25218spoken MP3 data to a file, a file-like object (bytestring) for further audio
25219manipulation, or @code{stdout}.")
25220 (license license:expat)))
25221
25222(define-public python-packaging
25223 (package/inherit python-packaging-bootstrap
25224 (name "python-packaging")
25225 (arguments
25226 `(#:phases (modify-phases %standard-phases
25227 (replace 'check
25228 (lambda* (#:key tests? #:allow-other-keys)
25229 (if tests?
25230 (invoke "pytest" "-vv")
25231 (format #t "test suite not run~%")))))))
25232 (native-inputs
25233 (list python-flit-core
25234 python-pretend python-pytest))
25235 (propagated-inputs (list python-pyparsing python-six))
25236 (home-page "https://github.com/pypa/packaging")
25237 (synopsis "Core utilities for Python packages")
25238 (description "Packaging is a Python module for dealing with Python packages.
25239 It offers an interface for working with package versions, names, and dependency
25240 information.")
25241 ;; From 'LICENSE': This software is made available under the terms of
25242 ;; *either* of the licenses found in LICENSE.APACHE or LICENSE.BSD.
25243 ;; Contributions to this software is made under the terms of *both* these
25244 ;; licenses.
25245 (license (list license:asl2.0 license:bsd-2))))
25246
25247(define-public python-packaging-legacy
25248 (package
25249 (name "python-packaging-legacy")
25250 (version "23.0.post0")
25251 (source
25252 (origin
25253 (method url-fetch)
25254 (uri (pypi-uri "packaging_legacy" version))
25255 (sha256
25256 (base32 "1nyryxlc7fd4c0jmfp99az1s61vfv5xbi6017wqi4wd7j4ia8x69"))))
25257 (build-system pyproject-build-system)
25258 (propagated-inputs (list python-packaging))
25259 (native-inputs
25260 (list python-pretend
25261 python-pytest
25262 python-setuptools
25263 python-wheel))
25264 (home-page "https://pypi.org/project/packaging-legacy/")
25265 (synopsis "Core utilities for legacy Python packages")
25266 (description "This library provides support for legacy Python Packaging
25267functionality removed from @code{packaging}.")
25268 (license license:asl2.0)))
25269
25270(define-public python-relatorio
25271 (package
25272 (name "python-relatorio")
25273 (version "0.11.1")
25274 (source
25275 (origin
25276 (method url-fetch)
25277 (uri (pypi-uri "relatorio" version))
25278 (sha256
25279 (base32 "0qa8f9xvvc60i41vpf386jqx65379dnn9xpjwp8zaibba5raz83v"))))
25280 (build-system pyproject-build-system)
25281 (native-inputs
25282 (list python-pytest
25283 python-setuptools))
25284 (propagated-inputs
25285 (list python-genshi
25286 python-lxml
25287 python-magic))
25288 (home-page "https://relatorio.tryton.org/")
25289 (synopsis "Templating library able to output ODT and PDF files")
25290 (description
25291 "Relatorio is a templating library which provides a way to easily output
25292ODT, ODS, PNG, SVG and several other kinds of files. Support for more
25293filetypes can be easily added by creating plugins for them.")
25294 (license license:gpl3+)))
25295
25296(define-public python-radon
25297 (package
25298 (name "python-radon")
25299 (version "6.0.1")
25300 (source
25301 (origin
25302 (method git-fetch)
25303 (uri (git-reference
25304 (url "https://github.com/rubik/radon")
25305 (commit (string-append "v" version))))
25306 (file-name (git-file-name name version))
25307 (sha256
25308 (base32 "01n3idnrglgbjgwvvgs7yg9amjda3zs2659sp2zqpllp9gva73y9"))))
25309 (build-system pyproject-build-system)
25310 (arguments
25311 (list
25312 #:phases
25313 #~(modify-phases %standard-phases
25314 (add-after 'unpack 'relax-requirements
25315 (lambda _
25316 (substitute* (list "pyproject.toml" "requirements.txt")
25317 (("(mando.*>=0\\.6),<0\\.8" _ mando-lower-bound)
25318 mando-lower-bound)))))))
25319 (propagated-inputs (list python-colorama python-mando))
25320 (native-inputs (list python-poetry-core python-pytest python-pytest-mock
25321 python-setuptools))
25322 (home-page "https://radon.readthedocs.org/")
25323 (synopsis "Code Metrics in Python")
25324 (description
25325 "Radon is a Python tool which computes various code metrics. Supported
25326metrics are:
25327@itemize @bullet
25328@item raw metrics: SLOC, comment lines, blank lines, &c.
25329@item Cyclomatic Complexity (i.e., McCabe’s Complexity)
25330@item Halstead metrics (all of them)
25331@item the Maintainability Index (a Visual Studio metric)
25332@end itemize")
25333 (license license:expat)))
25334
25335(define-public python-rgbxy
25336 (package
25337 (name "python-rgbxy")
25338 (version "0.5")
25339 (source
25340 (origin
25341 (method url-fetch)
25342 (uri (pypi-uri "rgbxy" version))
25343 (sha256
25344 (base32 "0c3dgm1rf7ih79pgkj7adffn8hlyqh5qah8rbzlq436kz3srk83q"))))
25345 (build-system pyproject-build-system)
25346 (arguments
25347 (list #:tests? #f)) ;no tests in PyPI or Git
25348 (native-inputs
25349 (list python-setuptools))
25350 (home-page "https://github.com/benknight/hue-python-rgb-converter")
25351 (synopsis "RGB conversion tool in Python")
25352 (description
25353 "This package implements functionality of RGB/CIE1931 'xy' gammuts
25354conversion: Gamut A, B, and C.")
25355 (license license:expat)))
25356
25357(define-public python-jsonpointer
25358 (package
25359 (name "python-jsonpointer")
25360 (version "3.0.0")
25361 (source
25362 (origin
25363 (method url-fetch)
25364 (uri (pypi-uri "jsonpointer" version))
25365 (sha256
25366 (base32 "1vsrmwrbix3bnxf71g1zyil0pxkh33hq47xkqdhjslli42gp4b9b"))))
25367 (build-system pyproject-build-system)
25368 (arguments (list #:test-backend #~'unittest))
25369 (native-inputs
25370 (list python-setuptools
25371 python-wheel))
25372 (home-page "https://github.com/stefankoegl/python-json-pointer")
25373 (synopsis "Identify specific nodes in a JSON document")
25374 (description "@code{jsonpointer} allows you to access specific nodes
25375 by path in a JSON document (see RFC 6901).")
25376 (license license:bsd-3)))
25377
25378(define-public python-jsonpatch
25379 (package
25380 (name "python-jsonpatch")
25381 (version "1.33")
25382 (source
25383 (origin
25384 (method git-fetch)
25385 ;; pypi version lacks tests.js
25386 (uri (git-reference
25387 (url "https://github.com/stefankoegl/python-json-patch")
25388 (commit (string-append "v" version))))
25389 (file-name (git-file-name name version))
25390 (sha256
25391 (base32 "0qidj3vrklygsid40y6qgxclssd85hbxnic1av833iy4hbml2w14"))))
25392 (build-system pyproject-build-system)
25393 (arguments
25394 (list #:test-backend #~'custom
25395 #:test-flags #~(list "tests.py")))
25396 (native-inputs
25397 (list python-setuptools))
25398 (propagated-inputs
25399 (list python-jsonpointer))
25400 (home-page "https://github.com/stefankoegl/python-json-patch")
25401 (synopsis "Applying JSON Patches in Python 2.6+ and 3.x")
25402 (description "@code{jsonpatch} is a library and program that allows
25403 applying JSON Patches according to RFC 6902.")
25404 (license license:bsd-3)))
25405
25406(define-public python-rfc3986
25407 (package
25408 (name "python-rfc3986")
25409 (version "2.0.0")
25410 (source
25411 (origin
25412 (method url-fetch)
25413 (uri (pypi-uri "rfc3986" version))
25414 (sha256
25415 (base32 "0716rg74cpmhi9f77ypnwcdsyfjplsgk1rnnmadq5zabpnfwzalp"))))
25416 (build-system pyproject-build-system)
25417 (native-inputs
25418 (list python-pytest python-setuptools))
25419 (home-page "https://rfc3986.readthedocs.io/")
25420 (synopsis "Parse and validate URI references")
25421 (description
25422 "@code{rfc3986} is a Python implementation of RFC@tie{}3986 including
25423validation and authority parsing. This module also supports RFC@tie{}6874
25424which adds support for zone identifiers to IPv6 addresses.")
25425 (license license:asl2.0)))
25426
25427(define-public python-rfc3986-validator
25428 (package
25429 (name "python-rfc3986-validator")
25430 (version "0.1.1")
25431 (source
25432 (origin
25433 (method url-fetch)
25434 (uri (pypi-uri "rfc3986_validator" version))
25435 (sha256
25436 (base32 "0mfh82r37ma5n54n8ibnqvmwr3j3f2ixqfjfmv1rwfqvjbkvsi1x"))))
25437 (build-system pyproject-build-system)
25438 (native-inputs
25439 (list python-pytest
25440 python-rfc3987
25441 python-setuptools))
25442 (home-page "https://github.com/naimetti/rfc3986-validator")
25443 (synopsis "Pure python rfc3986 validator")
25444 (description "This package implements a URI validator according to RFC3986
25445in pure Python.")
25446 (license license:expat)))
25447
25448(define-public python-rfc3987
25449 (package
25450 (name "python-rfc3987")
25451 (version "1.3.8")
25452 (source
25453 (origin
25454 (method url-fetch)
25455 (uri (pypi-uri "rfc3987" version))
25456 (sha256
25457 (base32
25458 "0cx7bhyjaylwnf9armxrkb3r0s37vf0vqf3bhbll9mb0lmbx5i6k"))))
25459 (build-system pyproject-build-system)
25460 (arguments
25461 (list #:test-backend #~'custom
25462 #:test-flags #~(list "-m" "doctest" "rfc3987.py")))
25463 (native-inputs
25464 (list python-setuptools))
25465 ;; Source: <https://codeberg.org/atufi/rfc3987>.
25466 (home-page "https://pypi.org/project/rfc3987/")
25467 (synopsis "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)")
25468 (description "@code{rfc3987} provides routines for parsing and
25469 validation of URIs (see RFC 3986) and IRIs (see RFC 3987).")
25470 (license license:gpl3+)))
25471
25472;; The latest commit contains fixes for building with both python3 and python2.
25473(define-public python-rfc6555
25474 (package
25475 (name "python-rfc6555")
25476 (version "0.1.0")
25477 (source
25478 (origin
25479 (method git-fetch)
25480 (uri (git-reference
25481 (url "https://github.com/sethmlarson/rfc6555")
25482 (commit (string-append "v" version))))
25483 (file-name (git-file-name name version))
25484 (sha256
25485 (base32 "0cynzrs3l6ywmkpcpx9m36604dav64sk3rk1s12hj49qqyx20v1f"))))
25486 (build-system pyproject-build-system)
25487 (arguments
25488 (list
25489 ;; Other tests require network access.
25490 #:test-flags #~(list "tests/test_ipv6.py")))
25491 (native-inputs (list python-pytest python-setuptools))
25492 (home-page "https://pypi.org/project/rfc6555/")
25493 (synopsis "Python implementation of RFC 6555")
25494 (description
25495 "Python implementation of the Happy Eyeballs Algorithm described in RFC
254966555. Provided with a single file and dead-simple API to allow easy vendoring
25497and integration into other projects.")
25498 (license license:asl2.0)))
25499
25500(define-public python-sacn
25501 (package
25502 (name "python-sacn")
25503 (version "1.11.0")
25504 (source
25505 (origin
25506 (method url-fetch)
25507 (uri (pypi-uri "sacn" version))
25508 (sha256
25509 (base32 "1sp0jmrjsd9g62kgi177fw4hi56h21s2p9khia3idmixgz53k2ql"))))
25510 (build-system pyproject-build-system)
25511 (native-inputs (list python-pytest python-setuptools python-wheel))
25512 (home-page "https://github.com/Hundemeier/sacn")
25513 (synopsis "Python library for sending and receiving sACN data")
25514 (description
25515 "This package provides a Python library for sending and receiving
25516 sACN (Streaming Architecture for Control Networks) data, a standard
25517 protocol used for controlling lighting and other devices over
25518 a network.")
25519 (license license:expat)))
25520
25521(define-public python-bagit
25522 (package
25523 (name "python-bagit")
25524 (version "1.9.0")
25525 (source
25526 (origin
25527 (method git-fetch) ; no tests in PyPI
25528 (uri (git-reference
25529 (url "https://github.com/LibraryOfCongress/bagit-python")
25530 (commit (string-append "v" version))))
25531 (file-name (git-file-name name version))
25532 (sha256
25533 (base32
25534 "12qfqha70vhc8pclq0kzv7xk0i44ramnlkphybv7419vdl4aay40"))))
25535 (build-system pyproject-build-system)
25536 (arguments
25537 (list #:phases
25538 #~(modify-phases %standard-phases
25539 (add-before 'build 'pretend-version
25540 (lambda _
25541 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION"
25542 #$(package-version this-package))))
25543 (replace 'check
25544 (lambda* (#:key tests? #:allow-other-keys)
25545 (when tests?
25546 (invoke "pytest" "-vv" "test.py")))))))
25547 (native-inputs
25548 (list python-pytest python-setuptools python-setuptools-scm python-wheel))
25549 (home-page "https://libraryofcongress.github.io/bagit-python/")
25550 (synopsis "Create and validate BagIt packages")
25551 (description "Bagit is a Python library and command line utility for working
25552 with BagIt style packages. BagIt is a minimalist packaging format for digital
25553 preservation.")
25554 (license license:cc0)))
25555
25556(define-public python-prov
25557 (package
25558 (name "python-prov")
25559 (version "2.1.1")
25560 (source
25561 (origin
25562 (method git-fetch)
25563 (uri (git-reference
25564 (url "https://github.com/trungdong/prov")
25565 (commit version)))
25566 (file-name (git-file-name name version))
25567 (sha256
25568 (base32 "14y58x4gqc4lyhgy6iamzxamwj02sqf2bkma6p5ddiqsnilc4wx7"))))
25569 (build-system pyproject-build-system)
25570 (arguments
25571 (list
25572 #:test-backend #~'unittest
25573 #:test-flags #~(list "discover" "-s" "src")
25574 #:phases
25575 #~(modify-phases %standard-phases
25576 (add-before 'check 'disable-tests
25577 (lambda _
25578 ;; prov.model.ProvException: The provided identifier
25579 ;; "http://www.example.org/bundle" is not valid
25580 (substitute* "src/prov/tests/qnames.py"
25581 (("test_namespace_inheritance")
25582 "disabled_test_namespace_inheritance")
25583 (("test_default_namespace_inheritance")
25584 "disabled_test_default_namespace_inheritance")))))))
25585 (native-inputs
25586 (list python-setuptools))
25587 (propagated-inputs
25588 (list graphviz
25589 python-dateutil
25590 python-networkx
25591 python-pydot
25592 ;; optional dependencies, also needed for tests
25593 python-lxml
25594 python-rdflib))
25595 (home-page "https://github.com/trungdong/prov")
25596 (synopsis
25597 "W3C Provenance Data Model supporting PROV-JSON, PROV-XML and PROV-O (RDF)")
25598 (description
25599 "This package provides a library for W3C Provenance Data Model supporting
25600 PROV-O (RDF), PROV-XML, PROV-JSON import/export.")
25601 (license license:expat)))
25602
25603(define-public python-arcp
25604 (package
25605 (name "python-arcp")
25606 (version "0.2.1")
25607 (source
25608 (origin
25609 (method git-fetch)
25610 (uri (git-reference
25611 (url "https://github.com/stain/arcp-py")
25612 (commit version)))
25613 (file-name (git-file-name name version))
25614 (sha256
25615 (base32 "1wjygci60nmcdrgrhb0vwqmhspzdv3g69x2b92vjxq709ifrpgqp"))))
25616 (build-system pyproject-build-system)
25617 (native-inputs (list python-pytest python-setuptools))
25618 (home-page "https://arcp.readthedocs.io/")
25619 (synopsis "Archive and Package URI parser and generator")
25620 (description
25621 "@acronym{arcp, Archive and Package} provides functions for creating
25622@code{arcp_} URIs, which can be used for identifying or parsing hypermedia
25623files packaged in an archive or package, like a ZIP file. arcp URIs can be
25624used to consume or reference hypermedia resources bundled inside a file
25625archive or an application package, as well as to resolve URIs for archive
25626resources within a programmatic framework. This URI scheme provides
25627mechanisms to generate a unique base URI to represent the root of the archive,
25628so that relative URI references in a bundled resource can be resolved within
25629the archive without having to extract the archive content on the local file
25630system. An arcp URI can be used for purposes of isolation (e.g. when
25631consuming multiple archives), security constraints (avoiding \"climb out\"
25632from the archive), or for externally identiyfing sub-resources referenced by
25633hypermedia formats.")
25634 (license license:asl2.0)))
25635
25636(define-public python-shellescape
25637 (package
25638 (name "python-shellescape")
25639 (version "3.8.1")
25640 (source
25641 (origin
25642 (method git-fetch)
25643 (uri (git-reference
25644 (url "https://github.com/chrissimpkins/shellescape")
25645 (commit (string-append "v" version))))
25646 (file-name (git-file-name name version))
25647 (sha256
25648 (base32
25649 "0wzccxk139qx1lb2g70f5b2yh9zq15nr2mgvqdbfabg5zm0vf1qw"))))
25650 (build-system python-build-system)
25651 (arguments
25652 '(#:phases
25653 (modify-phases %standard-phases
25654 (replace 'check
25655 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
25656 (when tests?
25657 (add-installed-pythonpath inputs outputs)
25658 (invoke "python" "tests/test_shellescape.py"))
25659 #t)))))
25660 (native-inputs
25661 (list python-pytest))
25662 (home-page "https://github.com/chrissimpkins/shellescape")
25663 (synopsis
25664 "Shell escape a string to safely use it as a token in a shell command")
25665 (description
25666 "The shellescape Python module defines the @code{shellescape.quote()}
25667 function that returns a shell-escaped version of a Python string. This is a
25668 backport of the @code{shlex.quote()} function from Python 3.8 that makes it
25669 accessible to users of Python 3 versions < 3.3 and all Python 2.x versions.")
25670 (license license:expat)))
25671
25672;; XXX: Project has no updates since 2019, consider to remove when nothing
25673;; depends on it in the next refresh cycle.
25674;; See: <https://github.com/pipermerriam/flex/issues/237>.
25675(define-public python-flex
25676 (package
25677 (name "python-flex")
25678 (version "6.14.1")
25679 (source
25680 (origin
25681 (method url-fetch)
25682 (uri (pypi-uri "flex" version))
25683 (sha256
25684 (base32
25685 "1sr91f5sqywj4040jm3cq4333fp8hbmmr7v6v05a3h0sgyixcbi9"))))
25686 (build-system pyproject-build-system)
25687 (arguments (list #:tests? #f)) ;no tests in PyPI archive
25688 (native-inputs
25689 (list python-setuptools))
25690 (propagated-inputs
25691 (list python-click
25692 python-jsonpointer
25693 python-pyyaml
25694 python-requests
25695 python-rfc3987
25696 python-six
25697 python-strict-rfc3339
25698 python-validate-email))
25699 (home-page "https://github.com/pipermerriam/flex")
25700 (synopsis "Validates Swagger schemata")
25701 (description "@code{flex} can be used to validate Swagger schemata.")
25702 (license license:bsd-3)))
25703
25704(define-public python-marshmallow
25705 (package
25706 (name "python-marshmallow")
25707 (version "4.0.0")
25708 (source
25709 (origin
25710 (method url-fetch)
25711 (uri (pypi-uri "marshmallow" version))
25712 (sha256
25713 (base32 "0mcd5aqs33hijapnj2a3g580pfaghp8h3vcpzdf979wrqam80viv"))))
25714 (build-system pyproject-build-system)
25715 (arguments
25716 (list
25717 #:phases
25718 #~(modify-phases %standard-phases
25719 (add-before 'check 'set-check-environment
25720 (lambda* (#:key inputs #:allow-other-keys)
25721 (setenv "TZ" "UTC")
25722 (setenv "TZDIR"
25723 (search-input-directory inputs
25724 "share/zoneinfo")))))))
25725 (native-inputs
25726 (list python-flit-core
25727 python-pytest
25728 python-simplejson
25729 tzdata-for-tests))
25730 (home-page "https://github.com/marshmallow-code/marshmallow")
25731 (synopsis "Convert complex datatypes to and from native Python datatypes")
25732 (description
25733 "@code{marshmallow} provides a library for converting complex datatypes
25734to and from native Python datatypes.")
25735 (license license:expat)))
25736
25737(define-public python-marshmallow-3
25738 (package
25739 (inherit python-marshmallow)
25740 (version "3.22.0")
25741 (source
25742 (origin
25743 (method url-fetch)
25744 (uri (pypi-uri "marshmallow" version))
25745 (sha256
25746 (base32 "0gl2qmq5sqf1b3f84zd7yzkznaknr6j5lnbxcfw0n8ja20lzawj9"))))
25747 (arguments '())
25748 (native-inputs
25749 (list python-pytest
25750 python-pytz
25751 python-simplejson
25752 python-flit-core))
25753 (propagated-inputs
25754 (list python-packaging))))
25755
25756
25757(define-public python-apispec
25758 (package
25759 (name "python-apispec")
25760 (version "6.8.2")
25761 (source
25762 (origin
25763 (method url-fetch)
25764 (uri (pypi-uri "apispec" version))
25765 (sha256
25766 (base32 "09lza66036a3i1blwrc6qpvw48pzflmabhd0dfshq9ghzjwnjnyf"))))
25767 (build-system pyproject-build-system)
25768 (native-inputs
25769 (list python-flit-core
25770 python-openapi-spec-validator
25771 python-pytest))
25772 (propagated-inputs
25773 (list python-marshmallow
25774 python-packaging
25775 python-pyyaml))
25776 (home-page "https://github.com/marshmallow-code/apispec")
25777 (synopsis "Swagger/OpenAPI specification generator")
25778 (description
25779 "@code{python-apispec} is a pluggable API specification generator. It
25780currently supports the OpenAPI specification, formerly known as Swagger.")
25781 (license license:expat)))
25782
25783(define-public python-apispec-webframeworks
25784 (package
25785 (name "python-apispec-webframeworks")
25786 (version "1.2.0")
25787 (source
25788 (origin
25789 (method url-fetch)
25790 (uri (pypi-uri "apispec_webframeworks" version))
25791 (sha256
25792 (base32 "10gxjwmk8w67b7vcivcky4hrpv1gx8acrshnyp1169va4s62i2an"))))
25793 (build-system pyproject-build-system)
25794 (native-inputs
25795 (list python-aiohttp
25796 python-flit-core
25797 python-bottle
25798 python-flask
25799 python-pytest
25800 python-pyyaml
25801 python-tornado
25802 python-wheel))
25803 (propagated-inputs
25804 (list python-apispec))
25805 (home-page "https://github.com/marshmallow-code/apispec-webframeworks")
25806 (synopsis "Web framework plugins for apispec")
25807 (description "This package provides plugins for using @code{apispec} with
25808web frameworks.")
25809 (license license:expat)))
25810
25811(define-public python-flasgger
25812 (package
25813 (name "python-flasgger")
25814 (version "0.9.7.1")
25815 (source
25816 (origin
25817 (method git-fetch)
25818 (uri (git-reference
25819 (url "https://github.com/rochacbruno/flasgger")
25820 (commit (string-append "v" version))))
25821 (file-name (git-file-name name version))
25822 (sha256
25823 (base32 "08dnn19swfa5lsscj38hil41b3xnqvwgwnx9q2vg9kv26bs1zcah"))))
25824 (build-system pyproject-build-system)
25825 (arguments
25826 (list
25827 #:test-flags
25828 #~(list "--ignore=tests/test_examples.py"
25829 "-k" "not test_swag")))
25830 (propagated-inputs
25831 (list python-flask
25832 python-pyyaml
25833 python-jsonschema
25834 python-mistune
25835 python-six))
25836 (native-inputs
25837 (list python-pytest
25838 python-setuptools))
25839 (home-page "https://github.com/rochacbruno/flasgger/")
25840 (synopsis "Extract Swagger specs from your Flask project")
25841 (description "@code{python-flasgger} allows extracting Swagger specs
25842 from your Flask project. It is a fork of Flask-Swagger.")
25843 (license license:expat)))
25844
25845(define-public python-apache-libcloud
25846 (package
25847 (name "python-apache-libcloud")
25848 (version "3.8.0")
25849 (source
25850 (origin
25851 (method url-fetch)
25852 (uri (pypi-uri "apache-libcloud" version))
25853 (sha256
25854 (base32 "14bc4z246ka0h6kywpxqdfgb2c5y6lfclpx99ki2bhiv285lrgvm"))))
25855 (build-system pyproject-build-system)
25856 (arguments
25857 (list
25858 #:tests? #f ; XXX: all tests fail requiring additional credentials
25859 #:phases
25860 #~(modify-phases %standard-phases
25861 (add-after 'unpack 'patch-ssh
25862 (lambda* (#:key inputs #:allow-other-keys)
25863 (substitute* "libcloud/compute/ssh.py"
25864 (("'ssh'")
25865 (format #f "~s" (search-input-file inputs "/bin/ssh"))))))
25866 (add-after 'unpack 'patch-tests
25867 (lambda _
25868 (substitute* "libcloud/test/compute/test_ssh_client.py"
25869 (("^class ShellOutSSHClientTests")
25870 "@unittest.skip(\"Guix container doesn't have ssh service\")
25871class ShellOutSSHClientTests"))))
25872 (add-before 'check 'copy-secret
25873 (lambda _
25874 (copy-file "libcloud/test/secrets.py-dist"
25875 "libcloud/test/secrets.py"))))))
25876 (inputs
25877 (list openssh))
25878 (propagated-inputs
25879 (list python-requests))
25880 (native-inputs
25881 (list python-pytest python-requests-mock python-setuptools))
25882 (home-page "https://libcloud.apache.org/")
25883 (synopsis "Unified Cloud API")
25884 (description
25885 "@code{libcloud} is a Python library for interacting with many of the
25886popular cloud service providers using a unified API.")
25887 (license license:asl2.0)))
25888
25889(define-public python-smmap
25890 (package
25891 (name "python-smmap")
25892 (version "5.0.2")
25893 (source
25894 (origin
25895 (method url-fetch)
25896 (uri (pypi-uri "smmap" version))
25897 (sha256
25898 (base32 "1mcai5vf9bgz389y4sqgj6w22wn7zmc7m33y3j50ryjq76h6bsi6"))))
25899 (build-system pyproject-build-system)
25900 (native-inputs
25901 (list python-pytest
25902 python-setuptools
25903 python-wheel))
25904 (home-page "https://github.com/Byron/smmap")
25905 (synopsis "Python sliding window memory map manager")
25906 (description "@code{smmap} is a pure Python implementation of a sliding
25907 window memory map manager.")
25908 (license license:bsd-3)))
25909
25910(define-public python-regex
25911 (package
25912 (name "python-regex")
25913 (version "2024.11.6")
25914 (source
25915 (origin
25916 (method url-fetch)
25917 (uri (pypi-uri "regex" version))
25918 (sha256
25919 (base32 "06amb1sxhbab03cy73q7wcp131bsingngr44r0rh6an5cfq5kcbs"))))
25920 (build-system pyproject-build-system)
25921 (arguments
25922 (list #:test-backend #~'unittest))
25923 (native-inputs
25924 (list python-setuptools))
25925 (home-page "https://bitbucket.org/mrabarnett/mrab-regex")
25926 (synopsis "Alternative regular expression module")
25927 (description
25928 "This regular expression implementation is backwards-compatible with the
25929standard @code{re} module, but offers additional functionality like full
25930case-folding for case-insensitive matches in Unicode.")
25931 (license license:psfl)))
25932
25933(define-public python-pysocks
25934 (package
25935 (name "python-pysocks")
25936 (version "1.7.1")
25937 (source
25938 (origin
25939 (method url-fetch)
25940 (uri (pypi-uri "PySocks" version))
25941 (sha256
25942 (base32
25943 "184sg65mbmih6ljblfsxcmq5js5l7dj3gpn618w9q5dy3rbh921z"))))
25944 (build-system pyproject-build-system)
25945 (arguments `(#:tests? #f))
25946 (native-inputs
25947 (list python-setuptools))
25948 (home-page "https://github.com/Anorov/PySocks")
25949 (synopsis "SOCKS client module")
25950 (description "@code{pysocks} is an updated and semi-actively maintained
25951version of @code{SocksiPy} with bug fixes and extra features.")
25952 (license license:bsd-3)))
25953
25954(define-public python-pydub
25955 (package
25956 (name "python-pydub")
25957 (version "0.25.1")
25958 (source
25959 (origin
25960 (method git-fetch)
25961 (uri (git-reference
25962 (url "https://github.com/jiaaro/pydub")
25963 (commit (string-append "v" version))))
25964 (file-name (git-file-name name version))
25965 (sha256
25966 (base32 "0xskllq66wqndjfmvp58k26cv3w480sqsil6ifwp4gghir7hqc8m"))))
25967 (build-system pyproject-build-system)
25968 (arguments
25969 (list
25970 #:test-backend ''unittest
25971 #:phases
25972 #~(modify-phases %standard-phases
25973 (add-after 'unpack 'fix-ffmpeg-path
25974 (lambda* (#:key inputs #:allow-other-keys)
25975 (let ((bin (dirname (search-input-file inputs "bin/ffmpeg"))))
25976 (substitute* "pydub/utils.py"
25977 (("return \"ffmpeg\"")
25978 (string-append "return \"" bin "/ffmpeg\""))
25979 (("return \"ffplay\"")
25980 (string-append "return \"" bin "/ffplay\""))
25981 (("return \"ffprobe\"")
25982 (string-append "return \"" bin "/ffprobe\""))
25983 (("warn\\(\"Couldn't find ff")
25984 "# warn\\(\"Couldn't find ff"))))))))
25985 (native-inputs (list python-setuptools))
25986 (home-page "https://pydub.com")
25987 (inputs (list ffmpeg))
25988 (propagated-inputs (list python-scipy))
25989 (synopsis "Manipulate audio with a high level interface in Python")
25990 (description
25991 "@code{pydub} makes it easy to manipulate audio in Python. It relies on
25992@code{ffmpeg} to open various audio formats.")
25993 (license license:expat))) ; MIT license
25994
25995(define-public python-pkginfo
25996 (package
25997 (name "python-pkginfo")
25998 (version "1.12.1.2")
25999 (source
26000 (origin
26001 (method url-fetch)
26002 (uri (pypi-uri "pkginfo" version))
26003 (sha256
26004 (base32
26005 "0ysbl0rhy8chvx58zi5qb61jli76dcyblklnc0118vy39a15gnaw"))))
26006 (build-system pyproject-build-system)
26007 (arguments
26008 ;; Wheel metatda version mismatched: AssertionError: assert '2.4' == '2.3'
26009 (list #:test-flags #~(list "-k" "not test_installed_ctor_w_dist_info")))
26010 (native-inputs
26011 (list python-pytest
26012 python-setuptools
26013 python-wheel))
26014 (home-page "https://code.launchpad.net/~tseaver/pkginfo/trunk")
26015 (synopsis "Query metadatdata from sdists, bdists, and installed packages")
26016 (description
26017 "API to query the distutils metadata written in @file{PKG-INFO} inside a
26018source distriubtion (an sdist) or a binary distribution (e.g., created by
26019running bdist_egg). It can also query the EGG-INFO directory of an installed
26020distribution, and the *.egg-info stored in a \"development checkout\" (e.g,
26021created by running @code{python setup.py develop}).")
26022 (license license:expat)))
26023
26024;; XXX: This project was archived by the owner on Oct 4, 2023. It is now
26025;; read-only. Consider to remvoe when nothing depends on it.
26026(define-public python-ratelimiter
26027 ;; From https://github.com/RazerM/ratelimiter/pull/11
26028 (let ((commit "59a0827c434706d62b89e16a220e4ae12e618858")
26029 (revision "0"))
26030 (package
26031 (name "python-ratelimiter")
26032 (version (git-version "1.2.0.post1" revision commit))
26033 (source
26034 (origin
26035 (method git-fetch)
26036 (uri (git-reference
26037 (url "https://github.com/RazerM/ratelimiter")
26038 (commit commit)))
26039 (sha256
26040 (base32
26041 "1v34w12f41j0l2gy9ji9ip01kj4idjfjx7a97wrlr1ibxi7hg3bs"))))
26042 (build-system pyproject-build-system)
26043 (arguments
26044 (list #:phases
26045 '(modify-phases %standard-phases
26046 (add-after 'unpack 'pytest-compatibility
26047 (lambda _
26048 (substitute* "tests/conftest.py"
26049 (("pytest.collect.File") "pytest.File")))))))
26050 (native-inputs
26051 (list python-pytest
26052 python-pytest-asyncio-0.26
26053 python-setuptools))
26054 (home-page "https://github.com/RazerM/ratelimiter")
26055 (synopsis "Simple rate limiting object")
26056 (description
26057 "The @code{ratelimiter} module ensures that an operation will not be
26058executed more than a given number of times during a given period.")
26059 (license license:asl2.0))))
26060
26061(define-public python-rbfly
26062 (package
26063 (name "python-rbfly")
26064 (version "0.10.0")
26065 (source
26066 (origin
26067 (method url-fetch)
26068 (uri (pypi-uri "rbfly" version))
26069 (sha256
26070 (base32 "019fs94qzbxb43vahcm0va53m5d4nxrib5pkl29m4hx9adcccpf6"))))
26071 (build-system pyproject-build-system)
26072 (arguments
26073 (list
26074 #:test-flags #~(list "--pyargs" "rbfly")
26075 #:phases
26076 #~(modify-phases %standard-phases
26077 (add-after 'unpack 'fix-pytest-config
26078 (lambda _
26079 ;; Drop test coverage requirements.
26080 (substitute* "pyproject.toml"
26081 ((".*addopts.*") "")))))))
26082 (native-inputs
26083 (list python-cython
26084 python-pytest
26085 python-pytest-asyncio
26086 python-pytest-timeout
26087 python-setuptools
26088 python-wheel))
26089 (home-page "https://wrobell.dcmod.org/rbfly/")
26090 (synopsis "Work with RabbitMQ Streams in Python")
26091 (description
26092 "This package implements a functionality to deal with
26093@url{https://www.rabbitmq.com/streams.html, RabbitMQ Streams} using
26094@url{https://docs.python.org/3/library/asyncio.html, @code{asyncio}}.
26095
26096It is designed and implemented with the following qualities in mind:
26097@itemize
26098@item asynchronous Pythonic API with type annotations
26099@item use of
26100@url{https://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol, AMQP}
261011.0 message format to enable interoperability between RabbitMQ Stream. clients
26102@item auto reconnection to RabbitMQ broker with lazily created connection
26103objects
26104@end itemize
26105
26106Support of many RabbitMQ Streams broker features:
26107@itemize
26108@item publishing single messages, or in batches, with confirmation
26109@item subscribing to a stream at a specific point in time, from a specific
26110offset, or using offset reference
26111@item stream message filtering
26112@item writing stream offset reference
26113@item message deduplication
26114@item integration with AMQP 1.0 ecosystem at message format level
26115@end itemize")
26116 (license license:gpl3+)))
26117
26118(define-public python-jsonrpclib-pelix
26119 (package
26120 (name "python-jsonrpclib-pelix")
26121 (version "0.3.2")
26122 (source
26123 (origin
26124 (method git-fetch)
26125 (uri (git-reference
26126 (url "https://github.com/tcalmant/jsonrpclib")
26127 (commit (string-append "v" version))))
26128 (file-name (git-file-name name version))
26129 (sha256
26130 (base32 "1mhnqmgcplsxc4zygxy4hm99si7p2rpyl4bpmilzqc51k2r3khzl"))))
26131 (build-system pyproject-build-system)
26132 (arguments
26133 (list
26134 #:test-backend #~'unittest
26135 #:test-flags #~(list "-k" "not test_multicall_success")))
26136 (native-inputs (list python-setuptools))
26137 (home-page "https://github.com/tcalmant/jsonrpclib")
26138 (synopsis "JSON-RPC 2.0 client library for Python")
26139 (description
26140 "This library implements the JSON-RPC v2.0 specification
26141(backwards-compatible) as a client library for Python. This version is a fork
26142of jsonrpclib by Josh Marshall, usable with Pelix remote services.")
26143 (license license:asl2.0)))
26144
26145(define-public python-setuptools-git
26146 ;; XXX: The project is abandoned since 2018, consider to remove in the next
26147 ;; refresh cycle.
26148 (package
26149 (name "python-setuptools-git")
26150 (version "1.2")
26151 (source
26152 (origin
26153 (method url-fetch)
26154 (uri (pypi-uri "setuptools-git" version))
26155 (sha256
26156 (base32 "0i84qjwp5m0l9qagdjww2frdh63r37km1c48mrvbmaqsl1ni6r7z"))))
26157 (build-system pyproject-build-system)
26158 (arguments
26159 (list
26160 #:tests? #f ;no tests in PyPI
26161 #:phases
26162 #~(modify-phases %standard-phases
26163 ;; This is needed for tests.
26164 (add-after 'unpack 'configure-git
26165 (lambda _
26166 (setenv "HOME" "/tmp")
26167 (invoke "git" "config" "--global" "user.email" "guix")
26168 (invoke "git" "config" "--global" "user.name" "guix"))))))
26169 (native-inputs
26170 (list git-minimal/pinned python-setuptools python-wheel))
26171 (home-page "https://github.com/msabramo/setuptools-git")
26172 (synopsis "Setuptools revision control system plugin for Git")
26173 (description
26174 "This package provides a plugin for Setuptools for revision control with
26175Git.")
26176 (license license:bsd-3)))
26177
26178(define-public python-setuptools-rust
26179 (package
26180 (name "python-setuptools-rust")
26181 (version "1.11.1")
26182 (source
26183 (origin
26184 (method url-fetch)
26185 (uri (pypi-uri "setuptools_rust" version))
26186 (sha256
26187 (base32 "1h3nbg1nlshzrqy7vz4q4g9wbz85dqkn6385p0ad7kjj48ww9avx"))))
26188 (build-system pyproject-build-system)
26189 (arguments
26190 (list #:tests? #f)) ;tests rquire Cargo
26191 (propagated-inputs
26192 (list python-semantic-version
26193 python-setuptools))
26194 (home-page "https://github.com/PyO3/setuptools-rust")
26195 (synopsis "Setuptools plugin for Rust extensions")
26196 (description
26197 "@code{setuptools-rust} is a plugin for @code{setuptools} to build
26198Rust Python extensions implemented with @code{PyO3} or @code{rust-cpython}.")
26199 (license license:expat)))
26200
26201(define-public python-setuptools-gettext
26202 (package
26203 (name "python-setuptools-gettext")
26204 (version "0.1.14")
26205 (source
26206 (origin
26207 (method git-fetch)
26208 (uri (git-reference
26209 (url "https://github.com/breezy-team/setuptools-gettext")
26210 (commit (string-append "v" version))))
26211 (file-name (git-file-name name version))
26212 (sha256
26213 (base32 "1m6a3qjwvqbvlzwqap7050rqsxb7nwibl38iklnqz8363iclm76k"))))
26214 (build-system pyproject-build-system)
26215 (native-inputs (list python-pytest python-tomli python-setuptools))
26216 (home-page "https://github.com/breezy-team/setuptools-gettext")
26217 (synopsis "Setuptools plugin for gettext")
26218 (description "This package provides a plugin for Setuptools for gettext.")
26219 (license license:gpl2+)))
26220
26221(define-public python-pyclibrary
26222 ;; XXX: https://github.com/MatthieuDartiailh/pyclibrary/issues/82
26223 (let ((commit "4e1e243a0bdfefa188d93ebdf3b60c6861244855")
26224 (revision "0"))
26225 (package
26226 (name "python-pyclibrary")
26227 (version (git-version "0.2.2" revision commit))
26228 (source
26229 (origin
26230 (method git-fetch)
26231 (uri (git-reference
26232 (url "https://github.com/MatthieuDartiailh/pyclibrary")
26233 (commit commit)))
26234 (file-name (git-file-name name version))
26235 (sha256
26236 (base32 "1sza6n2fg8zml0v1s5zwzrlsb79s2abn1n4pr1l8r15al4g9z0c6"))))
26237 (build-system pyproject-build-system)
26238 (arguments
26239 (list
26240 #:phases
26241 #~(modify-phases %standard-phases
26242 (add-after 'unpack 'set-version
26243 (lambda _
26244 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" "0.2.2"))))))
26245 (native-inputs
26246 (list python-pytest
26247 python-setuptools
26248 python-setuptools-scm))
26249 (propagated-inputs
26250 (list python-pyparsing))
26251 (home-page "https://github.com/MatthieuDartiailh/pyclibrary")
26252 (synopsis "Wrap dynamic libraries in Python")
26253 (description
26254 "This package helps wrapping dynamic libraries in Python. It includes
26255a pure-Python C parser and an automation library that uses C header file
26256definitions to simplify the use of C bindings.")
26257 (license license:expat))))
26258
26259(define-public python-pyclipper
26260 (package
26261 (name "python-pyclipper")
26262 (version "1.3.0.post6")
26263 (source
26264 (origin
26265 (method git-fetch)
26266 (uri (git-reference
26267 (url "https://github.com/greginvm/pyclipper")
26268 (commit version)))
26269 (file-name (git-file-name name version))
26270 (sha256
26271 (base32 "1ijr7sx3203b3ppvsn1zyy8nfz93nbi60l8dxj2hdd6sj25g8q5k"))))
26272 (build-system pyproject-build-system)
26273 (arguments
26274 (list
26275 #:phases
26276 #~(modify-phases %standard-phases
26277 (add-after 'unpack 'set-version
26278 (lambda _
26279 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)))
26280 (add-before 'build 'cythonize-sources
26281 (lambda _
26282 (with-directory-excursion "src/pyclipper"
26283 (invoke "cython" "--cplus" "_pyclipper.pyx")))))))
26284 (native-inputs
26285 (list python-cython
26286 python-pytest
26287 python-setuptools
26288 python-setuptools-scm))
26289 (home-page "https://github.com/greginvm/pyclipper")
26290 (synopsis "Wrapper for Angus Johnson's Clipper library")
26291 (description
26292 "Pyclipper is a Cython wrapper for the C++ translation of the
26293Angus Johnson's polygon clipping Clipper library (ver. 6.4.2).")
26294 (license license:expat)))
26295
26296(define-public python-semver
26297 (package
26298 (name "python-semver")
26299 (version "3.0.4")
26300 (source
26301 (origin
26302 (method url-fetch)
26303 (uri (pypi-uri "semver" version))
26304 (sha256
26305 (base32 "00lnb1mpppgq041kwcbg405rqsi2mzl8dw1s0c8hmvd5hk2xiixg"))))
26306 (build-system pyproject-build-system)
26307 (native-inputs (list python-pytest python-pytest-cov python-setuptools
26308 python-wheel))
26309 (home-page "https://github.com/k-bx/python-semver")
26310 (synopsis "Python helper for Semantic Versioning")
26311 (description
26312 "This package provides a Python library for @url{Semantic Versioning,
26313http://semver.org/}.")
26314 (license license:bsd-3)))
26315
26316(define-public python-pyro4
26317 (package
26318 (name "python-pyro4")
26319 (version "4.82")
26320 (source
26321 (origin
26322 (method url-fetch)
26323 (uri (pypi-uri "Pyro4" version))
26324 (sha256
26325 (base32 "1yr1rv2afmq55wb14sx9qplzkqw7fya9rprsqdyxfbg90h45n7si"))))
26326 (build-system pyproject-build-system)
26327 (arguments
26328 (list #:test-flags
26329 #~(list "-k"
26330 (string-join
26331 ;; Those tests require network.
26332 (list "testBCstart"
26333 "testAutoClean"
26334 "testDaemonPyroObj"
26335 "testLookupAndRegister"
26336 "testLookupInvalidHmac"
26337 "testLookupUnixsockParsing"
26338 "testMulti"
26339 "testRefuseDottedNames"
26340 "testResolve"
26341 "testBCLookup0000"
26342 "testPyroname"
26343 "testResolveAsymmetricHmacUsage"
26344 "testResolveWrongHmac"
26345 "testStartNSfunc"
26346 "testCustomDictClass"
26347 "testDictClassFail"
26348 "testBroadcast"
26349 "testGetIP"
26350 ;; XXX: Unclear why this test fails.
26351 "testCustomClassFail")
26352 " and not "))
26353 #:phases
26354 #~(modify-phases %standard-phases
26355 (replace 'check
26356 (lambda* (#:key tests? test-flags #:allow-other-keys)
26357 (if tests?
26358 (apply invoke "python" "-m" "unittest" test-flags)
26359 (format #t "test suite not run.~%")))))))
26360 (native-inputs
26361 (list python-cloudpickle
26362 python-dill
26363 python-msgpack
26364 python-setuptools
26365 python-wheel))
26366 (propagated-inputs
26367 (list python-serpent))
26368 (home-page "https://pyro4.readthedocs.io")
26369 (synopsis "Distributed object middleware for Python")
26370 (description
26371 "Pyro enables you to build applications in which objects can talk to each
26372other over the network. You can just use normal Python method calls to call
26373objects on other machines, also known as remote procedure calls (RPC).")
26374 (license license:expat)))
26375
26376(define-public python-phonenumbers
26377 (package
26378 (name "python-phonenumbers")
26379 (version "8.13.37")
26380 (source
26381 (origin
26382 (method git-fetch)
26383 (uri (git-reference
26384 (url "https://github.com/daviddrysdale/python-phonenumbers")
26385 (commit (string-append "v" version))))
26386 (file-name (git-file-name name version))
26387 (sha256
26388 (base32 "1bgab6s7l2bqg671sns138c9qr9f8ndvjr4ig8l3ik9q054l9k9n"))))
26389 (build-system pyproject-build-system)
26390 (arguments
26391 (list
26392 #:test-backend #~'custom
26393 #:test-flags #~(list "-m" "testwrapper")
26394 #:phases
26395 #~(modify-phases %standard-phases
26396 (add-after 'unpack 'chdir
26397 (lambda _
26398 (chdir "python"))))))
26399 (propagated-inputs (list python-protobuf))
26400 (native-inputs (list python-setuptools))
26401 (home-page "https://github.com/daviddrysdale/python-phonenumbers")
26402 (synopsis "Python library for dealing with international phone numbers")
26403 (description
26404 "This package provides a Python port of Google's libphonenumber library.")
26405 (license license:asl2.0)))
26406
26407(define-public python-heapdict
26408 (package
26409 (name "python-heapdict")
26410 (version "1.0.1")
26411 (source
26412 (origin
26413 (method url-fetch)
26414 (uri (pypi-uri "HeapDict" version))
26415 (sha256
26416 (base32
26417 "1dnd7v9adqd21bf4ih2wzn9a7b41m0nccb0vbxny9n037rxzb5c4"))))
26418 (build-system pyproject-build-system)
26419 (arguments (list #:test-backend #~'unittest))
26420 (native-inputs (list python-setuptools))
26421 (home-page "http://stutzbachenterprises.com/")
26422 (synopsis "Heap with decrease-key and increase-key operations")
26423 (description
26424 "heapdict implements the MutableMapping ABC, meaning it works pretty much
26425like a regular Python @code{dict}. It’s designed to be used as a priority
26426queue.")
26427 (license license:bsd-3)))
26428
26429(define-public python-send2trash
26430 (package
26431 (name "python-send2trash")
26432 (version "1.8.2")
26433 (source
26434 (origin (method git-fetch)
26435 ;; Source tarball on PyPI doesn't include tests.
26436 (uri (git-reference
26437 (url "https://github.com/arsenetar/send2trash")
26438 (commit version)))
26439 (file-name (git-file-name name version))
26440 (sha256
26441 (base32
26442 "0dl9nv3h3kkcavwiswzg76pksqczq448gbdvlbz88bm71zvdshx7"))))
26443 (build-system pyproject-build-system)
26444 (arguments
26445 (list
26446 #:phases
26447 '(modify-phases %standard-phases
26448 (add-before 'check 'pre-check
26449 (lambda _ (setenv "HOME" "/tmp"))))))
26450 (native-inputs (list python-pytest python-setuptools python-wheel))
26451 (home-page "https://github.com/arsenetar/send2trash")
26452 (synopsis "Send files to the user's @file{~/Trash} directory")
26453 (description "This package provides a Python library to send files to the
26454user's @file{~/Trash} directory.")
26455 (license license:bsd-3)))
26456
26457(define-public python-pyfavicon
26458 (package
26459 (name "python-pyfavicon")
26460 (version "0.1.1")
26461 (source
26462 (origin
26463 (method git-fetch)
26464 (uri (git-reference
26465 (url "https://github.com/bilelmoussaoui/pyfavicon")
26466 (commit version)))
26467 (file-name (git-file-name name version))
26468 (sha256
26469 (base32 "04mx8vbi6j9l8daqa18sv0kkcyqv4wbc9z4ma77w68baq6ss0jzf"))))
26470 (build-system pyproject-build-system)
26471 (arguments
26472 (list
26473 #:test-backend #~'unittest
26474 #:test-flags
26475 #~(list "-k" (string-join (list
26476 ;; Socket name resolution fails.
26477 "not test_url_icon_link_type"
26478 "test_icon_sizes"
26479 ;; Tuples differ.
26480 "test_largest_icon")
26481 " and not "))))
26482 (native-inputs (list python-setuptools))
26483 (propagated-inputs
26484 (list python-aiohttp python-beautifulsoup4 python-pillow))
26485 (home-page "https://github.com/bilelmoussaoui/pyfavicon")
26486 (synopsis "Async favicon fetcher")
26487 (description
26488 "@code{pyfavicon} is an async favicon fetcher.")
26489 (license license:expat)))
26490
26491(define-public python-gyp
26492 ;; Google does not release versions.
26493 (let ((commit "1615ec326858f8c2bd8f30b3a86ea71830409ce4")
26494 (revision "2"))
26495 (package
26496 (name "python-gyp")
26497 (version (git-version "0.0.0" revision commit))
26498 (source
26499 (origin
26500 (method git-fetch)
26501 (uri (git-reference
26502 (url "https://chromium.googlesource.com/external/gyp")
26503 (commit commit)))
26504 (file-name (git-file-name name version))
26505 (sha256
26506 (base32 "02rnmw7k2r33x5nbb5xb8kk170hk0s1wmwfqpsx4cij1wbi4bqhk"))))
26507 (build-system pyproject-build-system)
26508 (arguments
26509 (list
26510 #:test-flags
26511 #~(list "--ignore-glob=test/win/**/*.py")
26512 #:phases
26513 #~(modify-phases %standard-phases
26514 (add-after 'unpack 'remove-six-requirements
26515 (lambda _
26516 (substitute* "pylib/gyp/generator/ninja.py"
26517 (("six\\.ensure_binary\\(outputs\\[0\\]\\)")
26518 "outputs[0].encode('utf-8')")
26519 (("import six")
26520 ""))
26521 (substitute* '("pylib/gyp/common.py"
26522 "pylib/gyp/msvs_emulation.py"
26523 "test/lib/TestGyp.py")
26524 (("from six\\.moves import collections_abc")
26525 "import collections")
26526 (("collections_abc")
26527 "collections.abc"))))
26528 (add-before 'check 'configure-tests
26529 (lambda _
26530 (setenv "PYTHONPATH"
26531 (string-append (getcwd) "/test/lib:"
26532 (getenv "GUIX_PYTHONPATH"))))))))
26533 (native-inputs (list python-pytest python-setuptools))
26534 (home-page "https://gyp.gsrc.io/")
26535 (synopsis "GYP is a Meta-Build system")
26536 (description
26537 "GYP builds build systems for large, cross platform applications.
26538It can be used to generate XCode projects, Visual Studio projects, Ninja build
26539files, and Makefiles.")
26540 (license license:bsd-3))))
26541
26542(define-public python-funcy
26543 (package
26544 (name "python-funcy")
26545 (version "1.11")
26546 (source
26547 (origin
26548 (method git-fetch)
26549 (uri (git-reference
26550 (url "https://github.com/Suor/funcy")
26551 (commit version)))
26552 (sha256
26553 (base32 "1s98vkjnq3zq71737hn8xa15kssvmy1sfzsll3vrlv53902418mw"))
26554 (file-name (git-file-name name version))))
26555 (build-system pyproject-build-system)
26556 (native-inputs
26557 (list python-pytest python-whatever python-setuptools python-wheel))
26558 (home-page "https://github.com/Suor/funcy")
26559 (synopsis "Functional tools")
26560 (description "@code{funcy} is a library that provides functional tools.
26561Examples are:
26562@enumerate
26563@item merge - Merges collections of the same type
26564@item walk - Type-preserving map
26565@item select - Selects a part of a collection
26566@item take - Takes the first n items of a collection
26567@item first - Takes the first item of a collection
26568@item remove - Predicated-removes items of a collection
26569@item concat - Concatenates two collections
26570@item flatten - Flattens a collection with subcollections
26571@item distinct - Returns only distinct items
26572@item split - Predicated-splits a collection
26573@item split_at - Splits a collection at a given item
26574@item group_by - Groups items by group
26575@item pairwise - Pairs off adjacent items
26576@item partial - Partially-applies a function
26577@item curry - Curries a function
26578@item compose - Composes functions
26579@item complement - Complements a predicate
26580@item all_fn - \"all\" with predicate
26581@end enumerate")
26582 (license license:bsd-3)))
26583
26584(define-public python-funcy-1.14
26585 (package/inherit python-funcy
26586 (name "python-funcy")
26587 (version "1.14")
26588 (source
26589 (origin
26590 (method git-fetch)
26591 (uri (git-reference
26592 (url "https://github.com/Suor/funcy")
26593 (commit version)))
26594 (sha256
26595 (base32 "1chgi60z3c97m9l23vf5cpyp0nidkqlpxc55q5k5pz41ms3d0440"))
26596 (file-name (git-file-name name version))))))
26597
26598(define-public python-isoweek
26599 (package
26600 (name "python-isoweek")
26601 (version "1.3.3")
26602 (source
26603 (origin
26604 (method url-fetch)
26605 (uri (pypi-uri "isoweek" version))
26606 (sha256
26607 (base32 "1s7zsf0pab0l9gn6456qadnz5i5h90hafcjwnhx5mq23qjxggwvk"))))
26608 (build-system pyproject-build-system)
26609 (arguments (list #:test-backend #~'unittest))
26610 (native-inputs (list python-setuptools))
26611 (home-page "https://github.com/gisle/isoweek")
26612 (synopsis "Objects representing a week")
26613 (description "The @code{isoweek} module provide the class Week that
26614implements the week definition of ISO 8601. This standard also defines
26615a notation for identifying weeks; yyyyWww (where the W is a literal).
26616Week instances stringify to this form.")
26617 (license license:bsd-3)))
26618
26619(define-public bpython
26620 (package
26621 (name "bpython")
26622 (version "0.25")
26623 (source
26624 (origin
26625 (method url-fetch)
26626 (uri (pypi-uri "bpython" version))
26627 (sha256
26628 (base32 "0ny6cqhpil7z36djc4ixakri65kb1rdn3d4ckmpc5p7nks8gqin2"))))
26629 (build-system pyproject-build-system)
26630 (arguments
26631 (list
26632 #:test-flags
26633 ;; Tests can't import curtsies, pygments and urwid.
26634 #~(list "-k" (string-join
26635 (list "not test_issue108"
26636 "test_issue133")
26637 " and not " ))
26638 #:phases
26639 #~(modify-phases %standard-phases
26640 (add-after 'wrap 'add-aliases
26641 ;; For symmetry to bpython2, add symlinks bypthon3, bpdb3, etc.
26642 (lambda _
26643 (for-each
26644 (lambda (old new)
26645 (symlink old (string-append #$output "/bin/" new)))
26646 '("bpython" "bpython-urwid" "bpdb")
26647 '("bpython3" "bpython3-urwid" "bpdb3")))))))
26648 (native-inputs
26649 (list python-mock
26650 python-pytest
26651 python-setuptools))
26652 (propagated-inputs
26653 (list python-curtsies
26654 python-cwcwidth
26655 python-greenlet
26656 python-pygments
26657 python-pyxdg
26658 python-requests
26659 ;; [optional]
26660 python-pyperclip
26661 python-jedi
26662 python-urwid-2
26663 python-watchdog))
26664 (home-page "https://bpython-interpreter.org/")
26665 (synopsis "Fancy interface to the Python interpreter")
26666 (description "Bpython is a fancy interface to the Python
26667interpreter. bpython's main features are
26668
26669@enumerate
26670@item in-line syntax highlighting,
26671@item readline-like autocomplete with suggestions displayed as you type,
26672@item expected parameter list for any Python function,
26673@item \"rewind\" function to pop the last line of code from memory and
26674 re-evaluate,
26675@item send the code you've entered off to a pastebin,
26676@item save the code you've entered to a file, and
26677@item auto-indentation.
26678@end enumerate")
26679 (license license:expat)))
26680
26681(define-public python-pyinotify
26682 (package
26683 (name "python-pyinotify")
26684 (version "0.9.6")
26685 (source
26686 (origin
26687 (method git-fetch)
26688 (uri (git-reference
26689 (url "https://github.com/seb-m/pyinotify")
26690 (commit version)))
26691 (file-name (git-file-name name version))
26692 (sha256
26693 (base32 "0qfvs1sfvlpfb10rxlivwa96mg0ibczis554s2rx32s11nynzvbk"))))
26694 (build-system pyproject-build-system)
26695 (arguments
26696 (list
26697 #:tests? #f ;no tests
26698 #:phases
26699 #~(modify-phases %standard-phases
26700 (add-after 'unpack 'drop-shebang
26701 (lambda _
26702 ;; Dropping this shebang prevents the build system from adding
26703 ;; python-wrapper as an input, reducing package closure size from
26704 ;; ~200 MiB to ~0.2 MiB.
26705 (substitute* "python3/pyinotify.py"
26706 (("#!/usr/bin/env python") "")))))))
26707 (native-inputs
26708 (list python-setuptools))
26709 (home-page "https://github.com/seb-m/pyinotify")
26710 (synopsis "Python library for monitoring inotify events")
26711 (description
26712 "@code{pyinotify} provides a Python interface for monitoring file system
26713events on Linux.")
26714 (license license:expat)))
26715
26716(define-public python-pyinotify-cli
26717 (package
26718 (inherit python-pyinotify)
26719 (name "python-pyinotify-cli")
26720 (arguments
26721 (substitute-keyword-arguments (package-arguments python-pyinotify)
26722 ((#:phases phases #~%standard-phases)
26723 #~(modify-phases #$phases
26724 (delete 'drop-shebang)
26725 (add-after 'install 'install-entrypoint
26726 (lambda _
26727 (let ((entrypoint
26728 (string-append #$output "/lib/python"
26729 (python-version (which "python"))
26730 "/site-packages/pyinotify.py"))
26731 (bin (string-append #$output "/bin")))
26732 (mkdir-p bin)
26733 (invoke "chmod" "+x" entrypoint)
26734 (symlink
26735 entrypoint (string-append #$output "/bin/pyinotify")))))))))
26736 (description
26737 "This package provides, in addition to the @code{pyinotify} Python library,
26738a command line application exposing the same functionality.")))
26739
26740(define-public python-more-itertools
26741 (package
26742 (name "python-more-itertools")
26743 (version "10.6.0")
26744 (source
26745 (origin
26746 (method url-fetch)
26747 (uri (pypi-uri "more-itertools" version))
26748 (sha256
26749 (base32
26750 "0fzfnfga0jdx217kff57lx3pam76162i0dd0nsgwqccw038zmmrc"))
26751 (snippet
26752 ;; distutils.errors.DistutilsOptionError: No configuration found for
26753 ;; dynamic 'description'. Some dynamic fields need to be specified via
26754 ;; `tool.setuptools.dynamic`others must be specified via the equivalent
26755 ;; attribute in `setup.py`.
26756 '(delete-file "setup.py"))))
26757 (build-system pyproject-build-system)
26758 (arguments
26759 (list
26760 #:phases
26761 #~(modify-phases %standard-phases
26762 (replace 'check
26763 (lambda* (#:key tests? #:allow-other-keys)
26764 (when tests?
26765 (invoke "python" "-m" "unittest")))))))
26766 (native-inputs
26767 (list python-flit-core))
26768 (home-page "https://github.com/erikrose/more-itertools")
26769 (synopsis "More routines for operating on iterables, beyond itertools")
26770 (description "Python's built-in @code{itertools} module implements a
26771number of iterator building blocks inspired by constructs from APL, Haskell,
26772and SML. @code{more-itertools} includes additional building blocks for
26773working with iterables.")
26774 (license license:expat)))
26775
26776(define-public python-latex2pydata
26777 (package
26778 (name "python-latex2pydata")
26779 (version "0.5.0")
26780 (source
26781 (origin
26782 (method url-fetch)
26783 (uri (pypi-uri "latex2pydata" version))
26784 (sha256
26785 (base32 "12a2ayhgp5plxkdikhy3myin14ydkj0msgb5j82dfvis7h4d5jmw"))))
26786 (build-system pyproject-build-system)
26787 (native-inputs (list python-setuptools python-wheel python-pytest))
26788 (home-page "https://github.com/gpoore/latex2pydata")
26789 (synopsis "Load data from LaTeX in Python literal format")
26790 (description
26791 "This package is designed to load data in Python literal format that was
26792saved to file by the @code{latex2pydata} LaTeX package. This allows data to be
26793passed from LaTeX to Python.")
26794 (license license:bsd-3)))
26795
26796(define-public python-latexcodec
26797 (package
26798 (name "python-latexcodec")
26799 (version "3.0.1")
26800 (source
26801 (origin
26802 (method git-fetch)
26803 (uri (git-reference
26804 (url "https://github.com/mcmtroffaes/latexcodec/")
26805 (commit version)))
26806 (file-name (git-file-name name version))
26807 (sha256
26808 (base32 "0j4hkn161h0hsx3ixs85dqnsaya27ck9c2ri1lv8cayc5a9kqvcp"))))
26809 (build-system pyproject-build-system)
26810 (native-inputs (list python-pytest python-setuptools))
26811 (home-page "https://readthedocs.org/projects/latexcodec/")
26812 (synopsis "Work with LaTeX code in Python")
26813 (description "Lexer and codec to work with LaTeX code in Python.")
26814 (license license:expat)))
26815
26816(define-public python-latexminted
26817 (package
26818 (name "python-latexminted")
26819 ;; Version 0.6.0 is not compatible with our packaged python-pygments.
26820 (version "0.5.1")
26821 (source
26822 (origin
26823 (method url-fetch)
26824 (uri (pypi-uri "latexminted" version))
26825 (sha256
26826 (base32 "12pj51nw7k3h6pv8r7k7382jwvs5wsd80cpkv222nkv07gnfg390"))))
26827 (build-system pyproject-build-system)
26828 (propagated-inputs (list python-latex2pydata
26829 python-latexrestricted
26830 python-pygments))
26831 (native-inputs (list texlive-kpathsea python-setuptools python-wheel))
26832 (home-page "https://github.com/gpoore/minted")
26833 (synopsis "Python library for the LaTeX minted package")
26834 (description "This Python package provides the Python side of the
26835@code{texlive-minted} LaTeX package. It performs syntax highlighting using the
26836@code{python-pygments} library. It also provides several code formatting and
26837manipulation features implemented in Python that would be difficult to perform
26838in LaTeX, such as dedenting code and extracting code snippets from source files
26839using regular expressions.")
26840 (license license:lppl1.3c+)))
26841
26842(define-public python-latexrestricted
26843 (package
26844 (name "python-latexrestricted")
26845 (version "0.6.2")
26846 (source
26847 (origin
26848 (method url-fetch)
26849 (uri (pypi-uri "latexrestricted" version))
26850 (sha256
26851 (base32 "0q5alxifggf0k9wjkyfyj1l0xyhn3xaiiy6057zq39cp26j227fm"))))
26852 (build-system pyproject-build-system)
26853 (arguments
26854 (list
26855 #:phases
26856 #~(modify-phases %standard-phases
26857 (add-after 'unpack 'fix-paths
26858 (lambda* (#:key inputs #:allow-other-keys)
26859 (let ((pystr (lambda (s) (string-append "'" s "'")))
26860 (kpse (search-input-file inputs "/bin/kpsewhich")))
26861 (substitute* "latexrestricted/_latex_config.py"
26862 ;; `latexminted' relies on SELFAUTOLOC to locate `kpsewhich', but
26863 ;; this variable is bogus in Guix because binaries are scattered
26864 ;; across multiple directories. This phase sets SELFAUTOLOC to
26865 ;; the specific directory containing `kpsewhich'.
26866 (("os\\.getenv\\('SELFAUTOLOC'\\)")
26867 (pystr (dirname kpse)))
26868 ;; Refer to kpse by store path instead of looking it upein $PATH.
26869 (("shutil.which\\('kpse'.*$")
26870 (string-append (pystr kpse) "\n")))))))))
26871 (native-inputs (list python-setuptools python-wheel))
26872 (inputs (list texlive-kpathsea))
26873 (home-page "https://github.com/gpoore/latexrestricted")
26874 (synopsis
26875 "Library for creating executables compatible with LaTeX's shell escape")
26876 (description
26877 "This Python package is designed to simplify the process of creating Python
26878executables compatible with LaTeX restricted shell escape. Restricted shell
26879escape allows LaTeX to run trusted executables as part of compiling documents.
26880These executables have restricted access to the file system and restricted
26881ability to launch subprocesses.")
26882 (license license:lppl1.3+)))
26883
26884(define-public python-pybloom-live
26885 (package
26886 (name "python-pybloom-live")
26887 (version "4.0.0")
26888 (source (origin
26889 (method url-fetch)
26890 (uri (pypi-uri "pybloom_live" version))
26891 (sha256
26892 (base32
26893 "040i6bjqvl33j30v865shsk30s3h7f16pqwiaj5kig857dfmqm4r"))))
26894 (build-system pyproject-build-system)
26895 (propagated-inputs (list python-bitarray python-xxhash))
26896 (native-inputs (list python-pytest python-setuptools python-wheel))
26897 (home-page "https://github.com/joseph-fox/python-bloomfilter")
26898 (synopsis "Bloom filter")
26899 (description "This package provides a scalable Bloom filter implemented in
26900Python.")
26901 (license license:expat)))
26902
26903;; XXX: Not maintained since 2020.
26904(define-public python-pybktree
26905 (package
26906 (name "python-pybktree")
26907 (version "1.1")
26908 (source
26909 (origin
26910 (method url-fetch)
26911 (uri (pypi-uri "pybktree" version))
26912 (sha256
26913 (base32 "0asd2lw9c5l5wi4z24k7gkhlprpdkcvs8d94szk56x9xvmy07h7f"))))
26914 (build-system pyproject-build-system)
26915 (arguments
26916 (list #:tests? #f)) ;no tests provided
26917 (native-inputs (list python-setuptools))
26918 (home-page "https://github.com/Jetsetter/pybktree")
26919 (synopsis "Pythonic BK-tree data structure")
26920 (description
26921 "This package provides a BK-tree data structure to allow fast querying of
26922close matches in Python.")
26923 (license license:expat)))
26924
26925(define-public python-pybtex
26926 (package
26927 (name "python-pybtex")
26928 (version "0.25.0")
26929 (source
26930 (origin
26931 (method git-fetch)
26932 (uri (git-reference
26933 (url "https://codeberg.org/pybtex/pybtex")
26934 (commit version)))
26935 (file-name (git-file-name name version))
26936 (sha256
26937 (base32 "12rixrciizlvdxxja7qm6c02yzyslzd0jcv07niaii1ly0dg1fq4"))))
26938 (build-system pyproject-build-system)
26939 (native-inputs (list python-pytest python-setuptools))
26940 (propagated-inputs (list python-latexcodec python-pyyaml))
26941 (home-page "https://pybtex.org/")
26942 (synopsis "BibTeX-compatible bibliography processor")
26943 (description
26944 "Pybtex is a BibTeX-compatible bibliography processor written in Python.
26945You can simply type pybtex instead of bibtex.")
26946 (license license:expat)))
26947
26948(define-public python-pybtex-apa-style
26949 (package
26950 (name "python-pybtex-apa-style")
26951 (version "1.3")
26952 (source
26953 (origin
26954 (method url-fetch)
26955 (uri (pypi-uri "pybtex-apa-style" version))
26956 (sha256
26957 (base32 "1cmgcpcvs9jcw4yxhiy217hdngp9p9nlp5x6s2qmkwj0iwgd39iq"))))
26958 (build-system pyproject-build-system)
26959 (arguments
26960 (list
26961 #:test-backend #~'custom
26962 #:test-flags
26963 #~(list "-c" (string-append "import sys, pybtex.plugin;"
26964 " sys.exit('apa' not"
26965 " in pybtex.plugin.enumerate_plugin_names"
26966 "('pybtex.style.labels'))"))))
26967 (native-inputs (list python-pybtex python-setuptools))
26968 (home-page "https://github.com/naeka/pybtex-apa-style")
26969 (synopsis "APA style for pybtex")
26970 (description
26971 "This package provides support for the APA style within pybtex.")
26972 (license license:expat)))
26973
26974(define-public python-pybtex-docutils
26975 (package
26976 (name "python-pybtex-docutils")
26977 (version "1.0.3")
26978 (source
26979 (origin
26980 (method git-fetch)
26981 (uri (git-reference
26982 (url "https://github.com/mcmtroffaes/pybtex-docutils")
26983 (commit version)))
26984 (file-name (git-file-name name version))
26985 (sha256
26986 (base32 "0s21ik0ql7qi3cf6v5fdmlwbzidwdqpsswwsh1vihhz066n2ycps"))))
26987 (build-system pyproject-build-system)
26988 (propagated-inputs (list python-docutils python-pybtex))
26989 (native-inputs (list python-setuptools python-pytest))
26990 (home-page "https://github.com/mcmtroffaes/pybtex-docutils")
26991 (synopsis "Docutils backend for pybtex")
26992 (description "The pybtex docutils backend allows bibtex citations to be
26993inserted into documentation generated by docutils.")
26994 (license license:expat)))
26995
26996(define-public python-onetimepass
26997 (package
26998 (name "python-onetimepass")
26999 (version "1.0.1")
27000 (source
27001 (origin
27002 (method git-fetch)
27003 (uri (git-reference
27004 (url "https://github.com/tadeck/onetimepass/")
27005 (commit (string-append "v" version))))
27006 (file-name (git-file-name name version))
27007 (sha256
27008 (base32 "0wmv62l3r8r4428gdzyj80lhgadfqvj220khz1wnm9alyzg60wkh"))))
27009 (build-system pyproject-build-system)
27010 (arguments (list #:tests? #f)) ; Requires unpackaged timecop.
27011 (native-inputs (list python-setuptools))
27012 (propagated-inputs (list python-six))
27013 (home-page "https://github.com/tadeck/onetimepass/")
27014 (synopsis "One-time password library")
27015 (description
27016 "Python one-time password library for HMAC-based (HOTP) and time-based
27017(TOTP) passwords.")
27018 (license license:expat)))
27019
27020(define-public python-online-judge-api-client
27021 (package
27022 (name "python-online-judge-api-client")
27023 (properties '((commit . "615c345f169e2603e0b907287559a4535fc3c6f9")
27024 (revision . "0")))
27025 (version (git-version "10.10.1"
27026 (assoc-ref properties 'revision)
27027 (assoc-ref properties 'commit)))
27028 (source
27029 (origin
27030 (method git-fetch)
27031 (uri (git-reference
27032 (url "https://github.com/online-judge-tools/api-client")
27033 (commit (assoc-ref properties 'commit))))
27034 (file-name (git-file-name name version))
27035 (sha256
27036 (base32 "13m3cxv6bd3igj6649149xb27ljmzqzpli6hpfrywvgbm238hbws"))
27037 (patches
27038 (search-patches "python-online-judge-api-client-tests.patch"))
27039 ))
27040 (build-system pyproject-build-system)
27041 (arguments
27042 (list
27043 #:test-flags
27044 #~(list "--ignore-glob=tests/get_contest_*.py"
27045 "--ignore-glob=tests/get_problem_*.py")
27046 #:phases
27047 #~(modify-phases %standard-phases
27048 (add-before 'check 'configure-tests
27049 (lambda* (#:key inputs outputs #:allow-other-keys)
27050 (delete-file-recursively
27051 (string-append (site-packages inputs outputs)
27052 "/tests"))
27053 (call-with-output-file "pytest.ini"
27054 (lambda (port)
27055 (format port "\
27056[pytest]
27057python_files = tests/*.py"))))))))
27058 (native-inputs (list python-pytest python-setuptools))
27059 (propagated-inputs
27060 (list python-appdirs
27061 python-beautifulsoup4
27062 python-colorlog
27063 python-lxml
27064 python-requests
27065 python-toml
27066 python-jsonschema))
27067 (home-page "https://github.com/online-judge-tools/api-client")
27068 (synopsis "API client for various online judges")
27069 (description
27070 "This is an API client for various online judges, used as the backend
27071library of @code{oj} command. You can use the Python library
27072(@code{onlinejudge} module) and the command-line interface (@command{oj-api}
27073command) which talks JSON compatible with jmerle/competitive-companion.")
27074 (license license:expat)))
27075
27076(define-public online-judge-tools
27077 (package
27078 (name "online-judge-tools")
27079 (version "11.5.1")
27080 ;; Source distributions are not uploaded to PyPI.
27081 ;; https://pypi.org/project/online-judge-tools/11.5.1/#files
27082 (source
27083 (origin
27084 (method git-fetch)
27085 (uri (git-reference
27086 (url "https://github.com/online-judge-tools/oj")
27087 (commit (string-append "v" version))))
27088 (file-name (git-file-name name version))
27089 (sha256
27090 (base32 "0zkzmmjgjb6lyrzq1ip54cpnp7al9a7mcyjyi5vx58bvnx3q0c6m"))
27091 (patches (search-patches "online-judge-tools.patch"))))
27092 (build-system pyproject-build-system)
27093 (arguments
27094 (list
27095 #:test-flags
27096 ;; These tests require network connections
27097 #~(list "--ignore=tests/command_version.py")))
27098 (native-inputs (list python-pytest python-setuptools))
27099 (inputs (list time))
27100 (propagated-inputs (list python-online-judge-api-client python-colorama
27101 python-requests))
27102 (home-page "https://github.com/online-judge-tools/oj")
27103 (synopsis "Command to help solving problems on various online judges")
27104 (description
27105 "@command{oj} is a command line tool to help solving problems on
27106various online judges. This command automates downloading sample
27107cases, generating additional test cases, testing for your code, and
27108submitting it.")
27109 (license license:expat)))
27110
27111(define-public python-mpv-jsonipc
27112 (package
27113 (name "python-mpv-jsonipc")
27114 (version "1.2.0")
27115 (source
27116 (origin
27117 (method url-fetch)
27118 (uri (pypi-uri "python-mpv-jsonipc" version))
27119 (sha256
27120 (base32 "0ymdwrx544a6gn6wm9dixpgzbfrbpxvcj5ys7m41cgb4lvpvx691"))))
27121 (build-system pyproject-build-system)
27122 (arguments (list #:tests? #f)) ;No test suite.
27123 (native-inputs (list python-setuptools python-wheel))
27124 (home-page "https://github.com/iwalton3/python-mpv-jsonipc")
27125 (synopsis "Python API to control MPV using JSON IPC")
27126 (description "Python MPV JSONIPC implements an interface similar to
27127python-mpv, but it uses the JSON IPC protocol instead of the C API.")
27128 (license license:asl2.0)))
27129
27130(define-public python-jellyfin-apiclient
27131 (package
27132 (name "python-jellyfin-apiclient")
27133 (version "1.11.0")
27134 (source
27135 (origin
27136 (method git-fetch)
27137 (uri
27138 (git-reference
27139 (url "https://github.com/jellyfin/jellyfin-apiclient-python.git")
27140 (commit (string-append "v" version))))
27141 (sha256
27142 (base32 "1l30r7s4djvcsnf342af8mvh4c68v9b37j5y47k6cpaj8fj78lac"))))
27143 (build-system pyproject-build-system)
27144 (native-inputs (list python-setuptools python-pytest python-wheel))
27145 (propagated-inputs (list python-certifi python-requests python-urllib3
27146 python-websocket-client))
27147 (home-page "https://github.com/jellyfin/jellyfin-apiclient-python")
27148 (synopsis "Python API client for Jellyfin")
27149 (description "The Jellyfin ApiClient Python package makes it possible
27150to use the Jellyfin API from Python. It was extracted from the Jellyfin
27151Kodi plugin.")
27152 (license license:gpl3+)))
27153
27154(define-public python-parso
27155 (package
27156 (name "python-parso")
27157 (version "0.8.4")
27158 (source
27159 (origin
27160 (method url-fetch)
27161 (uri (pypi-uri "parso" version))
27162 (sha256
27163 (base32 "0bdr38l6p7d9q8agxljdbzm4158grkp1sms5lfcr1f8g4ic7nfpb"))))
27164 (build-system pyproject-build-system)
27165 (native-inputs
27166 (list python-pytest
27167 python-setuptools
27168 python-wheel))
27169 (home-page "https://github.com/davidhalter/parso")
27170 (synopsis "Python Parser")
27171 (description "Parso is a Python parser that supports error recovery and
27172round-trip parsing for different Python versions (in multiple Python versions).
27173Parso is also able to list multiple syntax errors in your Python file.")
27174 (license license:expat)))
27175
27176(define-public python-async-generator
27177 (package
27178 (name "python-async-generator")
27179 (version "1.10")
27180 (source
27181 (origin
27182 (method url-fetch)
27183 (uri (pypi-uri "async_generator" version))
27184 (sha256
27185 (base32
27186 "0i11f6z6lix8ixi3vsk6s76zvvpmgrw6zjrcwjm0m4hjdh83vfvf"))))
27187 (build-system pyproject-build-system)
27188 (native-inputs
27189 (list python-pytest python-setuptools))
27190 (home-page "https://github.com/python-trio/async_generator")
27191 (synopsis "Async generators and context managers for Python 3.5+")
27192 (description "@code{async_generator} back-ports Python 3.6's native async
27193generators and Python 3.7's context managers into Python 3.5.")
27194 ;; Dual licensed.
27195 (license (list license:expat license:asl2.0))))
27196
27197(define-public python-async-timeout
27198 (package
27199 (name "python-async-timeout")
27200 (version "5.0.1")
27201 (source
27202 (origin
27203 (method url-fetch)
27204 (uri (pypi-uri "async_timeout" version))
27205 (sha256
27206 (base32 "1lvparrx5sfnapaq4mwk0ai7kqrwg6h2ykc2gqc5wsjs7mx1lcnr"))))
27207 (build-system pyproject-build-system)
27208 (arguments
27209 (list
27210 #:phases
27211 #~(modify-phases %standard-phases
27212 (add-after 'unpack 'fix-pytest-config
27213 (lambda _
27214 ;; Drop test coverage requirements
27215 (substitute* "setup.cfg"
27216 ((".*--cov.*") "")))))))
27217 (native-inputs
27218 (list python-pytest
27219 python-pytest-asyncio
27220 python-setuptools
27221 python-wheel))
27222 (home-page "https://github.com/aio-libs/async-timeout")
27223 (synopsis "Timeout context manager for asyncio programs")
27224 (description
27225 "@code{async-timeout} provides a timeout timeout context manager
27226compatible with @code{asyncio}.")
27227 (license license:asl2.0)))
27228
27229(define-public python-async-timeout-4
27230 (package
27231 (inherit python-async-timeout)
27232 (name "python-async-timeout")
27233 (version "4.0.3")
27234 (source
27235 (origin
27236 (method url-fetch)
27237 (uri (pypi-uri "async-timeout" version))
27238 (sha256
27239 (base32 "0bsj4z28ggxh1b6h6dvhx2mk6yqgb88bg8lyslpd10jdx1mxjh26"))))))
27240
27241(define-public python-glob2
27242 (package
27243 (name "python-glob2")
27244 (version "0.7")
27245 (source
27246 (origin
27247 (method git-fetch)
27248 (uri (git-reference
27249 (url "https://github.com/miracle2k/python-glob2")
27250 (commit (string-append "v" version))))
27251 (file-name (git-file-name name version))
27252 (sha256
27253 (base32 "160nh2ay9lw2hi0rixpzb2k87r6ql56k0j2cm87lqz8xc8zbw919"))))
27254 (build-system pyproject-build-system)
27255 (arguments
27256 (list
27257 #:phases
27258 #~(modify-phases %standard-phases
27259 (add-after 'unpack 'patch-tests-for-pytest8
27260 ;; See: <https://github.com/miracle2k/python-glob2/issues/30>.
27261 (lambda _
27262 (substitute* "test.py"
27263 (("setup\\(") "setup_method(")
27264 (("teardown\\(") "teardown_method("))
27265 (rename-file "test.py" "glob2_test.py"))))))
27266 (native-inputs (list python-pytest python-setuptools))
27267 (home-page "https://github.com/miracle2k/python-glob2/")
27268 (synopsis "Extended Version of the python buildin glob module")
27269 (description "This is an extended version of the Python
27270@url{http://docs.python.org/library/glob.html, built-in glob module} which
27271adds:
27272
27273@itemize
27274@item The ability to capture the text matched by glob patterns, and return
27275those matches alongside the file names.
27276@item A recursive @code{**} globbing syntax, akin for example to the
27277@code{globstar} option of Bash.
27278@item The ability to replace the file system functions used, in order to glob
27279on virtual file systems.
27280@item Compatible with Python 2 and Python 3 (tested with 3.3).
27281@end itemize
27282
27283Glob2 currently based on the glob code from Python 3.3.1.")
27284 (license license:bsd-2)))
27285
27286(define-public python-gipc
27287 (package
27288 (name "python-gipc")
27289 (version "1.8.0")
27290 (source
27291 (origin
27292 (method git-fetch)
27293 (uri (git-reference
27294 (url "https://github.com/jgehrcke/gipc")
27295 (commit version)))
27296 (file-name (git-file-name name version))
27297 (sha256
27298 (base32 "18w1fi3gh8i3kl58n6jpixzc2w42znxqhb3lj6hwn1641wq2hyrz"))))
27299 (build-system pyproject-build-system)
27300 (arguments
27301 (list
27302 #:phases
27303 #~(modify-phases %standard-phases
27304 (add-after 'unpack 'adjust-for-pytest-8
27305 (lambda _
27306 (substitute* "test/test_gipc.py"
27307 (("def setup") "def setup_method")
27308 (("def teardown") "def teardown_method")))))))
27309 (native-inputs
27310 (list python-pytest
27311 python-setuptools))
27312 (propagated-inputs
27313 (list python-gevent))
27314 (home-page "https://gehrcke.de/gipc/")
27315 (synopsis "Child process management in the context of gevent")
27316 (description
27317 "Usage of Python's multiprocessing package in a gevent-powered
27318application may raise problems. With @code{gipc}, process-based child
27319processes can safely be created anywhere within a gevent-powered
27320application.")
27321 (license license:expat)))
27322
27323(define-public python-beautifultable
27324 (package
27325 (name "python-beautifultable")
27326 (version "1.1.0")
27327 (source
27328 (origin
27329 (method git-fetch)
27330 (uri (git-reference
27331 (url "https://github.com/pri22296/beautifultable")
27332 (commit (string-append "v" version))))
27333 (file-name (git-file-name name version))
27334 (sha256
27335 (base32 "0b6c7dpc45sm3vn65qm00q20sdgpi78xxzwc0rij7hnj9c45w97x"))))
27336 (build-system pyproject-build-system)
27337 (arguments (list #:test-backend #~'unittest))
27338 (native-inputs (list python-pandas python-setuptools))
27339 (propagated-inputs (list python-wcwidth))
27340 (home-page "https://github.com/pri22296/beautifultable")
27341 (synopsis "Print ASCII tables for terminals")
27342 (description
27343 "@code{python-beautifultable} provides a class for easily printing
27344tabular data in a visually appealing ASCII format to a terminal.
27345
27346Features include, but are not limited to:
27347@itemize
27348@item Full customization of the look and feel of the table
27349@item Row and column accessors.
27350@item Full support for colors using ANSI sequences or any library.
27351@item Plenty of predefined styles and option to create custom ones.
27352@item Support for Unicode characters.
27353@item Supports streaming table when data is slow to retrieve.
27354@end itemize")
27355 (license license:expat)))
27356
27357(define-public python-globber
27358 (package
27359 (name "python-globber")
27360 (version "0.2.1")
27361 (source
27362 (origin
27363 (method git-fetch)
27364 (uri (git-reference
27365 (url "https://github.com/asharov/globber")
27366 (commit version)))
27367 (file-name (git-file-name name version))
27368 (sha256
27369 (base32 "055xf7ja7zjhxis0ab5fnfsx16fsvr5fvc6mixqybanwxh8sgfjk"))))
27370 (build-system pyproject-build-system)
27371 (native-inputs (list python-pytest python-setuptools))
27372 (home-page "https://github.com/asharov/globber")
27373 (synopsis "Library for string matching with glob patterns")
27374 (description
27375 "Globber is a Python library for matching file names against glob patterns.
27376In contrast to other glob-matching libraries, it matches arbitrary strings and
27377doesn't require the matched names to be existing files. In addition, it
27378supports the globstar @code{**} operator to match an arbitrary number of
27379path components.")
27380 (license license:asl2.0)))
27381
27382;; XXX: Not maintained since 2021.
27383(define-public python-git-hammer
27384 (package
27385 (name "python-git-hammer")
27386 (version "0.3.2")
27387 (source
27388 (origin
27389 (method git-fetch)
27390 (uri (git-reference
27391 (url "https://github.com/asharov/git-hammer")
27392 (commit version)))
27393 (file-name (git-file-name name version))
27394 (sha256
27395 (base32 "0j0skpbhi7js45hp1w2n87093yz1hjdg5y3kicwvm84fb8i38gvx"))))
27396 (build-system pyproject-build-system)
27397 (arguments
27398 (list
27399 #:phases
27400 #~(modify-phases %standard-phases
27401 (add-after 'unpack 'relax-requirements
27402 (lambda _
27403 (substitute* "setup.py"
27404 (("matplotlib <3.1") "matplotlib")))))))
27405 (native-inputs
27406 (list python-pytest
27407 python-setuptools))
27408 (propagated-inputs
27409 (list python-beautifultable
27410 python-dateutil
27411 python-gitpython
27412 python-globber
27413 python-matplotlib
27414 python-sqlalchemy
27415 python-sqlalchemy-utils))
27416 (home-page "https://github.com/asharov/git-hammer")
27417 (synopsis "Provide statistics for git repositories")
27418 (description
27419 "Git Hammer is a statistics tool for projects in git repositories. Its major
27420feature is tracking the number of lines authored by each person for every
27421commit, but it also includes some other useful statistics.")
27422 (license license:asl2.0)))
27423
27424(define-public python-gitignore-parser
27425 (package
27426 (name "python-gitignore-parser")
27427 (version "0.1.13")
27428 (source
27429 (origin
27430 (method git-fetch)
27431 (uri (git-reference
27432 (url "https://github.com/mherrmann/gitignore_parser")
27433 (commit (string-append "v" version))))
27434 (file-name (git-file-name name version))
27435 (sha256
27436 (base32 "0lx1lip9p70my7z77szxc6izg3dj3000r6z71f2bnx2z13rl5pld"))))
27437 (build-system pyproject-build-system)
27438 (arguments (list #:test-backend #~'unittest))
27439 (native-inputs (list python-setuptools))
27440 (home-page "https://github.com/mherrmann/gitignore_parser")
27441 (synopsis "Spec-compliant gitignore parser for Python")
27442 (description
27443 "This package provides a spec-compliant gitignore parser for Python.")
27444 (license license:expat)))
27445
27446(define-public python-fusepy
27447 (package
27448 (name "python-fusepy")
27449 (version "2.0.4")
27450 (source
27451 (origin
27452 (method git-fetch)
27453 (uri (git-reference
27454 (url "https://github.com/fusepy/fusepy")
27455 (commit (string-append "v" version))))
27456 (file-name (git-file-name name version))
27457 (sha256
27458 (base32 "10smh49lzmqam6ddxcnp1dajy4s9hi5ri3qp1rhwdyfsaq3pay81"))))
27459 (build-system pyproject-build-system)
27460 (arguments
27461 (list
27462 #:tests? #f ; No formalized tests.
27463 #:phases
27464 #~(modify-phases %standard-phases
27465 (add-before 'build 'set-library-file-name
27466 (lambda* (#:key inputs #:allow-other-keys)
27467 (substitute* "fuse.py"
27468 (("find_library\\('fuse'\\)")
27469 (format #f "~s"
27470 (search-input-file inputs "lib/libfuse.so")))))))))
27471 (native-inputs (list python-setuptools))
27472 (propagated-inputs (list fuse-2))
27473 (home-page "https://github.com/fusepy/fusepy")
27474 (synopsis "Simple ctypes bindings for FUSE")
27475 (description
27476 "Python module that provides a simple interface to FUSE and MacFUSE. The
27477binding is created using the standard @code{ctypes} library.")
27478 (license license:isc)))
27479
27480(define-public pybind11
27481 (package
27482 (name "pybind11")
27483 (version "2.13.6")
27484 (source (origin
27485 (method git-fetch)
27486 (uri (git-reference
27487 (url "https://github.com/pybind/pybind11")
27488 (commit (string-append "v" version))))
27489 (sha256
27490 (base32
27491 "1dbnki0pnky39kr04afd9ks597bzjc530zbk33jjss53nfvdvlj8"))
27492 (file-name (git-file-name name version))))
27493 (build-system cmake-build-system)
27494 (native-inputs
27495 `(("python" ,python-wrapper)
27496
27497 ;; The following dependencies are used for tests.
27498 ("python-pytest" ,python-pytest)
27499 ("catch" ,catch2-1)
27500 ("eigen" ,eigen)))
27501 (arguments
27502 (list
27503 #:configure-flags
27504 #~(list (string-append "-DCATCH_INCLUDE_DIR="
27505 (assoc-ref %build-inputs "catch")
27506 "/include/catch"))
27507 #:modules '((guix build cmake-build-system)
27508 ((guix build gnu-build-system) #:prefix gnu:)
27509 (guix build utils))
27510 #:phases
27511 #~(modify-phases %standard-phases
27512 (replace 'check
27513 (lambda* (#:rest args)
27514 (apply (assoc-ref gnu:%standard-phases 'check) args)))
27515 (add-after 'install 'install-python
27516 (lambda* (#:key outputs #:allow-other-keys)
27517 (let ((out (assoc-ref outputs "out")))
27518 (with-directory-excursion "../source"
27519 (setenv "PYBIND11_USE_CMAKE" "yes")
27520 (invoke "python" "setup.py" "install"
27521 "--single-version-externally-managed"
27522 "--root=/"
27523 (string-append "--prefix=" out)))))))))
27524 (home-page "https://github.com/pybind/pybind11/")
27525 (synopsis "Seamless operability between C++11 and Python")
27526 (description
27527 "@code{pybind11} is a lightweight header-only library that exposes C++
27528types in Python and vice versa, mainly to create Python bindings of existing
27529C++ code. Its goals and syntax are similar to the @code{Boost.Python}
27530library: to minimize boilerplate code in traditional extension modules by
27531inferring type information using compile-time introspection.")
27532 (license license:bsd-3)))
27533
27534(define-public python-pooch
27535 (package
27536 (name "python-pooch")
27537 (version "1.8.1")
27538 (source
27539 (origin
27540 (method url-fetch)
27541 (uri (pypi-uri "pooch" version))
27542 (sha256
27543 (base32 "0w32fhfp67k0ip0gxjpw8kxdx9ghybxmqkv9sbwy99nrgl4n7vr7"))))
27544 (build-system pyproject-build-system)
27545 (arguments
27546 (list
27547 #:test-flags
27548 '(list "-k"
27549 (string-append
27550 ;; We don't have the test archives
27551 "not test_decompress"
27552 " and not test_multiple_unpacking"
27553 " and not test_unpack_members_with_leading_dot"
27554 " and not test_unpacking"
27555 " and not test_unpacking_members_then_no_members"
27556 " and not test_unpacking_wrong_members_then_no_members"
27557 ;; These all require access to the internet
27558 " and not test_check_availability"
27559 " and not test_check_availability_invalid_downloader"
27560 " and not test_check_availability_on_ftp"
27561 " and not test_create_and_fetch"
27562 " and not test_downloader_arbitrary_progressbar"
27563 " and not test_fetch_with_downloader"
27564 " and not test_figshare_data_repository_versions"
27565 " and not test_load_registry_from_doi"
27566 " and not test_pooch_corrupted"
27567 " and not test_pooch_custom_url"
27568 " and not test_pooch_download"
27569 " and not test_pooch_download_retry"
27570 " and not test_pooch_download_retry_fails_eventually"
27571 " and not test_pooch_download_retry_off_by_default"
27572 " and not test_pooch_logging_level"
27573 " and not test_pooch_update"
27574 " and not test_retrieve"
27575 " and not test_retrieve_default_path"
27576 " and not test_retrieve_fname"
27577 " and not test_stream_download")
27578 "--ignore=pooch/tests/test_downloaders.py")))
27579 (native-inputs
27580 (list python-pytest
27581 python-setuptools-scm
27582 python-setuptools
27583 python-wheel))
27584 (propagated-inputs
27585 (list python-packaging python-platformdirs python-requests))
27586 (home-page "https://github.com/fatiando/pooch")
27587 (synopsis "Manage your Python library's sample data files")
27588 (description
27589 "Pooch manages your Python library's sample data files: it automatically
27590downloads and stores them in a local directory, with support for versioning
27591and corruption checks.")
27592 (license license:bsd-3)))
27593
27594(define-public python-fasteners
27595 (package
27596 (name "python-fasteners")
27597 (version "0.17.3")
27598 (source (origin
27599 ;; No tests in the pypi tarball
27600 (method git-fetch)
27601 (uri (git-reference
27602 (url "https://github.com/harlowja/fasteners")
27603 (commit version)))
27604 (file-name (git-file-name name version))
27605 (sha256
27606 (base32
27607 "0m0dxv8ljpkq99s3d1mib1zfb0ppx3h74h5yr8809zsrq2klfn0m"))))
27608 (build-system pyproject-build-system)
27609 (arguments
27610 `(#:phases (modify-phases %standard-phases
27611 (replace 'check
27612 (lambda* (#:key tests? #:allow-other-keys)
27613 (when tests?
27614 (invoke "pytest")))))))
27615 (native-inputs (list python-diskcache python-more-itertools
27616 python-setuptools python-pytest python-wheel))
27617 (home-page "https://github.com/harlowja/fasteners")
27618 (synopsis "Python package that provides useful locks")
27619 (description
27620 "This package provides a Python program that provides following locks:
27621
27622@itemize
27623@item Locking decorator
27624@item Reader-writer locks
27625@item Inter-process locks
27626@item Generic helpers
27627@end itemize\n")
27628 (license license:asl2.0)))
27629
27630(define-public python-requests-file
27631 (package
27632 (name "python-requests-file")
27633 (version "3.0.1")
27634 (source
27635 (origin
27636 (method git-fetch)
27637 (uri (git-reference
27638 (url "https://codeberg.org/dashea/requests-file")
27639 (commit version)))
27640 (file-name (git-file-name name version))
27641 (sha256
27642 (base32 "0wvz2fkx01libz731a9pfx0l5p44cd33ba8gs7kw5dksfzfwvark"))))
27643 (build-system pyproject-build-system)
27644 (native-inputs (list python-pytest python-setuptools))
27645 (propagated-inputs (list python-requests))
27646 (home-page "https://codeberg.org/dashea/requests-file")
27647 (synopsis "File transport adapter for Requests")
27648 (description
27649 "Requests-File is a transport adapter for use with the Requests Python
27650library to allow local file system access via @code{file://} URLs.")
27651 (license license:asl2.0)))
27652
27653(define-public python-identify
27654 (package
27655 (name "python-identify")
27656 (version "2.6.14")
27657 (source
27658 (origin
27659 ;; There are no tests in the PyPI tarball.
27660 (method git-fetch)
27661 (uri (git-reference
27662 (url "https://github.com/chriskuehl/identify")
27663 (commit (string-append "v" version))))
27664 (file-name (git-file-name name version))
27665 (sha256
27666 (base32 "1fbl7wvhky4rlv37p0531xnl037lq58d8wsxgyylj371bfz3m3wp"))))
27667 (build-system pyproject-build-system)
27668 (native-inputs
27669 (list python-pytest
27670 python-setuptools
27671 python-ukkonen))
27672 (home-page "https://github.com/chriskuehl/identify")
27673 (synopsis "File identification library for Python")
27674 (description
27675 "@code{identify} is a file identification library for Python. Given
27676a file (or some information about a file), return a set of standardized tags
27677identifying what the file is.")
27678 (license license:expat)))
27679
27680(define-public python-nodeenv
27681 (package
27682 (name "python-nodeenv")
27683 (version "1.8.0")
27684 (source
27685 (origin
27686 ;; There's no tarball in PyPI.
27687 (method git-fetch)
27688 (uri (git-reference
27689 (url "https://github.com/ekalinin/nodeenv")
27690 (commit version)))
27691 (file-name (git-file-name name version))
27692 (sha256
27693 (base32 "0g8zp8zw5nnfc14ml0sil9yh7lnpz3xrdkazdkwg6pf5jqsxlvv9"))))
27694 (build-system pyproject-build-system)
27695 (arguments
27696 (list #:test-flags
27697 #~(list "-k" (string-append
27698 "not test_smoke"
27699 " and not test_smoke_n_system_special_chars"))))
27700 (native-inputs
27701 (list python-coverage
27702 python-mock
27703 python-pytest
27704 python-setuptools
27705 python-wheel))
27706 (home-page "https://ekalinin.github.io/nodeenv/")
27707 (synopsis "Create isolated node.js environments")
27708 (description
27709 "Nodeenv (node.js virtual environment) is a tool to create isolated
27710node.js environments. It creates an environment that has its own installation
27711directories, that doesn't share libraries with other node.js virtual
27712environments.")
27713 (license license:bsd-3)))
27714
27715(define-public python-pynamecheap
27716 (package
27717 (name "python-pynamecheap")
27718 (version "0.0.3")
27719 (source
27720 (origin
27721 (method url-fetch)
27722 (uri (pypi-uri "PyNamecheap" version))
27723 (sha256
27724 (base32 "0wkbwz208j8nfrsmzmclvxg22ymknn0mlz76wbdza9k2bx2zja6l"))))
27725 (build-system pyproject-build-system)
27726 (arguments (list #:tests? #f)) ; No tests.
27727 (native-inputs (list python-setuptools))
27728 (propagated-inputs (list python-requests))
27729 (home-page "https://github.com/Bemmu/PyNamecheap")
27730 (synopsis "Namecheap API client in Python")
27731 (description
27732 "PyNamecheap is a Namecheap API client in Python.")
27733 (license license:expat)))
27734
27735(define-public python-pynixutil
27736 (package
27737 (name "python-pynixutil")
27738 (version "0.5.0")
27739 (source
27740 (origin
27741 (method git-fetch)
27742 (uri (git-reference
27743 (url "https://github.com/nix-community/pynixutil")
27744 (commit version)))
27745 (file-name (git-file-name name version))
27746 (sha256
27747 (base32 "1lnspcai7mqpv73bbd8kgyw63fxwgkwvfkl09b2bl5y2g2v7np6m"))))
27748 (build-system pyproject-build-system)
27749 (arguments
27750 (list
27751 #:test-flags
27752 ;; Tests require nix in the PATH.
27753 #~(list "--ignore=tests/test_drv.py")
27754 #:phases
27755 #~(modify-phases %standard-phases
27756 (add-after 'unpack 'use-poetry-core
27757 (lambda _
27758 ;; Patch to use the core poetry API.
27759 (substitute* "pyproject.toml"
27760 (("poetry.masonry.api") "poetry.core.masonry.api")))))))
27761 (native-inputs
27762 (list python-poetry-core
27763 python-pytest))
27764 (home-page "https://github.com/nix-community/pynixutil")
27765 (synopsis "Utility functions for working with data from Nix in Python")
27766 (description
27767 "@code{pynixutil} provides functions for base32 encoding/decoding and
27768derivation parsing, namingly @code{b32decode()}, @code{b32encode()} and
27769@code{drvparse()}.")
27770 (license license:expat)))
27771
27772(define-public python-dns-lexicon
27773 (package
27774 (name "python-dns-lexicon")
27775 (version "3.21.1")
27776 (source
27777 (origin
27778 (method git-fetch)
27779 (uri (git-reference
27780 (url "https://github.com/dns-lexicon/dns-lexicon")
27781 (commit (string-append "v" version))))
27782 (file-name (git-file-name name version))
27783 (sha256
27784 (base32 "138j8nrkrisn7kh5rqi2wz130p6vr4bkaw1pmbfpjkdjk118ng8c"))))
27785 (build-system pyproject-build-system)
27786 (arguments
27787 (list
27788 ;; Integration tests require network access.
27789 #:test-flags #~(list "--ignore-glob=tests/providers/*.py")
27790 #:phases
27791 #~(modify-phases %standard-phases
27792 (add-before 'check 'configure-tests
27793 (lambda _
27794 (setenv "HOME" (getcwd)))))))
27795 (native-inputs (list nss-certs-for-test python-hatchling python-pytest))
27796 (propagated-inputs
27797 (list python-beautifulsoup4
27798 python-cryptography
27799 python-dnspython
27800 python-importlib-metadata
27801 python-pyotp
27802 python-pyyaml
27803 python-requests
27804 python-tldextract))
27805 (home-page "https://github.com/dns-lexicon/dns-lexicon")
27806 (synopsis "Manipulate DNS records on various DNS providers")
27807 (description
27808 "Lexicon provides a way to manipulate DNS records on multiple DNS
27809providers in a standardized way. It has a CLI but it can also be used as a
27810Python library. It was designed to be used in automation, specifically with
27811Let's Encrypt.")
27812 (license license:expat)))
27813
27814(define-public python-cfgv
27815 (package
27816 (name "python-cfgv")
27817 (version "3.4.0")
27818 (source
27819 (origin
27820 ;; There are no tests in the PyPI tarball.
27821 (method git-fetch)
27822 (uri (git-reference
27823 (url "https://github.com/asottile/cfgv")
27824 (commit (string-append "v" version))))
27825 (file-name (git-file-name name version))
27826 (sha256
27827 (base32 "0g7jg6dssyax6k85lk8afs8qdzgq138g6ij0jmmhgdv5fzks6k9z"))))
27828 (build-system pyproject-build-system)
27829 (native-inputs
27830 (list python-pytest python-setuptools python-wheel))
27831 (home-page "https://github.com/asottile/cfgv")
27832 (synopsis "Configuration validation library")
27833 (description
27834 "This library helps to validate configuration files and produce human
27835readable error messages.")
27836 (license license:expat)))
27837
27838(define-public python-commandlines
27839 (package
27840 (name "python-commandlines")
27841 (version "0.4.1")
27842 (source
27843 (origin
27844 (method git-fetch)
27845 (uri (git-reference
27846 (url "https://github.com/chrissimpkins/commandlines")
27847 (commit (string-append "v" version))))
27848 (file-name (git-file-name name version))
27849 (sha256
27850 (base32 "03mxsknqbiwdl4cydnmr3dbid5rh1y1pwfcnbf6k4sf0wiw98y67"))))
27851 (build-system pyproject-build-system)
27852 (native-inputs (list python-pytest python-setuptools))
27853 (home-page "https://github.com/chrissimpkins/commandlines")
27854 (synopsis "Command line argument to object parsing library")
27855 (description
27856 "@code{Commandlines} is a Python library for command line application
27857development that supports command line argument parsing, command string
27858validation testing and application logic.")
27859 (license license:expat)))
27860
27861;; Make sure to upgrade python-llvmlite in (gnu packages llvm) together with
27862;; python-numba. They have a very unflexible relationship.
27863(define-public python-numba
27864 (package
27865 (name "python-numba")
27866 (version "0.62.1")
27867 (source
27868 (origin
27869 (method url-fetch)
27870 (uri (pypi-uri "numba" version))
27871 (sha256
27872 (base32
27873 "0qai1npy5x2p68872zi6hr97sxdmwmigr8802b1383l9m9144xvv"))))
27874 (build-system pyproject-build-system)
27875 (arguments
27876 (list
27877 ;; tests: 10723 tests (skipped=708, expected failures=23)
27878 #:test-backend #~'custom
27879 #:test-flags
27880 ;; Check <buildscripts> directory for more build/tests examples.
27881 #~(list "-m" "numba.runtests"
27882 "--exclude-tags='long_running'"
27883 "--multiprocess" (number->string (min 8 (parallel-job-count)))
27884 "-b"
27885 "-v"
27886 "--"
27887 "numba.tests")
27888 #:phases
27889 #~(modify-phases %standard-phases
27890 (add-after 'unpack 'disable-failing-tests
27891 (lambda _
27892 ;; This expects to be able to run pip.
27893 (delete-file "numba/tests/test_sysinfo.py")
27894 ;; This fails nondeterministically, possibly depending on CPU.
27895 ;; https://github.com/numba/numba/issues/8282.
27896 (substitute* "numba/tests/test_function_type.py"
27897 (("def test_wrapper_address_protocol_libm")
27898 "def disabled_test_wrapper_address_protocol_libm"))
27899 (substitute* "numba/tests/test_caching.py"
27900 ;; RuntimeError: cannot cache function 'simple_usecase': no
27901 ;; locator available for file
27902 (("def test_non_creatable_pycache")
27903 "def __off_test_non_creatable_pycache")
27904 (("def test_non_writable_pycache")
27905 "def __off_test_non_writable_pycache")
27906 ;; AssertionError: None is not an instance of <class
27907 ;; 'numba.core.caching.UserWideCacheLocator'>
27908 (("def test_frozen")
27909 "def __off_test_frozen"))))
27910 (add-before 'build 'disable-proprietary-features
27911 (lambda _
27912 (setenv "NUMBA_DISABLE_HSA" "1")
27913 (setenv "NUMBA_DISABLE_CUDA" "1")))
27914 (add-before 'check 'pre-check
27915 (lambda _
27916 (setenv "HOME" "/tmp")
27917 ;; XXX: Something is wrong with the PYTHONPATH when running the
27918 ;; tests from the build directory, as it complains about not
27919 ;; being able to import certain modules.
27920 (delete-file-recursively "numba"))))))
27921 (native-inputs
27922 (list python-setuptools))
27923 (propagated-inputs
27924 (list python-llvmlite
27925 python-numpy))
27926 (home-page "https://numba.pydata.org")
27927 (synopsis "Compile Python code using LLVM")
27928 (description "Numba gives you the power to speed up your applications with
27929high performance functions written directly in Python. With a few
27930annotations, array-oriented and math-heavy Python code can be just-in-time
27931compiled to native machine instructions, similar in performance to C, C++ and
27932Fortran, without having to switch languages or Python interpreters.
27933
27934Numba works by generating optimized machine code using the LLVM compiler
27935infrastructure at import time, runtime, or statically (using the included pycc
27936tool).")
27937 (license license:bsd-3)))
27938
27939(define-public python-numcodecs
27940 (package
27941 (name "python-numcodecs")
27942 (version "0.13.1")
27943 ;; python-zarr does not want versions 0.14.0 or 0.14.1.
27944 ;;(version "0.14.1")
27945 (source
27946 (origin
27947 (method url-fetch)
27948 (uri (pypi-uri "numcodecs" version))
27949 (sha256
27950 (base32
27951 "1g09fwhgmhmw66x5gzmzhm8yhgqki3gpfi0dkhx8z2gh3n43gkx3"))
27952 (modules '((guix build utils)))
27953 (snippet
27954 '(begin
27955 ;; Only add CFLAGS on architectures where they are supported
27956 (substitute* "setup.py"
27957 (("import sys")
27958 "import sys\nimport platform")
27959 (("os\\.name == 'posix'")
27960 (string-append "os.name + platform.machine() == 'posixx86_64' or"
27961 " os.name + platform.machine() == 'posixx86'")))
27962 (delete-file-recursively "c-blosc")))))
27963 (build-system pyproject-build-system)
27964 (arguments
27965 (list
27966 #:test-flags
27967 ;; zarr isn't available, because it dependes on this package.
27968 '(list "-k" "not test_zarr3_import")
27969 #:phases
27970 '(modify-phases %standard-phases
27971 (add-after 'unpack 'disable-avx2
27972 (lambda _
27973 (setenv "DISABLE_NUMCODECS_AVX2" "1")))
27974 (add-after 'unpack 'unbundle
27975 (lambda _
27976 (substitute* "setup.py"
27977 (("sources=sources \\+ blosc_sources,")
27978 "sources=sources,")
27979 (("extra_compile_args=extra_compile_args")
27980 "extra_compile_args=list(base_compile_args)")
27981 (("'numcodecs.zstd',")
27982 "'numcodecs.zstd', libraries=['zstd'], ")
27983 (("'numcodecs.lz4',")
27984 "'numcodecs.lz4', libraries=['lz4'], ")
27985 (("'numcodecs.blosc',")
27986 "'numcodecs.blosc', libraries=['blosc'], "))))
27987 (add-before 'check 'build-extensions
27988 (lambda _
27989 ;; Cython extensions have to be built before running the tests.
27990 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
27991 (inputs
27992 (list c-blosc lz4 zlib
27993 `(,zstd "lib")))
27994 (propagated-inputs
27995 (list python-google-crc32c
27996 python-importlib-metadata
27997 python-msgpack
27998 python-numpy))
27999 (native-inputs
28000 (list python-cython
28001 python-py-cpuinfo
28002 python-pydata-sphinx-theme
28003 python-pytest
28004 python-pytest-cov
28005 python-setuptools
28006 python-setuptools-scm ;for correct version
28007 python-sphinx
28008 python-sphinx-issues
28009 python-wheel))
28010 (home-page "https://github.com/zarr-developers/numcodecs")
28011 (synopsis "Buffer compression and transformation codecs")
28012 (description
28013 "This Python package provides buffer compression and transformation
28014codecs for use in data storage and communication applications.")
28015 (license license:expat)))
28016
28017(define-public python-asciitree
28018 (package
28019 (name "python-asciitree")
28020 (version "0.3.3")
28021 (source
28022 (origin
28023 (method git-fetch)
28024 (uri (git-reference
28025 (url "https://github.com/mbr/asciitree")
28026 (commit version)))
28027 (file-name (git-file-name name version))
28028 (sha256
28029 (base32 "071wlpyi8pa262sj9xdy0zbj163z84dasxad363z3sfndqxw78h1"))))
28030 (build-system pyproject-build-system)
28031 (native-inputs (list python-pytest python-setuptools))
28032 (home-page "https://github.com/mbr/asciitree")
28033 (synopsis "Draws ASCII trees")
28034 (description "This package draws tree structures using characters.")
28035 (license license:expat)))
28036
28037(define-public python-dill
28038 (package
28039 (name "python-dill")
28040 (version "0.4.0")
28041 (source
28042 (origin
28043 (method url-fetch)
28044 (uri (pypi-uri "dill" version))
28045 (sha256
28046 (base32 "1w5w5hlijw7ahqji45ssyvdip5pv074h4nw97bsj8ws7vz9g2cq6"))))
28047 (build-system pyproject-build-system)
28048 (arguments
28049 (list
28050 #:phases #~(modify-phases %standard-phases
28051 (replace 'check
28052 (lambda* (#:key tests? #:allow-other-keys)
28053 (if tests?
28054 ;; Extracted from tox.ini
28055 (invoke "python" "dill/tests/__main__.py")
28056 (format #t "test suite not run~%")))))))
28057 (native-inputs
28058 (list python-setuptools python-wheel))
28059 (home-page "https://pypi.org/project/dill/")
28060 (synopsis "Serialize all of Python")
28061 (description "Dill extends Python's @code{pickle} module for serializing
28062and de-serializing Python objects to the majority of the built-in Python
28063types. Dill provides the user the same interface as the @code{pickle} module,
28064and also includes some additional features. In addition to pickling Python
28065objects, @code{dill} provides the ability to save the state of an interpreter
28066session in a single command. Hence, it would be feasible to save a
28067interpreter session, close the interpreter, ship the pickled file to another
28068computer, open a new interpreter, unpickle the session and thus continue from
28069the saved state of the original interpreter session.")
28070 (license license:bsd-3)))
28071
28072(define-public python-multiprocess
28073 (package
28074 (name "python-multiprocess")
28075 (version "0.70.18")
28076 (source
28077 (origin
28078 (method url-fetch)
28079 (uri (pypi-uri "multiprocess" version))
28080 (sha256
28081 (base32
28082 "03bdxiincqq3g66vl3sf5ygagjz5sbrpr83djlipprmkwql72ngr"))))
28083 (build-system pyproject-build-system)
28084 (arguments
28085 (list
28086 #:phases
28087 #~(modify-phases %standard-phases
28088 (add-after 'unpack 'disable-broken-tests
28089 (lambda* (#:key inputs #:allow-other-keys)
28090 ;; The "wait_result" and "shared_memory..." tests are broken as
28091 ;; there is no keyboard interrupt.
28092 ;;
28093 ;; The "preload_resources" test fails as it cannot find
28094 ;; mp_preload.py.
28095 (substitute*
28096 (string-append "py" (python-version
28097 (assoc-ref inputs "python"))
28098 "/multiprocess/tests/__init__.py")
28099 (("^(.*)def test_(\
28100wait_result|\
28101shared_memory_SharedMemoryServer_ignores_sigint|\
28102preload_resources\
28103)" line indent)
28104 (string-append indent
28105 "@unittest.skip(\"Disabled by Guix\")\n"
28106 line)))))
28107 (replace 'check
28108 (lambda* (#:key tests? #:allow-other-keys)
28109 (if tests?
28110 (invoke "python" "-m" "multiprocess.tests")
28111 (format #t "test suite not run~%")))))))
28112 (propagated-inputs
28113 (list python-dill))
28114 (native-inputs (list python-setuptools))
28115 (home-page "https://pypi.org/project/multiprocess/")
28116 (synopsis "Multiprocessing and multithreading in Python")
28117 (description
28118 "This package is a fork of the multiprocessing Python package, a package
28119which supports the spawning of processes using the API of the standard
28120library's @code{threading} module.")
28121 (license license:bsd-3)))
28122
28123(define-public python-multiprocessing-on-dill
28124 (package
28125 (name "python-multiprocessing-on-dill")
28126 (version "3.5.0a4")
28127 (source (origin
28128 (method url-fetch)
28129 (uri (pypi-uri "multiprocessing_on_dill" version))
28130 (sha256
28131 (base32
28132 "1rs5a3hx1fcpfsxxkl5kx6g06c82wqjqgdqyny5l1ggl1wq0rmfn"))))
28133 (build-system pyproject-build-system)
28134 (propagated-inputs (list python-dill))
28135 (native-inputs (list python-pytest python-setuptools python-wheel))
28136 (home-page "https://github.com/sixty-north/multiprocessing_on_dill")
28137 (synopsis "Multiprocessing using dill instead of pickle")
28138 (description
28139 "This package provides a friendly fork of multiprocessing which uses dill
28140instead of pickle.")
28141 (license license:psfl)))
28142
28143(define-public python-cytoolz
28144 (package
28145 (name "python-cytoolz")
28146 (version "1.0.1")
28147 (source
28148 (origin
28149 (method url-fetch)
28150 (uri (pypi-uri "cytoolz" version))
28151 (sha256
28152 (base32 "1mn7n916w8dfij3zq139a4szv12rwp94xxrnfvnv66wyp1hk3k49"))
28153 (modules '((guix build utils)))
28154 (snippet
28155 '(for-each delete-file (find-files "cytoolz" "\\.c$")))))
28156 (build-system pyproject-build-system)
28157 (arguments
28158 (list #:test-flags #~(list "--pyargs" "cytoolz")))
28159 (native-inputs
28160 (list python-cython
28161 python-pytest
28162 python-setuptools
28163 python-wheel))
28164 (propagated-inputs
28165 (list python-toolz))
28166 (home-page "https://github.com/pytoolz/cytoolz")
28167 (synopsis "High performance functional utilities")
28168 (description
28169 "The cytoolz package implements the same API as provided by toolz. The
28170main differences are that @code{cytoolz} is faster and cytoolz offers a C API
28171that is accessible to other projects developed in Cython.")
28172 (license license:bsd-3)))
28173
28174(define-public python-sortedcollections
28175 (package
28176 (name "python-sortedcollections")
28177 (version "2.1.0")
28178 (source
28179 (origin
28180 (method git-fetch)
28181 (uri (git-reference
28182 (url "https://github.com/grantjenks/python-sortedcollections")
28183 (commit (string-append "v" version))))
28184 (file-name (git-file-name name version))
28185 (sha256
28186 (base32 "1y2xsbh31jp9fsjy53g5ma974z7a9vcds6ij1vlh00nllzqlwihs"))))
28187 (build-system pyproject-build-system)
28188 (native-inputs (list python-setuptools
28189 python-pytest
28190 python-pytest-cov
28191 python-wheel))
28192 (propagated-inputs (list python-sortedcontainers))
28193 (home-page "https://www.grantjenks.com/docs/sortedcollections/")
28194 (synopsis "Python Sorted Collections")
28195 (description "Sorted Collections is a Python sorted collections library.")
28196 (license license:asl2.0)))
28197
28198(define-public python-sortedcontainers
28199 (package
28200 (name "python-sortedcontainers")
28201 (version "2.4.0")
28202 (source
28203 (origin
28204 (method git-fetch) ;no tests in PyPI archive
28205 (uri (git-reference
28206 (url "https://github.com/grantjenks/python-sortedcontainers")
28207 (commit (string-append "v" version))))
28208 (file-name (git-file-name name version))
28209 (sha256
28210 (base32 "190w2mvgvx0r5k0r8117slq48nh6k7xidbpsrp02wnmcd0rx45k1"))))
28211 (build-system pyproject-build-system)
28212 (arguments
28213 (list #:test-flags #~(list "--pyargs" "sortedcontainers")))
28214 (native-inputs
28215 (list python-pytest-bootstrap python-setuptools))
28216 (home-page "https://grantjenks.com/docs/sortedcontainers/")
28217 (synopsis "Sorted List, Sorted Dict, Sorted Set")
28218 (description
28219 "This package provides a sorted collections library, written in
28220pure-Python.")
28221 (license license:asl2.0)))
28222
28223(define-public python-cloudpickle
28224 (package
28225 (name "python-cloudpickle")
28226 (version "3.1.0")
28227 (source
28228 (origin
28229 ;; Archive on pypi does not include test infrastructure.
28230 (method git-fetch)
28231 (uri (git-reference
28232 (url "https://github.com/cloudpipe/cloudpickle")
28233 (commit (string-append "v" version))))
28234 (file-name (git-file-name name version))
28235 (sha256
28236 (base32 "16z0jdg5b1r23vw1l0bwsg40zcmnrbznr4frjac9kq5j6jm4fw6d"))))
28237 (build-system pyproject-build-system)
28238 (native-inputs
28239 (list python-flit-core
28240 python-psutil
28241 python-pytest))
28242 (home-page "https://github.com/cloudpipe/cloudpickle")
28243 (synopsis "Extended pickling support for Python objects")
28244 (description
28245 "Cloudpickle makes it possible to serialize Python constructs not
28246supported by the default pickle module from the Python standard library. It
28247is especially useful for cluster computing where Python expressions are
28248shipped over the network to execute on remote hosts, possibly close to the
28249data.")
28250 (license license:bsd-3)))
28251
28252(define-public python-locket
28253 (package
28254 (name "python-locket")
28255 (version "1.0.0")
28256 (source
28257 (origin
28258 (method git-fetch)
28259 (uri (git-reference
28260 (url "https://github.com/mwilliamson/locket.py")
28261 (commit version)))
28262 (file-name (git-file-name name version))
28263 (sha256
28264 (base32 "0xx57gq5r7x58yd2mq6zxlr2kpzbyb0b5y5hiprgvkib948jxx0p"))))
28265 (build-system pyproject-build-system)
28266 ;; XXX: Requires python-spur, which requires another version of
28267 ;; python-paramiko.
28268 (arguments (list #:tests? #f))
28269 (native-inputs (list python-setuptools))
28270 (home-page "https://github.com/mwilliamson/locket.py")
28271 (synopsis "File-based locks for Python")
28272 (description
28273 "Locket implements a lock that can be used by multiple processes provided
28274they use the same path.")
28275 (license license:bsd-2)))
28276
28277(define-public python-partd
28278 (package
28279 (name "python-partd")
28280 (version "1.4.2")
28281 (source
28282 (origin
28283 (method url-fetch)
28284 (uri (pypi-uri "partd" version))
28285 (sha256
28286 (base32 "0b7h42dfvbrwpg75wzszv1rq3237h1g026v24v10b16wzcxc68nh"))))
28287 (build-system pyproject-build-system)
28288 (native-inputs
28289 (list python-pytest
28290 python-setuptools
28291 python-versioneer))
28292 (propagated-inputs
28293 (list python-locket
28294 python-toolz
28295 ;; [complete]
28296 python-blosc
28297 python-numpy
28298 python-pandas
28299 python-pyzmq))
28300 (home-page "https://github.com/dask/partd/")
28301 (synopsis "Appendable key-value storage")
28302 (description
28303 "Partd stores key-value pairs. Values are raw bytes. We append on old
28304values. Partd excels at shuffling operations.")
28305 (license license:bsd-3)))
28306
28307(define-public python-fsspec
28308 (package
28309 (name "python-fsspec")
28310 (version "2025.9.0")
28311 (source
28312 (origin
28313 (method git-fetch)
28314 (uri (git-reference
28315 (url "https://github.com/fsspec/filesystem_spec")
28316 (commit version)))
28317 (file-name (git-file-name name version))
28318 (sha256
28319 (base32 "1f11jjp7xd4q9a5lmb00i5l9v36162gjr6h1hkfzvgq78xa735xp"))))
28320 (build-system pyproject-build-system)
28321 (arguments
28322 (list
28323 #:test-flags
28324 #~(list "--ignore=fsspec/implementations/tests/test_github.py"
28325 "-k" (string-join
28326 ;; Test requirs nentwork access
28327 (list "not test_async_cat_file_ranges"
28328 "test_gist_public_all_files"
28329 "test_gist_public_missing_file"
28330 "test_gist_public_one_file"
28331 ;; Test hangs
28332 "test_processes")
28333 " and not "))
28334 #:phases
28335 #~(modify-phases %standard-phases
28336 (add-before 'build 'set-version
28337 (lambda _
28338 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
28339 (propagated-inputs
28340 (list python-aiohttp python-libarchive-c python-requests python-tqdm))
28341 (native-inputs
28342 (list nss-certs-for-test
28343 python-hatch-vcs
28344 python-hatchling
28345 python-numpy
28346 python-pytest
28347 python-pytest-asyncio
28348 python-pytest-mock
28349 python-pytest-rerunfailures))
28350 (home-page "https://github.com/fsspec/filesystem_spec")
28351 (synopsis "File-system specification")
28352 (description "The purpose of this package is to produce a template or
28353specification for a file-system interface, that specific implementations
28354should follow, so that applications making use of them can rely on a common
28355behavior and not have to worry about the specific internal implementation
28356decisions with any given backend.")
28357 (license license:bsd-3)))
28358
28359(define-public python-ilinkedlist
28360 (package
28361 (name "python-ilinkedlist")
28362 (properties '((commit . "b5ea3f67833071c2e0aba2eac35e82496f469238")
28363 (revision . "0")))
28364 (version (git-version "0.4.0"
28365 (assoc-ref properties 'revision)
28366 (assoc-ref properties 'commit)))
28367 (home-page "https://github.com/luther9/ilinkedlist-py")
28368 (source
28369 (origin
28370 (method git-fetch)
28371 (uri (git-reference
28372 (url home-page)
28373 (commit (assoc-ref properties 'commit))))
28374 (file-name (git-file-name name version))
28375 (sha256
28376 (base32 "0lrs6arzm7dg70ny4ri06alhi40s03n71jsx5hsi0fimvwyvfhch"))))
28377 (build-system pyproject-build-system)
28378 (native-inputs (list python-pytest python-setuptools))
28379 (synopsis "Immutable linked list library")
28380 (description
28381 "This is a implementation of immutable linked lists for Python. It
28382contains @code{nil} (the empty linked list) and a @code{Pair} class for nodes.
28383Since a linked list is treated as immutable, it is hashable, and its length
28384can be retrieved in constant time. Some of the terminology is inspired by
28385LISP. It is possible to create an improper list by creating a @code{Pair}
28386with a non-list @code{cdr}.")
28387 (license license:gpl3+)))
28388
28389(define-public python-readlike
28390 (package
28391 (name "python-readlike")
28392 (version "0.1.3")
28393 (source
28394 (origin
28395 (method git-fetch)
28396 (uri (git-reference
28397 (url "https://github.com/jangler/readlike")
28398 (commit version)))
28399 (file-name (git-file-name name version))
28400 (sha256
28401 (base32 "1mw8j8ads8hqdbz42siwpffi4wi5s33z9g14a5c2i7vxp8m68qc1"))))
28402 (build-system pyproject-build-system)
28403 (native-inputs (list python-pytest python-setuptools))
28404 (home-page "https://github.com/jangler/readlike")
28405 (synopsis "GNU Readline-like line editing module")
28406 (description
28407 "This Python module provides line editing functions similar to the default
28408Emacs-style ones of GNU Readline. Unlike the Python standard library's
28409@code{readline} package, this one allows access to those capabilities in settings
28410outside of a standard command-line interface. It is especially well-suited to
28411interfacing with Urwid, due to a shared syntax for describing key inputs.
28412
28413Currently, all stateless Readline commands are implemented. Yanking and history
28414are not supported.")
28415 (license license:expat)))
28416
28417(define-public python-reparser
28418 (package
28419 (name "python-reparser")
28420 (version "1.4.3")
28421 (source
28422 (origin
28423 (method git-fetch)
28424 (uri (git-reference
28425 (url "https://github.com/xmikos/reparser")
28426 (commit (string-append "v" version))))
28427 (file-name (git-file-name name version))
28428 (sha256
28429 (base32 "04v7h52wny0j2qj37501nk33j0s4amm134kagdicx2is49zylzq1"))))
28430 (build-system pyproject-build-system)
28431 (arguments (list #:tests? #f)) ; No tests.
28432 (native-inputs (list python-setuptools))
28433 (home-page "https://github.com/xmikos/reparser")
28434 (synopsis "Lexer/parser for inline markup based on regular expressions")
28435 (description
28436 "This Python library provides a simple lexer/parser for inline markup based
28437on regular expressions.")
28438 (license license:expat)))
28439
28440(define-public python-retrying
28441 (package
28442 (name "python-retrying")
28443 (version "1.4.1")
28444 (source
28445 (origin
28446 (method git-fetch)
28447 (uri (git-reference
28448 (url "https://github.com/groodt/retrying")
28449 (commit (string-append "v" version))))
28450 (file-name (git-file-name name version))
28451 (sha256
28452 (base32 "0m1kf6mxmxzlf3sldzm50c3hq1hkh6fz1g97pdwyvbwdazb7blw9"))))
28453 (build-system pyproject-build-system)
28454 (native-inputs (list python-pytest python-setuptools))
28455 (home-page "https://github.com/groodt/retrying")
28456 (synopsis "Library for adding retry behavior")
28457 (description "Retrying is a general-purpose retrying library to simplify
28458the task of adding retry behavior to just about anything.
28459
28460Features:
28461
28462@itemize
28463@item Generic Decorator API.
28464@item Specify stop condition (i.e. limit by number of attempts).
28465@item Specify wait condition (i.e. exponential backoff sleeping between attempts).
28466@item Customize retrying on Exceptions.
28467@item Customize retrying on expected returned result.
28468@end itemize")
28469 (license license:asl2.0)))
28470
28471(define-public python-precis-i18n
28472 (package
28473 (name "python-precis-i18n")
28474 (version "1.1.1")
28475 (source
28476 (origin
28477 (method url-fetch)
28478 (uri (pypi-uri "precis_i18n" version))
28479 (sha256
28480 (base32 "0cdv2vbn0kwfq0pxj4l52s2xiaqablb2cgk0nph6r9cyqayf77rn"))))
28481 (build-system pyproject-build-system)
28482 (native-inputs
28483 (list python-pytest
28484 python-setuptools
28485 python-wheel))
28486 (home-page "https://github.com/byllyfish/precis_i18n")
28487 (synopsis "Implementation of the PRECIS framework")
28488 (description
28489 "This module implements the PRECIS Framework as described in RFC 8264,
28490RFC 8265 and RFC 8266.")
28491 (license license:expat)))
28492
28493(define-public python-absl-py
28494 (package
28495 (name "python-absl-py")
28496 (version "2.3.1")
28497 (source
28498 (origin
28499 (method url-fetch)
28500 (uri (pypi-uri "absl_py" version))
28501 (sha256
28502 (base32 "1jbzyyrmvmqwnyh053hdmh6q851sbvrg70yf3gnd5gvzdx920y59"))))
28503 (build-system pyproject-build-system)
28504 (arguments
28505 (list #:tests? #f)) ;tests require bazel
28506 (native-inputs
28507 (list python-hatchling))
28508 (home-page "https://github.com/abseil/abseil-py")
28509 (synopsis "Abseil Python common libraries")
28510 (description
28511 "This package provides the Abseil Python Common Libraries, a collection
28512of Python libraries for building Python applications.")
28513 (license license:asl2.0)))
28514
28515(define-public python-astor
28516 (package
28517 (name "python-astor")
28518 (properties '((commit . "df09001112f079db54e7c5358fa143e1e63e74c4")
28519 (revision . "0")))
28520 (version (git-version "0.8.1"
28521 (assoc-ref properties 'revision)
28522 (assoc-ref properties 'commit)))
28523 (source
28524 (origin
28525 (method git-fetch)
28526 (uri (git-reference
28527 (url "https://github.com/berkerpeksag/astor")
28528 (commit (assoc-ref properties 'commit))))
28529 (file-name (git-file-name name version))
28530 (sha256
28531 (base32 "0ymj0n23b6b4qc6x8ycysh2dipdry5a3gakcaf8nravzp5ma2psl"))))
28532 (build-system pyproject-build-system)
28533 (arguments
28534 (list
28535 ;; FIXME: Unclear why this test fails.
28536 #:test-flags #~(list "--deselect=\
28537tests/test_rtrip.py::RtripTestCase::test_convert_stdlib")))
28538 (native-inputs (list python-pytest python-setuptools))
28539 (home-page "https://github.com/berkerpeksag/astor")
28540 (synopsis "Read and write Python ASTs")
28541 (description
28542 "Astor is designed to allow easy manipulation of Python source via the
28543Abstract Syntax Tree.")
28544 (license license:bsd-3)))
28545
28546(define-public python-astunparse
28547 ;; XXX: No updates since 2019, consider to remove when python-pytorch is
28548 ;; updated.
28549 (package
28550 (name "python-astunparse")
28551 (version "1.6.3")
28552 (source
28553 (origin
28554 (method url-fetch)
28555 (uri (pypi-uri "astunparse" version))
28556 (sha256
28557 (base32 "0wh8jjvwafxc7rvbyb13cdwndkicm7cry1bd8p1q9l7has23mnas"))))
28558 (build-system pyproject-build-system)
28559 (arguments '(#:tests? #f)) ; there are none
28560 (native-inputs
28561 (list python-setuptools))
28562 (propagated-inputs
28563 (list python-six))
28564 (home-page "https://github.com/simonpercivall/astunparse")
28565 (synopsis "AST unparser for Python")
28566 (description "This package provides an AST unparser for Python. It is a
28567factored out version of @code{unparse} found in the Python source
28568distribution.")
28569 (license license:bsd-3)))
28570
28571(define-public python-gast
28572 (package
28573 (name "python-gast")
28574 (version "0.6.0")
28575 (source
28576 (origin
28577 (method url-fetch)
28578 (uri (pypi-uri "gast" version))
28579 (sha256
28580 (base32 "1yxinr3xvxf0cryfrfr9q3rgvrki5y310lsigg5ccyicsc057z48"))))
28581 (build-system pyproject-build-system)
28582 (native-inputs
28583 (list python-pytest python-setuptools python-wheel))
28584 (home-page "https://github.com/serge-sans-paille/gast/")
28585 (synopsis "Generic Python AST that abstracts the underlying Python version")
28586 (description
28587 "GAST provides a compatibility layer between the AST of various Python
28588versions, as produced by @code{ast.parse} from the standard @code{ast}
28589module.")
28590 (license license:bsd-3)))
28591
28592;; XXX: Not maintained since 2022, leaf package.
28593(define-public python-attr
28594 (package
28595 (name "python-attr")
28596 (version "0.3.2")
28597 (source
28598 (origin
28599 (method url-fetch)
28600 (uri (pypi-uri "attr" version))
28601 (sha256
28602 (base32 "1x2627x0n2rxx8wib4cksbjjnncff8finq97k37dq70qd2kvrvhw"))))
28603 (build-system pyproject-build-system)
28604 (arguments
28605 (list #:test-backend #~'custom
28606 #:test-flags #~(list "-c" "import dry_attr; dry_attr.test()")))
28607 (native-inputs
28608 (list python-setuptools))
28609 (home-page "https://github.com/denis-ryzhkov/attr")
28610 (synopsis "Decorator for attributes of target function or class")
28611 (description "Simple decorator to set attributes of target function or
28612class in a @acronym{DRY, Don't Repeat Yourself} way.")
28613 (license license:expat)))
28614
28615(define-public python-construct
28616 ;; Fixes not in a release yet.
28617 (let ((commit "c1171b16bda1d213ba4858f3e0e4d4003e4aae90")
28618 (revision "1"))
28619 (package
28620 (name "python-construct")
28621 (version (git-version "2.10.70" revision commit))
28622 (source
28623 (origin
28624 (method git-fetch)
28625 (uri (git-reference
28626 (url "https://github.com/construct/construct")
28627 (commit commit)))
28628 (file-name (git-file-name name version))
28629 (sha256
28630 (base32 "03f6nvyzrq50nhqqwmmws983wwjg78yd9j09pl94vkmyjph33da5"))))
28631 (build-system pyproject-build-system)
28632 (arguments
28633 (list
28634 #:test-flags #~(list "--ignore=tests/test_benchmarks.py")))
28635 (native-inputs
28636 (list python-pytest python-setuptools))
28637 (propagated-inputs
28638 (list python-arrow
28639 python-cloudpickle
28640 python-cryptography
28641 python-lz4
28642 python-numpy
28643 python-ruamel.yaml))
28644 (home-page "https://construct.readthedocs.io")
28645 (synopsis "Declarative and symmetrical parser and builder for binary data")
28646 (description
28647 "This package provides both simple, atomic constructs (such as
28648integers of various sizes), as well as composite ones which allow you
28649form hierarchical and sequential structures of increasing complexity.
28650It features bit and byte granularity, easy debugging and testing, an
28651easy-to-extend subclass system, and lots of primitive constructs to
28652make your work easier.")
28653 (license license:expat))))
28654
28655(define-public python-outcome
28656 (package
28657 (name "python-outcome")
28658 (version "1.3.0.post0")
28659 (source
28660 (origin
28661 (method url-fetch)
28662 (uri (pypi-uri "outcome" version))
28663 (sha256
28664 (base32 "1f2327wzf57zwqw15kzk19ff2s52fa74cxxk8w0bhw99bzk05kwx"))))
28665 (build-system pyproject-build-system)
28666 (native-inputs
28667 (list python-pytest
28668 python-pytest-asyncio
28669 python-setuptools))
28670 (propagated-inputs
28671 (list python-attrs))
28672 (home-page "https://github.com/python-trio/outcome")
28673 (synopsis "Capture the outcome of Python function calls")
28674 (description
28675 "Capture the outcome of Python function calls. Extracted from the Trio
28676project.")
28677 ;; Either license applies.
28678 (license (list license:expat license:asl2.0))))
28679
28680(define-public python-humanize
28681 (package
28682 (name "python-humanize")
28683 (version "4.14.0")
28684 (source
28685 (origin
28686 (method url-fetch)
28687 (uri (pypi-uri "humanize" version))
28688 (sha256
28689 (base32
28690 "03d9xdashy8bsxvg15nz3ih1nsl6na1cmc9mqh2xch56brq9581g"))))
28691 (build-system pyproject-build-system)
28692 (native-inputs
28693 (list python-freezegun
28694 python-hatch-vcs
28695 python-hatchling
28696 python-pytest))
28697 (home-page "https://github.com/jmoiron/humanize")
28698 (synopsis "Print numerical information in a human-readable form")
28699 (description "This package provides a Python module that displays numbers
28700and dates in \"human readable\" forms. For example, it would display
28701\"12345591313\" as \"12.3 billion\".")
28702 (license license:expat)))
28703
28704(define-public python-annoy
28705 (package
28706 (name "python-annoy")
28707 (version "1.17.3")
28708 (source
28709 (origin
28710 (method git-fetch)
28711 (uri (git-reference
28712 (url "https://github.com/spotify/annoy")
28713 (commit (string-append "v" version))))
28714 (file-name (git-file-name name version))
28715 (sha256
28716 (base32 "1zmdp1dws3i35a0psb10k6rkh3iaiq8s9ybxibvfjihbapidd4d0"))))
28717 (build-system pyproject-build-system)
28718 (arguments
28719 (list
28720 #:test-flags
28721 ;; urllib.error.URLError: <urlopen error [Errno -3] Temporary failure in
28722 ;; name resolution>
28723 #~(list "--deselect=test/accuracy_test.py::test_glove_25"
28724 "--deselect=test/accuracy_test.py::test_nytimes_16"
28725 "--deselect=test/accuracy_test.py::test_fashion_mnist")))
28726 (native-inputs
28727 (list python-h5py
28728 python-numpy
28729 python-pytest
28730 python-setuptools))
28731 (home-page "https://github.com/spotify/annoy/")
28732 (synopsis "Approximate nearest neighbors library")
28733 (description
28734 "Annoy is a C++ library with Python bindings to search for points in
28735space that are close to a given query point. It also creates large read-only
28736file-based data structures that are @code{mmap}ped into memory so that many
28737processes may share the same data.")
28738 (license license:asl2.0)))
28739
28740(define-public python-croniter
28741 (package
28742 (name "python-croniter")
28743 (version "5.0.1")
28744 (source
28745 (origin
28746 (method git-fetch)
28747 (uri (git-reference
28748 (url "https://github.com/kiorky/croniter")
28749 (commit version)))
28750 (file-name (git-file-name name version))
28751 (sha256
28752 (base32 "146v641wicx2ipfdpqg1vysikbbhrhndmrnjj1hnv03fjvhqknq9"))))
28753 (build-system pyproject-build-system)
28754 (native-inputs (list python-pytest python-setuptools))
28755 (propagated-inputs (list python-dateutil python-pytz))
28756 (home-page "https://github.com/kiorky/croniter")
28757 (synopsis "Iterate datetime objects with cron-like syntax")
28758 (description
28759 "@code{croniter} provides iteration for datetime object with cron-like
28760format.")
28761 (license license:expat)))
28762
28763(define-public python-crontab
28764 (package
28765 (name "python-crontab")
28766 (version "3.2.0")
28767 (source
28768 (origin
28769 (method url-fetch)
28770 (uri (pypi-uri name version))
28771 (sha256
28772 (base32 "0sy3qlki43n6qmhzzzyya4wcs50mcp3mg1ddn9h39plsscfps1j0"))))
28773 (build-system pyproject-build-system)
28774 (arguments
28775 (list #:test-flags
28776 ;; This test is made for Windows.
28777 #~(list "-k" "not test_07_non_posix_shell")
28778 #:phases
28779 #~(modify-phases %standard-phases
28780 (add-after 'unpack 'defaults-to-mcron
28781 (lambda* (#:key inputs #:allow-other-keys)
28782 (substitute* "crontab.py"
28783 (("/usr/bin/crontab")
28784 (search-input-file inputs "bin/crontab"))))))))
28785 (inputs
28786 (list mcron python-dateutil))
28787 (native-inputs
28788 (list python-pytest python-setuptools python-wheel))
28789 (home-page "https://gitlab.com/doctormo/python-crontab/")
28790 (synopsis "Module for reading and writing crontab files")
28791 (description "This Python module can read, write crontab files, and
28792access the system cron automatically and simply using a direct API.")
28793 (license license:lgpl3+)))
28794
28795(define-public python-apscheduler
28796 (package
28797 (name "python-apscheduler")
28798 (version "3.11.1")
28799 (source (origin
28800 (method url-fetch)
28801 (uri (pypi-uri "apscheduler" version))
28802 (sha256
28803 (base32
28804 "08gjh0l7ba87yp23ilqigp3q004gnnw092p9gxsd310c83v7mdqd"))))
28805 (build-system pyproject-build-system)
28806 (arguments
28807 (list
28808 ;; tests: 701 passed, 252 skipped, 13 deselected, 201 warnings
28809 #:test-flags
28810 ;; XXX: Some tests hang or fail with verity of errors:
28811 ;; E RuntimeError: There is no current event loop in thread 'MainThread'.
28812 #~(list #$@(map (lambda (test) (string-append "--deselect="
28813 "tests/test_executors.py::"
28814 test))
28815 (list "test_broken_pool"
28816 "test_max_instances[processpool-pytz]"
28817 "test_max_instances[processpool-zoneinfo]"
28818 "test_run_coroutine_job_tornado"
28819 "test_run_job_error[processpool-pytz]"
28820 "test_run_job_error[processpool-zoneinfo]"
28821 "test_submit_job[processpool-pytz-error]"
28822 "test_submit_job[processpool-pytz-executed]"
28823 "test_submit_job[processpool-pytz-missed]"
28824 "test_submit_job[processpool-zoneinfo-error]"
28825 "test_submit_job[processpool-zoneinfo-executed]"
28826 "test_submit_job[processpool-zoneinfo-missed]")))))
28827 (native-inputs
28828 (list python-anyio
28829 python-gevent
28830 python-pyside-6
28831 python-pytest
28832 python-pytest-asyncio-0.26
28833 python-pytz
28834 python-setuptools
28835 python-setuptools-scm
28836 python-sqlalchemy
28837 python-tornado
28838 python-twisted))
28839 (propagated-inputs
28840 (list python-tzlocal))
28841 (home-page "https://github.com/agronholm/apscheduler")
28842 (synopsis "Task scheduling library for Python")
28843 (description "Advanced Python Scheduler (APScheduler) is a Python library
28844that lets you schedule your Python code to be executed later, either just once
28845or periodically.
28846
28847You can add new jobs or remove old ones on the fly as you please. If you store
28848your jobs in a database, they will also survive scheduler restarts and maintain
28849their state. When the scheduler is restarted, it will then run all the jobs it
28850should have run while it was offline.")
28851 (license license:expat)))
28852
28853(define-public python-ifaddr
28854 (package
28855 (name "python-ifaddr")
28856 (version "0.2.0")
28857 (source
28858 (origin
28859 (method url-fetch)
28860 (uri (pypi-uri "ifaddr" version))
28861 (sha256
28862 (base32 "1m5fqjqf53m31qrl8fxp2sbwf4mvk5mbjpw2jm2x8rgpmg5by36c"))
28863 (snippet #~(delete-file "ifaddr/_win32.py"))))
28864 (build-system pyproject-build-system)
28865 (native-inputs
28866 (list python-pytest python-setuptools python-wheel))
28867 (home-page "https://github.com/pydron/ifaddr")
28868 (synopsis "Network interface and IP address enumeration library")
28869 (description
28870 "This package provides a network interface and IP address enumeration
28871library in Python.")
28872 (license license:expat)))
28873
28874(define-public python-berkeleydb
28875 (package
28876 (name "python-berkeleydb")
28877 (version "18.1.15")
28878 (source
28879 (origin
28880 (method url-fetch)
28881 (uri (pypi-uri "berkeleydb" version))
28882 (sha256
28883 (base32 "13kmvy6viay27khmj6ydryniirdsbqrc2mjnr2r6nk3m7la57yks"))))
28884 (build-system pyproject-build-system)
28885 (arguments
28886 (list
28887 #:test-backend #~'custom
28888 #:test-flags #~(list "test.py" "-v")
28889 #:phases
28890 #~(modify-phases %standard-phases
28891 (add-after 'unpack 'configure-locations
28892 (lambda* (#:key inputs #:allow-other-keys)
28893 (setenv "BERKELEYDB_DIR"
28894 (assoc-ref inputs "bdb"))
28895 (setenv "YES_I_HAVE_THE_RIGHT_TO_USE_THIS_BERKELEY_DB_VERSION"
28896 "1")))
28897 (add-after 'unpack 'remove-legacy
28898 (lambda _
28899 (substitute* "pyproject.toml"
28900 ((":__legacy__") "")))))))
28901 (native-inputs (list python-setuptools))
28902 (inputs (list bdb))
28903 (home-page "https://www.jcea.es/programacion/pybsddb.htm")
28904 (synopsis "Python bindings for Oracle Berkeley DB")
28905 (description
28906 "This module provides a nearly complete wrapping of the Oracle/Sleepycat
28907C API for the Database Environment, Database, Cursor, Log Cursor, Sequence and
28908Transaction objects, and each of these is exposed as a Python type in the
28909bsddb3.db module. The database objects can use various access methods: btree,
28910hash, recno, and queue. Complete support of Berkeley DB distributed
28911transactions. Complete support for Berkeley DB Replication Manager.
28912Complete support for Berkeley DB Base Replication. Support for RPC.")
28913 (license license:bsd-3)))
28914
28915;; Last version before rename to python-berkeleydb.
28916(define-public python-bsddb3
28917 (package
28918 (inherit python-berkeleydb)
28919 (name "python-bsddb3")
28920 (version "6.2.9")
28921 (source
28922 (origin
28923 (method url-fetch)
28924 (uri (pypi-uri "bsddb3" version))
28925 (sha256
28926 (base32 "00bqdsfx8jgmfz5bgkx10nlw5bfsw11a86f91zkl53snvk45xl3h"))))
28927 (arguments
28928 (substitute-keyword-arguments (package-arguments python-berkeleydb)
28929 ((#:phases phases #~%standard-phases)
28930 #~(modify-phases #$phases
28931 (delete 'remove-legacy)))
28932 ((#:test-flags test-flags #~(list))
28933 #~(list "test3.py" "-v"))))))
28934
28935(define-public python-dbfread
28936 (package
28937 (name "python-dbfread")
28938 (properties '((commit . "dce544641065d966c76a97864b4e9908ec922ce8")
28939 (revision . "0")))
28940 (version (git-version "2.0.7"
28941 (assoc-ref properties 'revision)
28942 (assoc-ref properties 'commit)))
28943 (source
28944 (origin
28945 (method git-fetch)
28946 (uri (git-reference
28947 (url "https://github.com/olemb/dbfread")
28948 (commit (assoc-ref properties 'commit))))
28949 (file-name (git-file-name name version))
28950 (sha256
28951 (base32 "1m7dbgyf8yl6qhilzx41vzhcmkqmc36897wfqs2jngp4bnda64vd"))))
28952 (build-system pyproject-build-system)
28953 (arguments
28954 (list
28955 #:phases
28956 #~(modify-phases %standard-phases
28957 (add-after 'unpack 'relax-setup.py
28958 (lambda _
28959 (substitute* "setup.py"
28960 (("python_requires.*")
28961 "")))))))
28962 (native-inputs (list python-pytest python-setuptools))
28963 (home-page "https://dbfread.readthedocs.io")
28964 (synopsis "Read DBF Files with Python")
28965 (description
28966 "This library reads DBF files and returns the data as native Python data
28967types for further processing. It is primarily intended for batch jobs and
28968one-off scripts.")
28969 (license license:expat)))
28970
28971(define-public python-cached-property
28972 (package
28973 (name "python-cached-property")
28974 (version "2.0.1")
28975 (source
28976 (origin
28977 (method url-fetch)
28978 (uri (pypi-uri "cached_property" version))
28979 (sha256
28980 (base32 "0hbni4q15n8wspdj48j6xvg977pgm1r5wwjq3x7hxvp30mqn2ka8"))))
28981 (build-system pyproject-build-system)
28982 (native-inputs
28983 (list python-freezegun
28984 python-pytest
28985 python-setuptools
28986 python-wheel))
28987 (home-page "https://github.com/pydanny/cached-property")
28988 (synopsis "Decorator for caching properties in classes")
28989 (description
28990 "This package provides a decorator which makes caching
28991time-or-computationally-expensive properties quick and easy and works in
28992Python 2 or 3.")
28993 (license license:bsd-3)))
28994
28995(define-public python-folium
28996 (package
28997 (name "python-folium")
28998 (version "0.19.4")
28999 (source
29000 (origin
29001 ;; PyPI has a ".whl" file but not a proper source release.
29002 ;; Thus, fetch code from Git.
29003 (method git-fetch)
29004 (uri (git-reference
29005 (url "https://github.com/python-visualization/folium")
29006 (commit (string-append "v" version))))
29007 (file-name (git-file-name name version))
29008 (sha256
29009 (base32 "1659hvvraax7npgsfi93l7vsd191ysvf5vj369f8h757blmwjd59"))))
29010 (build-system pyproject-build-system)
29011 (arguments
29012 (list #:test-flags
29013 ;; This file requires Selenium.
29014 #~(list "--ignore" "tests/selenium/test_selenium.py"
29015 "-k" (string-append
29016 ;; The tests below also require Selenium.
29017 "not test__repr_png_is_bytes"
29018 " and not test_valid_png"
29019 " and not test_valid_png_size"
29020 " and not test_geojson"
29021 " and not test_heat_map_with_weights"
29022 ;; This performs an online request.
29023 " and not test_json_request"
29024 ;; Requires geodatasets package.
29025 " and not test_timedynamic_geo_json"
29026 ;; AssertionError.
29027 " and not test_minimap"))
29028 #:phases
29029 #~(modify-phases %standard-phases
29030 (add-before 'build 'pretend-version
29031 ;; The version string is usually derived via setuptools-scm,
29032 ;; but without the git metadata available, the version string
29033 ;; is set to '0.0.0'.
29034 (lambda _
29035 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION"
29036 #$(package-version this-package)))))))
29037 (propagated-inputs
29038 (list python-branca
29039 python-jinja2
29040 python-numpy
29041 python-requests
29042 python-xyzservices))
29043 (native-inputs
29044 (list python-geopandas
29045 python-nbconvert
29046 python-pandas
29047 python-pillow
29048 python-pytest
29049 python-selenium
29050 python-setuptools
29051 python-setuptools-scm
29052 python-wheel))
29053 (home-page "https://github.com/python-visualization/folium")
29054 (synopsis "Make beautiful maps with Leaflet.js & Python")
29055 (description "@code{folium} makes it easy to visualize data that’s been
29056manipulated in Python on an interactive leaflet map. It enables both the
29057binding of data to a map for @code{choropleth} visualizations as well as
29058passing rich vector/raster/HTML visualizations as markers on the map.
29059
29060The library has a number of built-in tilesets from OpenStreetMap, Mapbox, and
29061Stamen, and supports custom tilesets with Mapbox or Cloudmade API keys. It
29062supports Image, Video, GeoJSON and TopoJSON overlays.")
29063 (license license:expat)))
29064
29065(define-public python-mercantile
29066 (package
29067 (name "python-mercantile")
29068 (version "1.2.1")
29069 (source
29070 (origin
29071 (method git-fetch)
29072 (uri (git-reference
29073 (url "https://github.com/mapbox/mercantile")
29074 (commit version)))
29075 (file-name (git-file-name name version))
29076 (sha256
29077 (base32 "1b7kglzkjz1gmgjgk2y3n4gg70b8zdfg6kyqx2g7a3z7clxxf80f"))))
29078 (build-system pyproject-build-system)
29079 (propagated-inputs (list python-click))
29080 (native-inputs (list python-check-manifest python-hypothesis python-pytest
29081 python-setuptools))
29082 (home-page "https://github.com/mapbox/mercantile")
29083 (synopsis "Web mercator XYZ tile utilities")
29084 (description
29085 "The mercantile module provides @code{ul(xtile, ytile, zoom)} and
29086@code{bounds(xtile, ytile, zoom)} functions that respectively return the upper
29087left corner and bounding longitudes and latitudes for XYZ tiles, a
29088@code{xy(lng, lat)} function that returns spherical mercator x and y
29089coordinates, a @code{tile(lng, lat, zoom)} function that returns the tile
29090containing a given point, and quadkey conversion functions
29091@code{quadkey(xtile, ytile, zoom)} and @code{quadkey_to_tile(quadkey)} for
29092translating between quadkey and tile coordinates.")
29093 (license license:bsd-3)))
29094
29095(define-public jube
29096 (package
29097 ;; This is a command-line tool, so no "python-" prefix.
29098 (name "jube")
29099 (version "2.6.1")
29100 (source
29101 (origin
29102 (method url-fetch)
29103 (uri (string-append
29104 "http://apps.fz-juelich.de/jsc/jube/jube2/download.php?version="
29105 version))
29106 (sha256
29107 (base32 "0r5d2gdqa0f4c468q3k25ycw1k2g76gg8fyiln4ni98fvfsbx3il"))
29108 (file-name (string-append "jube-" version ".tar.gz"))))
29109 (build-system pyproject-build-system)
29110 (arguments
29111 (list
29112 #:tests? #f)) ; No tests.
29113 (propagated-inputs (list python-pyyaml))
29114 (native-inputs (list python-setuptools))
29115 (home-page "https://apps.fz-juelich.de/jsc/jube/jube2/docu/index.html")
29116 (synopsis "Benchmarking environment")
29117 (description
29118 "JUBE helps perform and analyze benchmarks in a systematic way. For each
29119benchmarked application, benchmark data is stored in a format that allows JUBE
29120to deduct the desired information. This data can be parsed by automatic pre-
29121and post-processing scripts that draw information and store it more densely
29122for manual interpretation.")
29123 (license license:gpl3+)))
29124
29125(define-public python-pyroutelib3
29126 (package
29127 (name "python-pyroutelib3")
29128 (version "2.0.0")
29129 (source
29130 (origin
29131 (method git-fetch)
29132 (uri (git-reference
29133 (url "https://github.com/MKuranowski/pyroutelib3")
29134 (commit (string-append "v" version))))
29135 (file-name (git-file-name name version))
29136 (sha256
29137 (base32 "18a86fggs9pjib97x47acqgccrsra1h7dkz21r94vsyrdindchns"))))
29138 (build-system pyproject-build-system)
29139 (propagated-inputs (list python-dateutil python-protobuf-5))
29140 (native-inputs (list python-filelock python-flit-core python-pytest))
29141 (home-page "https://github.com/MKuranowski/pyroutelib3")
29142 (synopsis "Library for simple routing on OSM data")
29143 (description "Library for simple routing on OSM data")
29144 (license license:gpl3+)))
29145
29146(define-public python-bibtexparser
29147 (package
29148 (name "python-bibtexparser")
29149 (version "2.0.0b8")
29150 (source
29151 (origin
29152 (method git-fetch)
29153 (uri (git-reference
29154 (url "https://github.com/sciunto-org/python-bibtexparser")
29155 (commit (string-append "v" version))))
29156 (file-name (git-file-name name version))
29157 (sha256
29158 (base32 "065b6267ygphacfc9aawckv0yz9x3pzd4ivdbsr8cla3zs3lqzg7"))))
29159 (build-system pyproject-build-system)
29160 (propagated-inputs (list python-pyparsing))
29161 (native-inputs
29162 (list python-pylatexenc python-pytest python-setuptools))
29163 (home-page "https://github.com/sciunto-org/python-bibtexparser")
29164 (synopsis "Python library to parse BibTeX files")
29165 (description "BibtexParser is a Python library to parse BibTeX files.")
29166 (license (list license:bsd-3 license:lgpl3))))
29167
29168(define-public python-bibtexparser-for-cobib
29169 (hidden-package
29170 (package
29171 (inherit python-bibtexparser)
29172 (name "python-bibtexparser")
29173 (version "1.4.0")
29174 (source
29175 (origin
29176 (method git-fetch)
29177 (uri (git-reference
29178 (url "https://github.com/sciunto-org/python-bibtexparser")
29179 (commit (string-append "v" version))))
29180 (file-name (git-file-name name version))
29181 (sha256
29182 (base32 "0zrgfgmh37m9frq528vy66p2fhlxzrxyhj0inc6qwg0m717w9zbl")))))))
29183
29184(define-public python-distro
29185 (package
29186 (name "python-distro")
29187 (version "1.9.0")
29188 (source
29189 (origin
29190 (method url-fetch)
29191 (uri (pypi-uri "distro" version))
29192 (sha256
29193 (base32 "1vfvkgfvrjpxpb48pf8rs2l5wfxij0plmffnw5p123wlv1ppr9rg"))))
29194 (build-system pyproject-build-system)
29195 (arguments
29196 (list
29197 #:test-flags
29198 #~(list "-k" (string-join
29199 ;; We are not on Ubunto distro:
29200 ;; AssertionError: assert '' == 'ubuntu'.
29201 (list "not test_ubuntu14normal_lsb_release"
29202 "test_trailingblanks_lsb_release"
29203 "test_ubuntu14nomodules_lsb_release")
29204 " and not "))))
29205 (native-inputs
29206 (list python-pytest
29207 python-setuptools))
29208 (home-page "https://github.com/python-distro/distro")
29209 (synopsis "OS platform information API")
29210 (description
29211 "@code{distro} provides information about the OS distribution it runs on,
29212such as a reliable machine-readable ID, or version information.
29213
29214It is the recommended replacement for Python's original
29215`platform.linux_distribution` function (which will be removed in Python 3.8).
29216@code{distro} also provides a command-line interface to output the platform
29217information in various formats.")
29218 (license license:asl2.0)))
29219
29220(define-public python-cairosvg
29221 (package
29222 (name "python-cairosvg")
29223 (version "2.8.2")
29224 (source
29225 (origin
29226 (method url-fetch)
29227 (uri (pypi-uri "cairosvg" version))
29228 (sha256
29229 (base32 "17zgbgw24jw70rfka9wa3ff5wymk9cmaqk4a6697mchpcglg9jq7"))))
29230 (build-system pyproject-build-system)
29231 (arguments
29232 (list #:test-flags #~(list "cairosvg/test_api.py")))
29233 (native-inputs
29234 (list python-pytest
29235 python-setuptools))
29236 (propagated-inputs
29237 (list python-cairocffi
29238 python-cssselect2
29239 python-defusedxml
29240 python-pillow
29241 python-tinycss2))
29242 (home-page "https://cairosvg.org/")
29243 (synopsis "SVG to PDF/PS/PNG converter based on Cairo")
29244 (description "CairoSVG is a SVG converter based on Cairo. It can export
29245SVG files to PDF, PostScript and PNG files. The main part of CairoSVG is a
29246SVG parser, trying to follow the SVG 1.1 recommendation from the W3C. Once
29247parsed, the result is drawn to a Cairo surface that can be exported to
29248qvarious formats: PDF, PostScript, PNG and even SVG.")
29249 (license license:lgpl3+)))
29250
29251(define-public python-pyphen
29252 (package
29253 (name "python-pyphen")
29254 (version "0.17.2")
29255 (source
29256 (origin
29257 (method git-fetch)
29258 (uri (git-reference
29259 (url "https://github.com/Kozea/Pyphen")
29260 (commit version)))
29261 (file-name (git-file-name name version))
29262 (sha256
29263 (base32 "1fqxc50vqj884b7f6d8qfvnvw34477lhsdznvpxsljjg9j2v4ipv"))))
29264 (build-system pyproject-build-system)
29265 (native-inputs (list python-flit-core python-pytest))
29266 ;; TODO: Use the Guix system hyphenation packages hyphen-* rather than the
29267 ;; embedded set provided by upstream - like Debian does.
29268 (home-page "https://github.com/Kozea/Pyphen")
29269 (synopsis "Pure Python module to hyphenate text")
29270 (description "Pyphen is a pure Python module to hyphenate text using
29271existing Hunspell hyphenation dictionaries.")
29272 (license (list license:gpl2 license:lgpl2.1 license:mpl1.1))))
29273
29274(define-public python-intelhex
29275 (package
29276 (name "python-intelhex")
29277 (version "2.3.0")
29278 (source
29279 (origin
29280 (method git-fetch)
29281 (uri (git-reference
29282 (url "https://github.com/python-intelhex/intelhex")
29283 (commit version)))
29284 (file-name (git-file-name name version))
29285 (sha256
29286 (base32 "13p7x4ygfgqn27q3c8lam7a0z09764iymgs7lcvjvxgq52nqwf9c"))))
29287 (build-system pyproject-build-system)
29288 (arguments (list #:test-backend #~'unittest))
29289 (native-inputs (list python-setuptools))
29290 (home-page "https://github.com/python-intelhex/intelhex")
29291 (synopsis "Python library for Intel HEX files manipulations")
29292 (description
29293 "The Intel HEX file format is widely used in microprocessors and
29294microcontrollers area (embedded systems etc.) as the de facto standard for
29295representation of code to be programmed into microelectronic devices. This
29296package provides an intelhex Python library to read, write, create from
29297scratch and manipulate data from Intel HEX file format. It also includes
29298several convenience Python scripts, including \"classic\" hex2bin and bin2hex
29299converters and more, those based on the library itself.")
29300 (license license:bsd-3)))
29301
29302(define-public python-interlap
29303 (package
29304 (name "python-interlap")
29305 (version "0.2.7")
29306 (source
29307 (origin
29308 (method git-fetch)
29309 (uri (git-reference
29310 (url "https://github.com/brentp/interlap")
29311 (commit (string-append "v" version))))
29312 (file-name (git-file-name name version))
29313 (sha256
29314 (base32 "0kmw72ilhsfx7piikl92b1s0rnax49qc7idjxsbwhvpklyjiylfm"))))
29315 (build-system pyproject-build-system)
29316 (arguments
29317 (list
29318 #:test-backend #~'custom
29319 #:test-flags #~(list "interlap.py")))
29320 (native-inputs (list python-setuptools))
29321 (home-page "https://brentp.github.io/interlap")
29322 (synopsis "Fast, simple interval overlap testing")
29323 (description
29324 "InterLap does fast interval overlap testing with a simple Python data
29325structure.")
29326 (license license:expat)))
29327
29328(define-public python-pykwalify
29329 (package
29330 (name "python-pykwalify")
29331 (version "1.8.0")
29332 (source
29333 (origin
29334 (method git-fetch)
29335 (uri (git-reference
29336 (url "https://github.com/grokzen/pykwalify")
29337 (commit version)))
29338 (file-name (git-file-name name version))
29339 (sha256
29340 (base32 "1x46ray74hzqmsicq2qikxhdihyyz9himjmc5gvlvd8vzqr1gi8p"))))
29341 (build-system pyproject-build-system)
29342 (arguments
29343 (list
29344 #:test-flags
29345 ;; XXX: yaml safe_dump() has been removed.
29346 #~(list "--ignore=tests/test_unicode.py"
29347 "--deselect=tests/test_core.py::TestCore::test_core_files")))
29348 (native-inputs
29349 (list python-pytest python-setuptools python-testfixtures))
29350 (propagated-inputs
29351 (list python-dateutil python-docopt python-pyyaml python-ruamel.yaml))
29352 (home-page "https://github.com/grokzen/pykwalify")
29353 (synopsis "Python lib/cli for JSON/YAML schema validation")
29354 (description
29355 "This package provides a parser, schema validator, and data binding tool
29356for YAML and JSON.")
29357 (license license:expat)))
29358
29359(define-public python-pykakasi
29360 (package
29361 (name "python-pykakasi")
29362 (version "2.3.0")
29363 (source
29364 (origin
29365 (method url-fetch)
29366 (uri (pypi-uri "pykakasi" version))
29367 (sha256
29368 (base32 "18dhcw7myw5idajnfynjbvqxmyf9m0cygfwsavbbi7zmcf72l1gs"))))
29369 (build-system pyproject-build-system)
29370 (arguments (list #:test-flags ''("-k" "not test_aozora")))
29371 (propagated-inputs (list python-deprecated python-importlib-resources
29372 python-jaconv))
29373 (native-inputs (list python-coverage
29374 python-py-cpuinfo
29375 python-pytest
29376 python-pytest-benchmark
29377 python-setuptools
29378 python-setuptools-scm
29379 python-wheel))
29380 (home-page "https://codeberg.org/miurahr/pykakasi")
29381 (synopsis "Kana kanji simple inversion library")
29382 (description
29383 "pykakasi is a Python Natural Language Processing @acronym{NLP, Natural
29384Language Processing} library to transliterate hiragana, katakana and
29385kanji (Japanese text) into rōmaji (Latin/Roman alphabet). It can handle
29386characters in NFC form.
29387
29388Its algorithms are based on the kakasi library, which is written in C.")
29389 (license license:gpl3+)))
29390
29391(define-public python-dbus-python
29392 (package
29393 (name "python-dbus-python")
29394 (version "1.3.2")
29395 (source
29396 (origin
29397 (method url-fetch)
29398 (uri (pypi-uri "dbus-python" version))
29399 (sha256
29400 (base32 "1y28h90v2ib8zqhs3r2yr7ycg8ccwvw3gqkvadlm12v1129q2rxd"))))
29401 (build-system pyproject-build-system)
29402 (arguments
29403 (list
29404 #:tests? #f ;XXX: Tests require setup
29405 #:phases
29406 #~(modify-phases %standard-phases
29407 (add-after 'unpack 'patch-requirements
29408 (lambda _
29409 (substitute* (list "pyproject.toml" "setup.py")
29410 (("'(ninja|patchelf)',?") ""))
29411 (substitute* "setup.cfg"
29412 (("(ninja|patchelf)") "")))))))
29413 (native-inputs
29414 (list pkg-config
29415 meson
29416 ninja/pinned
29417 patchelf
29418 python-meson-python
29419 python-setuptools
29420 python-tappy))
29421 (inputs
29422 (list dbus glib))
29423 (propagated-inputs
29424 (list python-pygobject))
29425 (home-page "https://dbus.freedesktop.org/doc/dbus-python/")
29426 (synopsis "Python bindings for libdbus")
29427 (description
29428 "This package provides Python bindings to libdbus, the reference
29429implementation of the D-Bus protocol.")
29430 (license license:expat)))
29431
29432(define python-dbusmock-check-phase
29433 #~(lambda* (#:key tests? #:allow-other-keys)
29434 (when tests?
29435 (match (primitive-fork)
29436 (0 ;child process
29437 (execlp "pytest" "pytest" "-vv"))
29438 (pytest-pid
29439 (let loop ()
29440 ;; Reap child processes; otherwise, python-dbusmock
29441 ;; would waste time polling for the dbus processes
29442 ;; it spawns to be reaped, in vain.
29443 (match (waitpid WAIT_ANY)
29444 ((pid . status)
29445 (if (= pid pytest-pid)
29446 (unless (zero? status)
29447 (error "`pytest' exited with status"
29448 status))
29449 (loop))))))))))
29450
29451(define-public python-dbusmock
29452 (package
29453 (name "python-dbusmock")
29454 (version "0.37.2")
29455 (source
29456 (origin
29457 (method git-fetch)
29458 (uri (git-reference
29459 (url "https://github.com/martinpitt/python-dbusmock")
29460 (commit version)))
29461 (file-name (git-file-name name version))
29462 (sha256
29463 (base32 "1a70gi3qgjblg9z9id9z0fy3vlhb1cqbmmny14bqhv79qqskspj3"))))
29464 (build-system pyproject-build-system)
29465 (arguments
29466 (list
29467 #:modules `((guix build pyproject-build-system)
29468 (guix build utils)
29469 (ice-9 match))
29470 #:phases
29471 #~(modify-phases %standard-phases
29472 (add-after 'unpack 'patch-paths
29473 (lambda* (#:key inputs #:allow-other-keys)
29474 (substitute* "tests/test_api.py"
29475 (("/usr/bin/python3")
29476 (which "python3")))
29477 (substitute* "dbusmock/testcase.py"
29478 (("\"dbus-daemon\"")
29479 (object->string
29480 (search-input-file inputs "/bin/dbus-daemon"))))))
29481 (replace 'check #$python-dbusmock-check-phase))))
29482 (native-inputs (list python-pytest python-setuptools upower which))
29483 (inputs (list dbus))
29484 (propagated-inputs (list python-dbus-python python-pygobject))
29485 (home-page "https://github.com/martinpitt/python-dbusmock")
29486 (synopsis "Python library for mock D-Bus objects")
29487 (description
29488 "python-dbusmock allows for the easy creation of mock objects on D-Bus.
29489This is useful for writing tests for software which talks to D-Bus services
29490such as upower, systemd, logind, gnome-session or others, and it is hard (or
29491impossible without root privileges) to set the state of the real services to
29492what you expect in your tests.")
29493 (license license:lgpl3+)))
29494
29495(define-public python-dbusmock-minimal
29496 (package
29497 (inherit python-dbusmock)
29498 (name "python-dbusmock-minimal")
29499 (version "0.30.0")
29500 (source
29501 (origin
29502 (method url-fetch)
29503 (uri (pypi-uri "python-dbusmock" version))
29504 (sha256
29505 (base32
29506 "1hanz6x76jq66ypdirga5h15zjs67kwysl6rmsf0i22dbdqrxdfv"))))
29507 (build-system python-build-system)
29508 (arguments
29509 (list
29510 #:tests? #f
29511 #:modules `((guix build python-build-system)
29512 (guix build utils)
29513 (ice-9 match))
29514 #:phases
29515 #~(modify-phases %standard-phases
29516 (add-after 'unpack 'patch-paths
29517 (lambda* (#:key inputs #:allow-other-keys)
29518 (substitute* "tests/test_api.py"
29519 (("/usr/bin/python3")
29520 (which "python3")))
29521 (substitute* "tests/test_code.py"
29522 (("/bin/bash")
29523 (which "bash")))
29524 (substitute* "dbusmock/testcase.py"
29525 (("'dbus-daemon'")
29526 (object->string
29527 (search-input-file inputs "/bin/dbus-daemon"))))))
29528 (replace 'check #$python-dbusmock-check-phase))))
29529 (native-inputs (list which))
29530 (inputs
29531 (list dbus))
29532 (propagated-inputs
29533 (list python-dbus-python python-pygobject))
29534 (properties '((hidden? . #t)))))
29535
29536(define-public python-jsonplus
29537 (package
29538 (name "python-jsonplus")
29539 (home-page "https://github.com/randomir/jsonplus")
29540 (properties '((commit . "a4450ce73a4464fcee9b08d96be3e13152b0cb3b")
29541 (revision . "0")))
29542 (version (git-version "0.8.0"
29543 (assoc-ref properties 'revision)
29544 (assoc-ref properties 'commit)))
29545 (source
29546 (origin
29547 (method git-fetch)
29548 (uri (git-reference
29549 (url home-page)
29550 (commit (assoc-ref properties 'commit))))
29551 (file-name (git-file-name name version))
29552 (sha256
29553 (base32 "1n7rr7fgy2g972si6zhindia362w34d696xjdicx25f39n88jcvk"))))
29554 (build-system pyproject-build-system)
29555 (arguments
29556 (list
29557 ;; XXX: Tests require the additional package moneyed.
29558 #:tests? #f
29559 #:phases
29560 #~(modify-phases %standard-phases
29561 (add-after 'unpack 'chdir
29562 (lambda _
29563 (chdir "python"))))))
29564 (native-inputs (list python-setuptools))
29565 (propagated-inputs
29566 (list python-dateutil python-simplejson python-sortedcontainers))
29567 (synopsis "Serialize Python types to/from JSON")
29568 (description
29569 "This package provides functionality to serialize arbitrary data types
29570to and from JSON. Common data types are implemented and it is easy to
29571register custom encoders and decoders.")
29572 (license license:expat)))
29573
29574(define-public python-ioctl-opt
29575 (package
29576 (name "python-ioctl-opt")
29577 (version "1.3")
29578 (source
29579 (origin
29580 (method url-fetch)
29581 (uri (pypi-uri "ioctl-opt" version))
29582 (sha256
29583 (base32 "1ygjgkzn0i61zk2yr27aqnma08c8xpblhdixli9f20if1nlgkm2y"))))
29584 (build-system pyproject-build-system)
29585 (arguments
29586 (list #:tests? #f)) ;no tests
29587 (native-inputs (list python-setuptools))
29588 (home-page "http://github.com/vpelletier/python-ioctl-opt")
29589 (synopsis "Functions to compute fnctl.ioctl's opt argument")
29590 (description
29591 "This package provides functions to compute fnctl.ioctl's opt argument.")
29592 (license license:gpl2+)))
29593
29594(define-public python-anyio
29595 (package
29596 (name "python-anyio")
29597 (version "4.6.2")
29598 (source
29599 (origin
29600 (method url-fetch)
29601 (uri (pypi-uri "anyio" version))
29602 (sha256
29603 (base32
29604 "0ir3n40gdcm1kd7qyn4c46pgdyyp36h49a0pifyv6lh7vnrpnapp"))))
29605 (build-system pyproject-build-system)
29606 (arguments
29607 `(#:phases
29608 (modify-phases %standard-phases
29609 (replace 'check
29610 (lambda* (#:key tests? #:allow-other-keys)
29611 (when tests?
29612 (invoke
29613 "pytest" "-vv" "-p" "no:asyncio"
29614 "-m" "not network"
29615 "-k"
29616 (string-append
29617 "not test_is_block_device"
29618
29619 ,@(cond
29620 ((or (target-aarch64?)
29621 (target-riscv64?))
29622 '(" and not test_keyboardinterrupt_during_test"))
29623 (#t '()))
29624
29625 ;; These fail because of network (or specifically IPv6
29626 ;; network) access (see:
29627 ;; https://github.com/agronholm/anyio/issues/417).
29628 " and not test_accept"
29629 " and not test_accept_after_close"
29630 " and not test_close_during_receive"
29631 " and not test_close_from_other_task"
29632 " and not test_concurrent_receive"
29633 " and not test_concurrent_send"
29634 " and not test_connect_tcp_with_tls"
29635 " and not test_connect_tcp_with_tls_cert_check_fail"
29636 " and not test_connection_refused"
29637 " and not test_extra_attributes"
29638 " and not test_getaddrinfo"
29639 " and not test_getnameinfo"
29640 " and not test_happy_eyeballs"
29641 " and not test_iterate"
29642 " and not test_receive_after_close"
29643 " and not test_receive_timeout"
29644 " and not test_reuse_port"
29645 " and not test_run_process"
29646 " and not test_send_after_close"
29647 " and not test_send_after_eof"
29648 " and not test_send_after_peer_closed"
29649 " and not test_send_eof"
29650 " and not test_send_large_buffer"
29651 " and not test_send_receive"
29652 " and not test_socket_options"
29653 " and not test_unretrieved_future_exception_server_crash"))))))))
29654 (propagated-inputs
29655 (list python-idna
29656 python-sniffio))
29657 (native-inputs
29658 (list python-psutil
29659 python-pytest
29660 python-pytest-mock
29661 python-setuptools
29662 python-setuptools-scm
29663 python-trio
29664 python-trustme
29665 python-uvloop))
29666 (home-page "https://github.com/agronholm/anyio")
29667 (synopsis "Compatibility layer for multiple asynchronous event loops")
29668 (description
29669 "AnyIO is an asynchronous networking and concurrency library that works
29670on top of either asyncio or trio. It implements trio-like structured
29671concurrency on top of asyncio, and works in harmony with the native SC of trio
29672itself.")
29673 (license license:expat)))
29674
29675(define-public python-argh
29676 (package
29677 (name "python-argh")
29678 (version "0.31.3")
29679 (source
29680 (origin
29681 (method url-fetch)
29682 (uri (pypi-uri "argh" version))
29683 (sha256
29684 (base32 "1ycjb2f92iskvp27vq2a8vdbpmsij61apvmkn7k5xjhlpvc2607k"))))
29685 (build-system pyproject-build-system)
29686 (native-inputs (list python-flit-core python-pytest))
29687 (home-page "https://github.com/neithere/argh/")
29688 (synopsis "Argparse wrapper with natural syntax")
29689 (description
29690 "Argh is a small library that provides several layers of abstraction
29691on top of @code{python-argparse}. The layers can be mixed. It is always
29692possible to declare a command with the highest possible (and least flexible)
29693layer and then tune the behaviour with any of the lower layers including the
29694native API of @code{python-argparse}.")
29695 (license license:lgpl3+)))
29696
29697(define-public python-pox
29698 (package
29699 (name "python-pox")
29700 (version "0.3.6")
29701 (source
29702 (origin
29703 (method url-fetch)
29704 (uri (pypi-uri "pox" version))
29705 (sha256
29706 (base32
29707 "01gnsgz6wfmpmb57qr4cgpkampiy6l7c1kxa0hlacn81c0wyvvl4"))))
29708 (build-system pyproject-build-system)
29709 (arguments
29710 (list
29711 #:phases
29712 #~(modify-phases %standard-phases
29713 (replace 'check
29714 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
29715 (when tests?
29716 (mkdir-p "/tmp/guix")
29717 (setenv "SHELL" "bash")
29718 (setenv "USERNAME" "guix")
29719 (setenv "HOME" "/tmp/guix") ; must end on USERNAME...
29720 (invoke "python" "./pox/tests/__main__.py")))))))
29721 (native-inputs
29722 (list python-setuptools
29723 which)) ;pox/tests/test_shutils.py
29724 (home-page "https://pypi.org/project/pox/")
29725 (synopsis "Python utilities for file system exploration and automated builds")
29726 (description
29727 "Pox provides a collection of utilities for navigating and manipulating
29728file systems. This module is designed to facilitate some of the low-level
29729operating system interactions that are useful when exploring a file system on a
29730remote host. Pox provides Python equivalents of several shell commands such
29731as @command{which} and @command{find}. These commands allow automated
29732discovery of what has been installed on an operating system, and where the
29733essential tools are located.")
29734 (license license:bsd-3)))
29735
29736(define-public python-flit
29737 (package
29738 (name "python-flit")
29739 (version "3.12.0") ;same as python-flit-core
29740 (source
29741 (origin
29742 (method url-fetch)
29743 (uri (pypi-uri "flit" version))
29744 (sha256
29745 (base32 "0h1pxi2hgr95321bgl45l86693zl14l3shj0idsyg4k9v56z700w"))))
29746 (build-system pyproject-build-system)
29747 (arguments
29748 (list
29749 #:test-flags
29750 ;; These tests fail when FLIT_NO_NETWORK is set
29751 '(list "-k" "not test_invalid_classifier \
29752and not test_install_requires \
29753and not test_install_requires_extra \
29754and not test_validate_classifiers_private")
29755 #:phases
29756 #~(modify-phases %standard-phases
29757 (add-before 'check 'pre-check
29758 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
29759 (when tests?
29760 (setenv "HOME" "/tmp")
29761 (setenv "FLIT_NO_NETWORK" "1")))))))
29762 (propagated-inputs
29763 (list python-tomli-w
29764 python-flit-core
29765 python-docutils
29766 python-requests))
29767 (native-inputs
29768 (list python-responses
29769 python-pytest
29770 python-testpath))
29771 (home-page "https://flit.readthedocs.io/")
29772 (synopsis "Simple packaging tool for simple packages")
29773 (description "Flit is a simple way to put Python packages and modules on
29774PyPI. Flit packages a single importable module or package at a time, using
29775the import name as the name on PyPI. All subpackages and data files within a
29776package are included automatically.")
29777 (license license:bsd-3)))
29778
29779(define-public python-fastentrypoints
29780 (package
29781 (name "python-fastentrypoints")
29782 (home-page "https://github.com/ninjaaron/fast-entry_points")
29783 (properties '((commit . "a3a26f320c7ae2191fde71b79d4f4bf325d162f3")
29784 (revision . "0")))
29785 (version (git-version "0.12"
29786 (assoc-ref properties 'revision)
29787 (assoc-ref properties 'commit)))
29788 (source
29789 (origin
29790 (method git-fetch)
29791 (uri (git-reference
29792 (url home-page)
29793 (commit (assoc-ref properties 'commit))))
29794 (file-name (git-file-name name version))
29795 (sha256
29796 (base32 "0d4xx9zz2xrdxgap8lbrc1mvslvdvddxk3s27zqv918iykkm70d0"))))
29797 (build-system pyproject-build-system)
29798 (arguments
29799 (list
29800 ;; XXX: Testing is non-standard and hardly configurable.
29801 #:tests? #f
29802 #:test-backend #~'custom
29803 #:test-flags #~(list "test/runtest.py")))
29804 (native-inputs (list python-setuptools))
29805 (synopsis "Makes entry_points specified in setup.py load more quickly")
29806 (description
29807 "Using entry_points in your setup.py makes scripts that start really
29808slowly because it imports pkg_resources. This package allows such setup
29809scripts to load entry points more quickly.")
29810 (license license:bsd-3)))
29811
29812(define-public python-funcparserlib
29813 (package
29814 (name "python-funcparserlib")
29815 (version "1.0.1")
29816 (source
29817 (origin
29818 ;; Source tarball on PyPi lacks tests.
29819 (method git-fetch)
29820 (uri (git-reference
29821 (url "https://github.com/vlasovskikh/funcparserlib")
29822 (commit version)))
29823 (file-name (git-file-name name version))
29824 (sha256
29825 (base32 "0dw3i4fyf3j9h1l7xfgs99fc2w2axk6xqk0sdag43k444ss4hkrc"))))
29826 (build-system pyproject-build-system)
29827 (arguments
29828 '(#:phases
29829 (modify-phases %standard-phases
29830 (replace 'check
29831 (lambda* (#:key tests? #:allow-other-keys)
29832 (when tests?
29833 (invoke "python" "-m" "unittest" "discover" "-v")))))))
29834 ;; ModuleNotFoundError: No module named 'poetry'
29835 (native-inputs (list python-poetry-core python-six))
29836 (home-page "https://github.com/vlasovskikh/funcparserlib")
29837 (synopsis
29838 "Recursive descent parsing library based on functional combinators")
29839 (description
29840 "This package is a recursive descent parsing library for Python based on
29841functional combinators. Parser combinators are just higher-order functions
29842that take parsers as their arguments and return them as result values.")
29843 (license license:expat)))
29844
29845(define-public python-cson
29846 (package
29847 (name "python-cson")
29848 (version "0.8")
29849 (source
29850 (origin
29851 (method git-fetch)
29852 (uri (git-reference
29853 (url "https://github.com/avakar/pycson")
29854 (commit version)))
29855 (file-name (git-file-name name version))
29856 (sha256
29857 (base32 "0d2zbmak0hzsl1w71dgc8x4q4vdfbpk46vwyi9vvvqv7gdqj59fn"))))
29858 (build-system pyproject-build-system)
29859 (native-inputs (list python-pytest python-setuptools python-wheel))
29860 (propagated-inputs (list python-speg))
29861 (home-page "https://github.com/avakar/pycson")
29862 (synopsis "Parser for Coffeescript Object Notation (CSON)")
29863 (description
29864 "This package is a parser for Coffeescript Object Notation (CSON).")
29865 (license license:expat)))
29866
29867(define-public python-aionotify
29868 (package
29869 (name "python-aionotify")
29870 (version "0.3.1")
29871 (source
29872 (origin
29873 ;; Source tarball on PyPi lacks tests
29874 (method git-fetch)
29875 (uri (git-reference
29876 (url "https://github.com/rbarrois/aionotify")
29877 (commit version)))
29878 (file-name (git-file-name name version))
29879 (sha256
29880 (base32 "1p08g0h4bjlra25cwysag7gifsrm35d5vkjfv845w1rig8b57q9s"))))
29881 (build-system pyproject-build-system)
29882 (native-inputs
29883 (list python-pytest
29884 python-setuptools
29885 python-wheel))
29886 (home-page "https://github.com/rbarrois/aionotify")
29887 (synopsis "inotify library for Python")
29888 (description
29889 "@code{python-aionotify} is a simple, asyncio-based inotify library.")
29890 (license license:bsd-3)))
29891
29892(define-public python-forbiddenfruit
29893 (package
29894 (name "python-forbiddenfruit")
29895 (version "0.1.4")
29896 (source
29897 (origin
29898 (method git-fetch)
29899 (uri (git-reference
29900 (url "https://github.com/clarete/forbiddenfruit")
29901 (commit version)))
29902 (file-name (git-file-name name version))
29903 (sha256
29904 (base32 "16chhrxbbmg6lfbzm532fq0v00z8qihcsj0kg2b5jlgnb6qijwn8"))))
29905 (build-system pyproject-build-system)
29906 (arguments
29907 (list
29908 #:phases
29909 #~(modify-phases %standard-phases
29910 (replace 'check
29911 (lambda* (#:key tests? #:allow-other-keys)
29912 (when tests?
29913 (invoke "make" "prepare" "SKIP_DEPS=1")
29914 (invoke "nosetests")))))))
29915 (native-inputs (list python-pynose python-setuptools))
29916 (home-page "https://github.com/clarete/forbiddenfruit")
29917 (synopsis "Patch python built-in objects")
29918 (description "This project allows Python code to extend built-in types.")
29919 (license (list license:gpl3+ license:expat))))
29920
29921(define-public python-k5test
29922 (package
29923 (name "python-k5test")
29924 (version "0.10.4")
29925 (source
29926 (origin
29927 (method url-fetch)
29928 (uri (pypi-uri "k5test" version))
29929 (sha256
29930 (base32 "0c7g9gk3vfgh1wbl4s1v15v283srsixkhgak7lxskxh2cqg4jlp1"))))
29931 (build-system pyproject-build-system)
29932 (arguments
29933 (list #:tests? #f)) ;no tests
29934 (native-inputs
29935 (list python-setuptools))
29936 (inputs
29937 (list mit-krb5))
29938 (home-page "https://github.com/pythongssapi/k5test")
29939 (synopsis "Library for setting up self-contained Kerberos 5 environments")
29940 (description
29941 "@code{k5test} is a library for setting up self-contained Kerberos 5
29942environments, and running Python unit tests inside those environments. It is
29943based on the file of the same name found alongside the MIT Kerberos 5 unit
29944tests.")
29945 (license license:isc)))
29946
29947(define-public python-gssapi
29948 (package
29949 (name "python-gssapi")
29950 (version "1.10.0")
29951 (source
29952 (origin
29953 (method url-fetch)
29954 (uri (pypi-uri "gssapi" version))
29955 (sha256
29956 (base32 "0qvpsx5kq746gixa7phxikkxmir3wy5dj94phg93mvhbq86mwjgi"))))
29957 (build-system pyproject-build-system)
29958 (arguments
29959 (list #:test-flags #~(list "--pyargs" "gssapi")))
29960 (native-inputs
29961 (list python-cython
29962 python-k5test
29963 python-parameterized
29964 python-pytest
29965 python-setuptools))
29966 (inputs
29967 (list mit-krb5))
29968 (propagated-inputs
29969 (list python-decorator))
29970 (home-page "https://github.com/pythongssapi/python-gssapi")
29971 (synopsis "Python GSSAPI Wrapper")
29972 (description
29973 "Python-GSSAPI provides both low-level and high level wrappers around the
29974GSSAPI C libraries. While it focuses on the Kerberos mechanism, it should
29975also be usable with other GSSAPI mechanisms.")
29976 (license license:isc)))
29977
29978(define-public python-check-manifest
29979 (package
29980 (name "python-check-manifest")
29981 (version "0.49")
29982 (source
29983 (origin
29984 (method url-fetch)
29985 (uri (pypi-uri "check-manifest" version))
29986 (sha256
29987 (base32
29988 "05plc1835zz1w1k7wpf2n6jir71ds1w7nz3535lj5ks2am2419k4"))))
29989 (build-system pyproject-build-system)
29990 (arguments
29991 '(;; This test requires setting up a venv which does not work
29992 ;; properly in the build environment.
29993 #:test-flags '("-k" "not test_build_sdist_pep517_isolated")
29994 #:phases
29995 (modify-phases %standard-phases
29996 ;; Tests use git submodule commands over the file transport, which
29997 ;; has been disabled in git, see CVE-2022-39253. Enable these
29998 ;; commands to allow checks to succeed.
29999 (add-before 'check 'allow-git-submodule-add
30000 (lambda _
30001 (setenv "HOME" "/tmp")
30002 (invoke "git" "config" "--global"
30003 "protocol.file.allow" "always"))))))
30004 (native-inputs
30005 (list git-minimal/pinned python-pytest))
30006 (propagated-inputs
30007 (list python-pypa-build python-setuptools))
30008 (home-page "https://github.com/mgedmin/check-manifest")
30009 (synopsis "Check MANIFEST.in in a Python source package for completeness")
30010 (description "Python package can include a MANIFEST.in file to help with
30011sending package files to the Python Package Index. This package checks that
30012file to ensure it completely and accurately describes your project.")
30013 (license license:expat)))
30014
30015(define-public python-android-stringslib
30016 (package
30017 (name "python-android-stringslib")
30018 (version "0.1.2")
30019 (source
30020 (origin
30021 (method git-fetch)
30022 (uri (git-reference
30023 (url "https://framagit.org/tyreunom/python-android-strings-lib")
30024 (commit (string-append "v" version))))
30025 (file-name (git-file-name name version))
30026 (sha256
30027 (base32
30028 "0gij55qzzq1h83kfpvhai1vf78kkhyvxa6l17m2nl24454lhfin4"))))
30029 (build-system pyproject-build-system)
30030 (arguments (list #:tests? #f)) ; No tests.
30031 (native-inputs (list python-setuptools))
30032 (home-page "https://framagit.org/tyreunom/python-android-strings-lib")
30033 (synopsis "Android strings.xml support")
30034 (description
30035 "Android Strings Lib provides support for android's strings.xml files.
30036These files are used to translate strings in android apps.")
30037 (license license:expat)))
30038
30039(define-public offlate
30040 (package
30041 (name "offlate")
30042 (version "0.6.1")
30043 (source
30044 (origin
30045 (method git-fetch)
30046 (uri (git-reference
30047 (url "https://framagit.org/tyreunom/offlate")
30048 (commit version)))
30049 (file-name (git-file-name name version))
30050 (sha256
30051 (base32 "1sx5cv8pamyw1m089b6x8ykaxdkx26jk9cblhbzlf0m3ckz52jik"))))
30052 (build-system pyproject-build-system)
30053 (arguments
30054 (list
30055 #:tests? #f ; No tests.
30056 #:phases
30057 #~(modify-phases %standard-phases
30058 (add-before 'build 'generate-fonts
30059 (lambda _
30060 (invoke "make" "fonts")))
30061 (add-before 'build 'generate-translations
30062 (lambda _
30063 (invoke "make" "update-langs"))))))
30064 (propagated-inputs
30065 (list python-android-stringslib
30066 python-dateutil
30067 python-gitlab
30068 python-lxml
30069 python-polib
30070 python-pycountry
30071 python-pyenchant
30072 python-pygit2
30073 python-pygithub
30074 python-pyqt
30075 python-requests
30076 python-ruamel.yaml
30077 python-translate-toolkit-for-offlate
30078 python-translation-finder
30079 python-watchdog))
30080 (native-inputs (list qttools-5 fontforge python-setuptools))
30081 (home-page "https://framagit.org/tyreunom/offlate")
30082 (synopsis "Offline translation interface for online translation tools")
30083 (description
30084 "Offlate offers a unified interface for different translation file
30085formats, as well as many different online translation platforms. You can use
30086it to get work from online platforms, specialized such as the Translation
30087Project, or not such a gitlab instance when your upstream doesn't use any
30088dedicated platform. The tool proposes a unified interface for any format and
30089an upload option to send your work back to the platform.")
30090 (license license:gpl3+)))
30091
30092(define-public python-pypng
30093 (package
30094 (name "python-pypng")
30095 (version "0.20220715.0")
30096 (source
30097 (origin
30098 (method url-fetch)
30099 (uri (pypi-uri "pypng" version))
30100 (sha256
30101 (base32 "1hg24zja235bkbny82hx7sy7qlzfbabxph2lvqaq61vgm4xl773k"))))
30102 (build-system pyproject-build-system)
30103 (arguments
30104 (list
30105 #:phases
30106 '(modify-phases %standard-phases
30107 (add-before 'check 'pre-check
30108 (lambda _
30109 (setenv "PYTHONPATH"
30110 (string-append (getcwd) "/code:"
30111 (getenv "GUIX_PYTHONPATH"))))))))
30112 (native-inputs (list python-pytest python-setuptools python-wheel))
30113 (home-page "https://github.com/drj11/pypng")
30114 (synopsis "Pure Python PNG image encoder/decoder")
30115 (description
30116 "The PyPNG module implements support for PNG images. It reads and writes
30117PNG files with all allowable bit depths (1/2/4/8/16/24/32/48/64 bits per
30118pixel) and colour combinations: greyscale (1/2/4/8/16 bit); RGB, RGBA,
30119LA (greyscale with alpha) with 8/16 bits per channel; colour mapped
30120images (1/2/4/8 bit). Adam7 interlacing is supported for reading and writing.
30121A number of optional chunks can be specified (when writing) and
30122understood (when reading): tRNS, bKGD, gAMA.
30123
30124PyPNG is not a high level toolkit for image processing (like PIL) and does not
30125aim at being a replacement or competitor. Its strength lies in fine-grained
30126extensive support of PNG features. It can also read and write Netpbm PAM
30127files, with a focus on its use as an intermediate format for implementing
30128custom PNG processing.")
30129 (license license:expat)))
30130
30131(define-public python-fuzzywuzzy
30132 (package
30133 (name "python-fuzzywuzzy")
30134 (version "0.18.0")
30135 (source
30136 (origin
30137 (method git-fetch)
30138 (uri (git-reference
30139 (url "https://github.com/seatgeek/fuzzywuzzy")
30140 (commit version)))
30141 (file-name (git-file-name name version))
30142 (sha256
30143 (base32 "0zh8xd9k95waipsdz516rn51ya9xxlxbd7ivbka4gnkqm9ah79mc"))))
30144 (build-system pyproject-build-system)
30145 (arguments
30146 (list
30147 #:test-flags
30148 #~(list "--deselect=test_fuzzywuzzy_pytest.py::test_process_warning")))
30149 (native-inputs
30150 (list python-hypothesis
30151 python-pycodestyle
30152 python-pytest
30153 python-setuptools))
30154 (propagated-inputs (list python-levenshtein))
30155 (home-page "https://github.com/seatgeek/fuzzywuzzy")
30156 (synopsis "Fuzzy string matching in Python")
30157 (description
30158 "Approximate string matching using @emph{Levenshtein Distance} to
30159calculate the differences between sequences.")
30160 (license license:gpl2)))
30161
30162(define-public python-block-tracing
30163 (package
30164 (name "python-block-tracing")
30165 (version "1.0.1")
30166 (source
30167 (origin
30168 (method url-fetch)
30169 (uri (pypi-uri "block_tracing" version))
30170 (sha256
30171 (base32 "0s2y729qr5rs7n506qfh8cssk8m2bi6k2y5vbrh2z3raf2d01alz"))))
30172 (build-system pyproject-build-system)
30173 (arguments (list #:tests? #f)) ; No tests.
30174 (native-inputs (list python-setuptools))
30175 (home-page "https://github.com/rianhunter/block_tracing")
30176 (synopsis "Protect process memory")
30177 (description
30178 "@code{block_tracing} is a tiny Python library that can be used to
30179prevent debuggers and other applications from inspecting the memory within
30180your process.")
30181 (license license:expat)))
30182
30183(define-public python-json-e
30184 (package
30185 (name "python-json-e")
30186 (version "4.8.0")
30187 (source
30188 (origin
30189 (method git-fetch) ; no tests in PyPI release
30190 (uri (git-reference
30191 (url "https://github.com/json-e/json-e")
30192 (commit (string-append "v" version))))
30193 (file-name (git-file-name name version))
30194 (sha256
30195 (base32 "1zsx17jjhvan1ziq5aaqwids3b9kzx3j8czf9qznqqqvb1n133g8"))))
30196 (build-system pyproject-build-system)
30197 (arguments
30198 (list
30199 #:phases
30200 #~(modify-phases %standard-phases
30201 ;; Git repository provides implementations for JavaScript, Golang,
30202 ;; Python and Rust, pick "py".
30203 (add-before 'build 'chdir-to-py
30204 (lambda _
30205 (chdir "py"))))))
30206 (native-inputs
30207 (list python-freezegun
30208 python-pytest
30209 python-pyyaml
30210 python-setuptools
30211 python-wheel))
30212 (home-page "https://json-e.js.org")
30213 (synopsis "Data-structure parameterizer for embedding context in JSON objects")
30214 (description
30215 "This package provides a data-structure parameterization system written
30216for embedding context in JSON objects.")
30217 (license license:mpl2.0)))
30218
30219(define-public python-json-logger
30220 (package
30221 (name "python-json-logger")
30222 (version "2.0.7")
30223 (source
30224 (origin
30225 (method url-fetch)
30226 (uri (pypi-uri "python-json-logger" version))
30227 (sha256
30228 (base32
30229 "071f9d62ds1xdp88yzsfpf1pba2f78cp18193smcads2sc1frrr3"))))
30230 (build-system pyproject-build-system)
30231 (native-inputs (list python-pytest python-setuptools python-wheel))
30232 (home-page "https://github.com/madzak/python-json-logger")
30233 (synopsis "JSON log formatter in Python")
30234 (description "This library allows standard Python logging to output log data
30235as JSON objects. With JSON we can make our logs more readable by machines and
30236we can stop writing custom parsers for syslog-type records.")
30237 (license license:bsd-3)))
30238
30239(define-public python-daiquiri
30240 (package
30241 (name "python-daiquiri")
30242 (version "3.0.1")
30243 (source
30244 (origin
30245 (method git-fetch)
30246 (uri (git-reference
30247 (url "https://github.com/jd/daiquiri")
30248 (commit version)))
30249 (file-name (git-file-name name version))
30250 (sha256
30251 (base32 "0vfakncq87s6g67mqihjf32xarphd75c03ammvgavladz0pqhlg4"))))
30252 (build-system pyproject-build-system)
30253 (arguments
30254 (list
30255 #:phases
30256 #~(modify-phases %standard-phases
30257 (add-after 'unpack 'set-version
30258 (lambda _
30259 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
30260 (propagated-inputs (list python-json-logger))
30261 (native-inputs (list python-mock python-pytest python-setuptools
30262 python-setuptools-scm))
30263 (home-page "https://github.com/jd/daiquiri")
30264 (synopsis "Library to configure Python logging easily")
30265 (description
30266 "The daiquiri library provides an easy way to configure logging in
30267Python. It also provides some custom formatters and handlers.")
30268 (license license:asl2.0)))
30269
30270(define-public python-pifpaf
30271 (package
30272 (name "python-pifpaf")
30273 (version "3.4.0")
30274 (source
30275 (origin
30276 (method git-fetch)
30277 (uri (git-reference
30278 (url "https://github.com/jd/pifpaf")
30279 (commit version)))
30280 (file-name (git-file-name name version))
30281 (sha256
30282 (base32 "1mj41h5xrkx71d7g5di3ykd4bsbgr7x432zbp63majgjci86gmm9"))))
30283 (build-system pyproject-build-system)
30284 (arguments
30285 (list
30286 #:phases
30287 #~(modify-phases %standard-phases
30288 (add-after 'install 'install-drivers
30289 (lambda* (#:key inputs outputs #:allow-other-keys)
30290 (let ((site (site-packages inputs outputs)))
30291 (copy-recursively "pifpaf/drivers"
30292 (string-append site "/pifpaf/drivers/"))))))))
30293 (propagated-inputs
30294 (list python-click
30295 python-daiquiri
30296 python-fixtures
30297 python-jinja2
30298 python-pbr
30299 python-psutil
30300 python-xattr))
30301 (native-inputs
30302 (list python-mock
30303 python-stestr
30304 python-packaging
30305 python-requests
30306 python-testrepository
30307 python-testtools
30308 python-setuptools))
30309 (home-page "https://github.com/jd/pifpaf")
30310 (synopsis "Tools and fixtures to manage daemons for testing in Python")
30311 (description
30312 "Pifpaf is a suite of fixtures and a command-line tool that starts and
30313stops daemons for a quick throw-away usage. This is typically useful when
30314needing these daemons to run integration testing. It originally evolved from
30315its precursor @code{overtest}.")
30316 (license license:asl2.0)))
30317
30318(define-public python-pytest-check-links
30319 (package
30320 (name "python-pytest-check-links")
30321 (version "0.10.1")
30322 (source
30323 (origin
30324 (method url-fetch)
30325 (uri (pypi-uri "pytest_check_links" version))
30326 (sha256
30327 (base32 "0vbp9nis2iwjz1rjc623bm2908y34xd7zj4yfk43giz6r29dsn3k"))))
30328 (build-system pyproject-build-system)
30329 (arguments
30330 (list #:tests? #f)) ;XXX: 12 failed, 4 passed, 2 skipped
30331 (native-inputs
30332 (list python-hatchling))
30333 (propagated-inputs
30334 (list python-docutils
30335 python-html5lib
30336 python-nbconvert
30337 python-nbformat
30338 python-requests))
30339 (home-page "https://github.com/jupyterlab/pytest-check-links")
30340 (synopsis "Check links in files")
30341 (description "This package provides a pytest plugin that checks URLs for
30342HTML-containing files.")
30343 (license license:bsd-3)))
30344
30345(define-public python-json5
30346 (package
30347 (name "python-json5")
30348 (version "0.9.25")
30349 (source
30350 (origin
30351 ;; sample.json5 is missing from PyPi source tarball
30352 (method git-fetch)
30353 (uri (git-reference
30354 (url "https://github.com/dpranke/pyjson5")
30355 (commit (string-append "v" version))))
30356 (file-name (git-file-name name version))
30357 (sha256
30358 (base32 "1c96dqc8hn8c82q89rr7ix8d4da07ls3iac64f8jvjlgmhfik46q"))))
30359 (build-system pyproject-build-system)
30360 (native-inputs (list python-pytest python-setuptools python-wheel))
30361 (home-page "https://github.com/dpranke/pyjson5")
30362 (synopsis "Python implementation of the JSON5 data format")
30363 (description
30364 "JSON5 extends the JSON data interchange format to make it slightly more
30365usable as a configuration language. This Python package implements parsing and
30366dumping of JSON5 data structures.")
30367 (license license:asl2.0)))
30368
30369(define-public python-farama-notifications
30370 (package
30371 (name "python-farama-notifications")
30372 (version "0.0.4")
30373 (source
30374 ;; The version on pypi does not include tests.
30375 (origin
30376 (method git-fetch)
30377 (uri (git-reference
30378 (url "https://github.com/Farama-Foundation/Farama-Notifications")
30379 (commit version)))
30380 (file-name (git-file-name name version))
30381 (sha256
30382 (base32 "1k1x48xpvhankw7vbjp20ljwran247aphc2qncqrxivrkgzwjjji"))))
30383 (build-system pyproject-build-system)
30384 (arguments
30385 (list
30386 #:phases
30387 '(modify-phases %standard-phases
30388 (replace 'check
30389 (lambda* (#:key tests? #:allow-other-keys)
30390 (when tests?
30391 (invoke "python3" "tests/ci-test.py")))))))
30392 (native-inputs (list python-pytest python-setuptools python-wheel))
30393 (home-page "https://github.com/Farama-Foundation/Farama-Notifications")
30394 (synopsis "Notifications for all Farama Foundation maintained libraries")
30395 (description
30396 "This package allows for providing notifications for all Farama
30397Foundation maintained libraries.")
30398 (license license:expat)))
30399
30400(define-public python-frozendict
30401 (package
30402 (name "python-frozendict")
30403 (version "2.4.6")
30404 (source
30405 (origin
30406 (method url-fetch)
30407 (uri (pypi-uri "frozendict" version))
30408 (sha256
30409 (base32 "13ib358v66c9ykfz3plpxcs96ca6vkx8w84sjv26zlpvf1jd2z6z"))))
30410 (build-system pyproject-build-system)
30411 (native-inputs
30412 (list python-pytest
30413 python-setuptools
30414 python-wheel))
30415 (home-page "https://github.com/Marco-Sulla/python-frozendict")
30416 (synopsis "Simple immutable mapping for Python")
30417 (description
30418 "@dfn{frozendict} is an immutable wrapper around dictionaries that
30419implements the complete mapping interface. It can be used as a drop-in
30420replacement for dictionaries where immutability is desired.")
30421 (license license:expat)))
30422
30423(define-public python-py-cpuinfo
30424 (package
30425 (name "python-py-cpuinfo")
30426 (version "9.0.0")
30427 (source
30428 (origin
30429 (method git-fetch)
30430 (uri (git-reference
30431 (url "https://github.com/workhorsy/py-cpuinfo")
30432 (commit (string-append "v" version))))
30433 (file-name (git-file-name name version))
30434 (sha256
30435 (base32
30436 "112gzmwbj3ndxv20ii7i70irp58adwrlzjdvx5gmh39aw21b96s3"))))
30437 (build-system pyproject-build-system)
30438 (arguments
30439 (list #:test-backend #~'custom
30440 #:test-flags #~(list "test_suite.py")))
30441 (native-inputs
30442 (list python-setuptools))
30443 (home-page "https://github.com/workhorsy/py-cpuinfo")
30444 (synopsis "Get CPU info with Python")
30445 (description
30446 "This Python module returns the CPU info by using the best sources of
30447information for your operating system.")
30448 (license license:expat)))
30449
30450(define-public python-canonicaljson
30451 (package
30452 (name "python-canonicaljson")
30453 (version "2.0.0")
30454 (source
30455 (origin
30456 (method url-fetch)
30457 (uri (pypi-uri "canonicaljson" version))
30458 (sha256
30459 (base32 "0gqi5z8j3myfblrc96l0jykdsk863gad1lwvnnf5vp7sszqsxzg2"))))
30460 (build-system pyproject-build-system)
30461 (arguments
30462 (list #:test-backend #~'unittest))
30463 (native-inputs
30464 (list python-setuptools))
30465 (home-page "https://github.com/matrix-org/python-canonicaljson")
30466 (synopsis "Canonical JSON")
30467 (description
30468 "Deterministically encode JSON.
30469
30470@itemize
30471@item Encodes objects and arrays as RFC 7159 JSON.
30472@item Sorts object keys so that you get the same result each time.
30473@item Has no insignificant whitespace to make the output as small as possible.
30474@item Escapes only the characters that must be escaped, U+0000 to
30475 U+0019 / U+0022 / U+0056, to keep the output as small as possible.
30476@item Uses the shortest escape sequence for each escaped character.
30477@item Encodes the JSON as UTF-8.
30478@item Can encode frozendict immutable dictionaries.
30479@end itemize")
30480 (license license:asl2.0)))
30481
30482(define-public python-signedjson
30483 (package
30484 (name "python-signedjson")
30485 (version "1.1.4")
30486 (source
30487 (origin
30488 (method git-fetch)
30489 (uri (git-reference
30490 (url "https://github.com/matrix-org/python-signedjson")
30491 (commit (string-append "v" version))))
30492 (file-name (git-file-name name version))
30493 (sha256
30494 (base32 "1wkgbwr0hdvafbhbqjibca06rxqbp95gg6rfd3ba6rkgl4g85i5z"))))
30495 (build-system pyproject-build-system)
30496 (arguments
30497 (list
30498 #:phases
30499 #~(modify-phases %standard-phases
30500 (add-after 'unpack 'set-version
30501 (lambda _
30502 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
30503 (propagated-inputs
30504 (list python-canonicaljson
30505 python-importlib-metadata
30506 python-pynacl
30507 python-typing-extensions
30508 python-unpaddedbase64))
30509 (native-inputs
30510 (list python-pytest python-setuptools-scm python-setuptools))
30511 (home-page "https://github.com/matrix-org/python-signedjson")
30512 (synopsis "Sign JSON objects with ED25519 signatures")
30513 (description
30514 "Sign JSON objects with ED25519 signatures.
30515
30516@itemize
30517@item More than one entity can sign the same object.
30518@item Each entity can sign the object with more than one key making it easier to
30519rotate keys
30520@item ED25519 can be replaced with a different algorithm.
30521@item Unprotected data can be added to the object under the @dfn{\"unsigned\"}
30522key.
30523@end itemize")
30524 (license license:asl2.0)))
30525
30526(define-public python-daemonize
30527 (package
30528 (name "python-daemonize")
30529 (version "2.5.0")
30530 (source
30531 (origin
30532 (method git-fetch)
30533 (uri (git-reference
30534 (url "https://github.com/thesharp/daemonize")
30535 (commit (string-append "v" version))))
30536 (file-name (git-file-name name version))
30537 (sha256
30538 (base32 "0pz914x6dfq133nfv0y8q8fss4zr52ip8mq3ds50rx0ddlbb0k2x"))))
30539 (build-system pyproject-build-system)
30540 (arguments
30541 (list
30542 #:test-backend #~'custom
30543 #:test-flags #~(list "tests/test.py")
30544 #:phases
30545 #~(modify-phases %standard-phases
30546 (add-before 'check 'fix-tests
30547 (lambda _
30548 ;; XXX: nobody has group nogroup on Guix.
30549 (substitute* "tests/test.py"
30550 (("grp\\.getgrnam\\(\"nobody\"\\)\\.gr_gid")
30551 (number->string (passwd:gid (getpw "nobody"))))))))))
30552 (native-inputs (list coreutils-minimal procps python-setuptools))
30553 (home-page "https://github.com/thesharp/daemonize")
30554 (synopsis "Library for writing system daemons in Python")
30555 (description
30556 "Daemonize is a library for writing system daemons in Python.")
30557 (license license:expat)))
30558
30559(define-public python-pymacaroons
30560 (package
30561 (name "python-pymacaroons")
30562 (properties '((commit . "78c55c1d33a0b23ddc71140a9c999f957d79e9dd")
30563 (revision . "0")))
30564 (version (git-version "0.13.0"
30565 (assoc-ref properties 'revision)
30566 (assoc-ref properties 'commit)))
30567 (source
30568 (origin
30569 (method git-fetch)
30570 (uri (git-reference
30571 (url "https://github.com/ecordell/pymacaroons")
30572 (commit (assoc-ref properties 'commit))))
30573 (file-name (git-file-name name version))
30574 (sha256
30575 (base32 "0ybdxlx6crb7l850dzz50arqrm4d4dl5dvzlf8f7sdhdcn2lgr7m"))))
30576 (build-system pyproject-build-system)
30577 (arguments
30578 (list
30579 #:test-flags
30580 ;; XXX: Despite python-hypothesis, ModuleNotFoundError:
30581 ;; No module named 'hypothesis.specifiers'
30582 #~(list "--ignore=tests/property_tests/macaroon_property_tests.py")))
30583 (native-inputs
30584 (list python-hypothesis
30585 python-mock
30586 python-pytest
30587 python-setuptools))
30588 (propagated-inputs (list python-pynacl))
30589 (home-page "https://github.com/ecordell/pymacaroons")
30590 (synopsis "Python Macaroon Library")
30591 (description
30592 "Macaroons, like cookies, are a form of bearer credential. Unlike opaque
30593tokens, macaroons embed caveats that define specific authorization
30594requirements for the target service, the service that issued the root macaroon
30595and which is capable of verifying the integrity of macaroons it receives.
30596
30597Macaroons allow for delegation and attenuation of authorization. They are
30598simple and fast to verify, and decouple authorization policy from the
30599enforcement of that policy.")
30600 (license license:expat)))
30601
30602(define-public python-ldap3
30603 (package
30604 (name "python-ldap3")
30605 (version "2.9.1")
30606 (home-page "https://github.com/cannatag/ldap3")
30607 (source
30608 (origin
30609 (method git-fetch)
30610 (uri (git-reference (url home-page)
30611 (commit (string-append "v" version))))
30612 (file-name (git-file-name name version))
30613 (sha256
30614 (base32 "07nxbv41wpg5567r07yvm4chgs761drsvn53gn548zi26gmrpr07"))))
30615 (build-system pyproject-build-system)
30616 (arguments
30617 (list
30618 #:tests? #f ;TODO: Tests need a real LDAP server to run
30619 #:test-backend #~'nose))
30620 (native-inputs
30621 (list python-pynose python-setuptools))
30622 (propagated-inputs
30623 (list python-gssapi python-pyasn1))
30624 (synopsis "Python LDAP client")
30625 (description
30626 "LDAP3 is a strictly RFC 4510 conforming LDAP V3 pure Python client
30627library.")
30628 (license license:lgpl3+)))
30629
30630(define-public python-boltons
30631 (package
30632 (name "python-boltons")
30633 (version "25.0.0")
30634 (source
30635 (origin
30636 (method git-fetch)
30637 (uri (git-reference
30638 (url "https://github.com/mahmoud/boltons")
30639 (commit version)))
30640 (file-name (git-file-name name version))
30641 (sha256
30642 (base32 "0j061hd1iwcyz1rvasprjwwgb39x6h36n1l3dw310ig3pzbr84wh"))))
30643 (build-system pyproject-build-system)
30644 (native-inputs (list python-flit-core python-pytest python-setuptools))
30645 (home-page "https://github.com/mahmoud/boltons")
30646 (synopsis "Extensions to the Python standard library")
30647 (description
30648 "Boltons is a set of over 230 pure-Python utilities in the same spirit
30649as — and yet conspicuously missing from — the standard library, including:
30650
30651@itemize
30652@item Atomic file saving, bolted on with fileutils
30653@item A highly-optimized OrderedMultiDict, in dictutils
30654@item Two types of PriorityQueue, in queueutils
30655@item Chunked and windowed iteration, in iterutils
30656@item Recursive data structure iteration and merging, with iterutils.remap
30657@item Exponential backoff functionality, including jitter, through
30658iterutils.backoff
30659@item A full-featured TracebackInfo type, for representing stack traces, in
30660tbutils
30661@end itemize")
30662 (license license:bsd-3)))
30663
30664(define-public python-eliot
30665 (package
30666 (name "python-eliot")
30667 (version "1.17.5")
30668 (source
30669 (origin
30670 (method url-fetch)
30671 (uri (pypi-uri "eliot" version))
30672 (sha256
30673 (base32 "0rx7isb3h5fvraycfgqm781asjjmqldn0qcv6s2r5fwc1p31ffvb"))))
30674 (build-system pyproject-build-system)
30675 (arguments
30676 (list
30677 ;; tests: 407 passed, 21 skipped, 2 deselected, 5479 warnings
30678 ;; Two tests fail with error: TypeError: Unsupported type.
30679 #:test-flags #~(list "-k" "not test_basic_types and not test_dataclass")
30680 #:phases
30681 #~(modify-phases %standard-phases
30682 (add-after 'unpack 'remove-journald-support
30683 (lambda _
30684 (for-each delete-file
30685 '("eliot/tests/test_journald.py"
30686 "eliot/journald.py")))))))
30687 (native-inputs
30688 (list python-pytest
30689 python-setuptools
30690 python-testtools))
30691 (propagated-inputs
30692 (list python-boltons
30693 python-orjson
30694 python-pyrsistent
30695 python-zope-interface))
30696 (home-page "https://github.com/itamarst/eliot/")
30697 (synopsis "Eliot: the logging system that tells you why it happened")
30698 (description
30699 "@dfn{eliot} is a Python logging system that outputs causal chains of
30700actions: actions can spawn other actions, and eventually they either succeed
30701or fail. The resulting logs tell you the story of what your software did: what
30702happened, and what caused it.")
30703 (license license:asl2.0)))
30704
30705(define-public python-pem
30706 (package
30707 (name "python-pem")
30708 (version "23.1.0")
30709 (source
30710 (origin
30711 (method git-fetch)
30712 (uri (git-reference
30713 (url "https://github.com/hynek/pem")
30714 (commit version)))
30715 (file-name (git-file-name name version))
30716 (sha256
30717 (base32 "01x14j1pliyxvcx8hlwlwfchn893ddkxxpxbyqhyh6hjyag2ammd"))))
30718 (build-system pyproject-build-system)
30719 (arguments
30720 (list
30721 #:phases
30722 #~(modify-phases %standard-phases
30723 (add-after 'unpack 'set-version
30724 (lambda _
30725 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
30726 (native-inputs
30727 (list nss-certs-for-test
30728 python-certifi
30729 python-hatch-fancy-pypi-readme
30730 python-hatch-vcs
30731 python-hatchling
30732 python-pretend
30733 python-pyopenssl
30734 python-pytest
30735 python-twisted))
30736 (home-page "https://pem.readthedocs.io/")
30737 (synopsis "Easy PEM file parsing in Python")
30738 (description
30739 "This package provides a Python module for parsing and splitting PEM files.")
30740 (license license:expat)))
30741
30742(define-public python-pysaml2
30743 (package
30744 (name "python-pysaml2")
30745 (version "7.5.4")
30746 (source
30747 (origin
30748 (method git-fetch)
30749 (uri (git-reference
30750 (url "https://github.com/IdentityPython/pysaml2")
30751 (commit (string-append "v" version))))
30752 (file-name (git-file-name name version))
30753 (sha256
30754 (base32 "1vxi6kmckaj0djn79xw8f0gdd569i2y6sywsywyvyrwdcf6k8fqc"))))
30755 (build-system pyproject-build-system)
30756 (arguments
30757 (list
30758 #:test-flags
30759 #~(list "-k"
30760 (string-join
30761 ;; XXX: encryption failures
30762 (list "not test_encrypted_response_6"
30763 "test_validate_cert_chains"
30764 "test_validate_with_root_cert"
30765 ;; XXX: xml parsing error
30766 "test_namespace_processing") " and not "))
30767 #:phases
30768 #~(modify-phases %standard-phases
30769 (add-after 'unpack 'relax-requirements
30770 (lambda _
30771 (substitute* "pyproject.toml"
30772 (("\"(pyopenssl|xmlschema).*\"" _ dep)
30773 (format #f "~s" dep))))))))
30774 (native-inputs (list python-poetry-core python-pytest))
30775 (propagated-inputs
30776 (list python-cryptography
30777 python-dateutil
30778 python-defusedxml
30779 python-pymongo
30780 python-pyopenssl
30781 python-responses
30782 python-requests
30783 python-xmlschema
30784 python-xmlsec))
30785 (home-page "https://idpy.org")
30786 (synopsis "Python implementation of SAML Version 2 Standard")
30787 (description
30788 "PySAML2 is a pure python implementation of SAML Version 2 Standard.
30789It contains all necessary pieces for building a SAML2 service provider or
30790an identity provider. The distribution contains examples of both.
30791
30792This package was originally written to work in a WSGI environment, but
30793there are extensions that allow you to use it with other frameworks.")
30794 (license license:asl2.0)))
30795
30796(define-public python-click-plugins
30797 (package
30798 (name "python-click-plugins")
30799 (version "2.0")
30800 (source
30801 (origin
30802 (method git-fetch)
30803 (uri (git-reference
30804 (url "https://github.com/click-contrib/click-plugins")
30805 (commit version)))
30806 (file-name (git-file-name name version))
30807 (sha256
30808 (base32 "1fgfb4pv9chry7jwigc5ax66njk1w0kcj75q4kz0b8bb3nh52z2i"))))
30809 (build-system pyproject-build-system)
30810 (arguments
30811 (list
30812 #:test-backend #~'custom
30813 #:test-flags #~(list "tests/click_plugins_tests.py")
30814 #:phases
30815 #~(modify-phases %standard-phases
30816 (add-before 'build 'mkdir-tests
30817 (lambda _
30818 (mkdir "tests")
30819 (rename-file "click_plugins_tests.py"
30820 (string-append "tests/click_plugins_tests.py")))))))
30821 (native-inputs (list python-pytest python-setuptools))
30822 (propagated-inputs (list python-click))
30823 (synopsis "Extension for Click to register external CLI commands")
30824 (description
30825 "This package provides n extension module for Click to register external
30826CLI commands via setuptools entry-points.")
30827 (home-page "https://github.com/click-contrib/click-plugins")
30828 (license license:bsd-3)))
30829
30830;; XXX: Upstream note: Final PyPI release to mark the project as inactive.
30831;; This PyPI package is no longer actively maintained, but the underlying
30832;; library can be vendored.
30833;;
30834;; Version 2.0 lacks packaging instructions (setup.py, setup.pkg or
30835;; pyproject.toml) and can't be used as a common input.
30836(define-public python-click-plugins-1
30837 (package
30838 (inherit python-click-plugins)
30839 (name "python-click-plugins")
30840 (version "1.1.1.2")
30841 (source
30842 (origin
30843 (method git-fetch)
30844 (uri (git-reference
30845 (url "https://github.com/click-contrib/click-plugins")
30846 (commit version)))
30847 (file-name (git-file-name name version))
30848 (sha256
30849 (base32 "11i93dxb6vvlqb79p8qdbcxvcsb2bb2b9lbkqhv5hs93nry02gxl"))))
30850 (arguments (list))))
30851
30852(define-public python-diceware
30853 (package
30854 (name "python-diceware")
30855 (version "1.0.1")
30856 (source
30857 (origin
30858 (method url-fetch)
30859 (uri (pypi-uri "diceware" version))
30860 (sha256
30861 (base32
30862 "0fb61yfqapygnpqawf3z286llkc0qfh1b3m1hlqanmhcky091djl"))))
30863 (build-system pyproject-build-system)
30864 (native-inputs
30865 (list python-pytest python-setuptools python-wheel))
30866 (home-page "https://github.com/ulif/diceware/")
30867 (synopsis "Generates memorable passphrases")
30868 (description "This package generates passphrases by concatenating words
30869randomly picked from wordlists. It supports several sources of
30870randomness (including real life dice) and different wordlists (including
30871cryptographically signed ones).")
30872 (license license:gpl3+)))
30873
30874(define-public python-dictdiffer
30875 (package
30876 (name "python-dictdiffer")
30877 (version "0.9.0")
30878 (source
30879 (origin
30880 (method git-fetch)
30881 (uri (git-reference
30882 (url "https://github.com/inveniosoftware/dictdiffer")
30883 (commit (string-append "v" version))))
30884 (file-name (git-file-name name version))
30885 (sha256
30886 (base32 "1rc5jhjxzphip43frrlplcayng2cah1bzbzv6hpxnnjhg6rqy34m"))))
30887 (build-system pyproject-build-system)
30888 (arguments
30889 (list
30890 #:phases
30891 #~(modify-phases %standard-phases
30892 (add-after 'unpack 'set-version
30893 (lambda _
30894 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)))
30895 (add-after 'unpack 'relax-requirements
30896 (lambda _
30897 (delete-file "pytest.ini")
30898 (substitute* "setup.py"
30899 (("'pytest-runner.*',")
30900 "'pytest',")))))))
30901 (native-inputs
30902 (list python-pytest python-setuptools python-setuptools-scm))
30903 (home-page "https://github.com/inveniosoftware/dictdiffer")
30904 (synopsis "Diff and patch Python dictionary objects")
30905 (description
30906 "Dictdiffer is a Python module that helps you to diff and patch
30907dictionaries.")
30908 (license license:expat)))
30909
30910(define-public python-osc
30911 (package
30912 (name "python-osc")
30913 (version "1.9.3")
30914 (source
30915 (origin
30916 (method git-fetch)
30917 (uri (git-reference
30918 (url "https://github.com/attwad/python-osc")
30919 (commit (string-append "v" version))))
30920 (file-name (git-file-name name version))
30921 (sha256
30922 (base32 "1d99q9ww278cjqbfdzahg17rhbkgk2rw6ixxm5z5iwnxnsrhfdwa"))))
30923 (build-system pyproject-build-system)
30924 (native-inputs (list python-setuptools))
30925 (home-page "https://github.com/attwad/python-osc")
30926 (synopsis "Open Sound Control server and client implementations")
30927 (description
30928 "@code{python-osc} is a pure Python library with no external
30929dependencies. It implements the @uref{http://opensoundcontrol.org/spec-1_0,
30930Open Sound Control 1.0} specification.")
30931 (license license:unlicense)))
30932
30933(define-public python-cmd2
30934 (package
30935 (name "python-cmd2")
30936 (version "2.5.11")
30937 (source
30938 (origin
30939 (method url-fetch)
30940 (uri (pypi-uri "cmd2" version))
30941 (sha256
30942 (base32
30943 "0abl9aalyfbncw39d41gd3mmdgjvd7jlaa372r0lmghz0a2x781h"))))
30944 (build-system pyproject-build-system)
30945 (arguments
30946 (list #:test-flags '(list "-k" "not test_find_editor_not_specified \
30947and not test_transcript")))
30948 (propagated-inputs
30949 (list python-pyperclip python-wcwidth))
30950 (native-inputs
30951 (list python-pytest
30952 python-pytest-cov
30953 python-pytest-mock
30954 python-setuptools
30955 python-setuptools-scm
30956 python-wheel))
30957 (home-page "https://github.com/python-cmd2/cmd2")
30958 (synopsis "Tool for building interactive command line applications")
30959 (description
30960 "Cmd2 is a tool for building interactive command line applications in
30961Python. Its goal is to make it quick and easy for developers to build
30962feature-rich and user-friendly interactive command line applications. It
30963provides a simple API which is an extension of Python's built-in @code{cmd}
30964module. @code{cmd2} provides a wealth of features on top of @code{cmd} to
30965make your life easier and eliminates much of the boilerplate code which would
30966be necessary when using @code{cmd}.")
30967 (license license:expat)))
30968
30969(define-public python-pytidylib
30970 (package
30971 (name "python-pytidylib")
30972 (version "0.3.2")
30973 (source
30974 (origin
30975 (method git-fetch)
30976 (uri (git-reference
30977 (url "https://github.com/countergram/pytidylib")
30978 (commit version)))
30979 (file-name (git-file-name name version))
30980 (sha256
30981 (base32 "0h5kx99ka47yan9xsh2pyi19mhhbixqpbqn6rgciskfr5m1csji0"))))
30982 (build-system pyproject-build-system)
30983 (arguments
30984 (list
30985 #:phases
30986 #~(modify-phases %standard-phases
30987 (add-after 'unpack 'fix-queue-import
30988 (lambda _
30989 ;; Adjust Queue import for Python 3. Remove for versions >=0.4.0.
30990 (substitute* "tests/threadsafety.py"
30991 (("from Queue import Queue")
30992 "from queue import Queue"))))
30993 (add-before 'build 'qualify-libtidy
30994 (lambda* (#:key inputs #:allow-other-keys)
30995 (let ((libtidy (search-input-file inputs "/lib/libtidy.so")))
30996 (substitute* "tidylib/tidy.py"
30997 (("ctypes\\.util\\.find_library\\('tidy'\\)")
30998 (format #f "'~a'" libtidy)))))))))
30999 (native-inputs (list python-pytest python-setuptools))
31000 (inputs (list tidy-html))
31001 (home-page "https://github.com/countergram/pytidylib")
31002 (synopsis "Python wrapper for HTML Tidy library")
31003 (description
31004 "PyTidyLib is a Python package that wraps the HTML Tidy library. This
31005allows you, from Python code, to “fix” invalid (X)HTML markup.")
31006 (license license:expat)))
31007
31008(define-public python-mujson
31009 (package
31010 (name "python-mujson")
31011 (version "1.4")
31012 (source
31013 (origin
31014 (method git-fetch)
31015 (uri (git-reference
31016 (url "https://github.com/mattgiles/mujson")
31017 (commit version)))
31018 (file-name (git-file-name name version))
31019 (sha256
31020 (base32 "1j0pcqyxpivk8nn7xx5d0pj40g22psd6v2r7l4m8b6h4hrdn9cij"))))
31021 (build-system pyproject-build-system)
31022 (arguments (list #:tests? #f)) ;No tests.
31023 (native-inputs (list python-setuptools))
31024 (home-page "https://github.com/mattgiles/mujson")
31025 (synopsis "Use the fastest JSON functions available at import time")
31026 (description
31027 "This module selects the fastest JSON functions available at import time
31028in Python.")
31029 (license license:expat)))
31030
31031(define-public python-bashlex
31032 (package
31033 (name "python-bashlex")
31034 (version "0.18")
31035 (source
31036 (origin
31037 (method git-fetch)
31038 (uri (git-reference
31039 (url "https://github.com/idank/bashlex")
31040 (commit version)))
31041 (file-name (git-file-name name version))
31042 (sha256
31043 (base32 "00idgf9153jvp0g5ajbcfgpb6ffl2a8rcy3w5n9iirgxa7vlvmkm"))))
31044 (build-system pyproject-build-system)
31045 (arguments
31046 (list
31047 #:phases
31048 #~(modify-phases %standard-phases
31049 (add-before 'build 'pregenerate-yacc-tables
31050 (lambda _
31051 ;; parser.py caches tables, which attempts to write to site lib
31052 ;; see https://github.com/idank/bashlex/issues/51
31053 (invoke "python" "-c" "import bashlex"))))))
31054 (native-inputs (list python-pytest python-setuptools))
31055 (home-page "https://github.com/idank/bashlex")
31056 (synopsis "Python parser for bash")
31057 (description
31058 "@code{bashlex} is a Python port of the parser used internally by GNU
31059bash.
31060
31061For the most part it's transliterated from C, the major differences are:
31062
31063@itemize
31064@item it does not execute anything
31065@item it is reentrant
31066@item it generates a complete AST
31067@end itemize
31068")
31069 (license license:gpl3+)))
31070
31071(define-public python-jinxed
31072 (package
31073 (name "python-jinxed")
31074 (version "1.3.0")
31075 (source
31076 (origin
31077 (method git-fetch)
31078 (uri (git-reference
31079 (url "https://github.com/Rockhopper-Technologies/jinxed")
31080 (commit version)))
31081 (file-name (git-file-name name version))
31082 (sha256
31083 (base32 "1cssqc5fvy3nx0q94ia79vhldfi0r2pq5nkagdvnkhmlnz26a3n8"))))
31084 (build-system pyproject-build-system)
31085 (arguments
31086 (list
31087 #:tests? #f ;_curses.error: setupterm: could not find terminal
31088 #:phases
31089 #~(modify-phases %standard-phases
31090 (add-before 'check 'set-environment-variables
31091 (lambda* (#:key inputs #:allow-other-keys)
31092 (setenv "TERM" "LINUX")
31093 (setenv "TERMINFO"
31094 (search-input-directory inputs "share/terminfo")))))))
31095 (native-inputs (list ncurses python-setuptools))
31096 (home-page "https://github.com/Rockhopper-Technologies/jinxed")
31097 (synopsis "Jinxed Terminal Library")
31098 (description
31099 "Jinxed is an implementation of a subset of the Python curses library.")
31100 (license license:mpl2.0)))
31101
31102(define-public python-blessed
31103 (package
31104 (name "python-blessed")
31105 (version "1.20.0")
31106 (source
31107 (origin
31108 (method url-fetch)
31109 (uri (pypi-uri "blessed" version))
31110 (sha256
31111 (base32
31112 "103ng3ap33xs6i7606q3k6rwvjva9l7qi8j7vw08y13ffkw6gp9c"))
31113 (snippet
31114 ;; Don't get hung up on Windows test failures.
31115 '(delete-file "blessed/win_terminal.py"))))
31116 (build-system pyproject-build-system)
31117 (arguments
31118 (list
31119 ;; Avoid python-pytest-coverage
31120 #:test-flags '(list "-c /dev/null")))
31121 (propagated-inputs (list python-six python-wcwidth))
31122 (native-inputs (list python-pytest python-setuptools python-wheel))
31123 (home-page "https://github.com/jquast/blessed")
31124 (synopsis "Wrapper around terminal capabilities")
31125 (description
31126 "Blessed is a thin, practical wrapper around terminal styling, screen
31127positioning, and keyboard input.")
31128 (license license:expat)))
31129
31130(define-public python-readme-renderer
31131 (package
31132 (name "python-readme-renderer")
31133 (version "44.0")
31134 (source
31135 (origin
31136 (method url-fetch)
31137 (uri (pypi-uri "readme_renderer" version))
31138 (sha256
31139 (base32
31140 "1qfiqm3w1ydpbipns5nifa7h4wraxd72nh7imif819mzmd7064l7"))))
31141 (build-system pyproject-build-system)
31142 (arguments
31143 (list
31144 #:test-flags
31145 '(list "-k"
31146 (string-append
31147 ;; These tests fail due to slight differences in the generated
31148 ;; vs expected HTML, e.g. because of difference in whitespace or
31149 ;; line breaks. (See also
31150 ;; https://github.com/pypa/readme_renderer/issues/234).
31151 "not test_md_fixtures[test_CommonMark_008.md]"
31152 " and not test_rst_fixtures[test_rst_008.rst]"
31153 " and not GFM"))))
31154 (propagated-inputs
31155 (list python-cmarkgfm
31156 python-docutils
31157 python-nh3
31158 python-pygments))
31159 (native-inputs
31160 (list python-pytest
31161 python-setuptools
31162 python-wheel))
31163 (home-page "https://github.com/pypa/readme_renderer")
31164 (synopsis "Render README files in Warehouse")
31165 (description
31166 "Readme Renderer is a library that will safely render arbitrary README
31167files into HTML. It is designed to be used in Warehouse to render the
31168@code{long_description} for packages. It can handle Markdown,
31169reStructuredText, and plain text.")
31170 (license license:asl2.0)))
31171
31172(define-public python-lazr-delegates
31173 (package
31174 (name "python-lazr-delegates")
31175 (version "2.1.1")
31176 (source
31177 (origin
31178 (method url-fetch)
31179 (uri (pypi-uri "lazr_delegates" version))
31180 (sha256
31181 (base32 "1p02diwzn58jhpvf9m8bhb5p0xkx5gnc84mzgwr3zdsidrhv5kmf"))))
31182 (build-system pyproject-build-system)
31183 (arguments
31184 (list
31185 #:test-flags #~(list "-v" #$output)
31186 #:phases
31187 #~(modify-phases %standard-phases
31188 (add-after 'check 'check-cleanup
31189 (lambda* (#:key tests? #:allow-other-keys)
31190 (when tests?
31191 (for-each
31192 delete-file-recursively
31193 (find-files #$output
31194 (lambda (file stat)
31195 (or (member (basename file)
31196 '("tests" ".pytest_cache"))))
31197 #:directories? #t))))))))
31198 (native-inputs
31199 (list python-pytest python-setuptools python-wheel))
31200 (propagated-inputs
31201 (list python-zope-interface))
31202 (home-page "https://launchpad.net/lazr.delegates")
31203 (synopsis "Easily write objects that delegate behavior")
31204 (description
31205 "The @code{lazr.delegates} package makes it easy to write objects that
31206delegate behavior to another object. The new object adds some property or
31207behavior on to the other object, while still providing the underlying interface,
31208and delegating behavior.")
31209 (license license:lgpl3)))
31210
31211(define-public python-lazr-config
31212 (package
31213 (name "python-lazr-config")
31214 (version "3.1")
31215 (source
31216 (origin
31217 (method url-fetch)
31218 (uri (pypi-uri "lazr_config" version))
31219 (sha256
31220 (base32 "02xb4fs9rm6bf3f00qkq8pihgqvrvn2wfnvydn2vg9p73ddhcmvw"))))
31221 (build-system pyproject-build-system)
31222 (arguments
31223 (list
31224 #:test-flags #~(list "-v" #$output)
31225 #:phases
31226 #~(modify-phases %standard-phases
31227 (add-after 'check 'check-cleanup
31228 (lambda* (#:key tests? #:allow-other-keys)
31229 (when tests?
31230 (for-each
31231 delete-file-recursively
31232 (find-files #$output
31233 (lambda (file stat)
31234 (or (member (basename file)
31235 '("tests" ".pytest_cache"))))
31236 #:directories? #t))))))))
31237 (native-inputs
31238 (list python-pytest python-setuptools python-wheel))
31239 (propagated-inputs
31240 (list python-lazr-delegates python-zope-interface))
31241 (home-page "https://launchpad.net/lazr.config")
31242 (synopsis "Create configuration schemas and process and validate configurations")
31243 (description
31244 "The LAZR config system is typically used to manage process configuration.
31245Process configuration is for saying how things change when we run systems on
31246different machines, or under different circumstances. This system uses ini-like
31247file format of section, keys, and values. The config file supports inheritance
31248to minimize duplication of information across files. The format supports schema
31249validation.")
31250 (license license:lgpl3)))
31251
31252;; XXX: Not maintained since 2021, there is no git available as seen in
31253;; <https://pypi.org/project/flufl.bounce>.
31254(define-public python-flufl-bounce
31255 (package
31256 (name "python-flufl-bounce")
31257 (version "4.0")
31258 (source
31259 (origin
31260 (method url-fetch)
31261 (uri (pypi-uri "flufl.bounce" version))
31262 (sha256
31263 (base32
31264 "0c9qc2l47lyqnpwskp6vvi7m3jqh6hx42v6d35dgxh3fjzmlll15"))))
31265 (build-system pyproject-build-system)
31266 (arguments
31267 (list #:phases
31268 #~(modify-phases %standard-phases
31269 (replace 'check
31270 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
31271 (when tests?
31272 (with-directory-excursion
31273 (string-append (site-packages inputs outputs) "/flufl")
31274 (invoke "python" "-m" "nose2" "-v"))))))))
31275 (propagated-inputs
31276 (list python-atpublic python-zope-interface))
31277 (native-inputs
31278 (list python-flufl-testing python-nose2 python-setuptools))
31279 (home-page "https://fluflbounce.readthedocs.io/en/latest/")
31280 (synopsis "Email bounce detectors")
31281 (description "The @code{flufl.bounce} library provides a set of heuristics
31282and an API for detecting the original bouncing email addresses from a bounce
31283message. Many formats found in the wild are supported, as are VERP and
31284RFC 3464.")
31285 (license (list license:asl2.0
31286 license:lgpl3)))) ; only for setup_headers.py
31287
31288(define-public python-flufl-i18n
31289 (package
31290 (name "python-flufl-i18n")
31291 (version "5.1.0")
31292 (source
31293 (origin
31294 (method url-fetch)
31295 (uri (pypi-uri "flufl_i18n" version))
31296 (sha256
31297 (base32
31298 "0bm4kmi04gm164y5nmadmrg79y1l1cs9iwxcv9y7gq0dgyr20xms"))))
31299 (build-system pyproject-build-system)
31300 (arguments
31301 (list #:test-flags
31302 #~(list "--no-cov" "--ignore-glob=docs/*")
31303 #:phases
31304 #~(modify-phases %standard-phases
31305 ;; This phase add a symlink of dist-info dir for packages
31306 ;; expecting flufl.i18n rather than flufl_i18n (mailman).
31307 (add-after 'install 'add-custom-dist-info
31308 (lambda _
31309 (for-each
31310 (lambda (dir)
31311 (with-directory-excursion (dirname dir)
31312 (let ((base (basename dir)))
31313 (symlink base
31314 (string-join (string-split base #\_) ".")))))
31315 (find-files #$output
31316 (lambda (file stat)
31317 (string-suffix? ".dist-info" file))
31318 #:directories? #t)))))))
31319 (propagated-inputs
31320 (list python-atpublic))
31321 (native-inputs
31322 (list python-hatchling
31323 python-pytest
31324 python-pytest-cov
31325 python-sybil))
31326 (home-page "https://flufli18n.readthedocs.io")
31327 (synopsis "API for Python internationalization")
31328 (description
31329 "This package provides a high-level, convenient API for managing
31330internationalization/translation contexts in Python applications. There is a
31331simple API for single-context applications, such as command line scripts which
31332only need to translate into one language during the entire course of their
31333execution. There is a more flexible, but still convenient API for multi-context
31334applications, such as servers, which may need to switch language contexts for
31335different tasks.")
31336 (license license:asl2.0)))
31337
31338(define-public python-flufl-lock
31339 (package
31340 (name "python-flufl-lock")
31341 (version "8.1.0")
31342 (source
31343 (origin
31344 (method url-fetch)
31345 (uri (pypi-uri "flufl.lock" version))
31346 (sha256
31347 (base32 "1jz7vipjga4x803gfsb9mvnfb6q8my7ib000nsc3v9ljaq0050yq"))))
31348 (build-system pyproject-build-system)
31349 (arguments
31350 (list #:test-flags
31351 #~(list "--no-cov" "--ignore-glob=docs/*")
31352 #:phases
31353 #~(modify-phases %standard-phases
31354 ;; This phase add a symlink of dist-info dir for packages
31355 ;; expecting flufl.lock rather than flufl_lock (mailman).
31356 (add-after 'install 'add-custom-dist-info
31357 (lambda _
31358 (for-each
31359 (lambda (dir)
31360 (with-directory-excursion (dirname dir)
31361 (let ((base (basename dir)))
31362 (symlink base
31363 (string-join (string-split base #\_) ".")))))
31364 (find-files #$output
31365 (lambda (file stat)
31366 (string-suffix? ".dist-info" file))
31367 #:directories? #t)))))))
31368 (native-inputs
31369 (list python-hatchling
31370 python-pytest
31371 python-pytest-cov
31372 python-sybil))
31373 (propagated-inputs
31374 (list python-atpublic python-psutil))
31375 (home-page "https://flufllock.readthedocs.io")
31376 (synopsis "NFS-safe file locking with timeouts for POSIX systems")
31377 (description
31378 "The @dfn{flufl.lock} package provides NFS-safe file locking with
31379timeouts for POSIX systems. It is similar to the @code{O_EXCL} option of the
31380@code{open} system call but uses a lockfile. Lock objects support lock-breaking
31381and have a maximum lifetime built-in.")
31382 (license (list license:asl2.0
31383 license:lgpl3)))) ; only for setup_helpers.py
31384
31385(define-public python-flufl-testing
31386 (package
31387 (name "python-flufl-testing")
31388 (version "0.8")
31389 (source
31390 (origin
31391 (method git-fetch)
31392 (uri (git-reference
31393 (url "https://gitlab.com/warsaw/flufl.testing")
31394 (commit version)))
31395 (file-name (git-file-name name version))
31396 (sha256
31397 (base32 "0dl2dl4wdrqklkhqcdbwchpqrpm6lwic4qk961zi6b2f8agis35i"))))
31398 (build-system pyproject-build-system)
31399 (arguments (list #:tests? #f)) ;no tests
31400 (native-inputs (list python-setuptools))
31401 (home-page "https://gitlab.com/warsaw/flufl.testing")
31402 (synopsis "Collection of test tool plugins")
31403 (description
31404 "This package contains a small collection of test tool plugins for
31405@code{nose2} and @code{flake8}.")
31406 (license license:asl2.0)))
31407
31408(define-public python-devtools
31409 (package
31410 (name "python-devtools")
31411 (version "0.12.2")
31412 (source
31413 (origin
31414 (method git-fetch)
31415 (uri (git-reference
31416 (url "https://github.com/samuelcolvin/python-devtools")
31417 (commit (string-append "v" version))))
31418 (file-name (git-file-name name version))
31419 (sha256
31420 (base32 "0snmx7f0s44rzzx8advzmgj5av9dlpz1kx05f7ysya8xrhv5nwfl"))))
31421 (build-system pyproject-build-system)
31422 (arguments
31423 (list
31424 #:test-flags
31425 ;; Disable some failing tests.
31426 ;;
31427 ;; test_print_subprocess seems to inherit wrong environment, fails with
31428 ;; E + ModuleNotFoundError: No module named 'executing'
31429 ;; Test runs fine from local clone.
31430 ;;
31431 ;; test_executing_failure fails with
31432 ;; E - [1, 2] (list) len=2
31433 ;; E + [x, y]: [1, 2] (list) len=2
31434 ;; unclear why, probably due to a dependency.
31435 '(list "-k" "not test_print_subprocess and not test_executing_failure"
31436 ;; test_insert_assert.py also seems to inherit a bad environment:
31437 ;; E fixture 'pytester_pretty' not found
31438 ;; Test runs fine from local clone.
31439 "--ignore=tests/test_insert_assert.py")))
31440 (native-inputs
31441 (list python-hatchling python-pytest python-pytest-mock))
31442 (propagated-inputs
31443 (list python-asttokens python-executing python-pygments))
31444 (home-page "https://github.com/samuelcolvin/python-devtools")
31445 (synopsis "Debug command and development tools")
31446 (description
31447 "This package provides a debug print command and other development tools.
31448It adds a simple and readable way to print stuff during development.")
31449 (license license:expat)))
31450
31451(define-public python-dateparser
31452 (package
31453 (name "python-dateparser")
31454 (version "1.2.2")
31455 (source
31456 (origin
31457 (method url-fetch)
31458 (uri (pypi-uri "dateparser" version))
31459 (sha256
31460 (base32
31461 "1xzcqmvqg82cq4vx3cbgbdrgq4pgqlkk0mnfm0zc5kdqgkqicqwq"))))
31462 (build-system pyproject-build-system)
31463 (arguments
31464 (list
31465 #:test-flags
31466 #~(cons* "-k" "not test_relative_base_setting_2_en"
31467 (map
31468 (lambda (name)
31469 (string-append "--ignore=tests/" name ".py"))
31470 '("test_dateparser_data_integrity"
31471 "test_hijri"
31472 "test_jalali"
31473 "test_language_detect")))
31474 #:phases
31475 #~(modify-phases %standard-phases
31476 (add-before 'check 'set-check-environment
31477 (lambda* (#:key inputs #:allow-other-keys)
31478 (setenv "TZ" "UTC")
31479 (setenv "TZDIR"
31480 (search-input-directory inputs
31481 "share/zoneinfo")))))))
31482 (propagated-inputs
31483 (list python-dateutil
31484 python-pytz
31485 python-regex
31486 python-ruamel.yaml
31487 python-tzlocal))
31488 (native-inputs
31489 (list python-parameterized
31490 python-pytest
31491 python-setuptools
31492 tzdata-for-tests))
31493 (home-page "https://github.com/scrapinghub/dateparser")
31494 (synopsis
31495 "Date parsing library designed to parse dates from HTML pages")
31496 (description
31497 "@code{python-dateparser} provides modules to easily parse localized
31498dates in almost any string formats commonly found on web pages.")
31499 (license license:bsd-3)))
31500
31501(define-public python-dparse
31502 (package
31503 (name "python-dparse")
31504 (version "0.6.4")
31505 (source
31506 (origin
31507 (method url-fetch)
31508 (uri (pypi-uri "dparse" version))
31509 (sha256
31510 (base32 "06i069hij4i53hikrsv332h2ibwfchr42b68hii6rhzdwcwrrclh"))))
31511 (build-system pyproject-build-system)
31512 (native-inputs (list python-hatchling python-pytest))
31513 (propagated-inputs (list python-packaging python-toml))
31514 (home-page "https://github.com/pyupio/dparse")
31515 (synopsis "Parser for Python dependency files")
31516 (description "This package provides a parser for Python dependency files.")
31517 (license license:expat)))
31518
31519(define-public python-dpath
31520 (package
31521 (name "python-dpath")
31522 (version "2.2.0")
31523 (source
31524 (origin
31525 (method url-fetch)
31526 (uri (pypi-uri "dpath" version))
31527 (sha256
31528 (base32
31529 "0gkavmc44f9cj3kch68343r2ajsbvbsjcmsmkqhkzsjmvhqfdxrl"))))
31530 (build-system pyproject-build-system)
31531 (native-inputs
31532 (list python-hypothesis python-nose2 python-setuptools python-wheel))
31533 (home-page "https://github.com/akesterson/dpath-python")
31534 (synopsis "File-system-like pathing and searching for dictionaries")
31535 (description
31536 "@code{python-dpath} is a library for accessing and searching
31537dictionaries via /slashed/paths ala xpath.
31538
31539Basically it lets you glob over a dictionary as if it were a file system. It
31540allows you to specify globs (ala the bash eglob syntax, through some advanced
31541fnmatch.fnmatch magic) to access dictionary elements, and provides some
31542facility for filtering those results.")
31543 (license license:expat)))
31544
31545(define-public python-safety
31546 (package
31547 (name "python-safety")
31548 (version "3.6.2")
31549 (source
31550 (origin
31551 (method url-fetch)
31552 (uri (pypi-uri "safety" version))
31553 (sha256
31554 (base32 "1gijl0ip1fm1z91p05iqcngcpad3nnvpha0l5iykhbmdlkcqq51f"))))
31555 (build-system pyproject-build-system)
31556 (arguments
31557 (list
31558 #:test-flags
31559 #~(list "-k" (string-join
31560 ;; test_announcements fails with AssertionError.
31561 (list "not test_announcements_if_is_not_tty"
31562 ;; Tests below need a network connection.
31563 "test_check_live"
31564 "test_check_live_cached"
31565 "test_get_packages_licenses_without_api_key"
31566 ;; AttributeError: 'PackageInstalledPayload' object
31567 ;; has no attribute 'tool_path'
31568 "test_emit_diff_operations_with_multiple_operations"
31569 "test_emit_diff_operations_with_empty_locations"
31570 "test_emit_diff_operations_with_different_tools"
31571 "test_emit_diff_operations_creates_correct_payload_structure")
31572 " and not "))
31573 #:phases #~(modify-phases %standard-phases
31574 (add-after 'unpack 'disable-telemetry
31575 (lambda _
31576 (substitute* (find-files "." "\\.py$")
31577 (("telemetry: bool = True")
31578 "telemetry: bool = False")
31579 (("telemetry=True")
31580 "telemetry=False"))))
31581 (add-before 'check 'set-home ; some tests run mkdir
31582 (lambda _
31583 (setenv "HOME" "/tmp"))))))
31584 (native-inputs (list nss-certs-for-test python-hatchling python-pytest))
31585 (propagated-inputs (list python-authlib
31586 python-click
31587 python-dparse
31588 python-filelock
31589 python-httpx
31590 python-jinja2
31591 python-marshmallow
31592 python-nltk
31593 python-packaging
31594 python-psutil
31595 python-pydantic
31596 python-requests
31597 python-ruamel.yaml
31598 python-safety-schemas
31599 python-tenacity
31600 python-tomli
31601 python-tomlkit
31602 python-typer
31603 python-typing-extensions))
31604 (home-page "https://github.com/pyupio/safety")
31605 (synopsis "Check installed dependencies for known vulnerabilities")
31606 (description
31607 "Safety checks installed dependencies for known vulnerabilities.
31608By default it uses the open Python vulnerability database Safety DB.")
31609 (license license:expat)))
31610
31611(define-public python-pypandoc
31612 (package
31613 (name "python-pypandoc")
31614 (version "1.15")
31615 (source
31616 (origin
31617 (method git-fetch)
31618 (uri (git-reference
31619 (url "https://github.com/JessicaTegner/pypandoc")
31620 (commit (string-append "v" version))))
31621 (file-name (git-file-name name version))
31622 (sha256
31623 (base32 "0jqr380xpg1n93dagxv7zfakhdravw0nc81rc4pnmjzkj360l5nr"))))
31624 (build-system pyproject-build-system)
31625 (arguments
31626 (list
31627 #:test-backend #~'unittest
31628 #:phases
31629 #~(modify-phases %standard-phases
31630 (add-before 'check 'disable-tests
31631 (lambda _
31632 (substitute* "tests.py"
31633 ;; Disable test requiring network access
31634 (("test_basic_conversion_from_http_url")
31635 "skip_test_basic_conversion_from_http_url")
31636 ;; Disable tests with missing files
31637 (("test_basic_conversion_from_file_pattern")
31638 "skip_test_basic_conversion_from_file_pattern")
31639 (("test_conversion_with_data_files")
31640 "skip_test_conversion_with_data_files")))))))
31641 ;; Ideally, we would supersede texlive-xpatch with texlive-regexpatch once
31642 ;; the missing etoolbox.sty file is added
31643 (native-inputs
31644 (list (texlive-local-tree
31645 (list texlive-etoolbox
31646 texlive-lm
31647 texlive-regexpatch
31648 texlive-xcolor))
31649 python-pip
31650 python-poetry-core
31651 python-setuptools))
31652 (inputs (list pandoc python-pandocfilters))
31653 (propagated-inputs (list python-wheel))
31654 (home-page "https://github.com/JessicaTegner/pypandoc")
31655 (synopsis "Python wrapper for pandoc")
31656 (description
31657 "pypandoc is a thin Python wrapper around pandoc and pandoc-citeproc.")
31658 (license license:expat)))
31659
31660(define-public python-rnc2rng
31661 (package
31662 (name "python-rnc2rng")
31663 (version "2.7.0")
31664 (source
31665 (origin
31666 (method git-fetch)
31667 (uri (git-reference
31668 (url "https://github.com/djc/rnc2rng")
31669 (commit version)))
31670 (file-name (git-file-name name version))
31671 (sha256
31672 (base32 "1wbd8936vs4rinjfmjd8dav6sdz6wrsc0jppqidzzcnzwfp146pf"))))
31673 (build-system pyproject-build-system)
31674 (arguments
31675 (list
31676 #:test-backend #~'custom
31677 #:test-flags #~(list "test.py")))
31678 (native-inputs (list python-setuptools))
31679 (propagated-inputs (list python-rply))
31680 (home-page "https://github.com/djc/rnc2rng")
31681 (synopsis "Convert RELAX NG Compact to regular syntax")
31682 (description
31683 "This package provides the @command{rnc2rng} command-line tool as well as
31684a Python library to convert RELAX NG schemata in Compact syntax (rnc) to
31685equivalent schemata in the XML-based default RELAX NG syntax.")
31686 (license license:expat)))
31687
31688(define-public python-citeproc-py
31689 (package
31690 (name "python-citeproc-py")
31691 (version "0.9.0")
31692 (source
31693 (origin
31694 (method git-fetch)
31695 (uri (git-reference
31696 (url "https://github.com/brechtm/citeproc-py")
31697 (commit (string-append "v" version))
31698 (recursive? #t))) ; TODO Unbundle.
31699 (file-name (git-file-name name version))
31700 (sha256
31701 (base32 "0wn1mfn7r4ffbmh529baqa4a798xwa34z0ij1jkmzal9i1na1i61"))))
31702 (build-system pyproject-build-system)
31703 (arguments
31704 (list
31705 #:phases
31706 #~(modify-phases %standard-phases
31707 (add-after 'unpack 'set-version
31708 (lambda _
31709 (delete-file "citeproc/_version.py")
31710 (substitute* "citeproc/__init__.py"
31711 (("from \\. import version")
31712 "")
31713 (("__version__ =.*")
31714 (format #f "__version__ = ~s" #$version))))))))
31715 (native-inputs (list python-pytest python-setuptools))
31716 (propagated-inputs (list python-lxml python-rnc2rng))
31717 (home-page "https://github.com/brechtm/citeproc-py")
31718 (synopsis "Citations and bibliography formatter")
31719 (description
31720 "Citeproc-py is a CSL processor for Python. It aims to implement the
31721CSL 1.0.1 specification. citeproc-py can output styled citations and
31722bibliographies in a number of different output formats. Currently supported
31723are plain text, reStructuredText and HTML.")
31724 (license license:bsd-2)))
31725
31726(define-public python-inform
31727 (package
31728 (name "python-inform")
31729 (version "1.34")
31730 (source
31731 (origin
31732 (method git-fetch) ; no tests in PyPI release
31733 (uri (git-reference
31734 (url "https://github.com/kenkundert/inform")
31735 (commit (string-append "v" version))))
31736 (file-name (git-file-name name version))
31737 (sha256
31738 (base32 "19ck1x8jplgq1lsy8cdv6hsygdbx310k92w4mkzl40bh4h49m1mk"))))
31739 (build-system pyproject-build-system)
31740 (arguments
31741 (list
31742 #:test-flags #~(list "-k" (string-append
31743 ;; Test below needs the num2words package
31744 "not test_plural_words"
31745 ;; These last two failed with AssertionError
31746 " and not test_inform"
31747 " and not test_manual"))))
31748 (native-inputs
31749 (list python-flit-core python-pytest))
31750 (propagated-inputs
31751 (list python-arrow))
31752 (home-page "https://inform.readthedocs.io")
31753 (synopsis "Print & logging utilities for communicating with user")
31754 (description
31755 "Inform is designed to display messages from programs that are typically run from
31756a console. It provides a collection of ‘print’ functions that allow you to simply and
31757cleanly print different types of messages.")
31758 (license license:gpl3+)))
31759
31760(define-public python-nestedtext
31761 (package
31762 (name "python-nestedtext")
31763 (version "3.7")
31764 (source
31765 (origin
31766 (method git-fetch) ; no tests in PyPI release
31767 (uri (git-reference
31768 (url "https://github.com/KenKundert/nestedtext")
31769 (commit (string-append "v" version))))
31770 (file-name (git-file-name name version))
31771 (sha256
31772 (base32 "0yqarfv6jzl41i44mjn0g4c87g47j819py6gbsfi3fdk96c95nll"))))
31773 (build-system pyproject-build-system)
31774 (arguments
31775 (list
31776 ;; XXX: Tests below need some not yet packaged Python libraries.
31777 #:test-flags #~(list "--ignore" "examples/"
31778 "--ignore" "tests/test_nestedtext.py"
31779 "-k" (string-append
31780 "not techniques.rst"
31781 " and not nestedtext.nestedtext.dumps"))))
31782 (native-inputs (list python-flit-core python-pytest))
31783 (propagated-inputs
31784 (list python-inform))
31785 (home-page "https://nestedtext.org")
31786 (synopsis "Human readable and writable data interchange format")
31787 (description
31788 "NestedText is a file format for holding data that is to be entered, edited, or
31789viewed by people. It allows data to be organized into a nested collection of
31790dictionaries, lists, and strings. In this way it is similar to JSON and YAML, but
31791without the complexity and risk of YAML and without the syntactic clutter of JSON.
31792NestedText is both simple and natural. Only a small number of concepts and rules must
31793be kept in mind when creating it. It is easily created, modified, or viewed with
31794a text editor and easily understood and used by both programmers and non-programmers.")
31795 (license license:expat))) ; MIT license
31796
31797(define-public python-nest-asyncio
31798 (package
31799 (name "python-nest-asyncio")
31800 (version "1.6.0")
31801 (source
31802 (origin
31803 (method url-fetch)
31804 (uri (pypi-uri "nest_asyncio" version))
31805 (sha256
31806 (base32
31807 "1zjmxk7rgadgiking9jksncca0hywgs52s34dkymm8dc95a2s5vg"))))
31808 (build-system pyproject-build-system)
31809 (native-inputs
31810 (list python-pytest python-setuptools))
31811 (home-page "https://github.com/erdewit/nest_asyncio")
31812 (synopsis "Patch asyncio to allow nested event loops")
31813 (description
31814 "By design @code{asyncio} does not allow its event loop to be nested.
31815This presents a practical problem: when in an environment where the event loop
31816is already running it's impossible to run tasks and wait for the result. This
31817module patches @code{asyncio} to allow nested use of @code{asyncio.run} and
31818@code{loop.run_until_complete}.")
31819 (license license:bsd-3)))
31820
31821(define-public python-simpervisor
31822 (package
31823 (name "python-simpervisor")
31824 (version "1.0.0")
31825 (source
31826 (origin
31827 ;; Tests not included in release.
31828 (method git-fetch)
31829 (uri (git-reference
31830 (url "https://github.com/yuvipanda/simpervisor")
31831 (commit (string-append "v" version))))
31832 (file-name (git-file-name name version))
31833 (sha256
31834 (base32 "0drvqxbr6fpydb4d7z5dhn97d578gf39sd8cawyl6ksf1f4y8yzg"))))
31835 (build-system pyproject-build-system)
31836 (arguments
31837 ;; See <https://github.com/jupyterhub/simpervisor/issues/57>
31838 (list #:test-flags #~(list "--deselect=tests/test_ready.py::test_ready")))
31839 (native-inputs
31840 (list python-aiohttp
31841 python-hatchling
31842 python-psutil
31843 python-pytest
31844 python-pytest-asyncio))
31845 (home-page "https://github.com/yuvipanda/simpervisor")
31846 (synopsis "Simple async process supervisor")
31847 (description
31848 "This package provides a simple async process supervisor in Python.")
31849 (license license:bsd-3)))
31850
31851(define-public python-parallel
31852 (package
31853 (name "python-parallel")
31854 (version "1.6.4.4")
31855 (source
31856 (origin
31857 (method url-fetch)
31858 (uri (string-append "https://www.parallelpython.com/downloads/pp/pp-"
31859 version ".zip"))
31860 (sha256
31861 (base32 "1mzk4yabxj6r149fswhis18hd8dnag5sj8i4wb06450zq3pi8dh7"))))
31862 (build-system pyproject-build-system)
31863 (arguments (list #:tests? #f)) ;No test suite.
31864 (native-inputs (list python-setuptools unzip))
31865 (propagated-inputs (list python-six))
31866 (home-page "https://www.parallelpython.com")
31867 (synopsis "Parallel and distributed programming for Python")
31868 (description
31869 "Parallel Python module (PP) provides an easy and efficient way to create
31870parallel-enabled applications for SMP computers and clusters. PP module
31871features cross-platform portability and dynamic load balancing. Thus
31872applications written with PP will parallelize efficiently even on
31873heterogeneous and multi-platform clusters (including clusters running other
31874applications with variable CPU loads).")
31875 (license license:bsd-3)))
31876
31877(define-public python-param
31878 (package
31879 (name "python-param")
31880 (version "2.1.0")
31881 (source
31882 (origin
31883 (method url-fetch)
31884 (uri (pypi-uri "param" version))
31885 (sha256
31886 (base32 "07z7az7xg8pzjrmaf928is7n6siw9v9nxfmf0a5vgqj7nl40pcx7"))))
31887 (build-system pyproject-build-system)
31888 (native-inputs
31889 (list python-cloudpickle
31890 python-hatchling
31891 python-hatch-vcs
31892 python-ipython
31893 python-jsonschema
31894 python-nbval
31895 python-nest-asyncio
31896 python-numpy
31897 python-odfpy
31898 python-openpyxl
31899 python-pandas
31900 python-pyarrow
31901 python-pytest
31902 python-pytest-asyncio
31903 python-pytest-xdist
31904 python-tables
31905 python-xlrd))
31906 (home-page "https://param.holoviz.org/")
31907 (synopsis
31908 "Make your Python code clearer and more reliable by declaring Parameters")
31909 (description
31910 "Param is a library for handling all the user-modifiable parameters,
31911arguments, and attributes that control your code. It provides automatic,
31912robust error-checking while dramatically reducing boilerplate code, letting
31913you focus on what you want your code to do rather than on checking for all the
31914possible ways users could supply inappropriate values to a function or
31915class.")
31916 (license license:bsd-3)))
31917
31918(define-public python-djitellopy
31919 (package
31920 (name "python-djitellopy")
31921 (version "2.5.0")
31922 (source
31923 (origin
31924 (method url-fetch)
31925 (uri (pypi-uri "djitellopy" version))
31926 (sha256
31927 (base32 "1kc0syb4hpn7fay0rxpazmczag6jw3pncrrc6v762jj0afiwkrps"))))
31928 (build-system pyproject-build-system)
31929 (arguments
31930 (list
31931 #:tests? #f ;no test suite
31932 #:phases
31933 #~(modify-phases %standard-phases
31934 ;; OpenCV does not ship metadata files for its Python library, which
31935 ;; makes it invisible to the sanity_check script (see:
31936 ;; https://github.com/opencv/opencv/issues/24810).
31937 (delete 'sanity-check))))
31938 (propagated-inputs
31939 (list opencv ;for opencv-python
31940 python-av
31941 python-numpy
31942 python-pillow))
31943 (native-inputs (list python-setuptools python-wheel))
31944 (home-page "https://github.com/damiafuentes/DJITelloPy")
31945 (synopsis
31946 "DJI Tello drone video streaming, swarms and state packets library")
31947 (description
31948 "DJI Tello drone Python interface using the official Tello SDK and Tello
31949EDU SDK. This library has the following features:
31950@itemize
31951@item Implementation of all tello commands
31952@item Retrieve a video stream easily
31953@item Receive and parse state packets
31954@item Control a swarm of drones.
31955@end itemize")
31956 (license license:expat)))
31957
31958(define-public python-djvulibre
31959 ;; The original git repository of python-djvulibre is hosted at
31960 ;; <https://jwilk.net/software/python-djvulibre>. However, that repository
31961 ;; has been archived by its owner in 2022. The most active fork is
31962 ;; <https://github.com/FriedrichFroebel/python-djvulibre>, and that is the
31963 ;; version packaged here (its "python3" branch, the default).
31964 ;;
31965 ;; However, the python-djvulibre PyPI project still refers to the old
31966 ;; repository. The new repository is published as djvulibre-python on PyPI;
31967 ;; that is, with the name in reversed order.The original package name is
31968 ;; used in Guix because it best adheres to the Guix naming scheme.
31969 (package
31970 (name "python-djvulibre")
31971 (version "0.9.3")
31972 (source
31973 (origin
31974 (method git-fetch)
31975 (uri (git-reference
31976 (url "https://github.com/FriedrichFroebel/python-djvulibre")
31977 (commit version)))
31978 (file-name (git-file-name name version))
31979 (sha256
31980 (base32 "0cwda210dgkqyjkwha2if80wfmv6w8baigp8kdcwhmbisfgd3l4y"))))
31981 (build-system pyproject-build-system)
31982 (arguments
31983 (list
31984 #:phases
31985 #~(modify-phases %standard-phases
31986 (replace 'check
31987 (lambda* (#:key tests? #:allow-other-keys)
31988 (when tests?
31989 ;; The tests get confused by the djvu directory.
31990 (delete-file-recursively "djvu")
31991 ;; Tests can't find tools.py otherwise.
31992 (with-directory-excursion "tests"
31993 (invoke "python" "-m" "pytest"))))))))
31994 (native-inputs
31995 (list ghostscript
31996 pkg-config
31997 python-cython
31998 python-pytest
31999 python-setuptools))
32000 (inputs
32001 (list djvulibre))
32002 (synopsis "Python bindings for DjVuLibre")
32003 (description "This is a set of Python bindings for the DjVuLibre library.")
32004 (home-page "https://github.com/FriedrichFroebel/python-djvulibre")
32005 (license license:gpl2)))
32006
32007(define-public python-gamera
32008 (package
32009 (name "python-gamera")
32010 (version "4.1.0")
32011 (source
32012 (origin
32013 (method git-fetch)
32014 (uri (git-reference
32015 (url "https://github.com/hsnr-gamera/gamera-4")
32016 (commit (string-append "v" version))))
32017 (file-name (git-file-name name version))
32018 (sha256
32019 (base32 "0l3w3wvi1ina6r3adc4wikz47wai8cjci0i5k8dxqv8p629dihrn"))))
32020 (build-system pyproject-build-system)
32021 (arguments
32022 (list
32023 #:phases
32024 #~(modify-phases %standard-phases
32025 (add-after 'unpack 'fix-build
32026 (lambda _
32027 ;; The script to make daily build artifacts fails to compile,
32028 ;; but users don't need that, so ignore it.
32029 (delete-file "misc/daily_build.py")
32030 ;; Prepare tests
32031 (mkdir-p "tmp")
32032 (setenv "HOME" (string-append (getcwd) "/tmp")))))))
32033 (native-inputs (list python-docutils python-pytest python-setuptools))
32034 (inputs (list libpng libtiff zlib))
32035 (synopsis "Framework for building document analysis applications")
32036 (description
32037 "Gamera is a toolkit for building document image recognition systems.")
32038 (home-page "https://gamera.informatik.hsnr.de/")
32039 (license license:gpl2+)))
32040
32041(define-public python-aiofiles
32042 (package
32043 (name "python-aiofiles")
32044 (version "24.1.0")
32045 (source
32046 (origin
32047 (method url-fetch)
32048 (uri (pypi-uri "aiofiles" version))
32049 (sha256
32050 (base32 "0v0namryb6acj9bkic5rcgbnb36njj601ws85q60z0d3wp4pb812"))))
32051 (build-system pyproject-build-system)
32052 (native-inputs
32053 (list python-hatch-vcs
32054 python-hatchling
32055 python-pytest
32056 python-pytest-asyncio))
32057 (home-page "https://github.com/Tinche/aiofiles")
32058 (synopsis "File support for @code{asyncio}")
32059 (description
32060 "@code{python-aiofiles} is a library for handling local disk files in
32061asyncio applications.")
32062 (license license:asl2.0)))
32063
32064(define-public python-pyre-extensions
32065 (package
32066 (name "python-pyre-extensions")
32067 (version "0.0.32")
32068 (source
32069 (origin
32070 (method url-fetch)
32071 (uri (pypi-uri "pyre_extensions" version))
32072 (sha256
32073 (base32
32074 "0mayv07djjnysznhjnchix3alkz4lxycb20azpaw8mpa2igp35jk"))))
32075 (build-system pyproject-build-system)
32076 (native-inputs (list python-pytest python-setuptools python-wheel))
32077 (propagated-inputs
32078 (list python-typing-extensions python-typing-inspect))
32079 (home-page "https://pyre-check.org")
32080 (synopsis
32081 "Type system extensions for use with @code{python-pyre}")
32082 (description
32083 "@code{python-pyre-extensions} defines extensions to the standard
32084@code{typing} module that are supported by the Pyre typechecker.")
32085 (license license:expat)))
32086
32087(define-public python-pywatchman
32088 (package
32089 (name "python-pywatchman")
32090 (version "3.0.0")
32091 (source
32092 (origin
32093 (method url-fetch)
32094 (uri (pypi-uri "pywatchman" version))
32095 (sha256
32096 (base32 "07lix9z2ib7g4h648wsbp930x5i03akis12mih8p4n0s74bjmlzg"))))
32097 (build-system pyproject-build-system)
32098 (arguments
32099 (list
32100 #:test-backend #~'custom
32101 #:test-flags #~(list "tests/tests.py")))
32102 (native-inputs (list python-setuptools))
32103 (home-page "https://facebook.github.io/watchman/")
32104 (synopsis "Watchman client for python")
32105 (description
32106 "@code{python-pywatchman} is a library to connect and query Watchman to
32107discover file changes.")
32108 (license license:bsd-3)))
32109
32110(define-public python-roundrobin
32111 (package
32112 (name "python-roundrobin")
32113 (version "0.0.4")
32114 (source
32115 (origin
32116 (method git-fetch)
32117 (uri (git-reference
32118 (url "https://github.com/linnik/roundrobin")
32119 (commit version)))
32120 (file-name (git-file-name name version))
32121 (sha256
32122 (base32 "0hdgwavrfj23c61142mnlxz5sd9ayp6svbgj2g4wdpiqy7h49rvr"))))
32123 (build-system pyproject-build-system)
32124 (arguments
32125 (list #:test-backend #~'unittest))
32126 (native-inputs (list python-setuptools))
32127 (home-page "https://github.com/linnik/roundrobin")
32128 (synopsis "Collection of roundrobin utilities")
32129 (description
32130 "This package provides a collection of utilities for round-robin
32131distribution in Python.")
32132 (license license:expat)))
32133
32134(define-public python-helpdev
32135 (package
32136 (name "python-helpdev")
32137 (version "0.7.1")
32138 (source
32139 (origin
32140 (method git-fetch)
32141 (uri (git-reference
32142 (url "https://gitlab.com/dpizetta/helpdev")
32143 (commit (string-append "v" version))))
32144 (file-name (git-file-name name version))
32145 (sha256
32146 (base32 "0mzf0sdgxzn3x56qxgi6kbsx3cydl8h0bdpyn4xyfkw6pyi9g2bd"))))
32147 (build-system pyproject-build-system)
32148 (native-inputs (list python-pip python-pytest python-setuptools))
32149 (home-page "https://gitlab.com/dpizetta/helpdev")
32150 (synopsis "Extract information about the Python environment easily")
32151 (description
32152 "Helpdev is a library to easily extract information about the Python
32153environment.")
32154 (license license:expat)))
32155
32156(define-public python-logutils
32157 (package
32158 (name "python-logutils")
32159 (version "0.3.5")
32160 (source
32161 (origin
32162 (method url-fetch)
32163 (uri (pypi-uri "logutils" version))
32164 (sha256
32165 (base32
32166 "10lsi5wv5ysnvf9ya4ncbix6mmipnv5067sf2cglc2f2sljql1dw"))))
32167 (build-system pyproject-build-system)
32168 (arguments
32169 (list
32170 #:test-flags
32171 ;; XXX: Unclear why this test fails.
32172 #~(list "--deselect=tests/test_adapter.py::AdapterTest::test_hashandlers"
32173 "--ignore=tests/test_redis.py")))
32174 (native-inputs (list python-pytest python-setuptools))
32175 (home-page "https://bitbucket.org/vinay.sajip/logutils/")
32176 (synopsis "Logging utilities")
32177 (description "This package provides a set of handlers for the Python
32178standard library logging package. Some of these handlers are out-of-scope
32179for the standard library, and so they are packaged here. Others are updated
32180versions which have appeared in recent Python releases, but are usable with
32181older versions of Python and so are packaged here.")
32182 (license license:bsd-3)))
32183
32184(define-public python-loguru
32185 (package
32186 (name "python-loguru")
32187 (version "0.7.2")
32188 (source
32189 (origin
32190 (method url-fetch)
32191 (uri (pypi-uri "loguru" version))
32192 (sha256
32193 (base32 "1b2ipp8di3y10gd7kiin9fyazv5rijbfwh3383yk8psi48ssawg6"))))
32194 (build-system pyproject-build-system)
32195 (arguments
32196 (list
32197 #:test-flags
32198 #~(list"--numprocesses" (number->string (parallel-job-count))
32199 ;; All of these fail with: error: Cannot find implementation or
32200 ;; library stub for module named "loguru"
32201 "--ignore=tests/typesafety/test_logger.yml")))
32202 (native-inputs
32203 (list python-freezegun
32204 python-pytest
32205 python-pytest-mypy-plugins
32206 python-pytest-xdist
32207 python-setuptools
32208 python-wheel))
32209 (propagated-inputs
32210 (list python-colorama))
32211 (home-page "https://github.com/Delgan/loguru")
32212 (synopsis "Python logging made (stupidly) simple")
32213 (description "Python logging made (stupidly) simple")
32214 (license license:expat)))
32215
32216(define-public python-helper
32217 (package
32218 (name "python-helper")
32219 (version "2.5.0")
32220 (source
32221 (origin
32222 (method git-fetch)
32223 (uri (git-reference
32224 (url "https://github.com/gmr/helper")
32225 (commit version)))
32226 (file-name (git-file-name name version))
32227 (sha256
32228 (base32 "0zypjv8rncvrsgl200v7d3bn08gs48dwqvgamfqv71h07cj6zngp"))))
32229 (build-system pyproject-build-system)
32230 (arguments (list #:test-backend #~'unittest))
32231 (native-inputs (list python-mock python-setuptools))
32232 (propagated-inputs (list python-logutils python-pyyaml))
32233 (home-page "https://github.com/gmr/helper")
32234 (synopsis "Library for writing configurable applications and daemons")
32235 (description
32236 "This package provides procedures for quickly writing configurable
32237applications and daemons.")
32238 (license license:bsd-3)))
32239
32240(define-public python-qtsass
32241 (package
32242 (name "python-qtsass")
32243 (version "0.4.0")
32244 (source
32245 (origin
32246 ;; There are no tests in the PyPI tarball.
32247 (method git-fetch)
32248 (uri (git-reference
32249 (url "https://github.com/spyder-ide/qtsass/")
32250 (commit (string-append "v" version))))
32251 (file-name (git-file-name name version))
32252 (sha256
32253 (base32 "1skdihfby2f41zxgwa5zv44vdxjrw301rh88rjmzj4xbdlix6cig"))))
32254 (build-system pyproject-build-system)
32255 (native-inputs
32256 (list python-flaky python-pytest python-setuptools python-wheel))
32257 (propagated-inputs
32258 (list python-libsass))
32259 (home-page "https://github.com/spyder-ide/qtsass")
32260 (synopsis "Compile SCSS files to valid Qt stylesheets")
32261 (description
32262 "Besides being used in web development, CSS is also the way to stylize
32263Qt-based desktop applications. However, Qt's CSS has a few variations that
32264prevent the direct use of SASS compiler.
32265
32266The purpose of this tool is to fill the gap between SASS and Qt-CSS by
32267handling those variations.")
32268 (license license:expat)))
32269
32270(define-public python-qdarkstyle
32271 (package
32272 (name "python-qdarkstyle")
32273 (version "3.2.3")
32274 (source
32275 (origin
32276 (method url-fetch)
32277 (uri (pypi-uri "QDarkStyle" version))
32278 (sha256
32279 (base32
32280 "1bpi0asa7sd5ch6x6b60n5yias04nsx6kcwji40228g9lrs7y2qc"))))
32281 (build-system pyproject-build-system)
32282 (native-inputs (list python-pytest
32283 python-qtsass
32284 python-setuptools
32285 python-watchdog
32286 python-wheel))
32287 (propagated-inputs
32288 (list python-qtpy python-pyqt-6))
32289 (home-page "https://github.com/ColinDuquesnoy/QDarkStyleSheet")
32290 (synopsis
32291 "Complete dark stylesheet for Python and Qt applications")
32292 (description "QDarkStyle is the most complete dark stylesheet for Python and
32293Qt applications.")
32294 (license license:expat)))
32295
32296(define-public python-pystray
32297 (package
32298 (name "python-pystray")
32299 (version "0.19.5")
32300 (source
32301 (origin
32302 (method git-fetch)
32303 (uri (git-reference
32304 (url "https://github.com/moses-palmer/pystray")
32305 (commit "1907f8681d6d421517c63d94f425f9cdd74d0034")))
32306 (file-name (git-file-name name version))
32307 (sha256
32308 (base32 "1vj6c8s7rbc7xc4bi5brx5629ls1ri9prcw9290v85hagilmp609"))))
32309 (build-system pyproject-build-system)
32310 (arguments
32311 (list
32312 ;; The test suite requires user interaction, there are no automated
32313 ;; tests.
32314 #:tests? #false
32315 #:phases #~(modify-phases %standard-phases
32316 (add-before 'sanity-check 'use-dummy-backend
32317 (lambda _
32318 ;; Without setting this, pystray tries to connect to
32319 ;; X11 on import.
32320 (setenv "PYSTRAY_BACKEND" "dummy"))))))
32321 (native-inputs (list python-sphinx python-setuptools))
32322 (propagated-inputs (list python-pillow python-six python-xlib))
32323 (home-page "https://github.com/moses-palmer/pystray")
32324 (synopsis "Create a system tray icon")
32325 (description "This library allows you to create a system tray icon.
32326It makes it possible to specify an icon, a title and a callback for when
32327the icon is activated. The icon and title can be changed after the icon
32328has been created, and the visibility of the icon can be toggled.")
32329 (license license:lgpl3+)))
32330
32331(define-public python-bitstring
32332 (package
32333 (name "python-bitstring")
32334 (version "4.3.1")
32335 (source
32336 (origin
32337 (method url-fetch)
32338 (uri (pypi-uri "bitstring" version))
32339 (sha256
32340 (base32 "0nm9l77sgyqai8ggnm6j9yvc473g0l8icaj11x66s8ap72fw12x0"))))
32341 (build-system pyproject-build-system)
32342 (arguments
32343 (list
32344 #:test-flags #~(list "--ignore=tests/test_benchmarks.py"
32345 "--ignore=tests/test_fp8.py"
32346 "--ignore=tests/test_mxfp.py")))
32347 (native-inputs
32348 (list python-gfloat python-pytest python-setuptools python-wheel))
32349 (propagated-inputs
32350 (list python-bitarray))
32351 (home-page "https://github.com/scott-griffiths/bitstring")
32352 (synopsis
32353 "Simple construction, analysis and modification of binary data")
32354 (description
32355 "Bitstring is a library for simple construction, analysis and modification
32356 of binary data.")
32357 (license license:expat)))
32358
32359(define-public python-confuse
32360 (package
32361 (name "python-confuse")
32362 (version "2.0.1")
32363 (source
32364 (origin
32365 (method url-fetch)
32366 (uri (pypi-uri "confuse" version))
32367 (sha256
32368 (base32
32369 "07v1s16nryls3zhaakwz6i6rgdy1c010gk00jsvn5a5a96ns4ybk"))))
32370 (build-system pyproject-build-system)
32371 (native-inputs (list python-flit-core python-pytest))
32372 (propagated-inputs (list python-pyyaml))
32373 (home-page "https://github.com/beetbox/confuse")
32374 (synopsis "Painless YAML configuration")
32375 (description "Confuse is a configuration library for Python that uses
32376YAML. It takes care of defaults, overrides, type checking, command-line
32377integration, human-readable errors, and standard OS-specific locations.")
32378 (license license:expat)))
32379
32380(define-public python-referencing
32381 (package
32382 (name "python-referencing")
32383 (version "0.35.1")
32384 (source
32385 (origin
32386 (method url-fetch)
32387 (uri (pypi-uri "referencing" version))
32388 (sha256
32389 (base32 "0g3hvzz6ci6dcf701q7ilr4b7vw3fw428kqp4nj35dn8lqj23d15"))))
32390 (build-system pyproject-build-system)
32391 (arguments
32392 (list
32393 #:test-flags
32394 '(list "--pyargs" "referencing/tests")
32395 #:phases
32396 '(modify-phases %standard-phases
32397 (add-after 'unpack 'patch-pyproject
32398 (lambda _
32399 ;; The build system does not like this.
32400 (substitute* "pyproject.toml"
32401 ((" \"Topic :: File Formats.*") "")))))))
32402 (propagated-inputs (list python-attrs python-rpds-py))
32403 (native-inputs
32404 (list python-hatchling
32405 python-hatch-vcs
32406 python-jsonschema
32407 python-pytest
32408 python-pytest-subtests))
32409 (home-page "https://github.com/python-jsonschema/referencing")
32410 (synopsis "JSON Referencing + Python")
32411 (description "This package provides an implementation-agnostic
32412implementation of JSON reference resolution.")
32413 (license license:expat)))
32414
32415(define-public python-referencing-bootstrap
32416 (package
32417 (inherit python-referencing)
32418 (name "python-referencing-bootstrap")
32419 (arguments
32420 (list
32421 #:tests? #false
32422 #:phases
32423 '(modify-phases %standard-phases
32424 (add-after 'unpack 'patch-pyproject
32425 (lambda _
32426 ;; The build system does not like this.
32427 (substitute* "pyproject.toml"
32428 ((" \"Topic :: File Formats.*") "")))))))
32429 (native-inputs (list python-hatchling python-hatch-vcs))))
32430
32431(define-public python-reflink
32432 (package
32433 (name "python-reflink")
32434 (version "0.2.2")
32435 (source
32436 (origin
32437 (method git-fetch)
32438 (uri (git-reference
32439 (url "https://gitlab.com/rubdos/pyreflink")
32440 (commit version)))
32441 (file-name (git-file-name name version))
32442 (sha256
32443 (base32 "1ch3n7m1f5nvx9i0jv1fj1i5w1jsl1ga8dxzixg71m34gf4kg3s6"))))
32444 (build-system pyproject-build-system)
32445 (arguments
32446 (list #:tests? #f)) ;almost all tests want to run mkfs.btrfs
32447 (propagated-inputs (list python-cffi))
32448 (native-inputs (list python-pytest python-setuptools))
32449 (home-page "https://gitlab.com/rubdos/pyreflink")
32450 (synopsis "Python wrapper around reflink system call")
32451 (description
32452 "Python reflink wraps around platform specific @code{reflink}
32453implementations.")
32454 (license license:expat)))
32455
32456(define-public python-retry
32457 (package
32458 (name "python-retry")
32459 (version "0.9.2")
32460 (source
32461 (origin
32462 (method git-fetch)
32463 (uri (git-reference
32464 (url "https://github.com/invl/retry")
32465 (commit version)))
32466 (file-name (git-file-name name version))
32467 (sha256
32468 (base32 "1a35ihsn082626592bkjc41fywylzp603j0cxpkbm2f7l1k332xv"))))
32469 (build-system pyproject-build-system)
32470 (arguments
32471 (list
32472 #:phases
32473 #~(modify-phases %standard-phases
32474 (add-before 'build 'set-version
32475 (lambda _
32476 (setenv "PBR_VERSION" #$version))))))
32477 (native-inputs (list python-pbr python-pytest))
32478 (propagated-inputs (list python-decorator python-py))
32479 (home-page "https://github.com/invl/retry")
32480 (synopsis "Retry decorator")
32481 (description
32482 "@code{retry} is an easy to use retry decorator for Python. It can be
32483used to retry a function a given number of times.")
32484 (license license:asl2.0)))
32485
32486(define-public python-crayons
32487 (package
32488 (name "python-crayons")
32489 (version "0.4.0")
32490 (source
32491 (origin
32492 (method git-fetch)
32493 (uri (git-reference
32494 (url "https://github.com/MasterOdin/crayons")
32495 (commit (string-append "v" version))))
32496 (file-name (git-file-name name version))
32497 (sha256
32498 (base32 "0zmls5c67mxyxzlwvagiidlrxy1f6f8kwm5afjsydhn19h4rd7za"))))
32499 (build-system pyproject-build-system)
32500 (arguments
32501 (list
32502 #:test-backend #~'custom
32503 #:test-flags #~(list "test_crayons.py")))
32504 (native-inputs (list python-setuptools))
32505 (propagated-inputs (list python-colorama))
32506 (home-page "https://github.com/MasterOdin/crayons")
32507 (synopsis "TextUI colors for Python")
32508 (description
32509 "This package gives you colored strings for the terminal. Crayons
32510automatically wraps a given string in the foreground color and restores the
32511original state after the string is printed.")
32512 (license license:expat)))
32513
32514(define-public python-sane
32515 (package
32516 (name "python-sane")
32517 (version "2.9.2")
32518 (source
32519 (origin
32520 (method git-fetch)
32521 (uri (git-reference
32522 (url "https://github.com/python-pillow/Sane")
32523 (commit (string-append "v" version))))
32524 (file-name (git-file-name name version))
32525 (sha256
32526 (base32 "0ldc17n1h8awd0flhwhvb5fj0izy5vy18c128saqnm5isq273y9r"))))
32527 (build-system pyproject-build-system)
32528 (arguments (list #:tests? #f)) ; No tests.
32529 (native-inputs (list python-setuptools))
32530 (inputs (list sane))
32531 (home-page "https://github.com/python-pillow/Sane")
32532 (synopsis "Python interface to the SANE scanner")
32533 (description
32534 "This package provides Python interface to the SANE scanner and frame
32535grabber interface.")
32536 (license (license:non-copyleft
32537 ;; Yet another variant of the X/MIT license.
32538 "https://github.com/python-pillow/Sane/blob/master/COPYING"))))
32539
32540(define-public python-scikit-build
32541 (package
32542 (name "python-scikit-build")
32543 (version "0.18.1")
32544 (source
32545 (origin
32546 (method url-fetch)
32547 (uri (pypi-uri "scikit_build" version))
32548 (sha256
32549 (base32 "1rxqzigfacpbcfhf3c1gdqrnqdnq503bx5vpib19km44l32jl5d4"))
32550 (patches
32551 (search-patches "python-scikit-build-setuptools-compat.patch"))))
32552 (build-system pyproject-build-system)
32553 (arguments
32554 (list
32555 #:phases
32556 #~(modify-phases %standard-phases
32557 (add-after 'unpack 'patch-cmake-executable
32558 (lambda* (#:key inputs #:allow-other-keys)
32559 (substitute* "skbuild/constants.py"
32560 (("^(CMAKE_DEFAULT_EXECUTABLE = ).*" _ head)
32561 (format #f "~a ~s~%" head
32562 (search-input-file inputs "bin/cmake"))))))
32563 (add-before 'check 'pre-check
32564 (lambda _
32565 ;; Some tests try to access the network before being skipped.
32566 ;; Skip them by default.
32567 (substitute* "tests/test_setup.py"
32568 (("pytest\\.mark\\.skipif\\(not is_site_reachable.*")
32569 "pytest.mark.isolated()\n"))))
32570 (replace 'check
32571 (lambda* (#:key tests? #:allow-other-keys)
32572 (when tests?
32573 ;; These tests attempt to pull dependencies from the Internet.
32574 (delete-file "tests/test_distribution.py")
32575 (delete-file "tests/test_pep518.py")
32576 ;; The tests marked as "isolate" are tests that require access
32577 ;; to the network.
32578 (invoke "pytest" "-vv" "-m" "not isolated"
32579 "-n" (number->string (parallel-job-count))
32580 "-k" (string-append
32581 ;; These tests attempt to write to read-only
32582 ;; Python install directory.
32583 "not test_install_command "
32584 "and not test_test_command "
32585 "and not test_hello_develop "
32586 ;; These sdist-related tests fail for unknown
32587 ;; reasons (see:
32588 ;; https://github.com/scikit-build/scikit-build/issues/689).
32589 "and not test_hello_sdist_with_base "
32590 "and not test_manifest_in_sdist "
32591 "and not test_hello_sdist "
32592 "and not test_sdist_with_symlinks "
32593 ;; These are not parallel safe and fail
32594 ;; nondeterministically (see:
32595 ;; https://github.com/scikit-build/scikit-build/issues/711).
32596 "and not test_generator_cleanup "
32597 "and not test_generator_selection "
32598 ;; … and there's more of them
32599 "and not test_cxx_compiler "
32600 "and not test_fortran_compiler ")))))
32601 (add-after 'install 'install-cmake
32602 (lambda* (#:key outputs #:allow-other-keys)
32603 (let ((lib (string-append (assoc-ref outputs "out")
32604 "/lib/cmake/modules")))
32605 (mkdir-p lib)
32606 (with-directory-excursion "skbuild/resources/cmake"
32607 (for-each (lambda (file) (install-file file lib))
32608 (find-files "." "\\.cmake")))))))))
32609 (native-inputs
32610 (list cmake-minimal
32611 gfortran
32612 git-minimal/pinned ;for tests
32613 ninja/pinned
32614 python-cython
32615 python-hatch-fancy-pypi-readme
32616 python-hatch-vcs
32617 python-hatchling
32618 python-pytest
32619 python-pytest-mock
32620 python-pytest-xdist
32621 python-requests
32622 python-virtualenv))
32623 (propagated-inputs
32624 (list python-distro
32625 python-packaging
32626 python-wheel))
32627 (home-page "https://github.com/scikit-build/scikit-build")
32628 (synopsis "Build system generator for Python C/C++/Fortran/Cython extensions")
32629 (description "Scikit-build is an improved build system generator for
32630CPython C/C++/Fortran/Cython extensions. It has support for additional
32631compilers, build systems, cross compilation, and locating dependencies and
32632determining their build requirements. The scikit-build package is
32633fundamentally just glue between the @code{setuptools} Python module and
32634CMake.")
32635 (license license:expat)))
32636
32637(define-public python-screenkey
32638 (package
32639 (name "python-screenkey")
32640 (version "1.5")
32641 (source
32642 (origin
32643 (method git-fetch)
32644 (uri (git-reference
32645 (url "https://gitlab.com/screenkey/screenkey")
32646 (commit (string-append "v" version))))
32647 (file-name (git-file-name name version))
32648 (sha256
32649 (base32 "0j719kld4dr85d9lxn0d0b6156mcy09jm7arssfp2n3j6hmjssci"))))
32650 (build-system pyproject-build-system)
32651 (arguments
32652 (list
32653 #:tests? #f ; No tests.
32654 #:phases
32655 #~(modify-phases %standard-phases
32656 (add-after 'unpack 'fix-dlopen-paths
32657 (lambda* (#:key inputs #:allow-other-keys)
32658 (substitute* "Screenkey/xlib.py"
32659 (("(libXtst.so.6|libX11.so.6)" lib)
32660 (search-input-file inputs (string-append "/lib/" lib))))))
32661 (add-after 'install 'wrap-screenkey
32662 (lambda _
32663 (wrap-program (string-append #$output "/bin/screenkey")
32664 `("GUIX_PYTHONPATH" ":" prefix
32665 (,(getenv "GUIX_PYTHONPATH")))
32666 `("GI_TYPELIB_PATH" ":" prefix
32667 (,(getenv "GI_TYPELIB_PATH")))))))))
32668 (inputs (list bash-minimal
32669 gtk+
32670 libx11
32671 libxtst
32672 python-babel
32673 python-dbus-python
32674 python-pycairo
32675 python-pygobject
32676 slop))
32677 (native-inputs (list python-setuptools))
32678 (home-page "https://www.thregr.org/~wavexx/software/screenkey/")
32679 (synopsis "Screencast tool to display pressed keys")
32680 (description
32681 "Screenkey is a screencast tool to display your keys inspired by
32682Screenflick.")
32683 (license license:gpl3+)))
32684
32685(define-public python-jinja2-cli
32686 (package
32687 (name "python-jinja2-cli")
32688 (version "0.8.2")
32689 (source
32690 (origin
32691 (method git-fetch)
32692 (uri (git-reference
32693 (url "https://github.com/mattrobenolt/jinja2-cli")
32694 (commit version)))
32695 (file-name (git-file-name name version))
32696 (sha256
32697 (base32
32698 "03ap7rxc1g302m0wacn47rf65d6dqrawa4maam9yapyr96viif7b"))))
32699 (build-system pyproject-build-system)
32700 (propagated-inputs
32701 (list python-jinja2))
32702 (native-inputs
32703 (list python-flake8
32704 python-jinja2
32705 python-pytest
32706 python-setuptools
32707 python-wheel))
32708 (home-page "https://github.com/mattrobenolt/jinja2-cli")
32709 (synopsis "Command-line interface to Jinja2")
32710 (description
32711 "This package provides a command-line interface (CLI) to the Jinja2
32712template engine.")
32713 (license license:bsd-3)))
32714
32715(define-public python-readability
32716 (package
32717 (name "python-readability")
32718 (version "0.3.1")
32719 (source
32720 (origin
32721 (method git-fetch)
32722 (uri (git-reference
32723 (url "https://github.com/andreasvc/readability/")
32724 (commit (string-append "v" version))))
32725 (file-name (git-file-name name version))
32726 (sha256
32727 (base32 "0m2v4ysy2a7k6j9d85i4n9z6k48rmgmbj1v7r6l2cb5qpa3pwrj5"))))
32728 (build-system pyproject-build-system)
32729 (arguments (list #:tests? #f)) ; No tests.
32730 (native-inputs (list python-setuptools))
32731 (home-page "https://github.com/andreasvc/readability/")
32732 (synopsis "Measure text readability using surface characteristics")
32733 (description
32734 "This package provides a Python library that is an implementation of
32735traditional readability measures based on simple surface characteristics.
32736These measures are basically linear regressions based on the number of words,
32737syllables, and sentences.")
32738 (license license:asl2.0)))
32739
32740(define-public python-readability-lxml
32741 ;; No releases since 2020, see:
32742 ;; <https://github.com/buriy/python-readability/issues/196>.
32743 (package
32744 (name "python-readability-lxml")
32745 (version "0.8.4.1")
32746 (source
32747 (origin
32748 (method git-fetch)
32749 (uri (git-reference
32750 (url "http://github.com/buriy/python-readability")
32751 (commit version)))
32752 (file-name (git-file-name name version))
32753 (sha256
32754 (base32 "1dr567k03ljhwx9pacmynrv47w5vgq9fkgncpm0vlvmby2g0xgdl"))))
32755 (build-system pyproject-build-system)
32756 (native-inputs
32757 (list python-poetry-core
32758 python-pytest))
32759 (propagated-inputs
32760 (list python-chardet
32761 python-cssselect
32762 python-lxml
32763 python-lxml-html-clean)) ;XXX: it sould be part of python-lxml lib
32764 (home-page "http://github.com/buriy/python-readability")
32765 (synopsis "HTML to text parser")
32766 (description
32767 "This package provides classes and function that strip gratuitous markup
32768from web pages to make them easier to read.")
32769 (license license:asl2.0)))
32770
32771(define-public python-listparser
32772 (package
32773 (name "python-listparser")
32774 (version "0.20")
32775 (source
32776 (origin
32777 (method git-fetch)
32778 (uri (git-reference
32779 (url "https://github.com/kurtmckee/listparser")
32780 (commit (string-append "v" version))))
32781 (file-name (git-file-name name version))
32782 (sha256
32783 (base32 "0a69cm0inwqwipvnmf5plbf9rqgy1arl62gxnwc7pg7062p563vs"))))
32784 (build-system pyproject-build-system)
32785 (native-inputs (list python-pytest python-poetry-core))
32786 (home-page "https://github.com/kurtmckee/listparser")
32787 (synopsis "Parse subscription lists in Python")
32788 (description
32789 "This package provides a Python library that can parse OPML, FOAF, and
32790iGoogle subscription lists.")
32791 (license license:expat)))
32792
32793(define-public python-smartypants
32794 (package
32795 (name "python-smartypants")
32796 (version "2.0.2")
32797 (source
32798 (origin
32799 (method url-fetch)
32800 (uri (pypi-uri "smartypants" version))
32801 (sha256
32802 (base32 "1ih0z32xfz45bpjyc27nnx8k4b613cwxyyr9k2v68sfcszhlrmir"))))
32803 (build-system pyproject-build-system)
32804 (native-inputs
32805 (list python-docutils python-pygments python-setuptools))
32806 (home-page "https://github.com/justinmayer/smartypants.py")
32807 (synopsis "Translate punctuation characters into smart quotes")
32808 (description
32809 "@command{smartpants} can perform the following transformations:
32810@enumerate
32811@item Straight quotes ( \" and ' ) into \"curly\" quote HTML entities
32812@item Backticks-style quotes (``like this'') into \"curly\" quote HTML
32813entities
32814@item Dashes (-- and ---) into en- and em-dash entities
32815@item Three consecutive dots (... or . . .) into an ellipsis entity
32816@end enumerate")
32817 (license license:bsd-3)))
32818
32819(define-public python-ld
32820 (package
32821 (name "python-ld")
32822 (version "1.9.0")
32823 (source
32824 (origin
32825 (method git-fetch)
32826 (uri (git-reference
32827 (url "https://github.com/nir0s/ld")
32828 (commit (string-append "v" version))))
32829 (file-name (git-file-name name version))
32830 (sha256
32831 (base32 "16yacjfw701n8dhyi26hps3i7fchbvnq9gcrx7v0fn2lbfzzvq00"))))
32832 (build-system pyproject-build-system)
32833 (arguments
32834 (list
32835 ;; XXX: These tests expect ubuntu distro.
32836 #:test-flags
32837 #~(list "-k" (string-join (list "not test_ubuntu14normal_lsb_release"
32838 "test_ubuntu14nomodules_lsb_release"
32839 "test_trailingblanks_lsb_release")
32840 " and not "))))
32841 (native-inputs (list python-pytest python-setuptools))
32842 (home-page "https://github.com/nir0s/ld")
32843 (synopsis "OS platform information API")
32844 (description
32845 "The ld package provides information about the GNU/Linux distribution it
32846runs on, such as a reliable machine-readable ID, or version information.")
32847 (license license:asl2.0)))
32848
32849(define-public python-quicktions
32850 (package
32851 (name "python-quicktions")
32852 (version "1.22")
32853 (source
32854 (origin
32855 (method git-fetch)
32856 (uri (git-reference
32857 (url "https://github.com/scoder/quicktions")
32858 (commit version)))
32859 (file-name (git-file-name name version))
32860 (sha256
32861 (base32
32862 "0kmbhbmz8cjsjp0lqmsi6a2imr4g9wy8rpfdwzghhs8hb6wj5gwy"))))
32863 (build-system pyproject-build-system)
32864 (native-inputs
32865 (list python-cython python-pytest python-setuptools))
32866 (home-page "https://github.com/scoder/quicktions")
32867 (synopsis "Fast fractions data type for rational numbers")
32868 (description
32869 "This package provides fast fractions data type for rational numbers. It
32870is the cythonized version of @code{fractions.Fraction}.")
32871 (license license:psfl)))
32872
32873(define-public python-pathvalidate
32874 (package
32875 (name "python-pathvalidate")
32876 (version "2.4.1")
32877 (source
32878 (origin
32879 (method git-fetch)
32880 (uri (git-reference
32881 (url "https://github.com/thombashi/pathvalidate")
32882 (commit (string-append "v" version))))
32883 (file-name (git-file-name name version))
32884 (sha256
32885 (base32 "17s9vqmws4sfji4bw6qd4rn7ahzkpj6yp2ia5p6vd8kva8n05h37"))))
32886 (build-system pyproject-build-system)
32887 (native-inputs (list python-allpairspy python-click python-faker
32888 python-pytest python-setuptools))
32889 (home-page "https://github.com/thombashi/pathvalidate")
32890 (synopsis "Sanitize strings representing paths")
32891 (description
32892 "@code{pathvalidate} is a Python library to sanitize/validate strings
32893representing paths or filenames.")
32894 (license license:expat)))
32895
32896(define-public python-escapism
32897 (package
32898 (name "python-escapism")
32899 (version "1.0.1")
32900 (source
32901 (origin
32902 (method git-fetch)
32903 (uri (git-reference
32904 (url "https://github.com/jupyterhub/escapism")
32905 (commit version)))
32906 (file-name (git-file-name name version))
32907 (sha256
32908 (base32 "1447mamrdbyv9v47f9wrc4fyvbwz5qrwl8qrdzqdq3q62q4xrawj"))))
32909 (build-system pyproject-build-system)
32910 (native-inputs (list python-pytest python-setuptools))
32911 (home-page "https://github.com/jupyterhub/escapism")
32912 (synopsis "Simple, generic library for escaping strings")
32913 (description
32914 "This Python library provides a programming interface to, given a set of
32915safe characters and an escape character, escape safe strings and unescape the
32916result.")
32917 (license license:expat)))
32918
32919(define-public python-recommonmark
32920 (package
32921 (name "python-recommonmark")
32922 (version "0.7.1")
32923 (source
32924 (origin
32925 (method url-fetch)
32926 (uri (pypi-uri "recommonmark" version))
32927 (sha256
32928 (base32
32929 "0rvdd2ikdr0yg6cx6594fdzn53cmdc0g0i6qsbcdq8i2kxjdpd5x"))))
32930 (build-system pyproject-build-system)
32931 (arguments
32932 (list
32933 ;; XXX: Some of those fail for no good reason.
32934 #:test-flags #~(list "--ignore=tests/test_sphinx.py")))
32935 (native-inputs (list python-pytest python-setuptools python-wheel))
32936 (propagated-inputs (list python-commonmark python-docutils python-sphinx))
32937 (home-page "https://github.com/readthedocs/recommonmark")
32938 (synopsis "Docutils-compatibility bridge to CommonMark")
32939 (description
32940 "This package provides a docutils-compatibility bridge to CommonMark that
32941lets you write CommonMark inside of Docutils & Sphinx projects.")
32942 (license license:expat)))
32943
32944(define-public python-redo
32945 (package
32946 (name "python-redo")
32947 (version "3.0.0")
32948 (source
32949 (origin
32950 (method git-fetch)
32951 (uri (git-reference
32952 (url "https://github.com/mozilla-releng/redo")
32953 (commit version)))
32954 (file-name (git-file-name name version))
32955 (sha256
32956 (base32 "1sh12f1zbdcafmnqlw25pyirhg78linbb7sxd3vnbdlm92dry0b0"))))
32957 (build-system pyproject-build-system)
32958 (native-inputs
32959 (list python-mock python-pytest python-pytest-asyncio python-setuptools))
32960 (home-page "https://github.com/mozilla-releng/redo")
32961 (synopsis "Utilities to retry Python callables")
32962 (description "Redo provides various means to add seamless ability to
32963retry to any Python callable.")
32964 (license license:mpl2.0)))
32965
32966(define-public python-opcodes
32967 ;; There are no tags in this repo, but 'opcodes/__init__.py' specifies a
32968 ;; version number, which is what we use here.
32969 (let ((commit "0f7c7d63f5e13ce5a89d9acc3934f1b6e247ec1f"))
32970 (package
32971 (name "python-opcodes")
32972 (version "0.3.14") ;from 'opcodes/__init__.py'
32973 (home-page "https://github.com/Maratyszcza/Opcodes")
32974 (source
32975 (origin
32976 (method git-fetch)
32977 (uri (git-reference (url home-page) (commit commit)))
32978 (file-name (git-file-name name version))
32979 (sha256
32980 (base32 "1fvxkr83gfl9f0ikd2wl2lzazzya2qz1hk4yn2a0pq742brbwpys"))))
32981 (build-system pyproject-build-system)
32982 (native-inputs (list python-pytest python-setuptools))
32983 (synopsis "Database of processor instructions and opcodes")
32984 (description
32985 "This project documents instruction sets in a format convenient for
32986tools development. An instruction set is represented by three files:
32987
32988@itemize
32989@item an XML file that describes instructions;
32990@item an XSD file that describes the structure of the XML file;
32991@item a Python module that reads the XML file and represents it as a set of
32992Python objects;
32993@end itemize
32994
32995It currently provides descriptions for most user-mode x86, x86_64, and k1om
32996instructions up to AVX-512 and SHA (including 3dnow!+, XOP, FMA3, FMA4, TBM
32997and BMI2).")
32998 (license license:bsd-2))))
32999
33000(define-public python-cart
33001 (package
33002 (name "python-cart")
33003 (version "1.2.3")
33004 (source
33005 (origin
33006 (method git-fetch)
33007 (uri (git-reference
33008 (url "https://github.com/CybercentreCanada/cart")
33009 (commit (string-append "v" version))))
33010 (file-name (git-file-name name version))
33011 (sha256
33012 (base32 "1064swqylim0nx0msynkqbz6n57n5yy4mmqxl7wd9bsg5mmrxrd1"))))
33013 (build-system pyproject-build-system)
33014 (arguments
33015 (list
33016 #:test-backend #~'unittest))
33017 (native-inputs
33018 (list python-setuptools))
33019 (propagated-inputs
33020 (list python-pycryptodome))
33021 (home-page "https://github.com/CybercentreCanada/cart")
33022 (synopsis "Library for interacting with the CaRT file format")
33023 (description
33024 "This Python library implements the CaRT file format which is commonly
33025used to store and transmit information about computer malware and associated
33026metadata.")
33027 (license license:bsd-2)))
33028
33029(define-public python-ailment
33030 (package
33031 (name "python-ailment")
33032 ;; Must be the same version as python-angr.
33033 (version "9.2.112")
33034 (source
33035 (origin
33036 (method url-fetch)
33037 (uri (pypi-uri "ailment" version))
33038 (sha256
33039 (base32 "1rv8rwvdm7fc9mf8z5hqb54dsj0n7jlnwghd12ll0b2jmh2ix8mn"))))
33040 (build-system pyproject-build-system)
33041 (arguments
33042 `(#:phases (modify-phases %standard-phases
33043 (replace 'check
33044 ;; Many tests are skipped due to cyclic dependencies.
33045 (lambda* (#:key tests? #:allow-other-keys)
33046 (when tests?
33047 (with-directory-excursion "tests"
33048 (invoke "python" "-m" "unittest"))))))))
33049 (native-inputs (list python-setuptools python-wheel))
33050 (home-page "https://github.com/angr/ailment")
33051 (synopsis "The angr intermediate language")
33052 (description
33053 "This Python module implements an @acronym{IL, Intermediate Language},
33054also known as @acronym{IR, Intermediate Representation}, used by the angr
33055binary analysis platform.")
33056 (license license:bsd-2)))
33057
33058(define-public python-cle
33059 (package
33060 (name "python-cle")
33061 ;; Must be the same version as python-angr.
33062 (version "9.2.112")
33063 (source
33064 (origin
33065 (method url-fetch)
33066 (uri (pypi-uri "cle" version))
33067 (sha256
33068 (base32 "11jbvg12wqxz74iy83ax0q8k156xrw6iqv75dix5cpqgacds3gdj"))))
33069 (build-system pyproject-build-system)
33070 (arguments
33071 (list
33072 #:tests? #f))
33073 (propagated-inputs (list python-pefile python-pyelftools python-pyvex
33074 python-sortedcontainers python-cart))
33075 (native-inputs (list python-cffi python-setuptools python-wheel))
33076 (home-page "https://github.com/angr/cle")
33077 (synopsis "Python loader for binaries and their associated libraries")
33078 (description
33079 "CLE loads binaries and their associated libraries, resolves
33080imports and provides an abstraction of process memory the same way as if
33081it was loader by the operating system's loader.")
33082 (license license:bsd-2)))
33083
33084(define-public python-pyvex
33085 (package
33086 (name "python-pyvex")
33087 ;; Must be the same version as python-angr.
33088 (version "9.2.112")
33089 (source
33090 (origin
33091 (method url-fetch)
33092 (uri (pypi-uri "pyvex" version))
33093 (sha256
33094 (base32 "0z1jiflp7h07mfc26am3v7v5z2n6mw9hkfylbs86qgpm93qcf6i3"))))
33095 (build-system pyproject-build-system)
33096 (arguments
33097 (list
33098 #:phases #~(modify-phases %standard-phases
33099 (replace 'check
33100 (lambda* (#:key tests? #:allow-other-keys)
33101 (when tests?
33102 (with-directory-excursion "tests"
33103 (invoke "python" "-m" "unittest")))))
33104
33105 (add-before 'build 'set-cc
33106 (lambda _
33107 (setenv "CC" #$(cc-for-target))
33108 (setenv "CC_NATIVE" "gcc"))))))
33109 (propagated-inputs (list python-archinfo python-bitstring python-cffi))
33110 (native-inputs (list python-setuptools python-wheel))
33111 (home-page "https://github.com/angr/pyvex")
33112 (synopsis "Python interface to libVEX and VEX IR")
33113 (description
33114 "This package provides a Python interface the libVEX and VEX IR.
33115VEX is the intermediate representation (also known as intermediate
33116language) used by the Valgrind analysis tool. As such, VEX is designed
33117to enable all kinds of binary analysis tasks.")
33118 (license license:bsd-2)))
33119
33120(define-public python-claripy
33121 (package
33122 (name "python-claripy")
33123 ;; Must be the same version as python-angr.
33124 (version "9.2.112")
33125 (source
33126 (origin
33127 ;; Fetching from Git as pypi release doesn't include all test files.
33128 (method git-fetch)
33129 (uri (git-reference
33130 (url "https://github.com/angr/claripy")
33131 (commit (string-append "v" version))))
33132 (file-name (git-file-name name version))
33133 (sha256
33134 (base32 "0c6q6imxjwhxn87d9yz8zvyrszk94r25w8x0g1lr6mrpa9bx7wai"))
33135 (modules '((guix build utils)))
33136 (snippet '(begin
33137 (substitute* "setup.cfg"
33138 ;; Relax the z3 version constraint.
33139 ;; See https://github.com/angr/claripy/commit/d1fe2df
33140 (("z3-solver==4.13.0.0")
33141 ""))))))
33142 (build-system pyproject-build-system)
33143 (arguments
33144 `(#:phases (modify-phases %standard-phases
33145 (replace 'check
33146 (lambda* (#:key tests? #:allow-other-keys)
33147 (when tests?
33148 (with-directory-excursion "tests"
33149 (invoke "python" "-m" "unittest"))))))))
33150 (propagated-inputs (list python-cachetools python-decorator python-pysmt
33151 z3))
33152 (native-inputs (list python-setuptools python-wheel))
33153 (home-page "https://github.com/angr/claripy")
33154 (synopsis "Abstraction layer for constraint solvers")
33155 (description
33156 "This Python module provides an abstraction layer for interacting
33157with constraint solvers. Specifically, it is intended to be used with
33158SMT solvers and is built on top of the Z3 solver.")
33159 (license license:bsd-2)))
33160
33161(define-public python-pysmt
33162 (package
33163 (name "python-pysmt")
33164 (version "0.9.6")
33165 (source
33166 (origin
33167 ;; Fetching from Git as pypi release doesn't include all test files.
33168 (method git-fetch)
33169 (uri (git-reference
33170 (url "https://github.com/pysmt/pysmt")
33171 (commit (string-append "v" version))))
33172 (file-name (git-file-name name version))
33173 (sha256
33174 (base32 "0jiw8pa6hfh9ajr953q187qgpdnk3bvaa3wmrxs8ilw5jc41sq8y"))))
33175 (build-system pyproject-build-system)
33176 (arguments
33177 `(#:phases (modify-phases %standard-phases
33178 (add-before 'check 'set-pysmt-solver
33179 (lambda _
33180 (setenv "PYSMT_SOLVER" "z3"))))))
33181 (native-inputs (list python-pytest python-setuptools python-wheel))
33182 (propagated-inputs (list z3))
33183 (home-page "https://github.com/pysmt/pysmt")
33184 (synopsis
33185 "Solver-agnostic library for SMT formula manipulation and solving")
33186 (description
33187 "This Python module provides a solver-agnostic abstraction for
33188working with @acronym{SMT, Satisfiability Modulo Theory} formulas. For example,
33189it allows manipulation and solving such formulas.")
33190 (license license:asl2.0)))
33191
33192(define-public python-rpyc
33193 (package
33194 (name "python-rpyc")
33195 (version "5.3.1")
33196 (source
33197 (origin
33198 ;; Fetching from Git as pypi release doesn't include all test files.
33199 (method git-fetch)
33200 (uri (git-reference
33201 (url "https://github.com/tomerfiliba-org/rpyc")
33202 (commit version)))
33203 (file-name (git-file-name name version))
33204 (sha256
33205 (base32 "15mnp9qkyw3mmxmr5y4kf3xkvxyp00n892vqaqwznr7al35apgnr"))
33206 (snippet '(begin
33207 ;; Disable deploy tests, these rely on OpenSSH and require
33208 ;; configuring the SSH client manually to accept the host key.
33209 (delete-file "tests/test_deploy.py")
33210 ;; Disable tests requiring network access. These tests
33211 ;; presently fail with the error "Network is unreachable".
33212 (delete-file "tests/test_registry.py")))))
33213 (build-system pyproject-build-system)
33214 (arguments
33215 `(#:phases (modify-phases %standard-phases
33216 (replace 'check
33217 (lambda* (#:key tests? #:allow-other-keys)
33218 (when tests?
33219 (with-directory-excursion "tests"
33220 (invoke "python" "-m" "unittest"))))))))
33221 (propagated-inputs (list python-hatchling python-plumbum))
33222 (home-page "https://github.com/tomerfiliba-org/rpyc")
33223 (synopsis
33224 "Remote Python Call (RPyC) is a symmetric distributed computing library")
33225 (description
33226 "This Python module enables remote procedure calls, clustering, and
33227distributed-computing. For this purpose, it makes use of object-proxying, a technique
33228that employs python's dynamic nature, to overcome the physical boundaries between
33229processes and computers, so that remote objects can be manipulated as if they
33230were local.")
33231 (license license:expat)))
33232
33233(define-public python-nampa
33234 (package
33235 (name "python-nampa")
33236 ;; PyPI version is 0.1.1 from 2017. Tag 1.0 on git is from 2020 and still
33237 ;; has 0.1.1 as version. Latest commit is from 2024.
33238 (properties '((commit . "cb6a63aae64324f57bdc296064bc6aa2b99ff99a")
33239 (revision . "0")))
33240 (version (git-version "1.0.0"
33241 (assoc-ref properties 'revision)
33242 (assoc-ref properties 'commit)))
33243 (source
33244 (origin
33245 (method git-fetch)
33246 (uri (git-reference
33247 (url "https://github.com/thebabush/nampa")
33248 (commit (assoc-ref properties 'commit))))
33249 (file-name (git-file-name name version))
33250 (sha256
33251 (base32 "0a3fx0wpch4il1fwv1nan6nsd7bv84b0bs2xxxjacisw3spizlg0"))))
33252 (build-system pyproject-build-system)
33253 (arguments
33254 (list
33255 #:test-flags
33256 #~(list "-k test_random_values")
33257 #:phases
33258 #~(modify-phases %standard-phases
33259 (add-after 'unpack 'patch-tests
33260 (lambda _
33261 ;; Unclear why this top-level __init__.py is here. It seems to
33262 ;; setup a plugin for binaryninja, which Guix does not package.
33263 (delete-file "__init__.py")
33264 ;; Yields tests, which is not allowed anymore.
33265 (substitute* "tests/test_crc.py"
33266 (("yield") "#yield")))))))
33267 (propagated-inputs (list python-future))
33268 (native-inputs (list python-pytest python-setuptools))
33269 (home-page "https://github.com/thebabush/nampa")
33270 (synopsis "Python implementation of IDA Pro's FLIRT technology")
33271 (description
33272 "This Python module implements the @acronym{FLIRT, Fast Library Identification
33273and Recognition Technology}. This technology is useful for identifying
33274common library subroutines in disassembled binaries.")
33275 (license license:lgpl3)))
33276
33277(define-public python-mulpyplexer
33278 (package
33279 (name "python-mulpyplexer")
33280 (version "0.09")
33281 (source
33282 (origin
33283 (method url-fetch)
33284 (uri (pypi-uri "mulpyplexer" version))
33285 (sha256
33286 (base32 "0c5xzci1djy1yi9hxxh8g67l6ms8r7ad7ja20pv8hfbdysdrwkhl"))))
33287 (build-system pyproject-build-system)
33288 (arguments
33289 (list
33290 #:phases
33291 '(modify-phases %standard-phases
33292 (replace 'check
33293 (lambda* (#:key tests? #:allow-other-keys)
33294 (when tests?
33295 (invoke "python" "mulpyplexer.py")))))))
33296 (native-inputs (list python-setuptools python-wheel))
33297 (home-page "https://github.com/zardus/mulpyplexer/")
33298 (synopsis "Multiplexes interactions with lists of Python objects")
33299 (description "This module provides utilities for multiplexing
33300interactions with lists of Python objects.")
33301 (license license:bsd-2)))
33302
33303(define-public python-itanium-demangler
33304 (package
33305 (name "python-itanium-demangler")
33306 (version "1.1")
33307 (source
33308 (origin
33309 (method git-fetch)
33310 (uri (git-reference
33311 ;; PyPI only provides wheels and no source code.
33312 (url "https://github.com/whitequark/python-itanium_demangler")
33313 (commit (string-append "v" version))))
33314 (file-name (git-file-name name version))
33315 (sha256
33316 (base32 "1q47aqm5z3db6pasdzw05d6236vnb8hnapfy88fcmn9dr5ym98r3"))))
33317 (build-system pyproject-build-system)
33318 (arguments
33319 (list
33320 #:phases
33321 #~(modify-phases %standard-phases
33322 (replace 'check
33323 (lambda* (#:key tests? #:allow-other-keys)
33324 (when tests?
33325 (with-directory-excursion "tests"
33326 (invoke "python" "-m" "unittest"))))))))
33327 (native-inputs (list python-setuptools python-wheel))
33328 (home-page "https://github.com/whitequark/python-itanium_demangler/")
33329 (synopsis "Pure Python Itanium C++ ABI demangler")
33330 (description
33331"This Python module provides an implementation of the Itanium C++ ABI symbol
33332mangling language. The demangler generates an abstract syntax tree from
33333mangled symbols, which can be used for directly extracting type information.")
33334 (license license:bsd-0)))
33335
33336(define-public python-angr
33337 (package
33338 (name "python-angr")
33339 (version "9.2.112")
33340 (source
33341 (origin
33342 ;; Fetching from Git as pypi release doesn't include all test files.
33343 (method git-fetch)
33344 (patches (search-patches "python-angr-check-exec-deps.patch"))
33345 (uri (git-reference
33346 (url "https://github.com/angr/angr")
33347 (commit (string-append "v" version))))
33348 (file-name (git-file-name name version))
33349 (sha256
33350 (base32 "1179926xbfh2930laz33p90vj532jk7g2qylzzpw1185yhlf9cis"))))
33351 (build-system pyproject-build-system)
33352 (arguments
33353 (list
33354 #:test-flags
33355 #~(list "-x"
33356 "--dist" "load"
33357 "-n" (number->string (parallel-job-count))
33358 "-k"
33359 ;; test_mips32_missing_offset_in_instructions fails
33360 ;; with capstone 5 and passes with capstone 4. Might
33361 ;; be a capstone regressions, needs investigation.
33362 ;;
33363 ;; test_concrete_memset is a non-deterministic benchmark.
33364 ;; test_similarity_fauxware is flaky.
33365 (string-append
33366 "not test_mips32_missing_offset_in_instructions"
33367 " and not test_concrete_memset"
33368 " and not test_similarity_fauxware"))
33369 #:phases #~(modify-phases %standard-phases
33370 (add-after 'unpack 'patch-tests
33371 (lambda* (#:key inputs #:allow-other-keys)
33372 (let ((coreutils (assoc-ref inputs "coreutils")))
33373 ;; The constraint exists because of a capstone bug for which
33374 ;; we backport a patch, hence we can relax the constraint.
33375 ;;
33376 ;; See https://github.com/angr/angr/issues/4656
33377 (substitute* "setup.cfg"
33378 (("capstone==5.0.0.post1")
33379 "capstone"))
33380 ;; Relax constraint on python-rich, the constraint is too strict,
33381 ;; angr work well with our packaged version of python-rich.
33382 (substitute* "setup.cfg"
33383 (("rich>=13.1.0")
33384 "rich"))
33385 (substitute* "tests/common.py"
33386 (("\\[\"cc\"\\]")
33387 "[\"gcc\"]")))))
33388 (add-before 'check 'check-setup
33389 (lambda _
33390 (copy-recursively
33391 #$(this-package-native-input "binaries")
33392 "../binaries")))
33393 (add-before 'build 'set-cc
33394 (lambda _
33395 (setenv "CC" "gcc"))))))
33396 (propagated-inputs (list python-ailment
33397 python-archinfo
33398 python-cachetools
33399 python-cffi
33400 python-claripy
33401 python-cle
33402 python-colorama
33403 python-cppheaderparser
33404 python-dpkt
33405 python-gitpython
33406 python-mulpyplexer
33407 python-nampa
33408 python-networkx
33409 python-protobuf
33410 python-psutil
33411 python-itanium-demangler
33412 python-pycparser
33413 python-pyvex
33414 python-pyformlang
33415 python-rich
33416 python-rpyc
33417 python-sortedcontainers
33418 python-sqlalchemy
33419 python-sympy
33420 python-unique-log-filter
33421 unicorn-2.0))
33422 (native-inputs `(("python-pytest" ,python-pytest)
33423 ("python-pytest-xdist" ,python-pytest-xdist)
33424 ("python-setuptools" ,python-setuptools)
33425 ("python-wheel" ,python-wheel)
33426 ("binaries"
33427 ;; This repository ships several binaries used only for testing
33428 ;; purpose. The binaries are not executed and not part of the
33429 ;; angr distribution, they are only used to test angr's binary
33430 ;; analysis capabilities. In the context of the GNU FSDG, these
33431 ;; files should be considered non-functional data.
33432 ,(origin
33433 (method git-fetch)
33434 (uri (git-reference (url
33435 "https://github.com/angr/binaries")
33436 (commit (string-append "v"
33437 version))))
33438 (file-name (git-file-name "angr-binaries" version))
33439 (sha256 (base32
33440 "0bxzf6alkczv9r0151ksvcwyksnw8077acz1wd8drbxw0zl0qnmr"))))))
33441 (home-page "https://github.com/angr/angr")
33442 (synopsis "Multi-architecture binary analysis toolkit")
33443 (description
33444 "This package provides a versatile binary analysis platform with the
33445ability to perform dynamic symbolic execution as well as various
33446static analyses directly on binaries. As such, it can be used for all
33447kinds of reverse engineering, vulnerability discovery, exploit
33448generation, and software testing purposes.")
33449 (license license:bsd-2)))
33450
33451(define-public python-peachpy
33452 ;; There is no tag in this repo.
33453 (let ((commit "349e8f836142b2ed0efeb6bb99b1b715d87202e9")
33454 (version "0.2.0") ;from 'peachpy/__init__.py'
33455 (revision "3"))
33456 (package
33457 (name "python-peachpy")
33458 (version (git-version version revision commit))
33459 (home-page "https://github.com/Maratyszcza/PeachPy")
33460 (source (origin
33461 (method git-fetch)
33462 (uri (git-reference (url home-page) (commit commit)))
33463 (file-name (git-file-name name version))
33464 (sha256
33465 (base32
33466 "16pnkghmqjc7pbws0yhyrwlz43d5pffb5c6v2bb4jk0j537gwzbi"))
33467 (patches (search-patches "python-peachpy-determinism.patch"))))
33468 (build-system pyproject-build-system)
33469 (arguments
33470 ;; The issue is known and the test will probably never be fixed.
33471 ;; https://github.com/Maratyszcza/PeachPy/issues/131
33472 (list #:test-flags ''("--ignore=tests/arm/test_arm.py")))
33473 (native-inputs
33474 (list python-pytest python-setuptools python-wheel))
33475 (propagated-inputs
33476 (list python-six python-opcodes))
33477 (synopsis "Efficient assembly code generation in Python")
33478 (description
33479 "PeachPy is a Python framework for writing high-performance assembly kernels.
33480PeachPy aims to simplify writing optimized assembly kernels while preserving
33481all optimization opportunities of traditional assembly.
33482
33483PeachPy can generate ELF, MS-COFF, Mach-O object files, and assembly listings
33484for the Go language tool chain; it adapts to different calling conventions and
33485application binary interfaces (ABIs); it takes care of register allocation; it
33486supports x86_64 instructions up to AVX-512 and SHA.")
33487 (supported-systems '("x86_64-linux"))
33488 (license license:bsd-2))))
33489
33490(define-public python-sgmllib3k
33491 (let ((commit "799964676f35349ca2dd04503e34c2b3ad522c0d")
33492 (revision "1"))
33493 (package
33494 (name "python-sgmllib3k")
33495 (version
33496 (git-version "1.0.0" revision commit))
33497 (source
33498 (origin
33499 (method git-fetch)
33500 (uri (git-reference
33501 (url "https://github.com/hsoft/sgmllib")
33502 (commit commit)))
33503 (file-name (git-file-name name version))
33504 (sha256
33505 (base32
33506 "0bzf6pv85dzfxfysm6zbj8m40hp0xzr9h8qlk4hp3nmy88rznqvr"))
33507 (patches (search-patches "python-sgmllib3k-assertions.patch"))))
33508 (build-system pyproject-build-system)
33509 (native-inputs (list python-pytest python-setuptools))
33510 (home-page "https://github.com/hsoft/sgmllib")
33511 (synopsis "Python 3 port of sgmllib")
33512 (description "This package provides an unmaintained port of sgmllib to
33513Python 3. It is used to parse text files formatted in @acronym{SGML,Standard
33514Generalized Mark-up Language}.")
33515 (license license:bsd-3))))
33516
33517(define-public python-cwcwidth
33518 (package
33519 (name "python-cwcwidth")
33520 (version "0.1.10")
33521 (source
33522 (origin
33523 (method url-fetch)
33524 (uri (pypi-uri "cwcwidth" version))
33525 (sha256
33526 (base32 "0951lwciwslnzcvfvnk9daiiwh00q15qbcmjw5xi1x61f87pcs3l"))))
33527 (build-system pyproject-build-system)
33528 (arguments
33529 (list
33530 #:phases
33531 #~(modify-phases %standard-phases
33532 (add-before 'check 'remove-local-cwcwidth
33533 (lambda _
33534 ;; This would otherwise interfere with finding the installed
33535 ;; cwcwidth when running tests.
33536 (delete-file-recursively "cwcwidth"))))))
33537 (native-inputs
33538 (list python-cython
33539 python-pytest
33540 python-setuptools
33541 python-setuptools-scm))
33542 (home-page "https://github.com/sebastinas/cwcwidth")
33543 (synopsis "Python bindings for wc(s)width")
33544 (description
33545 "This package provides bindings for wcwidth and wcswidth functions
33546defined in POSIX.1-2001 and POSIX.1-2008.")
33547 (license license:expat)))
33548
33549(define-public python-pyan3
33550 (package
33551 (name "python-pyan3")
33552 (version "1.2.0")
33553 (source
33554 (origin
33555 ;; Source tarball on PyPI lacks tests.
33556 (method git-fetch)
33557 (uri (git-reference
33558 (url "https://github.com/Technologicat/pyan")
33559 (commit (string-append "v" version))))
33560 (file-name (git-file-name name version))
33561 (sha256
33562 (base32
33563 "1367x25rcy2y8f0x9c2dbxl2qgdln3arr7ddyzybz2c28g6jrv5z"))
33564 (patches (search-patches "python-pyan3-fix-positional-arguments.patch"
33565 "python-pyan3-fix-absolute-path-bug.patch"))))
33566 (build-system pyproject-build-system)
33567 (native-inputs
33568 (list python-pytest python-pytest-cov python-setuptools python-wheel))
33569 (propagated-inputs
33570 (list python-jinja2))
33571 (home-page "https://github.com/Technologicat/pyan")
33572 (synopsis "Offline call graph generator for Python 3")
33573 (description "Pyan takes one or more Python source files, performs
33574a (rather superficial) static analysis, and constructs a directed graph of the
33575objects in the combined source, and how they define or use each other. The
33576graph can be output for rendering by GraphViz or yEd.")
33577 (license license:gpl2)))
33578
33579(define-public python-multipledispatch
33580 (package
33581 (name "python-multipledispatch")
33582 (version "1.0.0")
33583 (source
33584 (origin
33585 (method git-fetch) ;no tests in PyPI archive
33586 (uri (git-reference
33587 (url "https://github.com/mrocklin/multipledispatch")
33588 (commit version)))
33589 (file-name (git-file-name name version))
33590 (sha256
33591 (base32 "0dfnav03bgrp5sxn53gyp4kfagcicm3pz98cj056rf9s6k5006s7"))))
33592 (build-system pyproject-build-system)
33593 (native-inputs
33594 (list python-pytest
33595 python-pytest-benchmark
33596 python-setuptools))
33597 (home-page "https://github.com/mrocklin/multipledispatch/")
33598 (synopsis "Multiple dispatch for Python based on pattern matching")
33599 (description
33600 "This library provides an efficient mechanism for overloading function
33601implementations based on the types of the arguments.")
33602 (license license:bsd-3)))
33603
33604(define-public python-multimethod
33605 (package
33606 (name "python-multimethod")
33607 (version "1.10")
33608 (source
33609 (origin
33610 ;; No tests in the PyPI tarball.
33611 (method git-fetch)
33612 (uri (git-reference
33613 (url "https://github.com/coady/multimethod")
33614 (commit (string-append "v" version))))
33615 (file-name (git-file-name name version))
33616 (sha256
33617 (base32 "07xv92q7f4bkp6dzkqvcv0zxr11729qdak4s3ldmbhdwgsf44g5h"))))
33618 (build-system pyproject-build-system)
33619 (native-inputs (list python-pytest python-setuptools python-wheel))
33620 (home-page "https://github.com/coady/multimethod")
33621 (synopsis "Python support for multiple argument dispatching")
33622 (description
33623 "This package provides a decorator for adding multiple argument
33624dispatching to functions. The decorator creates a multimethod object as
33625needed and registers the function with its annotations.")
33626 (license license:asl2.0)))
33627
33628(define-public python-logical-unification
33629 (package
33630 (name "python-logical-unification")
33631 (version "0.4.6")
33632 (source
33633 (origin
33634 (method git-fetch)
33635 (uri (git-reference
33636 (url "https://github.com/pythological/unification")
33637 (commit (string-append "v" version))))
33638 (file-name (git-file-name name version))
33639 (sha256
33640 (base32 "1pciaw3vd7awcnszkqda7l17y3gdzb8ca2cr4p5j0x3b8r28izx8"))))
33641 (build-system pyproject-build-system)
33642 (arguments
33643 (list
33644 #:phases
33645 #~(modify-phases %standard-phases
33646 (add-after 'unpack 'versioneer
33647 (lambda _
33648 (invoke "versioneer" "install")
33649 (substitute* "setup.py"
33650 (("version=versioneer.get_version\\(),")
33651 (format #f "version=~s," #$version))))))))
33652 (native-inputs
33653 (list python-pytest
33654 python-pytest-benchmark
33655 python-setuptools
33656 python-versioneer
33657 python-wheel))
33658 (propagated-inputs
33659 (list python-multipledispatch
33660 python-toolz))
33661 (home-page "https://github.com/pythological/unification/")
33662 (synopsis "Logical unification in Python for solving symbolic expressions")
33663 (description "This library provides algorithms and data types for solving
33664symbolic expressions in pure Python using the technique of logical unification.")
33665 (license license:bsd-3)))
33666
33667(define-public python-looseversion
33668 (package
33669 (name "python-looseversion")
33670 (version "1.3.0")
33671 (source
33672 (origin
33673 (method url-fetch)
33674 (uri (pypi-uri "looseversion" version))
33675 (sha256
33676 (base32 "17k625ws83lwksa7yyy4mn0i39lmxgrzxihn22l335dvyvrnbppb"))))
33677 (build-system pyproject-build-system)
33678 (arguments
33679 (list
33680 ;; No tests provided.
33681 #:tests? #f))
33682 (native-inputs
33683 (list python-hatchling))
33684 (home-page "https://github.com/effigies/looseversion")
33685 (synopsis "Version numbering for anarchists and software realists")
33686 (description
33687 "This package provides a drop-in replacement for the original
33688@code{LooseVersion}. It implements an identical interface and comparison
33689logic to @code{LooseVersion}. The only major change is that a
33690@code{looseversion.LooseVersion} is comparable to a
33691@code{distutils.version.LooseVersion}, which means tools should not need to
33692worry whether all dependencies that use LooseVersion have migrated.")
33693 (license license:psfl)))
33694
33695(define-public python-cons
33696 (package
33697 (name "python-cons")
33698 (version "0.4.7")
33699 (source
33700 (origin
33701 (method git-fetch) ;no tests in PyPI archive
33702 (uri (git-reference
33703 (url "https://github.com/pythological/python-cons")
33704 (commit (string-append "v" version))))
33705 (file-name (git-file-name name version))
33706 (sha256
33707 (base32 "07a1gkvc5p3qi55vczhicz3k5bs1c6jdkw6vrrnxrygg357fabh5"))))
33708 (build-system pyproject-build-system)
33709 (arguments
33710 (list
33711 #:phases
33712 #~(modify-phases %standard-phases
33713 (add-before 'build 'set-version
33714 (lambda _
33715 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
33716 (native-inputs
33717 (list python-pytest
33718 python-setuptools
33719 python-setuptools-scm
33720 python-wheel))
33721 (propagated-inputs
33722 (list python-logical-unification))
33723 (home-page "https://github.com/pythological/python-cons")
33724 (synopsis "Cons cell data structures and related algorithms for Python")
33725 (description
33726 "This library implements algorithms and data structures for Lisp-style
33727cons cells in Python.")
33728 (license license:lgpl3+)))
33729
33730(define-public python-etuples
33731 (package
33732 (name "python-etuples")
33733 (version "0.3.10")
33734 (source
33735 (origin
33736 (method url-fetch)
33737 (uri (pypi-uri "etuples" version))
33738 (sha256
33739 (base32 "0rqi0ml2az23ly5wanymgrfsnzm6dd6wxgric8a3fa42gqfyiz96"))))
33740 (build-system pyproject-build-system)
33741 (arguments
33742 (list
33743 #:test-flags
33744 ;; assert False == {~_1: <built-in function add>}
33745 #~(list "--deselect=tests/test_dispatch.py::test_unification")))
33746 (native-inputs
33747 (list python-pytest
33748 python-setuptools
33749 python-setuptools-scm))
33750 (propagated-inputs
33751 (list python-cons
33752 python-multipledispatch))
33753 (home-page "https://github.com/pythological/etuples")
33754 (synopsis "S-expressions in Python")
33755 (description
33756 "This library implements eval'able S-expression in Python using tuple-like objects.")
33757 (license license:asl2.0)))
33758
33759(define-public python-minikanren
33760 (package
33761 (name "python-minikanren")
33762 (version "1.0.5")
33763 (source
33764 (origin
33765 (method git-fetch)
33766 (uri (git-reference
33767 (url "https://github.com/pythological/kanren")
33768 (commit (string-append "v" version))))
33769 (file-name (git-file-name name version))
33770 (sha256
33771 (base32 "1fsy5dlkyghz2qvjwc5pv4arxzvczn7s4bmy0fwk5xzxljc3894l"))))
33772 (build-system pyproject-build-system)
33773 (arguments
33774 (list
33775 ;; 60 passed, 3 skipped, 23 deselected
33776 #:test-flags
33777 #~(list "-k" (string-join
33778 ;; XXX: 16 tests fail with assertion not equal, check why.
33779 (list "not test_basics"
33780 "test_eq_assoc"
33781 "test_eq_assoccomm"
33782 "test_eq_comm"
33783 "test_map_anyo"
33784 "test_map_anyo_misc"
33785 "test_map_anyo_reverse"
33786 "test_reduceo"
33787 "test_walko"
33788 "test_walko_reverse")
33789 " and not "))))
33790 (native-inputs
33791 (list python-pytest
33792 python-setuptools))
33793 (propagated-inputs
33794 (list python-cons
33795 python-etuples
33796 python-logical-unification
33797 python-multipledispatch
33798 python-toolz
33799 python-typing-extensions))
33800 (home-page "https://github.com/pythological/kanren")
33801 (synopsis "Relational logic programming in pure Python")
33802 (description
33803 "The minikanren library provides an algorithmic core for computer algebra
33804systems in Python.")
33805 (license license:bsd-3)))
33806
33807(define-public python-dotenv
33808 (package
33809 (name "python-dotenv")
33810 (version "1.1.1")
33811 (source
33812 (origin
33813 (method url-fetch)
33814 (uri (pypi-uri "python_dotenv" version))
33815 (sha256
33816 (base32 "1aw9c5gw2gfjf7n3s7k6lb6ybz090hh60wq0daz4azr52sbkk9m8"))))
33817 (build-system pyproject-build-system)
33818 (native-inputs
33819 (list python-pytest
33820 python-setuptools
33821 python-sh))
33822 (propagated-inputs
33823 (list python-click))
33824 (home-page "https://saurabh-kumar.com/python-dotenv/")
33825 (synopsis "Setup environment variables according to .env files")
33826 (description
33827 "This package provides the @code{python-dotenv} Python module to read
33828key-value pairs from a @code{.env} file and set them as environment variables.")
33829 (license license:bsd-3)))
33830
33831;; Old version just for docker-compose; remove once that is updated.
33832(define-public python-dotenv-0.13.0
33833 (package (inherit python-dotenv)
33834 (name "python-dotenv")
33835 (version "0.13.0")
33836 (source
33837 (origin
33838 (method url-fetch)
33839 (uri (pypi-uri "python-dotenv" version))
33840 (sha256
33841 (base32
33842 "0x5dagmfn31phrbxlwacw3s4w5vibv8fxqc62nqcdvdhjsy0k69v"))))
33843 (arguments
33844 `(#:phases
33845 (modify-phases %standard-phases
33846 (replace 'check
33847 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
33848 (when tests?
33849 (add-installed-pythonpath inputs outputs)
33850 (setenv "PATH" (string-append (getenv "PATH") ":"
33851 (assoc-ref outputs "out") "/bin"))
33852 ;; Skip the ipython tests.
33853 (delete-file "tests/test_ipython.py")
33854 (invoke "python" "-m" "pytest")))))))
33855 (native-inputs
33856 (modify-inputs (package-native-inputs python-dotenv)
33857 (append python-mock)
33858 (replace "python-sh" python-sh-1)))))
33859
33860(define-public python-braintree
33861 (package
33862 (name "python-braintree")
33863 (version "4.40.0")
33864 (source
33865 (origin
33866 (method url-fetch)
33867 (uri (pypi-uri "braintree" version))
33868 (sha256
33869 (base32 "0pjllhyx9ymad9nspaviysda4pb5cbl83c6fq4bhwl6khzyh0bkr"))))
33870 (build-system pyproject-build-system)
33871 (arguments (list #:tests? #f)) ; No tests.
33872 (native-inputs (list python-setuptools))
33873 (propagated-inputs (list python-requests))
33874 (home-page
33875 "https://developers.braintreepayments.com/python/sdk/server/overview")
33876 (synopsis "Braintree Python Library")
33877 (description
33878 "The Braintree Python SDK provides integration access to the Braintree
33879Gateway. Braintree is a US-based payments service provider.")
33880 (license license:expat)))
33881
33882(define-public python-markuppy
33883 (package
33884 (name "python-markuppy")
33885 (version "1.18")
33886 (source
33887 (origin
33888 (method git-fetch)
33889 (uri (git-reference
33890 (url "https://github.com/tylerbakke/MarkupPy")
33891 (commit (string-append "v" version))))
33892 (file-name (git-file-name name version))
33893 (sha256
33894 (base32 "0rbxh7dzrqd1xrxbxxbyjslqfaxxyv17ppr9zcjig8yw631k0a51"))))
33895 (build-system pyproject-build-system)
33896 (native-inputs (list python-pytest python-setuptools))
33897 (home-page "https://github.com/tylerbakke/MarkupPy")
33898 (synopsis "Pythonic HTML/XML generator")
33899 (description
33900 "This Python module attempts to make it easier to generate HTML/XML from
33901a Python program in an customizable and pythonic way.")
33902 (license license:expat)))
33903
33904(define-public python-csb43
33905 (package
33906 (name "python-csb43")
33907 (version "1.0.0")
33908 (source
33909 (origin
33910 (method git-fetch)
33911 (uri (git-reference
33912 (url "https://bitbucket.org/wmj/csb43")
33913 (commit version)))
33914 (file-name (git-file-name name version))
33915 (sha256
33916 (base32 "030lncdmrcvzgp8v1jw04snnplqxlwf3vikzd0a3jbk5sgrp2cih"))))
33917 (build-system pyproject-build-system)
33918 (arguments
33919 (list
33920 ;; tests: 15102 passed, 36 skipped, 5489 warnings
33921 #:phases
33922 #~(modify-phases %standard-phases
33923 (add-after 'unpack 'set-version
33924 (lambda _
33925 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
33926 (native-inputs
33927 (list python-lxml
33928 python-pytest
33929 python-setuptools
33930 python-setuptools-scm))
33931 (propagated-inputs
33932 (list python-deprecated
33933 python-pycountry
33934 python-pyyaml
33935 python-tablib))
33936 (home-page "https://bitbucket.org/wmj/csb43")
33937 (synopsis "Tools for converting from the Spanish banks' format CSB norm
3393843 (CSB43)")
33939 (description
33940 "This package provides tools to convert files in the format used by
33941multiple Spanish banks (standard 43 of the Spanish Banking Council [CSB43] /
33942Spanish Banking Association [AEB43]) to other formats.
33943
33944Supported output formats are: OFX, HomeBank CSV, HTML, JSON, ODS (OpenDocument
33945spreadsheet), CSV, TSV, XLS, XLSX (Microsoft Excel spreadsheet), and YAML.")
33946 (license license:lgpl3)))
33947
33948(define-public python-csb43-0.10
33949 ;; XXX: 1.0.0 doesn't provide csb43 module where 0.10.1 contains: aeb43, csb43,
33950 ;; homebank, i18n, ofx, and utils.
33951 (package
33952 (inherit python-csb43)
33953 (name "python-csb43")
33954 (version "0.10.1")
33955 (source
33956 (origin
33957 (method git-fetch)
33958 (uri (git-reference
33959 (url "https://bitbucket.org/wmj/csb43")
33960 (commit version)))
33961 (file-name (git-file-name name version))
33962 (sha256
33963 (base32 "0frxcclz7scpndrr7ygqy6k41bcwgwam26yk7n1cnwyim2wkaykd"))))
33964 (arguments
33965 (list
33966 ;; tests: 15493 passed, 37 skipped, 7447 warnings
33967 #:phases
33968 #~(modify-phases %standard-phases
33969 (add-after 'unpack 'set-version
33970 (lambda _
33971 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))))
33972
33973(define-public python-febelfin-coda
33974 (package
33975 (name "python-febelfin-coda")
33976 (version "0.3.0")
33977 (source
33978 (origin
33979 (method hg-fetch)
33980 (uri (hg-reference
33981 (url "https://foss.heptapod.net/tryton/coda")
33982 (changeset version)))
33983 (file-name (string-append name "-" version "-checkout"))
33984 (sha256
33985 (base32 "0rnr2xvwr174dbjixaw5h8bjw5ay5knfbry5qhk7wj8vkh538c13"))))
33986 (build-system pyproject-build-system)
33987 (arguments
33988 (list
33989 #:test-backend #~'unittest
33990 #:phases
33991 #~(modify-phases %standard-phases
33992 (add-after 'install 'remove-installed-tests
33993 (lambda* (#:key inputs outputs #:allow-other-keys)
33994 (with-directory-excursion (site-packages inputs outputs)
33995 (for-each delete-file
33996 (list "coda/test.py"
33997 "coda/test_readme.py"))))))))
33998 (native-inputs (list python-setuptools))
33999 (home-page "https://coda.b2ck.com/")
34000 (synopsis "Module to parse Belgian CODA files")
34001 (description
34002 "This package provides a module to parse Coded statement of account
34003(CODA) files as defined be the Belgian Febelfin bank standard.")
34004 (license license:bsd-3)))
34005
34006(define-public python-ofxparse
34007 (package
34008 (name "python-ofxparse")
34009 (version "0.21")
34010 (source
34011 (origin
34012 (method url-fetch)
34013 (uri (pypi-uri "ofxparse" version))
34014 (sha256
34015 (base32 "19y4sp5l9jqiqzzlbqdfiab42qx7d84n4xm4s7jfq397666vcyh5"))))
34016 (build-system pyproject-build-system)
34017 (native-inputs (list python-pynose python-setuptools))
34018 (propagated-inputs (list python-beautifulsoup4 python-lxml python-six))
34019 (home-page "http://sites.google.com/site/ofxparse")
34020 (synopsis "Tools for working with the OFX (Open Financial Exchange) file
34021format")
34022 (description "@code{ofxparse} is a parser for Open Financial
34023Exchange (.ofx) format files. OFX files are available from almost any online
34024banking site, so they work well if you want to pull together your finances
34025from multiple sources. Online trading accounts also often provide account
34026statements in OFX files.")
34027 (license license:expat)))
34028
34029(define-public python-rfc3339-validator
34030 (package
34031 (name "python-rfc3339-validator")
34032 (version "0.1.4")
34033 (source
34034 (origin
34035 (method url-fetch)
34036 (uri (pypi-uri "rfc3339_validator" version))
34037 (sha256
34038 (base32 "0srg0b89aikzinw72s433994k5gv5lfyarq1adhas11kz6yjm2hk"))))
34039 (build-system pyproject-build-system)
34040 (native-inputs
34041 (list python-pytest
34042 python-setuptools
34043 python-strict-rfc3339))
34044 (propagated-inputs
34045 (list python-six))
34046 (home-page "https://github.com/naimetti/rfc3339-validator")
34047 (synopsis "Python RFC3339 validator")
34048 (description "This package provides a pure Python RFC3339 validator.")
34049 (license license:expat)))
34050
34051(define-public python-platformdirs
34052 (package
34053 (name "python-platformdirs")
34054 (version "4.3.6")
34055 (source
34056 (origin
34057 (method url-fetch)
34058 (uri (pypi-uri "platformdirs" version))
34059 (sha256
34060 (base32 "01xrwajkmxv3jp6n14y8jndkrhb48p9kxknkmwch8nw8pjnb4zrm"))))
34061 (build-system pyproject-build-system)
34062 (native-inputs
34063 (list python-appdirs
34064 python-hatchling
34065 python-hatch-vcs
34066 python-pytest
34067 python-pytest-mock))
34068 (home-page "https://github.com/platformdirs/platformdirs")
34069 (synopsis "Determine the appropriate platform-specific directories")
34070 (description "When writing applications, finding the right location to
34071store user data and configuration varies per platform. Even for
34072single-platform apps, there may by plenty of nuances in figuring out the right
34073location. This small Python module determines the appropriate
34074platform-specific directories, e.g. the ``user data dir''.")
34075 (license license:expat)))
34076
34077(define-public python-json2html
34078 (package
34079 (name "python-json2html")
34080 (version "1.3.0")
34081 (source
34082 (origin
34083 (method git-fetch)
34084 (uri (git-reference
34085 (url "https://github.com/softvar/json2html")
34086 (commit (string-append "v" version))))
34087 (file-name (git-file-name name version))
34088 (sha256
34089 (base32 "1ncypljnl5y8lsxy6ibcqy412kx3mzxl4ajg67568hvq98kv1sb3"))))
34090 (build-system pyproject-build-system)
34091 (arguments
34092 (list
34093 #:test-backend #~'custom
34094 #:test-flags #~(list "test/run_tests.py")))
34095 (native-inputs (list python-setuptools))
34096 (home-page "https://github.com/softvar/json2html")
34097 (synopsis "Convert JSON to HTML table")
34098 (description
34099 "@code{python-json2html} is a python module to convert JSON into a human
34100readable HTML table representation.")
34101 (license license:expat)))
34102
34103(define-public python-face
34104 (package
34105 (name "python-face")
34106 (version "24.0.0")
34107 (source
34108 (origin
34109 (method git-fetch)
34110 (uri (git-reference
34111 (url "https://github.com/mahmoud/face")
34112 (commit (string-append "v" version))))
34113 (file-name (git-file-name name version))
34114 (sha256
34115 (base32 "1ps34r3w93rrviwj8xq7ji9l2z301zzny2gx6nrwvgxr8h6bv0kp"))))
34116 (build-system pyproject-build-system)
34117 (native-inputs (list python-pytest python-setuptools))
34118 (propagated-inputs (list python-boltons))
34119 (home-page "https://github.com/mahmoud/face")
34120 (synopsis "CLI parsing and dispatching microframework")
34121 (description "@code{python-face} is a Pythonic microframework for building
34122command-line applications.
34123
34124@itemize
34125@item First-class subcommand support
34126@item Powerful middleware architecture
34127@item Separate parser layer
34128@item Built-in flagfile support
34129@item Handy testing utilities
34130@item Themeable help display
34131@end itemize")
34132 (license license:bsd-3)))
34133
34134(define-public python-glom
34135 (package
34136 (name "python-glom")
34137 (version "24.11.0")
34138 (source
34139 (origin
34140 (method git-fetch)
34141 (uri (git-reference
34142 (url "https://github.com/mahmoud/glom")
34143 (commit (string-append "v" version))))
34144 (file-name (git-file-name name version))
34145 (sha256
34146 (base32 "0vjj6wjxzms947nvbxrlz2cyn0m6483p1laqvcwr8fc117nzary0"))))
34147 (build-system pyproject-build-system)
34148 (native-inputs
34149 (list python-pytest
34150 python-pyyaml
34151 python-setuptools))
34152 (propagated-inputs
34153 (list python-attrs
34154 python-boltons
34155 python-face))
34156 (home-page "https://github.com/mahmoud/glom")
34157 (synopsis "Declaratively restructure data")
34158 (description "Real applications have real data, and real data
34159nests---objects inside of objects inside of lists of objects. glom is a new
34160and powerful way to handle real-world data, featuring:
34161
34162@itemize
34163@item Path-based access to nested data structures
34164@item Readable, meaningful error messages
34165@item Declarative data transformation, using lightweight, Pythonic specifications
34166@item Built-in data exploration and debugging features
34167@end itemize")
34168 (license license:bsd-3)))
34169
34170(define-public python-box
34171 (package
34172 (name "python-box")
34173 (version "7.3.2")
34174 (source
34175 (origin
34176 (method git-fetch)
34177 (uri
34178 (git-reference
34179 (url "https://github.com/cdgriffith/Box")
34180 (commit version)))
34181 (file-name (git-file-name name version))
34182 (sha256
34183 (base32 "0nr8cajrhdwxm3ac5gclajqck7xywlpqnwvff072va5ki0if6lv9"))))
34184 (build-system pyproject-build-system)
34185 (arguments
34186 (list #:test-flags #~(list "-k" "not test_to_yaml_ruamel")))
34187 (native-inputs
34188 (list python-pytest
34189 python-setuptools))
34190 (propagated-inputs
34191 (list python-msgpack
34192 python-ruamel.yaml
34193 python-tomli-w))
34194 (home-page "https://github.com/cdgriffith/Box")
34195 (synopsis "Advanced Python dictionaries with dot notation access")
34196 (description
34197 "This package provides the @code{python-box} Python module.
34198It implements advanced Python dictionaries with dot notation access.")
34199 (license license:expat)))
34200
34201(define-public python-fields
34202 (let ((commit "cb473d126b926621c4423ecf59387da9f0f26563")
34203 (revision "0"))
34204 (package
34205 (name "python-fields")
34206 (version (git-version "5.0.0" revision commit))
34207 (source
34208 (origin
34209 (method git-fetch)
34210 (uri (git-reference
34211 (url "https://github.com/ionelmc/python-fields")
34212 (commit commit)))
34213 (file-name (git-file-name name version))
34214 (sha256
34215 (base32 "1hc39l7ypwn4n11wfdhr8z0m46c96k99lnvw65bw8yadm2f93s9r"))))
34216 (build-system pyproject-build-system)
34217 (arguments
34218 (list #:test-flags #~(list "--ignore=tests/test_perf.py")))
34219 (native-inputs (list python-pytest
34220 python-pytest-benchmark
34221 python-setuptools
34222 python-wheel))
34223 (home-page "https://python-fields.readthedocs.io/")
34224 (synopsis "Python container class boilerplate killer")
34225 (description "Avoid repetetive boilerplate code in Python classes.")
34226 (license license:bsd-3))))
34227
34228(define-public python-aspectlib
34229 (package
34230 (name "python-aspectlib")
34231 (version "1.5.2")
34232 (source
34233 (origin
34234 (method git-fetch)
34235 (uri (git-reference
34236 (url "https://github.com/ionelmc/python-aspectlib")
34237 (commit (string-append "v" version))))
34238 (file-name (git-file-name name version))
34239 (sha256
34240 (base32 "1mfhflg33684gkp6ckkywshn4xa3vqaia521kcagaxgr3xm6c9pv"))))
34241 (build-system pyproject-build-system)
34242 (arguments
34243 (list
34244 #:test-flags
34245 #~(list ;; XXX: Require more dependencies.
34246 "--ignore=tests/test_integrations.py"
34247 "--ignore=tests/test_integrations_py3.py"
34248 ;; XXX: Unimportant warning errors.
34249 "-k" (string-append "not test_story_empty_play_proxy_class"
34250 " and not test_story_half_play_proxy_class"))))
34251 (native-inputs (list python-pytest python-setuptools python-tornado python-wheel))
34252 (propagated-inputs (list python-fields))
34253 (home-page "https://github.com/ionelmc/python-aspectlib")
34254 (synopsis "Python monkey-patching and decorators")
34255 (description
34256 "This package provides an aspect-oriented programming, monkey-patch
34257and decorators library. It is useful when changing behavior in existing
34258code is desired. It includes tools for debugging and testing:
34259simple mock/record and a complete capture/replay framework.")
34260 (license license:bsd-2)))
34261
34262(define-public python-ijson
34263 (package
34264 (name "python-ijson")
34265 (version "3.1.4")
34266 (source
34267 (origin
34268 (method url-fetch)
34269 (uri (pypi-uri "ijson" version))
34270 (sha256
34271 (base32 "1sp463ywj4jv5cp6hsv2qwiima30d09xsabxb2dyq5b17jp0640x"))))
34272 (inputs
34273 ;; yajl is optional, but compiling with it makes faster
34274 ;; backends available to ijson:
34275 (list yajl))
34276 (native-inputs
34277 (list python-pytest
34278 python-setuptools
34279 python-wheel))
34280 (build-system pyproject-build-system)
34281 (home-page "https://github.com/ICRAR/ijson")
34282 (synopsis "Iterative JSON parser with Python iterator interfaces")
34283 (description
34284 "Ijson is an iterative JSON parser with standard Python iterator
34285interfaces.")
34286 (license license:bsd-3)))
34287
34288(define-public python-ordered-set
34289 (package
34290 (name "python-ordered-set")
34291 (version "4.1.0")
34292 (source
34293 (origin
34294 (method url-fetch)
34295 (uri (pypi-uri "ordered-set" version))
34296 (sha256
34297 (base32 "1a34fg3r3480nfm6652kyqql3lwixf8jirzdja9camvnr128wjk9"))))
34298 (build-system pyproject-build-system)
34299 (native-inputs (list python-cython python-flit-core python-pytest))
34300 (home-page "https://github.com/simonpercivall/orderedset")
34301 (synopsis "Ordered Set implementation in Cython")
34302 (description "This library provides an @code{OrderedSet} data type that
34303works like a regular set, but remembers insertion order. It supports the full
34304Python @code{set} interface.")
34305 (license license:asl2.0)))
34306
34307(define-public python-orgparse
34308 (package
34309 (name "python-orgparse")
34310 (version "0.4.20251020")
34311 (source
34312 (origin
34313 (method git-fetch)
34314 (uri (git-reference
34315 (url "https://github.com/karlicoss/orgparse")
34316 (commit (string-append "v" version))))
34317 (file-name (git-file-name name version))
34318 (sha256
34319 (base32 "0f390gxx5pjpjjbmll0gdlqg92s3d4xi6p8wjkr0cfixa8fvb7s4"))))
34320 (build-system pyproject-build-system)
34321 (arguments
34322 (list
34323 #:test-flags
34324 #~(list "--ignore-glob=doc/*"
34325 ;; XXX: Unclear why those tests fail.
34326 "--deselect=src/orgparse/tests/test_data.py::test_data[01_attributes]"
34327 "--deselect=src/orgparse/tests/test_data.py::test_data[03_repeated_tasks]"
34328 "--deselect=src/orgparse/tests/test_data.py::test_data[04_logbook]"
34329 "--deselect=src/orgparse/tests/test_misc.py::test_level_0_timestamps")
34330 #:phases
34331 #~(modify-phases %standard-phases
34332 (add-after 'unpack 'set-version
34333 (lambda _
34334 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION"
34335 #$version))))))
34336 (native-inputs (list python-hatchling python-hatch-vcs python-pytest))
34337 (home-page "https://github.com/karlicoss/orgparse")
34338 (synopsis "Emacs Org mode parser in Python")
34339 (description
34340 "This package is a Python module for reading Emacs Org mode files.")
34341 (license license:bsd-3)))
34342
34343(define-public dynaconf
34344 (package
34345 (name "dynaconf")
34346 (version "3.2.11")
34347 (source
34348 (origin
34349 (method git-fetch)
34350 (uri
34351 (git-reference
34352 (url "https://github.com/dynaconf/dynaconf")
34353 (commit version)))
34354 (file-name (git-file-name name version))
34355 (sha256
34356 (base32 "05122x1bwskfqnzi9hqi86h7407byfjvhgczj74x6lp2m6rnwkzl"))
34357 ;; (patches (search-patches "dynaconf-unvendor-deps.patch"))
34358 (modules '((guix build utils)))
34359 ;; Remove vendored dependencies
34360 (snippet
34361 #~(let ((unvendor '("click" "ruamel" "toml")))
34362 (with-directory-excursion "dynaconf/vendor"
34363 (for-each delete-file-recursively unvendor))
34364 (substitute* (find-files "." "\\.py$")
34365 (("from dynaconf\\.vendor import (click|ruamel|toml)([^l]+.*)$"
34366 _ target rest)
34367 (string-append "import " target rest))
34368 (("dynaconf\\.vendor\\.(click|ruamel|toml)" _ target)
34369 target))))))
34370 (build-system pyproject-build-system)
34371 (arguments
34372 (list
34373 #:test-flags
34374 #~(list "--ignore=tests/test_vault.py" ; depend on hvac and a live Vault
34375 "-k" #$(let ((click-tests '("test_negative_get"
34376 "test_not_found_key_exit_error[get]"
34377 "test_inspect_invalid_format")))
34378 ;; Disable integration tests
34379 (string-append "not integration and not "
34380 ;; These tests fail because we use
34381 ;; Click 8.* instead of Click 7
34382 (string-join click-tests " and not ")))
34383 "tests")
34384 #:phases
34385 #~(modify-phases %standard-phases
34386 (add-after 'unpack 'patch-for-click-8
34387 (lambda _
34388 (substitute* "dynaconf/cli.py"
34389 (("click.get_os_args\\()") ;deprecated from Click 8.1+
34390 "sys.argv[1:]")))))))
34391 (propagated-inputs
34392 (list python-click python-configobj python-ruamel.yaml-0.16
34393 python-toml python-tomli))
34394 (native-inputs
34395 (list python-django python-flask python-pytest python-pytest-cov
34396 python-pytest-mock python-setuptools))
34397 (home-page "https://www.dynaconf.com/")
34398 (synopsis "The dynamic configurator for your Python project")
34399 (description
34400 "This package provides @code{dynaconf} the dynamic configurator manager for
34401your Python project. It provides features such as:
34402
34403@itemize
34404@item Inspired by the @url{https://12factor.net/config, 12-factor application guide};
34405@item Settings management (default values, validation, parsing, templating);
34406@item Protection of sensitive information (passwords/tokens);
34407@item Multiple file formats @code{toml|yaml|json|ini|py} and also customizable
34408loaders;
34409@item Full support for environment variables to override existing settings
34410(dotenv support included);
34411@item Optional layered system for multiple environments @code{[default,
34412development, testing, production]};
34413@item Built-in support for Hashicorp Vault and Redis as settings and secrets storage;
34414@item Built-in extensions for Django and Flask web frameworks;
34415@item CLI for common operations such as @code{init, list, write, validate, export}.
34416@end itemize")
34417 (license license:expat)))
34418
34419(define-public python-pudb
34420 ;; TODO: Rename to pudb as it's a final program.
34421 (package
34422 (name "python-pudb")
34423 (version "2025.1.3")
34424 (source
34425 (origin
34426 (method url-fetch)
34427 (uri (pypi-uri "pudb" version))
34428 (sha256
34429 (base32 "1x210l6wxpn7k8jbca7ahzgsld938cnb6jlg3nrq8vr6xza75zb9"))))
34430 (build-system pyproject-build-system)
34431 (arguments
34432 (list
34433 #:phases
34434 #~(modify-phases %standard-phases
34435 (add-before 'check 'pre-check
34436 (lambda _
34437 (setenv "HOME" "/tmp"))))))
34438 (native-inputs
34439 (list python-hatchling
34440 python-pytest
34441 python-pytest-mock
34442 python-numpy))
34443 (propagated-inputs
34444 (list python-jedi
34445 python-packaging
34446 python-pygments
34447 python-typing-extensions
34448 python-urwid
34449 python-urwid-readline))
34450 (home-page "https://documen.tician.de/pudb/")
34451 (synopsis "Console-based Python debugger")
34452 (description
34453 "@command{pudb} is a full-screen, console-based Python debugger providing
34454all the niceties of modern GUI-based debuggers in a more lightweight and
34455keyboard-friendly package.")
34456 (license license:expat)))
34457
34458(define-deprecated-package pudb
34459 python-pudb)
34460
34461(define-public python-iwlib
34462 (package
34463 (name "python-iwlib")
34464 (version "1.7.0")
34465 (source
34466 (origin
34467 (method git-fetch)
34468 (uri (git-reference
34469 (url "https://github.com/nhoad/python-iwlib")
34470 (commit version)))
34471 (file-name (git-file-name name version))
34472 (sha256
34473 (base32 "0z6bgmzxf849irayzshiw3bvvhrr8j0il6113937x7fdam122gmr"))))
34474 (build-system pyproject-build-system)
34475 (arguments
34476 (list
34477 #:phases
34478 #~(modify-phases %standard-phases
34479 (add-before 'check 'cleanup
34480 (lambda _
34481 (delete-file-recursively "iwlib"))))))
34482 (native-inputs (list python-pytest python-setuptools))
34483 (inputs (list wireless-tools))
34484 (propagated-inputs (list python-cffi))
34485 (home-page "https://github.com/nhoad/python-iwlib")
34486 (synopsis "Python module to interface with iwlib")
34487 (description
34488 "This package provides a Python interface to iw wireless tools.")
34489 (license license:gpl2)))
34490
34491(define-public python-pdoc3
34492 (package
34493 (name "python-pdoc3")
34494 (version "0.11.6")
34495 (source
34496 (origin
34497 (method url-fetch)
34498 (uri (pypi-uri "pdoc3" version))
34499 (sha256
34500 (base32 "11z318lnvd7nxkpw2556hh6hvid6gi8mxgv4zf8x2m57hx5yi98y"))))
34501 (build-system pyproject-build-system)
34502 (arguments
34503 (list #:test-backend #~'unittest
34504 #:test-flags #~(list "-v" "pdoc.test")))
34505 (native-inputs
34506 (list python-setuptools-git
34507 python-setuptools
34508 python-setuptools-scm))
34509 (propagated-inputs
34510 (list python-mako
34511 python-markdown))
34512 (home-page "https://pdoc3.github.io/pdoc/")
34513 (synopsis "Auto-generate API documentation for Python projects")
34514 (description
34515 "This package auto-generates API documentation from Python projects
34516already existing modules and objects docstrings.")
34517 (license license:agpl3+)))
34518
34519(define-public python-piexif
34520 (package
34521 (name "python-piexif")
34522 (version "1.1.3")
34523 (source
34524 (origin
34525 (method git-fetch)
34526 (uri (git-reference
34527 (url "https://github.com/hMatoba/Piexif")
34528 (commit version)))
34529 (file-name (git-file-name name version))
34530 (sha256
34531 (base32 "1akmaxq1cjr8wghwaaql1bd3sajl8psshl58lprgfsigrvnklp8b"))
34532 (patches
34533 (search-patches "python-piexif-fix-tests-with-pillow-7.2.patch"))))
34534 (build-system pyproject-build-system)
34535 (native-inputs (list unzip python-pillow python-pytest python-setuptools))
34536 (home-page "https://github.com/hMatoba/Piexif")
34537 (synopsis "Simplify exif manipulations with Python")
34538 (description
34539 "Piexif simplifies interacting with EXIF data in Python. It includes the
34540tools necessary for extracting, creating, manipulating, converting and writing
34541EXIF data to JPEG, WebP and TIFF files.")
34542 (license license:expat)))
34543
34544(define-public python-pyrss2gen
34545 (package
34546 (name "python-pyrss2gen")
34547 (version "1.1")
34548 (source
34549 (origin
34550 (method url-fetch)
34551 (uri (pypi-uri "PyRSS2Gen" version))
34552 (sha256
34553 (base32 "1rvf5jw9hknqz02rp1vg8abgb1lpa0bc65l7ylmlillqx7bswq3r"))))
34554 (build-system pyproject-build-system)
34555 (arguments (list #:tests? #f)) ; No tests.
34556 (native-inputs (list python-setuptools))
34557 (home-page "http://dalkescientific.com/Python/PyRSS2Gen.html")
34558 (synopsis "Generate RSS 2.0 feeds using a Python data structure")
34559 (description "PyRSS2Gen is the interface to generate RSS 2.0 feeds.
34560PyRSS2Gen builds the feed up by using a XML generator.")
34561 (license license:bsd-3)))
34562
34563(define-public python-doit
34564 (package
34565 (name "python-doit")
34566 (version "0.36.0")
34567 (source
34568 (origin
34569 (method url-fetch)
34570 (uri (pypi-uri "doit" version))
34571 (sha256
34572 (base32 "1g1lwaxb9q3a6c24sr3gw5bspsk5frbrk2frb7z25jqljp67rl3i"))))
34573 (build-system pyproject-build-system)
34574 ;; This is not a serious test failure. It's probably due to the load path
34575 ;; at test time.
34576 (arguments (list #:test-flags '(list "-k" "not test_execute")))
34577 (propagated-inputs
34578 (list python-cloudpickle python-importlib-metadata))
34579 (native-inputs (list python-pytest python-setuptools python-wheel))
34580 (home-page "https://pydoit.org")
34581 (synopsis "Automation tool to execute any kind of task in a build-tools
34582fashion")
34583 (description "doit is an automation tool that brings the power of
34584build-tools to execute any kind of task.
34585
34586A task describes some computation to be done (actions), and contains some
34587extra meta-data. The actions can be external programs or Python functions. A
34588single task may define more than one action. doit uses the task’s meta-data
34589to:
34590
34591@itemize
34592@item cache task results
34593@item correct execution order
34594@item parallel execution
34595@item powerful dependency system
34596@end itemize")
34597 (license license:expat)))
34598
34599(define-public python-phpserialize
34600 (package
34601 (name "python-phpserialize")
34602 (version "1.3")
34603 (source
34604 (origin
34605 (method git-fetch)
34606 (uri (git-reference
34607 (url "https://github.com/mitsuhiko/phpserialize")
34608 (commit version)))
34609 (file-name (git-file-name name version))
34610 (sha256
34611 (base32 "062lpv2zpkn96v8gpskvw2pfgh3mafnb0s6xxa0jwbr7vz78wgdr"))))
34612 (build-system pyproject-build-system)
34613 (arguments
34614 (list
34615 #:test-backend #~'unittest
34616 ;; XXX: Unclear why this test fails.
34617 #:test-flags #~(list "-k" "not test_dumps_dict")))
34618 (native-inputs (list python-setuptools))
34619 (home-page "https://github.com/mitsuhiko/phpserialize")
34620 (synopsis "Python port of the serialize and unserialize functions of PHP")
34621 (description
34622 "This package provides a port of the @code{serialize} and
34623@code{unserialize} functions of PHP for Python.")
34624 (license license:bsd-3)))
34625
34626(define-public python-pydevtool
34627 (package
34628 (name "python-pydevtool")
34629 (version "0.3.0")
34630 (source
34631 (origin
34632 (method url-fetch)
34633 (uri (pypi-uri "pydevtool" version))
34634 (sha256
34635 (base32 "12pwhvvm4pgvfxj18ylb66drxm28b2cpb5rbxqrsrk1k7m7vmqr5"))))
34636 (build-system pyproject-build-system)
34637 (arguments (list #:tests? #false)) ;no tests
34638 (propagated-inputs (list python-doit python-rich-click))
34639 (native-inputs (list python-setuptools python-wheel))
34640 (home-page "https://github.com/pydoit/pydevtool")
34641 (synopsis "CLI dev tools powered by pydoit")
34642 (description "This package provides command line tools, powered by pydoit.
34643It offers integration with @code{click} and @code{rich} for custom CLI and
34644these linters: @code{pycodestlye}, @code{pyflakes}")
34645 (license license:expat)))
34646
34647(define-public nikola
34648 (package
34649 (name "nikola")
34650 (version "8.3.3")
34651 (source
34652 (origin
34653 (method url-fetch)
34654 (uri (pypi-uri "nikola" version))
34655 (sha256
34656 (base32 "1ixi7bhcmyl6nxh4psjkj4q4wq5midgnks294r64zciazippsvb3"))))
34657 (build-system pyproject-build-system)
34658 (arguments
34659 (list
34660 ;; tests: 506 passed, 16 skipped, 10 deselected, 5 xfailed, 66 warnings
34661 #:test-flags
34662 #~(list "--durations=10"
34663 "--ignore=tests/integration/test_dev_server.py"
34664 "-k" (string-join
34665 ;; Some time difference in example tests.
34666 (list "not test_serves_root_dir[http://example.org/deep/down/a/rabbit/hole]"
34667 "test_serves_root_dir[https://example.org:1234/blog]"
34668 "test_serves_root_dir[https://example.org:3456/blog/]"
34669 "test_serves_root_dir[https://example.org]"
34670 ;; AssertionError: Calls not found.
34671 "test_write_content_does_not_detroy_text"
34672 ;; AssertionError: assert 'January 10, 2006,
34673 ;; 12:34:56\u202fPM -0500' == 'January 10, 2006,
34674 ;; 12:34:56\u202fPM EST'
34675 "test_format_date_timezone")
34676 " and not "))
34677 #:phases
34678 #~(modify-phases %standard-phases
34679 (add-after 'unpack 'fix-pytest-config
34680 (lambda _
34681 ;; Drop test coverage requirements.
34682 (substitute* "pyproject.toml"
34683 (("addopts.*") "")))))))
34684 (native-inputs
34685 (list nss-certs-for-test
34686 python-feedparser
34687 python-freezegun
34688 python-pytest
34689 python-setuptools))
34690 (inputs
34691 (list python-babel
34692 python-blinker
34693 python-dateutil
34694 python-docutils
34695 python-doit
34696 python-jinja2 ;; for themes
34697 python-lxml
34698 python-mako
34699 python-markdown
34700 python-natsort
34701 python-notebook ;; for ipynb
34702 python-phpserialize ;; for wordpress import
34703 python-piexif
34704 python-pillow
34705 python-pygments
34706 python-pyrss2gen
34707 python-requests
34708 python-ruamel.yaml ;; for YAML metadata
34709 python-toml
34710 python-unidecode
34711 python-yapsy))
34712 (home-page "https://getnikola.com/")
34713 (synopsis "Modular, fast and simple static website and blog generator")
34714 (description "Nikola generates static websites and blogs. Out of the box,
34715it supports reStructuredText, Markdown, IPython (Jupyter) Notebooks and HTML,
34716and has plugins for many other formats.")
34717 (license license:expat)))
34718
34719(define-public nbss-upload
34720 (package
34721 (name "nbss-upload")
34722 (version "0.1")
34723 (source
34724 (origin
34725 (method git-fetch)
34726 (uri (git-reference
34727 (url "https://github.com/notebook-sharing-space/nbss-upload")
34728 (commit (string-append "v" version))))
34729 (file-name (git-file-name name version))
34730 (sha256
34731 (base32 "0cxj4zqcxzi3c5kw649jxmdpnbyrkrwx4licxdg6zc317v8gxw54"))))
34732 (build-system pyproject-build-system)
34733 (arguments (list #:tests? #f)) ;no tests
34734 (native-inputs (list python-setuptools))
34735 (propagated-inputs (list python-requests))
34736 (home-page "https://github.com/notebook-sharing-space/nbss-upload")
34737 (synopsis "Upload notebooks to a notebooksharing.space instance")
34738 (description
34739 "Upload notebooks as @code{.ipynb}, @code{.rmd}, and @code{.html} to a
34740notebooksharing.space instance.")
34741 (license license:bsd-3)))
34742
34743(define-public python-reedsolo
34744 (package
34745 (name "python-reedsolo")
34746 (version "1.7.0")
34747 (source
34748 (origin
34749 (method git-fetch)
34750 (uri (git-reference
34751 (url "https://github.com/tomerfiliba/reedsolomon")
34752 (commit (string-append "v" version))))
34753 (file-name (git-file-name name version))
34754 (sha256
34755 (base32 "078f02cal1nn53v10spx141hd5hi22a3xxrz1j32f7cph7b46dwz"))))
34756 (build-system pyproject-build-system)
34757 (native-inputs (list python-pytest python-setuptools))
34758 (home-page "https://github.com/tomerfiliba/reedsolomon")
34759 (synopsis "Pure-Python Reed Solomon encoder/decoder")
34760 (description
34761 "A pure-python universal errors-and-erasures Reed-Solomon Codec, based on
34762the tutorial at Wikiversity. This is a burst-type implementation, so that it
34763supports any Galois field higher than 2^3, but not binary streams.")
34764 (license license:public-domain)))
34765
34766(define-public python-esprima
34767 (package
34768 (name "python-esprima")
34769 (version "4.0.1")
34770 (source
34771 (origin
34772 (method git-fetch)
34773 (uri (git-reference
34774 (url "https://github.com/Kronuz/esprima-python")
34775 (commit (string-append "v" version))))
34776 (file-name (git-file-name name version))
34777 (sha256
34778 (base32 "0yk80j63mds4qvdjk79yp6a831vl5kc17cwkxamir1wp2w4hznas"))))
34779 (build-system pyproject-build-system)
34780 (arguments
34781 (list
34782 ;; XXX: pytest fails to collect tests, and a few tests are failing
34783 ;; using unittest backend. In particular, offsets with math characters
34784 ;; and uncompiled regexps.
34785 #:tests? #f
34786 #:test-backend #~'unittest
34787 #:test-flags
34788 #~(list "-k"
34789 (string-join (list
34790 ;; XXX: Character offsets with maths.
34791 "not test_math_alef"
34792 "test_math_dal_part"
34793 "test_math_kaf_lam"
34794 "test_math_zain_start"
34795 ;; XXX: Uncompiled regexps.
34796 "test_yield_arg_regexp1"
34797 "test_yield_arg_regexp2"
34798 "test_migrated_0005_source"
34799 "test_u_flag_valid_range"
34800 "test_migrated_0049"
34801 "test_migrated_0050_source")
34802 " and not "))))
34803 (native-inputs (list python-setuptools))
34804 (home-page "https://github.com/Kronuz/esprima-python")
34805 (synopsis "ECMAScript parsing infrastructure for analysis in Python")
34806 (description
34807 "This package provides ECMAScript parsing infrastructure for
34808multipurpose analysis in Python.")
34809 (license license:bsd-3)))
34810
34811(define-public python-psycopg2-binary
34812 (package
34813 (name "python-psycopg2-binary")
34814 (version "2.9.10")
34815 (source
34816 (origin
34817 (method url-fetch)
34818 (uri (pypi-uri "psycopg2-binary" version))
34819 (sha256
34820 (base32 "1qkdl21agnifabk508py6m0q4ggixx13k63xlp6qma8ak7kg0gab"))))
34821 (build-system pyproject-build-system)
34822 (arguments
34823 ;; Tests are disable because they need a live instance of PostgreSQL.
34824 '(#:tests? #f))
34825 (native-inputs (list python-setuptools python-wheel))
34826 (inputs (list postgresql))
34827 (home-page "https://psycopg.org/")
34828 (synopsis "PostgreSQL database adapter for Python")
34829 (description
34830 "Psycopg is a PostgreSQL database adapter for the Python programming
34831language. Its main features are the complete implementation of the Python DB
34832API 2.0 specification and the thread safety (several threads can share the
34833same connection). It was designed for heavily multi-threaded applications
34834that create and destroy lots of cursors and make a large number of concurrent
34835@code{INSERT}s or @code{UPDATE}s.
34836
34837Psycopg 2 is mostly implemented in C as a libpq wrapper, resulting in
34838being both efficient and secure. It features client-side and
34839server-side cursors, asynchronous communication and notifications,
34840@code{COPY TO}/@code{COPY FROM} support. Many Python types are supported
34841out-of-the-box and adapted to matching PostgreSQL data types;
34842adaptation can be extended and customized thanks to a flexible objects
34843adaptation system.
34844
34845Psycopg 2 is both Unicode and Python 3 friendly.")
34846 (license license:lgpl3+)))
34847
34848(define-public python-pyfuse3
34849 (package
34850 (name "python-pyfuse3")
34851 (version "3.4.1")
34852 (source
34853 (origin
34854 (method url-fetch)
34855 (uri (pypi-uri "pyfuse3" version))
34856 (sha256
34857 (base32 "02cjnkhn6rf19bcp5g6spq59fhdg8izhwv2jgxgbvkabjigrqbv0"))))
34858 (build-system pyproject-build-system)
34859 (arguments
34860 (list
34861 #:test-flags
34862 ;; FileNotFoundError: [Errno 2] No such file or directory: '/usr/bin'
34863 #~(list "--deselect=test/test_api.py::test_listdir")))
34864 (native-inputs
34865 (list pkg-config
34866 python-cython
34867 python-pytest
34868 python-setuptools
34869 python-setuptools-scm))
34870 (inputs
34871 (list fuse))
34872 (propagated-inputs
34873 (list python-trio))
34874 (home-page "https://github.com/libfuse/pyfuse3")
34875 (synopsis "Python bindings to FUSE 3")
34876 (description "This package provides Python 3 bindings for libfuse 3 with
34877async I/O support.")
34878 (license license:gpl2+)))
34879
34880(define-public python-ansicolors
34881 ;; XXX: Not maintained fork since 2017, consider to remove when there is no
34882 ;; any users.
34883 (package
34884 (name "python-ansicolors")
34885 (version "1.1.8")
34886 (source
34887 (origin
34888 (method url-fetch)
34889 (uri (pypi-uri "ansicolors" version ".zip"))
34890 (sha256
34891 (base32 "1q3jqglkq4z0f6nkkn8bswcwqg012i2grrc27kabr8286dg4zycr"))))
34892 (build-system pyproject-build-system)
34893 (native-inputs
34894 (list python-pytest python-setuptools unzip))
34895 (home-page "https://github.com/jonathaneunice/colors/")
34896 (synopsis "ANSI colors for Python")
34897 (description
34898 "This package adds ANSI colors and decorations to your strings.")
34899 (license license:isc)))
34900
34901(define-public python-multipart
34902 (package
34903 (name "python-multipart")
34904 (version "0.0.20")
34905 (source (origin
34906 (method url-fetch)
34907 (uri (pypi-uri "python_multipart" version))
34908 (sha256
34909 (base32
34910 "04wxzakk3hs4z4xf3ldhym3gm46hjicn4iwiw150c8wfbfscml4d"))))
34911 (build-system pyproject-build-system)
34912 (native-inputs
34913 (list python-hatchling
34914 python-pytest
34915 python-pytest-cov
34916 python-pyyaml))
34917 (home-page "https://github.com/andrew-d/python-multipart")
34918 (synopsis "Streaming multipart parser for Python")
34919 (description
34920 "This package provides a streaming multipart parser for Python.")
34921 (license license:asl2.0)))
34922
34923(define-public python-aiopg
34924 (package
34925 (name "python-aiopg")
34926 (version "1.4.0")
34927 (source (origin
34928 (method url-fetch)
34929 (uri (pypi-uri "aiopg" version))
34930 (sha256
34931 (base32
34932 "0wcxcfazjsknr7hv46374rzh7502k8g1hvbi2r0rakbbz2z56qhi"))))
34933 (build-system pyproject-build-system)
34934 (arguments
34935 (list #:tests? #f)) ;they need Docker
34936 (native-inputs
34937 (list python-setuptools
34938 python-sqlalchemy))
34939 (propagated-inputs
34940 (list python-async-timeout-4
34941 python-psycopg2-binary))
34942 (home-page "https://aiopg.readthedocs.io")
34943 (synopsis "Postgres integration with asyncio")
34944 (description
34945 "aiopg is a library for accessing a PostgreSQL database from the
34946asyncio (PEP-3156/tulip) framework. It wraps asynchronous
34947features of the Psycopg database driver.")
34948 (license license:bsd-3)))
34949
34950(define-public python-shtab
34951 (package
34952 (name "python-shtab")
34953 (version "1.7.1")
34954 (source
34955 (origin
34956 (method url-fetch)
34957 (uri (pypi-uri "shtab" version))
34958 (sha256
34959 (base32 "0g14778c5zgiq6b92k40n9irp75c5vcsvl5541cw8bmqxq1cnjsf"))))
34960 (build-system pyproject-build-system)
34961 (native-inputs
34962 (list bash
34963 python-pytest
34964 python-pytest-cov
34965 python-pytest-timeout
34966 python-setuptools
34967 python-setuptools-scm
34968 python-wheel))
34969 (home-page "https://github.com/iterative/shtab")
34970 (synopsis "Automagic shell tab completion for Python CLI applications")
34971 (description
34972 "This package automatically generates shell tab completion scripts for
34973Python CLI apps.")
34974 (license license:asl2.0)))
34975
34976(define-public python-pyperf
34977 (package
34978 (name "python-pyperf")
34979 (version "2.3.1")
34980 (source
34981 (origin
34982 (method url-fetch)
34983 (uri (pypi-uri "pyperf" version))
34984 (sha256
34985 (base32 "189qf9wdbig0fk4n3bavx8acgdbay5lllfvw48jvbfaafb7y5hja"))))
34986 (build-system pyproject-build-system)
34987 (arguments
34988 (list
34989 #:test-flags
34990 #~(list "--ignore=pyperf/tests/test_examples.py")))
34991 (native-inputs (list python-psutil python-pytest python-setuptools
34992 python-wheel))
34993 (home-page "https://github.com/psf/pyperf")
34994 (synopsis "Toolkit for running Python benchmarks")
34995 (description
34996 "The Python @code{pyperf} module is a toolkit for writing, running and
34997analyzing benchmarks. It features a simple API that can:
34998
34999@itemize
35000@item automatically calibrate a benchmark for a time budget;
35001@item spawn multiple worker processes;
35002@item compute the mean and standard deviation;
35003@item detect if a benchmark result seems unstable;
35004@item store benchmark results in JSON format;
35005@item support multiple units: seconds, bytes and integer.
35006@end itemize")
35007 (license license:expat)))
35008
35009(define-public python-pydispatcher
35010 (package
35011 (name "python-pydispatcher")
35012 (version "2.0.7")
35013 (source
35014 (origin
35015 (method url-fetch)
35016 (uri (pypi-uri "PyDispatcher" version))
35017 (sha256
35018 (base32 "0cdyymidxkzvcq6lpybhmh0ngyhld6jdcaac9bbvmh8d12nwcxxp"))))
35019 (build-system pyproject-build-system)
35020 (native-inputs (list python-pytest python-setuptools))
35021 (home-page "https://pydispatcher.sourceforge.net")
35022 (synopsis "Multi-producer-multi-consumer signal dispatching mechanism")
35023 (description
35024 "PyDispatcher is an enhanced version of Patrick K. O’Brien’s original
35025@code{dispatcher.py} module. It provides the Python programmer with a robust
35026mechanism for event routing within various application contexts.
35027
35028Included in the package are the robustapply and saferef modules, which
35029provide the ability to selectively apply arguments to callable objects
35030and to reference instance methods using weak-references.")
35031 (license license:bsd-3)))
35032
35033(define-public python-pyee
35034 (package
35035 (name "python-pyee")
35036 (version "13.0.0")
35037 (source
35038 (origin
35039 (method git-fetch)
35040 (uri (git-reference
35041 (url "https://github.com/jfhbrook/pyee")
35042 (commit (string-append "v" version))))
35043 (file-name (git-file-name name version))
35044 (sha256
35045 (base32 "10xfkf5yvkfyf9ccm0k88gjhqv00hcsal33p937a1lijmxqbx398"))))
35046 (build-system pyproject-build-system)
35047 (propagated-inputs (list python-typing-extensions))
35048 (native-inputs
35049 (list python-mock
35050 python-pytest
35051 python-pytest-asyncio-0.26
35052 python-pytest-trio
35053 python-setuptools
35054 python-trio
35055 python-twisted))
35056 (home-page "https://github.com/jfhbrook/pyee")
35057 (synopsis "Emit events with Python")
35058 (description
35059 "This package provides a port of node.js's EventEmitter to
35060python. Additionally, it includes a number of subclasses useful for
35061implementing async and threaded programming in python, such as async/await.")
35062 (license license:expat)))
35063
35064(define-public python-pypubsub
35065 (package
35066 (name "python-pypubsub")
35067 (version "4.0.3")
35068 (source
35069 (origin
35070 (method git-fetch)
35071 (uri (git-reference
35072 (url "https://github.com/schollii/pypubsub")
35073 (commit (string-append "v" version))))
35074 (file-name (git-file-name name version))
35075 (sha256
35076 (base32 "02j74w28wzmdvxkk8i561ywjgizjifq3hgcl080yj0rvkd3wivlb"))))
35077 (build-system pyproject-build-system)
35078 (arguments
35079 (list
35080 #:phases
35081 #~(modify-phases %standard-phases
35082 (replace 'check
35083 (lambda* (#:key tests? #:allow-other-keys)
35084 (when tests?
35085 (with-directory-excursion "tests/suite"
35086 (invoke "py.test"))))))))
35087 (native-inputs
35088 (list python-pytest
35089 python-setuptools
35090 python-wheel))
35091 (home-page "https://github.com/schollii/pypubsub")
35092 (synopsis "Python publish-subcribe library")
35093 (description
35094 "This library provides a publish-subscribe API to facilitate event-based
35095or message-based architecture in a single-process application. It is centered
35096on the notion of a topic - senders publish messages of a given topic, and
35097listeners subscribe to messages of a given topic, all inside the same
35098process.")
35099 (license license:bsd-2)))
35100
35101(define-public python-queuelib
35102 (package
35103 (name "python-queuelib")
35104 (version "1.8.0")
35105 (source
35106 (origin
35107 (method git-fetch)
35108 (uri (git-reference
35109 (url "https://github.com/scrapy/queuelib")
35110 (commit (string-append "v" version))))
35111 (file-name (git-file-name name version))
35112 (sha256
35113 (base32 "0rnyk200rd9vvifsx70z2d6h6gkmjmf6384d5bmnslhqircb430b"))))
35114 (build-system pyproject-build-system)
35115 (native-inputs (list python-hatchling python-pytest))
35116 (home-page "https://github.com/scrapy/queuelib")
35117 (synopsis "Collection of queues for Python")
35118 (description
35119 "Queuelib is a Python library that implements object collections which
35120are stored in memory or persisted to disk, provide a simple API, and run fast.
35121
35122Queuelib provides collections for queues (FIFO), stacks (LIFO), queues sorted
35123by priority and queues that are emptied in a round-robin fashion.")
35124 (license license:bsd-3)))
35125
35126(define-public python-posix-ipc
35127 (package
35128 (name "python-posix-ipc")
35129 (version "1.3.2")
35130 (source
35131 (origin
35132 (method git-fetch)
35133 (uri (git-reference
35134 (url "https://github.com/osvenskan/posix_ipc")
35135 (commit (string-append "rel" version))))
35136 (file-name (git-file-name name version))
35137 (sha256
35138 (base32 "0g9zhadssq01q4xcf25lq2qmn7q02p877bx0nyx3b09phgw6860j"))))
35139 (build-system pyproject-build-system)
35140 (arguments
35141 (list
35142 #:test-flags
35143 ;; XXX: Collection fails due to stdin configuration.
35144 #~(list "--ignore=tests/test_memory.py")
35145 #:phases
35146 #~(modify-phases %standard-phases
35147 (add-after 'unpack 'set-cc-path
35148 (lambda _
35149 (setenv "CC" #$(cc-for-target)))))))
35150 (native-inputs (list python-pytest python-setuptools))
35151 (home-page "https://semanchuk.com/philip/posix_ipc/")
35152 (synopsis "POSIX IPC primitives for Python")
35153 (description
35154 "This package provides POSIX IPC primitives - semaphores, shared memory and
35155message queues for Python.")
35156 (license license:bsd-3))) ; BSD like Copyright (c) 2018, Philip Semanchuk
35157
35158(define-public python-itemadapter
35159 (package
35160 (name "python-itemadapter")
35161 (version "0.12.0")
35162 (source
35163 (origin
35164 (method git-fetch)
35165 (uri (git-reference
35166 (url "https://github.com/scrapy/itemadapter")
35167 (commit (string-append "v" version))))
35168 (file-name (git-file-name name version))
35169 (sha256
35170 (base32 "1d7v5x1v8v62rs1xay2m4djdnhsydfb0lzgh8c0c1lipinrqzkfz"))))
35171 (build-system pyproject-build-system)
35172 (arguments (list #:tests? #f)) ; Circular dependency on python-scrapy.
35173 (native-inputs (list python-hatchling))
35174 (home-page "https://github.com/scrapy/itemadapter")
35175 (synopsis "Common interface for data container classes")
35176 (description
35177 "The ItemAdapter class is a wrapper for data container objects, providing
35178a common interface to handle objects of different types in an uniform manner,
35179regardless of their underlying implementation.
35180
35181Currently supported types are:
35182@itemize
35183@item scrapy.item.Item
35184@item dict
35185@item dataclass-based classes
35186@item attrs-based classes
35187@item pydantic-based classes
35188@end itemize
35189
35190Additionally, interaction with arbitrary types is supported by
35191implementing a pre-defined interface.")
35192 (license license:bsd-3)))
35193
35194(define-public python-itemloaders
35195 (package
35196 (name "python-itemloaders")
35197 (version "1.3.2")
35198 (source
35199 (origin
35200 (method url-fetch)
35201 (uri (pypi-uri "itemloaders" version))
35202 (sha256
35203 (base32 "0w37g31n06x6v6b4w7cz3nbq4wl6cv7rrzg3fr203gw3pqx5pbsg"))))
35204 (build-system pyproject-build-system)
35205 (native-inputs
35206 (list python-packaging
35207 python-pytest
35208 python-setuptools
35209 python-wheel))
35210 (propagated-inputs
35211 (list python-itemadapter python-jmespath python-parsel))
35212 (home-page "https://github.com/scrapy/itemloaders")
35213 (synopsis "Base library for scrapy's ItemLoader")
35214 (description "Itemloaders is a library that helps you collect data
35215from HTML and XML sources. It comes in handy to extract data from web
35216pages, as it supports data extraction using CSS and XPath Selectors.
35217
35218It’s specially useful when you need to standardize the data from many
35219sources. For example, it allows you to have all your casting and
35220parsing rules in a single place.")
35221 (license license:bsd-3)))
35222
35223(define-public python-iterable-io
35224 (package
35225 (name "python-iterable-io")
35226 (version "1.0.0")
35227 (source
35228 (origin
35229 (method url-fetch)
35230 (uri (pypi-uri "iterable-io" version))
35231 (sha256
35232 (base32 "0g4cn522n4dv6ly8pwf97dc62rr4f7my38v0bh6vmac7jmrip7pv"))))
35233 (build-system pyproject-build-system)
35234 (native-inputs (list python-setuptools python-pytest))
35235 (home-page "https://github.com/pR0Ps/iterable-io")
35236 (synopsis "Adapt generators and other iterables to a file-like interface")
35237 (description
35238 "@code{iterable-io} is a small Python library that provides an adapter so
35239that it's possible to read from
35240@url{https://docs.python.org/3/glossary.html#term-iterable,iterable} objects
35241in the same way as
35242@url{https://docs.python.org/3/glossary.html#term-file-object,file-like}
35243objects.")
35244 (license license:lgpl3)))
35245
35246(define-public python-iteround
35247 (package
35248 (name "python-iteround")
35249 (version "1.0.4")
35250 ;; PyPI only has wheels.
35251 (source (origin
35252 (method git-fetch)
35253 (uri (git-reference
35254 (url "https://github.com/cgdeboer/iteround")
35255 (commit (string-append "v" version))))
35256 (file-name (git-file-name name version))
35257 (sha256
35258 (base32 "1irw4sqrsgpc0ibxdv1hlx0d0jr1fqs48bj6mpfylzqkag9ywlfj"))))
35259 (build-system pyproject-build-system)
35260 (native-inputs
35261 (list python-pytest python-setuptools python-wheel))
35262 (home-page "https://github.com/cgdeboer/iteround")
35263 (synopsis "Sum-safe rounding for Iterables")
35264 (description "Iteround is a standard library sum-safe rounding library for
35265Python iterables (lists, tuples, dicts).")
35266 (license license:expat)))
35267
35268(define-public python-hypy-utils
35269 (package
35270 (name "python-hypy-utils")
35271 (version "1.0.29")
35272 (source
35273 (origin
35274 (method url-fetch)
35275 (uri (pypi-uri "hypy_utils" version))
35276 (sha256
35277 (base32 "1gf4v4gv9kr4r3prjwvcii153vwjrp7gir2mz6d1qbz6jggif8n7"))))
35278 (build-system pyproject-build-system)
35279 (arguments (list #:tests? #f)) ; No tests upstream.
35280 (native-inputs (list python-setuptools))
35281 (home-page "https://github.com/hykilpikonna/HyPyUtils")
35282 (synopsis "Python utility functions for HyDEV")
35283 (description "This module provides Python utility functions for modifying
35284and setting the color of terminal output, via HyDEV.")
35285 (license license:expat)))
35286
35287(define-public python-mike
35288 (package
35289 (name "python-mike")
35290 (version "2.1.3")
35291 (source
35292 (origin
35293 (method git-fetch) ; no tests data in PyPi package
35294 (uri (git-reference
35295 (url "https://github.com/jimporter/mike")
35296 (commit (string-append "v" version))))
35297 (file-name (git-file-name name version))
35298 (sha256
35299 (base32 "0rgmpxim91rpn8cplyi72g75fhclr40hxcpschn7rbfkqdhj8rbq"))))
35300 (build-system pyproject-build-system)
35301 (arguments
35302 (list
35303 #:test-flags
35304 ;; Most of integration tests hang or fail.
35305 #~(list "--ignore=test/integration/"
35306 ;; AttributeError: 'NoneType' object has no attribute 'group'
35307 "--ignore=test/unit/test_commands.py"
35308 "--deselect=test/unit/test_mkdocs_utils.py::TestVersion::test_version")))
35309 (native-inputs
35310 (list git-minimal/pinned
35311 python-pytest
35312 python-setuptools
35313 python-shtab
35314 python-wheel))
35315 (propagated-inputs
35316 (list python-importlib-metadata
35317 python-importlib-resources
35318 python-jinja2
35319 python-mkdocs
35320 python-pyparsing
35321 python-pyyaml
35322 python-pyyaml-env-tag
35323 python-verspec))
35324 (home-page "https://github.com/jimporter/mike")
35325 (synopsis "Manage multiple versions of MkDocs-powered documentation")
35326 (description
35327 "This package provides a Python utility to easily deploy multiple
35328versions of MkDocs-powered docs to a Git branch. It is suitable for deploying
35329to Github via gh-pages.")
35330 (license license:bsd-3)))
35331
35332(define-public python-arpeggio
35333 (package
35334 (name "python-arpeggio")
35335 (version "2.0.2")
35336 (source
35337 (origin
35338 (method url-fetch)
35339 (uri (pypi-uri "Arpeggio" version))
35340 (sha256
35341 (base32 "00571cmdxw8w8khzscb085kfqv2hgxdzpyz4d3a2sv92dsqb5467"))))
35342 (build-system pyproject-build-system)
35343 (native-inputs
35344 (list python-pytest
35345 python-setuptools
35346 python-wheel))
35347 (home-page "https://github.com/textX/Arpeggio")
35348 (synopsis "Packrat parser interpreter for Python")
35349 (description
35350 "This Python library provides a recursive descent parser with
35351backtracking and memoization (a.k.a. packrat parser). Arpeggio grammars are
35352based on PEG formalism. Arpeggio's main use is a foundation for a toolchain
35353for DSL development but it can be used for all sorts of general purpose
35354parsing.")
35355 (license license:expat)))
35356
35357(define-public python-flatten-json
35358 ;; The latest version was not tagged on GitHub, PyPI provides no tests, use
35359 ;; the commit assosiated with 0.1.14 version.
35360 (let ((commit "900c4feebcfcd831ddb6143c4b246024ecf911ec")
35361 (revision "0"))
35362 (package
35363 (name "python-flatten-json")
35364 (version (git-version "0.1.14" revision commit))
35365 (source
35366 (origin
35367 (method git-fetch) ; no tests in PyPI release
35368 (uri (git-reference
35369 (url "https://github.com/amirziai/flatten")
35370 (commit commit)))
35371 (file-name (git-file-name name version))
35372 (sha256
35373 (base32 "1vk2ykmk4wirsywinxk9v520y6iv857bn0hsizm25s3d08v5a3sb"))))
35374 (build-system pyproject-build-system)
35375 (native-inputs
35376 (list python-pytest
35377 python-setuptools
35378 python-wheel))
35379 (propagated-inputs
35380 (list python-six))
35381 (home-page "https://github.com/amirziai/flatten")
35382 (synopsis "Flatten JSON objects")
35383 (description
35384 "The @code{flatten_json} Python library flattens the hierarchy in your
35385object, which can be useful if you want to force your objects into a table.")
35386 (license license:expat))))
35387
35388(define-public python-deepdiff
35389 (package
35390 (name "python-deepdiff")
35391 (version "8.6.1")
35392 (source (origin
35393 (method url-fetch)
35394 (uri (pypi-uri "deepdiff" version))
35395 (sha256
35396 (base32
35397 "0fk4zzrv7chynjbpgk7bj7nhqc7c3va7pv00a8dqk06ad6kxfmpc"))))
35398 (build-system pyproject-build-system)
35399 (arguments
35400 ;; tests: 1028 passed, 10 skipped, 1 deselected
35401 ;; Ignore Polars test (not packaged).
35402 (list #:test-flags #~(list "-k" "not test_polars")))
35403 (propagated-inputs (list python-click ; for CLI
35404 python-pyyaml ; for CLI
35405 python-orderly-set
35406 python-orjson)) ; for optimization
35407 (native-inputs
35408 (list python-flit-core
35409 python-jsonpickle
35410 python-numpy
35411 python-pandas
35412 python-pydantic
35413 python-pytest
35414 python-pytest-benchmark
35415 python-pytz
35416 python-uuid6
35417 python-tomli-w))
35418 (home-page "https://github.com/seperman/deepdiff")
35419 (synopsis "Deep difference and search of any Python object/data")
35420 (description
35421 "This package provides tools for computing deep differences and searching
35422of any Python object/data. Recreate objects by adding adding deltas to each
35423other.")
35424 (license license:expat)))
35425
35426(define-public python-deepmerge
35427 (package
35428 (name "python-deepmerge")
35429 (version "1.0.1")
35430 (source
35431 (origin
35432 (method url-fetch)
35433 (uri (pypi-uri "deepmerge" version))
35434 (sha256
35435 (base32 "06hagzg8ccmjzqvszdxb52jgx5il8a1jdz41n4dpkyyjsfg7fi2b"))))
35436 (build-system pyproject-build-system)
35437 (arguments
35438 (list
35439 #:phases
35440 #~(modify-phases %standard-phases
35441 (add-before 'build 'set-version
35442 (lambda _
35443 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
35444 (native-inputs
35445 (list python-setuptools-scm
35446 python-pytest
35447 python-setuptools
35448 python-wheel))
35449 (home-page "https://deepmerge.readthedocs.io/en/latest/")
35450 (synopsis "Merge nested data structures")
35451 (description
35452 "The @code{deep-merge} Python library provides a toolset to deeply merge
35453nested data structures in Python like lists and dictionaries.")
35454 (license license:expat)))
35455
35456(define-public python-durationpy
35457 (package
35458 (name "python-durationpy")
35459 (version "0.10")
35460 (source
35461 (origin
35462 (method git-fetch)
35463 (uri (git-reference
35464 (url "https://github.com/icholy/durationpy")
35465 (commit version)))
35466 (file-name (git-file-name name version))
35467 (sha256
35468 (base32 "1617wg77j68z7v4rbjrhv6n7bchznhgjn21qrmb034sf4hwg77dl"))))
35469 (build-system pyproject-build-system)
35470 (arguments
35471 (list #:test-backend #~'custom
35472 #:test-flags #~(list "test.py")))
35473 (native-inputs (list python-setuptools))
35474 (home-page "https://github.com/icholy/durationpy")
35475 (synopsis "Python <-> Golang time duration formats converter")
35476 (description
35477 "This package implements a functionality to convert between
35478Python's @code{datetime.timedelta} and Golang's @code{time.Duration} formats.")
35479 (license license:expat)))
35480
35481(define-public python-murmurhash3
35482 (let ((commit "01f1128a2c5ea08e6dc33515e140bedd68393a2d")
35483 (revision "0"))
35484 (package
35485 (name "python-murmurhash3")
35486 (version (git-version "2.3.5" revision commit))
35487 (source
35488 (origin
35489 (method git-fetch)
35490 (uri (git-reference
35491 (url "https://github.com/veegee/mmh3")
35492 (commit commit)))
35493 (file-name (git-file-name name version))
35494 (sha256
35495 (base32 "1zpk51ms1bvzg52zc9s9az71bgw2kgxidjcc1xib7y9r7dl7vczz"))))
35496 (build-system pyproject-build-system)
35497 (arguments
35498 (list
35499 #:phases
35500 #~(modify-phases %standard-phases
35501 (add-after 'unpack 'fix-package
35502 (lambda _
35503 (substitute* "mmh3module.cpp"
35504 (("#include <stdio\\.h>")
35505 "#define PY_SSIZE_T_CLEAN\n#include <stdio.h>")))))))
35506 (native-inputs
35507 (list python-cython python-pytest python-setuptools python-wheel))
35508 (home-page "https://github.com/veegee/mmh3")
35509 (synopsis "Python wrapper for MurmurHash (MurmurHash3)")
35510 (description
35511 "@code{murmurhash3} is a Python library for MurmurHash (MurmurHash3), a set
35512of fast and robust hash functions. This library is a Python extension module
35513written in C.")
35514 (license license:public-domain))))
35515
35516(define-public python-scooby
35517 (package
35518 (name "python-scooby")
35519 (version "0.11.0")
35520 (source
35521 (origin
35522 (method git-fetch)
35523 (uri (git-reference
35524 (url "https://github.com/banesullivan/scooby")
35525 (commit (string-append "v" version))))
35526 (file-name (git-file-name name version))
35527 (sha256
35528 (base32 "0c47gwcc5kpwx7s8ccp53s174bgraxm4qqrn72yz2ypxah6k3ccj"))))
35529 (build-system pyproject-build-system)
35530 (arguments
35531 (list
35532 ;; tests: 19 passed, 5 deselected, 1 warning
35533 #:test-flags
35534 ;; AssertionError: assert 'Module not found' == '0.1.0'
35535 #~(list "--deselect=tests/test_scooby.py::test_get_version"
35536 ;; ModuleNotFoundError: No module named 'no_version'
35537 "--deselect=tests/test_scooby.py::test_tracking"
35538 ;; Failed: DID NOT RAISE <class 'OSError'>
35539 "--deselect=tests/test_scooby.py::test_import_os_error"
35540 ;; FileNotFoundError: [Errno 2] No such file or directory: 'time'
35541 "--deselect=tests/test_scooby.py::test_import_time"
35542 ;; Errored
35543 "--deselect=tests/test_scooby.py::test_cli")
35544 #:phases
35545 #~(modify-phases %standard-phases
35546 (add-after 'unpack 'set-version
35547 (lambda _
35548 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
35549 (native-inputs
35550 (list python-beautifulsoup4
35551 python-numpy
35552 python-pytest
35553 python-pyvips
35554 python-scipy
35555 python-setuptools
35556 python-setuptools-scm))
35557 (propagated-inputs
35558 (list python-psutil))
35559 (home-page "https://github.com/banesullivan/scooby")
35560 (synopsis "Report hardware information and Python package versions")
35561 (description
35562 "The Scooby package reports the following information about the currently
35563running system:
35564
35565@itemize
35566@item operating system name;
35567@item hardware information including machine type (e.g., @samp{i386},
35568@samp{x86_64}, etc.), CPU count and total RAM;
35569@item Python environment (e.g., Python, IPython, etc.);
35570@item file system name;
35571@item Python version;
35572@item versions of specified Python packages.
35573@end itemize
35574
35575It can generate reports as HTML tables or plain text lists.
35576
35577Scooby has no required dependencies, and only few optional dependencies.")
35578 (license license:expat)))
35579
35580(define-public python-cymem
35581 (package
35582 (name "python-cymem")
35583 (version "2.0.6")
35584 (source
35585 (origin
35586 (method git-fetch)
35587 (uri (git-reference
35588 (url "https://github.com/explosion/cymem")
35589 (commit (string-append "v" version))))
35590 (file-name (git-file-name name version))
35591 (sha256
35592 (base32 "1f0wjm6g2n09b9plddp3bvaz6bl27q6hv0q6g7qx24rgmjzkivm3"))))
35593 (build-system pyproject-build-system)
35594 (native-inputs (list python-cython python-pytest python-setuptools))
35595 (inputs (list python))
35596 (home-page "https://github.com/explosion/cymem")
35597 (synopsis "Cython memory pool for RAII-style memory management")
35598 (description
35599 "Cymem provides two small memory-management helpers for Cython. They make it
35600easy to tie memory to a Python object's life-cycle, so that the memory is freed
35601when the object is garbage collected.")
35602 (license license:expat)))
35603
35604(define-public python-preshed
35605 (package
35606 (name "python-preshed")
35607 (version "3.0.6")
35608 (source
35609 (origin
35610 (method git-fetch)
35611 (uri (git-reference
35612 (url "https://github.com/explosion/preshed")
35613 (commit (string-append "v" version))))
35614 (file-name (git-file-name name version))
35615 (sha256
35616 (base32 "01xwczc4cb9q3iah1gb9lxfh9s8ix695y3s95j7nhbiws6c9b5k5"))))
35617 (build-system pyproject-build-system)
35618 (arguments
35619 (list
35620 #:phases
35621 #~(modify-phases %standard-phases
35622 (add-after 'unpack 'patch-msvccompiler
35623 (lambda _
35624 (substitute* "setup.py"
35625 (("from distutils import ccompiler, msvccompiler")
35626 "from distutils import ccompiler")
35627 (("and msvccompiler.*")
35628 ""))))
35629 (replace 'check
35630 (lambda* (#:key inputs outputs #:allow-other-keys #:rest args)
35631 (with-directory-excursion (site-packages inputs outputs)
35632 (for-each delete-file (find-files "." "\\.pyx$"))
35633 (apply (assoc-ref %standard-phases 'check) args)
35634 (delete-file-recursively "preshed/tests")))))))
35635 (native-inputs
35636 (list python-cython python-cymem python-pytest python-setuptools))
35637 (inputs (list python python-cymem python-murmurhash))
35638 (home-page "https://github.com/explosion/preshed")
35639 (synopsis "Cython hash tables that assume keys are pre-hashed")
35640 (description
35641 "Simple but high performance Cython hash table mapping pre-randomized keys
35642to void* values.")
35643 (license license:expat)))
35644
35645(define-public python-catalogue
35646 (package
35647 (name "python-catalogue")
35648 (version "2.0.7")
35649 (source
35650 (origin
35651 (method git-fetch)
35652 (uri (git-reference
35653 (url "https://github.com/explosion/catalogue")
35654 (commit (string-append "v" version))))
35655 (file-name (git-file-name name version))
35656 (sha256
35657 (base32 "0f7dqd8swycnspwfka79whr0v630v52hdmkmd1x7l920h33pg467"))))
35658 (build-system pyproject-build-system)
35659 (native-inputs (list python-pytest python-setuptools python-wheel))
35660 (home-page "https://github.com/explosion/catalogue")
35661 (synopsis "Lightweight function registries for your library")
35662 (description
35663 "This package is a tiny, zero-dependencies library that makes it easy to
35664add function (or object) registries to your code. Function registries are
35665helpful when you have objects that need to be both easily serializable and
35666fully customizable. Instead of passing a function into your object, you pass
35667in an identifier name, which the object can use to lookup the function from
35668the registry. This makes the object easy to serialize, because the name is a
35669simple string. If you instead saved the function, you'd have to use Pickle
35670for serialization, which has many drawbacks.")
35671 (license license:expat)))
35672
35673(define-public python-gatt
35674 (package
35675 (name "python-gatt")
35676 (version "0.2.7")
35677 (source (origin
35678 (method url-fetch)
35679 (uri (pypi-uri "gatt" version))
35680 (sha256
35681 (base32
35682 "0fjf066jixk30fr8xwfalwfnhqpr56yv0cccyypnx2qp9bi9svb2"))))
35683 (build-system pyproject-build-system)
35684 (arguments (list #:tests? #f)) ; No tests upstream.
35685 (propagated-inputs (list python-dbus python-pygobject))
35686 (native-inputs (list python-setuptools))
35687 (home-page "https://github.com/getsenic/gatt-python")
35688 (synopsis "Bluetooth GATT SDK for Python")
35689 (description
35690 "The Bluetooth @acronym{GATT, Generic ATTribute Profile} @acronym{SDK,
35691Software Development Kit} for Python helps you implement and communicate with
35692any Bluetooth Low Energy device that has a GATT profile. It supports:
35693
35694@itemize @bullet
35695@item Discovering nearby Bluetooth Low Energy devices
35696@item Connecting and disconnecting devices
35697@item Implementing your custom GATT profile
35698@item Accessing all GATT services
35699@item Accessing all GATT characteristics
35700@item Reading characteristic values
35701@item Writing characteristic values
35702@item Subscribing for characteristic value change notifications
35703@end itemize
35704
35705Currently, Linux is the only platform supported by this library.")
35706 (license license:expat)))
35707
35708(define-public python-dbus-fast
35709 (package
35710 (name "python-dbus-fast")
35711 (version "2.44.3")
35712 (source
35713 (origin
35714 (method git-fetch) ;No tests in PyPI package.
35715 (uri (git-reference
35716 (url "https://github.com/Bluetooth-Devices/dbus-fast")
35717 (commit (string-append "v" version))))
35718 (file-name (git-file-name name version))
35719 (sha256
35720 (base32 "12f1f25ny7fd59s55gw3vr6ymdqgd51zzpbc1nkqfbmb166d1536"))))
35721 (build-system pyproject-build-system)
35722 (arguments
35723 (list
35724 #:test-flags
35725 '(list
35726 ;; These tests need pytest_codspeed.
35727 "--ignore-glob=tests/benchmarks/test_*marshall.py"
35728 ;; These tests all fail with:
35729 ;; dbus_fast.errors.InvalidAddressError: DBUS_SESSION_BUS_ADDRESS not
35730 ;; set and could not get DISPLAY environment variable to get bus address
35731 "-m" "not asyncio")))
35732 (native-inputs (list python-cython
35733 python-poetry-core
35734 python-setuptools
35735 python-pytest
35736 python-pytest-cov
35737 python-pytest-asyncio
35738 python-covdefaults))
35739 (home-page "https://github.com/bluetooth-devices/dbus-fast")
35740 (synopsis "Faster version of dbus-next")
35741 (description "This package provides a faster version of dbus-next.")
35742 (license license:expat)))
35743
35744(define-public python-bleak
35745 (package
35746 (name "python-bleak")
35747 (version "0.22.3")
35748 (source
35749 (origin
35750 (method url-fetch)
35751 (uri (pypi-uri "bleak" version))
35752 (sha256
35753 (base32 "0p04kk84vjmfv2pl1lichaaq8rc9xdm9sgd5g9r5gr2pjv0w6j9i"))))
35754 (build-system pyproject-build-system)
35755 (arguments
35756 `(#:tests? #f)) ; no tests
35757 (propagated-inputs (list python-async-timeout
35758 python-dbus-fast
35759 python-typing-extensions))
35760 (native-inputs (list python-poetry-core))
35761 (home-page "https://github.com/hbldh/bleak")
35762 (synopsis "Bluetooth Low Energy platform Agnostic Klient")
35763 (description "This package provides a Bluetooth Low Energy platform-agnostic
35764client library.")
35765 (license license:expat)))
35766
35767(define-public python-ndeflib
35768 (package
35769 (name "python-ndeflib")
35770 (version "0.3.3")
35771 (source
35772 (origin
35773 (method url-fetch)
35774 (uri (pypi-uri "ndeflib" version))
35775 (sha256
35776 (base32 "122a8prbcj070y3fl82kvxmbciv36hj1h1d448l6zcdrb22q4mhx"))))
35777 (build-system pyproject-build-system)
35778 (arguments
35779 (list
35780 ;; tests: 1571 passed, 37 deselected, 1 warning
35781 ;;
35782 ;; Two test fail with assertion not equal:
35783 ;;
35784 ;; test_decode_error[0001-unpack_from requires a buffer of at least 1
35785 ;; bytes] - AssertionError
35786 ;;
35787 ;; test_decode_error[00000101-unpack_from requires a buffer of at least
35788 ;; 1 bytes] - AssertionError
35789 #:test-flags #~(list "-k" "not test_decode_error")))
35790 (native-inputs (list python-pytest python-setuptools))
35791 (home-page "https://ndeflib.readthedocs.io/")
35792 (synopsis "NFC Data Exchange Format decoder and encoder.")
35793 (description "This package provides a NFC (Near-Field Communication)
35794Data Exchange Format decoder and encoder.")
35795 (license license:isc)))
35796
35797(define-public python-nfcpy
35798 (package
35799 (name "python-nfcpy")
35800 (version "1.0.4")
35801 (source
35802 (origin
35803 (method url-fetch)
35804 (uri (pypi-uri "nfcpy" version))
35805 (sha256
35806 (base32 "0sxgp298i8y17i9drp8sclxx0i3vn0wgh5ajs2arw7cy2780igg5"))))
35807 (build-system pyproject-build-system)
35808 (arguments
35809 `(#:tests? #f)) ; Tests use nfc.ndef even though that has been removed.
35810 (propagated-inputs (list python-libusb1 python-ndeflib python-pydes
35811 python-pyserial))
35812 (native-inputs (list python-setuptools python-wheel))
35813 (home-page "https://github.com/nfcpy/nfcpy")
35814 (synopsis "Python module for Near-Field Communication.")
35815 (description "This package provides a Python module for Near-Field
35816Communication.")
35817 (license license:eupl1.1)))
35818
35819(define-public python-clrprint
35820 (package
35821 (name "python-clrprint")
35822 (version "2.0.1")
35823 (source (origin
35824 (method url-fetch)
35825 (uri (pypi-uri "clrprint" version))
35826 (sha256
35827 (base32
35828 "0xfn8d1by2w7pjiji887qljk1avn4fylbnz1mj28gysm5g0zvy43"))))
35829 (build-system pyproject-build-system)
35830 (arguments '(#:tests? #f)) ;there are no tests
35831 (native-inputs
35832 (list python-setuptools))
35833 (propagated-inputs (list python-colorama python-termcolor))
35834 (home-page "https://github.com/AbhijithAJ/clrprint")
35835 (synopsis "Print colorful output in the terminal")
35836 (description "@code{clrprint} is developed to print colorful output in the
35837terminal. It has red, blue, green, yellow, purple and black/white (default)
35838colors.")
35839 (license license:expat)))
35840
35841(define-public python-mido
35842 (package
35843 (name "python-mido")
35844 (version "1.3.2")
35845 (source (origin
35846 (method url-fetch)
35847 (uri (pypi-uri "mido" version))
35848 (sha256
35849 (base32
35850 "0j63cydiinfyrvlhydzsb00cb7dyvrw3bnhjbdyp63vkxnv2isis"))))
35851 (build-system pyproject-build-system)
35852 (arguments
35853 (list #:phases
35854 #~(modify-phases %standard-phases
35855 ;; This package requires python-packaging~=23.1 which is not yet
35856 ;; updated to. As per pyproject.toml, it is required to provide
35857 ;; a nice version_info opbject.
35858 ;; TODO: After updating python-packaging, fix this.
35859 (delete 'sanity-check))))
35860 (propagated-inputs (list python-importlib-metadata python-packaging))
35861 (native-inputs (list python-pytest python-setuptools python-wheel))
35862 (home-page "https://mido.readthedocs.io/en/stable/")
35863 (synopsis "MIDI Objects for Python")
35864 (description "This library is for working with MIDI 1.0 ports, messages and
35865files.")
35866 (license license:expat)))
35867
35868(define-public python-musical-scales
35869 (package
35870 (name "python-musical-scales")
35871 (version "1.0.1")
35872 (source (origin
35873 (method url-fetch)
35874 (uri (pypi-uri "musical-scales" version))
35875 (sha256
35876 (base32
35877 "1ckn8n37i7b65h0i385ycn0w8sg9na0iabz0kmhxxc1wj0hddkw9"))))
35878 (build-system pyproject-build-system)
35879 (arguments (list #:tests? #f)) ;no tests
35880 (native-inputs (list python-setuptools))
35881 (home-page "https://github.com/hmillerbakewell/musical-scales")
35882 (synopsis "Retrieve a scale based on a given mode and starting note")
35883 (description
35884 "Retrieve a scale based on a given mode and starting note.
35885Information about these scales can be
35886@url{https://en.wikipedia.org/wiki/List_of_musical_scales_and_modes, found on
35887Wikipedia}.")
35888 (license license:expat)))
35889
35890(define-public python-langcodes
35891 (package
35892 (name "python-langcodes")
35893 (version "3.5.0")
35894 (source (origin
35895 (method url-fetch)
35896 (uri (pypi-uri "langcodes" version))
35897 (sha256
35898 (base32
35899 "00gqlqs1gi8mvjwf6fkwiqhgcqxnsk5gwzs9l8qy2lbys1l83vqy"))))
35900 (build-system pyproject-build-system)
35901 (native-inputs
35902 (list python-pytest
35903 python-setuptools
35904 python-setuptools-scm))
35905 (propagated-inputs
35906 ;; [optional:data]
35907 (list python-language-data))
35908 (home-page "https://github.com/rspeer/langcodes")
35909 (synopsis "Python library for working with language codes")
35910 (description
35911 "This package provides a Python library for working with and comparing
35912language codes.
35913
35914@code{python-langcodes} implements @url{http://tools.ietf.org/html/bcp47, BCP
3591547}, the IETF Best Current Practices on Tags for Identifying Languages. BCP
3591647 is also known as RFC 5646. It subsumes ISO 639 and is backward compatible
35917with it, and it also implements recommendations from the
35918@url{http://cldr.unicode.org/, Unicode CLDR}.
35919
35920@code{python-langcodes} can also refer to a database of language properties
35921and names, built from Unicode CLDR and the IANA subtag registry, if you
35922install @code{python-language-data}.")
35923 (license license:expat)))
35924
35925(define-public python-anyascii
35926 (package
35927 (name "python-anyascii")
35928 (version "0.3.3")
35929 (source (origin
35930 (method url-fetch)
35931 (uri (pypi-uri "anyascii" version))
35932 (sha256
35933 (base32
35934 "1hwmzg3kxyj6lxdgibrj3azv803x8kwzw1d3xja98gbvskcrskn9"))))
35935 (build-system pyproject-build-system)
35936 (native-inputs (list python-pytest python-flit-core))
35937 (home-page "https://anyascii.com")
35938 (synopsis "Unicode to ASCII transliteration")
35939 (description "@code{anyascii} converts Unicode characters to their best
35940ASCII representation.")
35941 (license license:isc)))
35942
35943(define-public python-geomet
35944 (package
35945 (name "python-geomet")
35946 (version "1.1.0")
35947 (source
35948 (origin
35949 (method git-fetch)
35950 (uri (git-reference
35951 (url "https://github.com/geomet/geomet")
35952 (commit version)))
35953 (file-name (git-file-name name version))
35954 (sha256
35955 (base32 "06pq3xkvsxl2v6q39pqgkjbaysyylshny28k8krzg7drvpvkdwk1"))))
35956 (build-system pyproject-build-system)
35957 (native-inputs (list python-pytest python-setuptools))
35958 (propagated-inputs (list python-click python-six))
35959 (home-page "https://github.com/geomet/geomet")
35960 (synopsis
35961 "Convert GeoJSON to WKT/WKB (Well-Known Text/Binary) or GeoPackage Binary")
35962 (description
35963 "This package provides utilities and functions for converting
35964GeoJSON to WKT/WKB (Well-Known Text/Binary) or GeoPackage Binary, and vice
35965versa. Extended WKB/WKT are also supported.")
35966 (license license:asl2.0)))
35967
35968(define-public python-cogapp
35969 (package
35970 (name "python-cogapp")
35971 (version "3.3.0")
35972 (source (origin
35973 (method url-fetch)
35974 (uri (pypi-uri "cogapp" version))
35975 (sha256
35976 (base32
35977 "1c0xx3p3lzrlyqhmccyq9c50f8v9pqk2992gb4nl50h2yy1m3s8v"))))
35978 (build-system pyproject-build-system)
35979 (native-inputs (list python-pytest python-setuptools python-wheel))
35980 (home-page "https://nedbatchelder.com/code/cog")
35981 (synopsis "Content generation tool that leverages Python")
35982 (description "Cog is a file generation tool. It allows using pieces of
35983Python code as generators in your source files to generate arbitrary text.")
35984 (license license:expat)))
35985
35986(define-public python-bsdiff4
35987 (package
35988 (name "python-bsdiff4")
35989 (version "1.2.6")
35990 (source
35991 (origin
35992 (method git-fetch)
35993 (uri (git-reference
35994 (url "https://github.com/ilanschnell/bsdiff4")
35995 (commit version)))
35996 (file-name (git-file-name name version))
35997 (sha256
35998 (base32 "1s64xmgcyzp7x6rcyfcryyz4mv5qm8l7s365rgbi6qfpnblnby0c"))))
35999 (build-system pyproject-build-system)
36000 (arguments
36001 (list
36002 #:test-flags #~(list "--pyargs" "bsdiff4")))
36003 (native-inputs
36004 (list python-pytest
36005 python-setuptools
36006 python-wheel))
36007 (home-page "https://github.com/ilanschnell/bsdiff4")
36008 (synopsis "Binary diff and patch using the BSDIFF4 format")
36009 (description
36010 "This package provides a Python library for the @code{bsdiff} binary diff
36011utility. It also provides two command-line tools, @code{bsdiff4} and
36012@code{bspatch4}.")
36013 (license license:bsd-2)))
36014
36015(define-public python-mpv
36016 (package
36017 (name "python-mpv")
36018 (version "1.0.8")
36019 (source
36020 (origin
36021 (method git-fetch)
36022 (uri (git-reference
36023 (url "https://github.com/jaseg/python-mpv")
36024 (commit (string-append "v" version))))
36025 (file-name (git-file-name name version))
36026 (sha256
36027 (base32 "04azy5wa2n8pa21z6lz1p1p0vy7flaqm8ypy46jb77gig2g50xrh"))))
36028 (build-system pyproject-build-system)
36029 (arguments
36030 (list #:phases
36031 #~(modify-phases %standard-phases
36032 (add-before 'build 'patch-reference-to-mpv
36033 (lambda* (#:key inputs #:allow-other-keys)
36034 ;; Without an absolute path it is not able find and load libmpv.
36035 (substitute* "mpv.py"
36036 (("sofile = .*")
36037 (format #f "sofile = '~a/lib/libmpv.so'~%"
36038 #$(this-package-input "mpv"))))))
36039 (add-before 'check 'prepare-for-tests
36040 (lambda _
36041 ;; Fontconfig throws errors when it has no cache dir to use.
36042 (setenv "XDG_CACHE_HOME" (getcwd))
36043 ;; Some tests fail without a writable and readable HOME.
36044 (setenv "HOME" (getcwd))
36045 (setenv "PY_MPV_SKIP_TESTS"
36046 "test_wait_for_property_event_overflow"))))))
36047 (native-inputs
36048 (list python-pytest
36049 python-pyvirtualdisplay
36050 python-setuptools
36051 xorg-server-for-tests))
36052 (inputs (list mpv))
36053 (propagated-inputs (list python-pillow)) ;for raw screenshots
36054 (home-page "https://github.com/jaseg/python-mpv")
36055 (synopsis "Python interface to the mpv media player")
36056 (description
36057 "python-mpv is a ctypes-based python interface to the mpv media player.
36058It gives you more or less full control of all features of the player, just
36059as the lua interface does.")
36060 ;; From the project's README:
36061 ;; python-mpv inherits the underlying libmpv's license, which can be either
36062 ;; GPLv2 or later (default) or LGPLv2.1 or later. For details, see the mpv
36063 ;; copyright page.
36064 (license license:gpl2+)))
36065
36066(define-public python-biblib
36067 (let ((upstream-version "0.1.0")
36068 (commit "ab0e857b9198fe425ec9b02fcc293b5d9fd0c406")
36069 (revision "1"))
36070 (package
36071 (name "python-biblib")
36072 (version (git-version upstream-version revision commit))
36073 (source
36074 (origin
36075 (method git-fetch)
36076 (uri (git-reference
36077 (url "https://github.com/aclements/biblib")
36078 (commit commit)))
36079 (sha256
36080 (base32 "1ym1gwxys9gl5a7fjs6xh5z9w50pnq4z3rs6fx7kpv78hlrbjlip"))
36081 (file-name (git-file-name name version))))
36082 (build-system pyproject-build-system)
36083 (arguments (list #:tests? #f)) ; No tests upstream.
36084 (native-inputs (list python-setuptools))
36085 (home-page "https://github.com/aclements/biblib")
36086 (synopsis "BibTeX parsing and transformation library")
36087 (description
36088 "Biblib provides a simple, standalone Python 3 package for parsing
36089BibTeX bibliographic databases, as well as algorithms for manipulating BibTeX
36090entries in BibTeX-y ways. Biblib's parser is derived directly from the WEB
36091source code for BibTeX and hence (barring bugs in translation) should be fully
36092compatible with BibTeX's own parser.")
36093 ;; N.B. It seems the parser was translated from WEB by hand: this
36094 ;; package does not contain any generated files.
36095 (license license:expat))))
36096
36097(define-public python-cyclic
36098 (package
36099 (name "python-cyclic")
36100 (version "1.0.0")
36101 (source
36102 (origin
36103 (method git-fetch)
36104 (uri (git-reference
36105 (url "https://github.com/neurobin/cyclic")
36106 ;; Release is not tagged on github, see
36107 ;; https://github.com/neurobin/cyclic/issues/2
36108 (commit "bf616c47ea49a43500ea55a1e6f4890323be0679")))
36109 (file-name (git-file-name name version))
36110 (sha256
36111 (base32 "0r8zzjdv70fpxssxps62rlgpii8fr9gh8gykdygqn6mkdnfjwgjc"))))
36112 (build-system pyproject-build-system)
36113 (arguments (list #:test-backend #~'unittest))
36114 (native-inputs (list python-setuptools))
36115 (home-page "https://github.com/neurobin/cyclic")
36116 (synopsis "Handle cyclic relations")
36117 (description "This package handles cyclic relations compared by value.")
36118 (license license:bsd-3)))
36119
36120(define-public python-rcslice
36121 (package
36122 (name "python-rcslice")
36123 (version "1.1.0")
36124 (source
36125 (origin
36126 (method git-fetch)
36127 (uri (git-reference
36128 (url "https://github.com/neurobin/rcslice")
36129 ;; Releases are not tagged on github, see
36130 ;; https://github.com/neurobin/rcslice/issues/2
36131 (commit "1e1ef42cd262db76b67ded430630d5b499790f42")))
36132 (file-name (git-file-name name version))
36133 (sha256
36134 (base32 "1lmhcgghh60kvdlx0cin1phhgfy9jivc6l0mb4ibnpa1x1md0zvv"))))
36135 (build-system pyproject-build-system)
36136 (arguments (list #:test-backend #~'unittest))
36137 (native-inputs (list python-setuptools))
36138 (home-page "https://github.com/neurobin/rcslice")
36139 (synopsis "Slice a list of sliceables")
36140 (description
36141 "This package provides Python module to slice a list of sliceables (1
36142indexed, both start and end index are inclusive). Helps to slice file content
36143line by line or column by column or a combination of both.")
36144 (license license:bsd-3)))
36145
36146(define-public python-rpds-py
36147 (package
36148 (name "python-rpds-py")
36149 (version "0.10.6")
36150 (source (origin
36151 (method url-fetch)
36152 (uri (pypi-uri "rpds_py" version))
36153 (sha256
36154 (base32
36155 "0l5slkvhq2vf64mapimmj6ginsv01mc4niyj90vvz3assq4agrac"))))
36156 (build-system cargo-build-system)
36157 (arguments
36158 (list
36159 #:imported-modules `(,@%cargo-build-system-modules
36160 ,@%pyproject-build-system-modules)
36161 #:modules '((guix build cargo-build-system)
36162 ((guix build pyproject-build-system) #:prefix py:)
36163 (guix build utils))
36164 #:phases
36165 (with-extensions (list (pyproject-guile-json))
36166 #~(modify-phases %standard-phases
36167 (add-after 'build 'build-python-module
36168 (assoc-ref py:%standard-phases 'build))
36169 (add-after 'build-python-module 'install-python-module
36170 (assoc-ref py:%standard-phases 'install))))
36171 #:install-source? #false))
36172 (inputs
36173 (cons maturin (cargo-inputs 'python-rpds-py)))
36174 (native-inputs
36175 (list python-wrapper))
36176 (home-page "https://github.com/crate-py/rpds")
36177 (synopsis "Bindings to Rust rpds for persistent data structures")
36178 (description "This package provides Python bindings to the Rust rpds crate
36179for persistent data structures. It was written initially to support replacing
36180@code{python-pyrsistent}.")
36181 (license license:expat)))
36182
36183(define-public python-nanoid
36184 (let ((commit "061f9a598f310b0e2e91b9ed6ce725a22770da64")
36185 (revision "0"))
36186 (package
36187 (name "python-nanoid")
36188 (version "2.0.0")
36189 (source
36190 (origin
36191 (method git-fetch)
36192 (uri
36193 (git-reference
36194 (url "https://github.com/puyuan/py-nanoid")
36195 (commit commit)))
36196 (file-name (git-file-name name commit))
36197 (sha256
36198 (base32 "0y1bcw0h27g8rkqq7cp33ywn0i0lp0q3rjixzkh4191y1dp9yf8s"))))
36199 (build-system pyproject-build-system)
36200 (native-inputs (list python-pytest python-setuptools))
36201 (home-page "https://github.com/puyuan/py-nanoid")
36202 (synopsis "Unique string ID generator")
36203 (description
36204 "This package provides a tiny, secure, URL-friendly, unique string ID
36205generator for Python.")
36206 (license license:expat))))
36207
36208(define-public python-misskey
36209 (package
36210 (name "python-misskey")
36211 (version "4.1.0")
36212 (source (origin
36213 (method git-fetch)
36214 (uri (git-reference
36215 (url "https://github.com/YuzuRyo61/Misskey.py")
36216 (commit (string-append "v" version))))
36217 (file-name (git-file-name name version))
36218 (sha256
36219 (base32
36220 "0rma8pdsjsy00cg76q6q4qki4xpldykmz1m6dl3w2bjjxfhlbaz5"))))
36221 (build-system pyproject-build-system)
36222 (arguments (list #:tests? #f)) ;needs network
36223 (native-inputs (list python-setuptools))
36224 (propagated-inputs (list python-requests))
36225 (home-page "https://misskeypy.readthedocs.io")
36226 (synopsis "Python bindings for Misskey's API")
36227 (description
36228 "This package provides access to Misskey's API. Misskey is a SNS
36229platform using the ActivityPub protocol.")
36230 (license license:expat)))
36231
36232(define-public python-lief
36233 (package
36234 (name "python-lief")
36235 (version "0.17.2")
36236 (source (origin
36237 (method git-fetch)
36238 (uri (git-reference
36239 (url "https://github.com/lief-project/LIEF")
36240 (commit version)))
36241 (file-name (git-file-name name version))
36242 (sha256
36243 (base32
36244 "0djl879vw0a21h4ww8waqa3mgs835rhqbsda85274n4s6z5vi905"))))
36245 (build-system pyproject-build-system)
36246 (native-inputs (list cmake-minimal
36247 ninja
36248 python-scikit-build-core
36249 python-pydantic))
36250 (arguments
36251 (list
36252 #:tests? #f ;needs network
36253 #:phases #~(modify-phases %standard-phases
36254 (add-before 'build 'change-directory
36255 (lambda _
36256 (chdir "api/python"))))))
36257 (home-page "https://github.com/lief-project/LIEF")
36258 (synopsis "Library to instrument executable formats")
36259 (description
36260 "@code{python-lief} is a cross platform library which can parse, modify
36261and abstract ELF, PE and MachO formats.")
36262 (license license:asl2.0)))
36263
36264(define-public python-eris
36265 (package
36266 (name "python-eris")
36267 (version "1.0.0")
36268 (source
36269 (origin
36270 (method url-fetch)
36271 (uri (pypi-uri "eris" version))
36272 (sha256
36273 (base32 "07a69y8w8n0zvdcd7qfcjf2s9hnd5jlbdl57g39ds2bxprzyc8va"))))
36274 (build-system pyproject-build-system)
36275 (arguments
36276 ;; No tests in PyPI, tests miss data files in Git:
36277 ;; - tests/test-vectors/test_encode
36278 ;; - tests/test-vectors/test_decode
36279 (list #:tests? #f))
36280 (native-inputs
36281 (list python-setuptools
36282 python-wheel))
36283 (propagated-inputs
36284 (list python-aiocoap
36285 python-pycryptodome))
36286 (home-page "https://codeberg.org/eris/python-eris")
36287 (synopsis "Python implementation of ERIS")
36288 (description
36289 "Python implementation of the @acronym{ERIS, Encoding for Robust Immutable
36290Storage}.")
36291 (license license:lgpl3+)))
36292
36293(define-public python-pymonad
36294 (package
36295 (name "python-pymonad")
36296 (version "2.4.0")
36297 (source
36298 (origin
36299 (method git-fetch)
36300 (uri (git-reference
36301 (url "https://github.com/jasondelaat/pymonad")
36302 (commit (string-append "v" version))))
36303 (file-name (git-file-name name version))
36304 (sha256
36305 (base32 "0ci1mpydldiyg9qv6d19ljhfh7wxlrl2k4mlvqd9bm7dqvpdjsx7"))))
36306 (build-system pyproject-build-system)
36307 (arguments
36308 (list
36309 #:phases
36310 #~(modify-phases %standard-phases
36311 (replace 'check
36312 (lambda* (#:key tests? #:allow-other-keys)
36313 (when tests?
36314 (invoke "./run_tests.sh")))))))
36315 (native-inputs (list python-setuptools))
36316 (home-page "https://github.com/jasondelaat/pymonad")
36317 (synopsis "Monadic style functional programming for Python")
36318 (description "@code{python-pymonad} implements data structures typically
36319available in purely functional or functional first programming languages such
36320as Haskell and F#. Included are
36321
36322@itemize
36323@item Monad and Monoid data types with several common monads such as Maybe and
36324State
36325@item Useful tools such as the @code{@@curry} decorator for defining curried
36326functions
36327@item Type annotations to help ensure correct usage
36328@end itemize")
36329 (license license:bsd-3)))
36330
36331(define-public python-markdown-strings
36332 (package
36333 (name "python-markdown-strings")
36334 (version "3.3.0")
36335 (source
36336 (origin
36337 (method git-fetch)
36338 (uri (git-reference
36339 (url "https://github.com/awesmubarak/markdown_strings.git")
36340 (commit (string-append "v" version))))
36341 (file-name (git-file-name name version))
36342 (sha256
36343 (base32 "0064ni7s3k8hqw61wi9m31icxp61f8adhija2qsp46hclcwx7vz2"))))
36344 (build-system pyproject-build-system)
36345 (arguments
36346 (list
36347 #:test-backend #~'custom
36348 #:test-flags #~(list "test.py")))
36349 (native-inputs (list python-setuptools))
36350 (propagated-inputs (list python-lxml python-six))
36351 (home-page "https://github.com/awesmubarak/markdown_strings")
36352 (synopsis "Python library to create markdown-formatted text")
36353 (description "This package allows the programmatic creation of
36354markdown-compliant strings.")
36355 (license license:expat)))
36356
36357(define-public python-icecream
36358 (package
36359 (name "python-icecream")
36360 (version "2.1.3")
36361 (source
36362 (origin
36363 (method url-fetch)
36364 (uri (pypi-uri "icecream" version))
36365 (sha256
36366 (base32 "1pj9kf7lwm799wppvngg3sndi0qf13iq33yhl59n3hsf6z1sg90a"))))
36367 (build-system pyproject-build-system)
36368 (arguments
36369 (list
36370 #:test-flags
36371 '(list "-k"
36372 ;; These tests are failing due to a bug:
36373 ;; https://github.com/gruns/icecream/issues/144
36374 (string-append "not testEnableDisable"
36375 " and not testSingledispatchArgumentToString"))))
36376 (native-inputs
36377 (list python-hypothesis
36378 python-pytest
36379 python-setuptools
36380 python-wheel))
36381 (propagated-inputs
36382 (list python-asttokens
36383 python-colorama
36384 python-executing
36385 python-pygments))
36386 (home-page "https://github.com/gruns/icecream")
36387 (synopsis
36388 "Single function call to debug variables, expressions, and program execution")
36389 (description
36390 "This tool lets you debug variables, expressions, and program execution
36391with one function call. IceCream makes print debugging a little sweeter.")
36392 (license license:expat)))
36393
36394(define-public python-icegrams
36395 (package
36396 (name "python-icegrams")
36397 (version "1.1.3")
36398 (source
36399 (origin
36400 (method git-fetch)
36401 (uri (git-reference
36402 ;; no tests in the PyPI archive
36403 (url "https://github.com/mideind/Icegrams")
36404 ;; multiple commits were tagged with 1.1.3
36405 ;; 1.1.3-final is what is noted on the Releases page
36406 (commit (string-append version "-final"))))
36407 (file-name (git-file-name name version))
36408 (sha256
36409 (base32 "19mgkdpzn8r2bxxyw1yx7ijwnp4bl52g85iv90jfqbm4gh4j7rqh"))))
36410 (build-system pyproject-build-system)
36411 (arguments
36412 (list
36413 #:test-flags
36414 #~(list
36415 ;; two tests fail because of a hardcoded file path in the package's source code
36416 ;; this should be fixed upstream instead of with a substitution here
36417 "-k"
36418 (string-append "not test_trigrams" " and not test_word_ids")
36419 "test/test_ngrams.py")))
36420 (propagated-inputs (list python-cffi))
36421 (native-inputs (list python-pytest python-setuptools
36422 python-setuptools-scm python-wheel))
36423 (home-page "https://github.com/mideind/Icegrams")
36424 (synopsis "Trigram statistics for Icelandic")
36425 (description
36426 "Icegrams is a Python package that encapsulates a large trigram
36427library for Icelandic. You can use Icegrams to obtain probabilities (relative
36428frequencies) of over a million different unigrams (single words or tokens), or of
36429bigrams (pairs of two words or tokens), or of trigrams. Icegrams is useful for
36430instance in spelling correction, predictive typing, to help disabled people
36431write text fast, and for various text generation, statistics, and modeling tasks.")
36432 (license license:expat)))
36433
36434(define-public python-speg
36435 (package
36436 (name "python-speg")
36437 ;; 0.3 was released in 2017, the latest change on master HEAD is from 2018.
36438 (properties '((commit . "877acddfd5ac5ae8b4a4592d045e74e108477643")
36439 (revision . "0")))
36440 (version (git-version "0.3"
36441 (assoc-ref properties 'revision)
36442 (assoc-ref properties 'commit)))
36443 (source
36444 (origin
36445 (method git-fetch)
36446 (uri (git-reference
36447 (url "https://github.com/avakar/speg")
36448 (commit (assoc-ref properties 'commit))))
36449 (file-name (git-file-name name version))
36450 (sha256
36451 (base32 "0lhms1sfvmnplcwq8qwwvkrcz4sgi9yprvrkjz7p84fjhk86n4sb"))))
36452 (build-system pyproject-build-system)
36453 (native-inputs
36454 (list python-pytest
36455 python-setuptools))
36456 (propagated-inputs
36457 (list python-six))
36458 (home-page "https://github.com/avakar/speg")
36459 (synopsis "PEG-based parser interpreter with memoization")
36460 (description "This package is a PEG-based parser and interpreter with
36461memoization.")
36462 (license license:expat)))
36463
36464(define-public python-spinners
36465 (package
36466 (name "python-spinners")
36467 (version "0.0.24")
36468 (source
36469 (origin
36470 (method url-fetch)
36471 (uri (pypi-uri "spinners" version))
36472 (sha256
36473 (base32 "0zz2z6dpdjdq5z8m8w8dfi8by0ih1zrdq0caxm1anwhxg2saxdhy"))))
36474 (build-system pyproject-build-system)
36475 (arguments
36476 (list #:tests? #f)) ;no tests in PyPI archive, tests depend on Nose
36477 (native-inputs
36478 (list python-setuptools))
36479 (home-page "https://github.com/manrajgrover/py-spinners")
36480 (synopsis "Python library with graphical spinners for the terminal")
36481 (description
36482 "Spinners is a Python library that contains graphical spinners that can
36483be displayed terminal.")
36484 (license license:expat)))
36485
36486(define-public python-sqlglot
36487 (package
36488 (name "python-sqlglot")
36489 (version "26.33.0")
36490 (source
36491 (origin
36492 (method url-fetch)
36493 (uri (pypi-uri "sqlglot" version))
36494 (sha256
36495 (base32 "0wqdpix71bzx61qwk3mi7v42afmrj03dg81sykgdclgsg63jf5r8"))))
36496 (build-system pyproject-build-system)
36497 (arguments
36498 (list
36499 #:test-backend #~'unittest
36500 #:phases
36501 #~(modify-phases %standard-phases
36502 (add-before 'check 'pre-check
36503 (lambda _
36504 (setenv "SQLGLOTRS_TOKENIZER" "0"))))))
36505 (native-inputs
36506 (list python-duckdb
36507 python-pytz
36508 python-pandas
36509 python-setuptools
36510 python-setuptools-scm
36511 python-tzdata))
36512 (home-page "https://sqlglot.com/")
36513 (synopsis "Python SQL Parser and Transpiler")
36514 (description
36515 "SQLGlot is a no-dependency SQL parser, transpiler, optimizer, and
36516engine. It can be used to format SQL or translate between 31 different
36517dialects like DuckDB, Presto / Trino, Spark / Databricks, Snowflake, and
36518BigQuery. It aims to read a wide variety of SQL inputs and output
36519syntactically and semantically correct SQL in the targeted dialects.")
36520 (license license:expat)))
36521
36522(define-public python-sqlglotrs
36523 (package
36524 (inherit python-sqlglot)
36525 (name "python-sqlglotrs")
36526 (version "0.6.1")
36527 (source
36528 (origin
36529 (method url-fetch)
36530 (uri (pypi-uri "sqlglotrs" version))
36531 (sha256
36532 (base32 "1q8ii7fbgl2b2smi80bn5ifbs5xfzrkqqb4r1j5xx2k98jjsff7n"))))
36533 (build-system cargo-build-system)
36534 (arguments
36535 (list
36536 #:install-source? #false
36537 #:tests? #f ;no tests
36538 #:imported-modules `(,@%cargo-build-system-modules
36539 ,@%pyproject-build-system-modules)
36540 #:modules '((guix build cargo-build-system)
36541 ((guix build pyproject-build-system) #:prefix py:)
36542 (guix build utils))
36543 #:phases
36544 #~(modify-phases %standard-phases
36545 (add-after 'build 'build-python-module
36546 (assoc-ref py:%standard-phases 'build))
36547 (add-after 'build-python-module 'install-python-module
36548 (assoc-ref py:%standard-phases 'install))
36549 (add-after 'install-python-module 'add-install-to-pythonpath
36550 (assoc-ref py:%standard-phases 'add-install-to-pythonpath)))))
36551 (native-inputs
36552 (list maturin
36553 python-wrapper))
36554 (inputs
36555 (cargo-inputs 'python-sqlglotrs))))
36556
36557(define-public python-sqltrie
36558 (package
36559 (name "python-sqltrie")
36560 (version "0.11.2")
36561 (home-page "https://github.com/iterative/sqltrie/")
36562 (source
36563 (origin
36564 (method url-fetch)
36565 (uri (pypi-uri "sqltrie" version))
36566 (sha256
36567 (base32 "1ninmia5ka1nnv4gxqacvbmkfxwc7dilw141rxxk9zmbnf4p1x2d"))))
36568 (build-system pyproject-build-system)
36569 (arguments
36570 (list
36571 #:test-flags
36572 #~(list "--ignore=tests/benchmarks/"
36573 ;; <https://github.com/pyinstaller/pyinstaller> is not packaged
36574 ;; yet in Guix.
36575 "--ignore=src/sqltrie/__pyinstaller")))
36576 (native-inputs
36577 (list python-pytest
36578 python-pytest-mock
36579 python-pytest-sugar
36580 python-setuptools
36581 python-setuptools-scm))
36582 (propagated-inputs
36583 (list python-attrs
36584 python-orjson
36585 python-pygtrie))
36586 (synopsis "SQL-based prefix tree for Python")
36587 (description
36588 "Sqltrie is a SQL-based prefix tree inspired by pygtrie and
36589python-diskcache.")
36590 (license license:asl2.0)))
36591
36592(define-public python-sre-yield
36593 (package
36594 (name "python-sre-yield")
36595 (version "1.2")
36596 (source
36597 (origin
36598 (method url-fetch)
36599 (uri (pypi-uri "sre_yield" version))
36600 (sha256
36601 (base32 "12kv3mvdr22g2v9wfr5aabh1f58s817dbh8mrlfzxzxs7hm1lkz9"))))
36602 (build-system pyproject-build-system)
36603 (arguments
36604 (list #:test-backend #~'unittest))
36605 (native-inputs
36606 (list python-setuptools))
36607 (home-page "https://github.com/google/sre_yield")
36608 (synopsis "Expands a regular expression to its possible matches")
36609 (description
36610 "The goal of sre_yield is to efficiently generate all values that can
36611match a given regular expression, or count possible matches efficiently. It
36612uses the parsed regular expression, so you get a much more accurate result
36613than trying to just split strings.")
36614 (license license:asl2.0)))
36615
36616(define-public python-srsly
36617 (package
36618 (name "python-srsly")
36619 (version "2.5.1")
36620 (source
36621 (origin
36622 (method url-fetch)
36623 (uri (pypi-uri "srsly" version))
36624 (sha256
36625 (base32 "0zn74zyb928v898j6l86a83qgdvza78ksjg0v8ixla9yrzv4n6xb"))))
36626 (build-system pyproject-build-system)
36627 (arguments
36628 (list
36629 #:test-flags
36630 #~(list "--pyargs" "srsly"
36631 ;; 3 tests fail in
36632 ;; tests/cloudpickle/cloudpickle_test.py::CloudPickleTest
36633 "-k" (string-append "not test_import"
36634 " and not test_logger"
36635 " and not test_multiprocess"))))
36636 (native-inputs
36637 (list python-cython
36638 python-mock
36639 python-numpy
36640 python-psutil
36641 python-pytest
36642 python-pytest-timeout
36643 python-setuptools))
36644 (propagated-inputs
36645 (list python-catalogue))
36646 (home-page "https://github.com/explosion/srsly")
36647 (synopsis "Serialization utilities for Python")
36648 (description "This package bundles some of the best Python serialization
36649libraries into one standalone package, with a high-level API that makes it
36650easy to write code that's correct across platforms and Pythons.")
36651 (license license:expat)))
36652
36653(define-public python-srt
36654 (package
36655 (name "python-srt")
36656 (version "3.5.3")
36657 (source
36658 (origin
36659 (method url-fetch)
36660 (uri (pypi-uri "srt" version))
36661 (sha256
36662 (base32 "1h0cxlp66i6wlq3g6dg1f1nw0sipm9nfsy7qs47p9w548d833128"))))
36663 (build-system pyproject-build-system)
36664 (native-inputs
36665 (list python-pytest
36666 python-setuptools
36667 python-wheel))
36668 (home-page "https://github.com/cdown/srt")
36669 (synopsis "SRT parsing library")
36670 (description
36671 "This package provides a Python library for parsing, modifying, and
36672composing subtitles in the SRT file format.")
36673 (license license:expat)))
36674
36675(define-public python-sshpubkeys
36676 (package
36677 (name "python-sshpubkeys")
36678 (version "3.2.0")
36679 (source
36680 (origin
36681 (method git-fetch)
36682 (uri (git-reference
36683 (url "https://github.com/ojarva/python-sshpubkeys")
36684 (commit (string-append "v" version))))
36685 (file-name (git-file-name name version))
36686 (sha256
36687 (base32 "0n7bjq8wifdw09mxkfzdkybij0csqjcifyxz8dbxy2iffjv5mqnq"))))
36688 (build-system pyproject-build-system)
36689 (arguments
36690 (list #:tests? #f)) ; XXX: All tests fail
36691 (native-inputs
36692 (list python-setuptools
36693 python-wheel))
36694 (propagated-inputs
36695 (list python-cryptography
36696 python-ecdsa))
36697 (home-page "https://github.com/ojarva/python-sshpubkeys")
36698 (synopsis "OpenSSH public key parser")
36699 (description
36700 "This package provides a library for parsing and validating OpenSSH
36701public key files.")
36702 (license license:bsd-3)))
36703
36704(define-public python-sshtunnel
36705 (let ((commit "dc0732884379a19a21bf7a49650d0708519ec54f")
36706 (revision "0"))
36707 (package
36708 (name "python-sshtunnel")
36709 (version (git-version "0.4.0" revision commit))
36710 (source
36711 (origin
36712 (method git-fetch)
36713 (uri (git-reference
36714 (url "https://github.com/pahaz/sshtunnel")
36715 (commit commit)))
36716 (file-name (git-file-name name version))
36717 (sha256
36718 (base32 "0fzq7pbqa6fjamzp61gjpd2hzph2ag7r507dlwpqilp6w8ipz49a"))
36719 (patches (search-patches "python-sshtunnel-pep518.patch"))))
36720 (build-system pyproject-build-system)
36721 (arguments
36722 (list
36723 #:phases
36724 #~(modify-phases %standard-phases
36725 (add-after 'unpack 'remove-deprecated-dsskey
36726 (lambda _
36727 (substitute* "sshtunnel.py"
36728 (("'dsa': paramiko\\.DSSKey,")
36729 "")
36730 (("paramiko\\.DSSKey, ")
36731 "")))))))
36732 (propagated-inputs (list python-paramiko))
36733 (native-inputs
36734 (list openssh python-mock python-pytest python-setuptools))
36735 (home-page "https://github.com/pahaz/sshtunnel")
36736 (synopsis "Python SSH tunnels library")
36737 (description
36738 "@code{sshtunnel} is a Python module for easily creating SSH tunnels
36739in the background, using Python.")
36740 (license license:expat))))
36741
36742(define-public python-stack-data
36743 (package
36744 (name "python-stack-data")
36745 (version "0.6.3")
36746 (source
36747 (origin
36748 (method url-fetch)
36749 (uri (pypi-uri "stack_data" version))
36750 (sha256
36751 (base32 "1fgh900z6g1amb2f2ql461c1y8lazymxi7nqvk8xri7ywj6pfsl3"))))
36752 (build-system pyproject-build-system)
36753 (arguments
36754 (list
36755 #:test-flags
36756 #~(list "-k" (string-join
36757 ;; XXX: Tests fail with HTML diff.
36758 (list "not test_executing_style_defs"
36759 "test_pygments_example"
36760 "test_example")
36761 " and not "))
36762 #:phases
36763 #~(modify-phases %standard-phases
36764 (add-after 'unpack 'set-home-env
36765 (lambda _
36766 (setenv "HOME" "/tmp"))))))
36767 (native-inputs
36768 (list python-cython
36769 python-littleutils
36770 python-pygments
36771 python-pytest
36772 python-setuptools
36773 python-setuptools-scm
36774 python-typeguard
36775 python-wheel))
36776 (propagated-inputs
36777 (list python-asttokens
36778 python-executing
36779 python-pure-eval))
36780 (home-page "https://github.com/alexmojaki/stack_data")
36781 (synopsis "Python stack frame and traceback manipulation library")
36782 (description
36783 "The @code{stack_data} Python library extracts data from stack frames and
36784tracebacks. Is can be used to display more useful tracebacks
36785than the default.")
36786 (license license:expat)))
36787
36788(define-public python-stdio-mgr
36789 (package
36790 (name "python-stdio-mgr")
36791 (version "1.0.1")
36792 (source
36793 (origin
36794 (method git-fetch)
36795 (uri (git-reference
36796 (url "https://github.com/bskinn/stdio-mgr")
36797 (commit (string-append "v" version))))
36798 (file-name (git-file-name name version))
36799 (sha256
36800 (base32 "0xb6779s7j162xhig6vc63f9nn3v406fvjh1zqbqbf8zcl17ific"))))
36801 (build-system pyproject-build-system)
36802 (arguments
36803 (list
36804 ;; Do not run doctests requiring sphinx.
36805 #:test-flags #~(list "--ignore=README.rst")))
36806 (native-inputs
36807 (list python-pytest
36808 python-setuptools
36809 python-wheel))
36810 (propagated-inputs
36811 (list python-attrs))
36812 (home-page "https://github.com/bskinn/stdio-mgr")
36813 (synopsis "Context manager for mocking/wrapping stdin/stdout/stderr")
36814 (description
36815 "This package contains a context manager for mocking/wrapping
36816stdin/stdout/stderr.")
36817 (license license:expat)))
36818
36819;; TODO: This package is not necessary in Guix. It should be replaced by a
36820;; trivial python package providing the same functionality.
36821(define-public python-stdlib-list
36822 (package
36823 (name "python-stdlib-list")
36824 (version "0.11.1")
36825 (source
36826 (origin
36827 (method git-fetch)
36828 (uri (git-reference
36829 (url "https://github.com/jackmaney/python-stdlib-list")
36830 (commit (string-append "v" version))))
36831 (file-name (git-file-name name version))
36832 (sha256
36833 (base32 "14aw5xbqcs0ww9n4659z5dbs89xqpw2s4m3q4gp66br2xr9iybjf"))))
36834 (build-system pyproject-build-system)
36835 (native-inputs
36836 (list python-flit-core
36837 python-pytest
36838 python-sphinx))
36839 (home-page "https://github.com/jackmaney/python-stdlib-list")
36840 (synopsis "Python Standard Libraries")
36841 (description
36842 "This package contains a list of Python Standard Libraries.")
36843 (license license:expat)))
36844
36845(define-public python-stem
36846 (package
36847 (name "python-stem")
36848 (version "1.8.2")
36849 (source
36850 (origin
36851 (method url-fetch)
36852 (uri (pypi-uri "stem" version))
36853 (sha256
36854 (base32
36855 "10mm9qw4xv7d18086ivy38iaz04z72018186q03j5y69skzikyw3"))))
36856 (build-system pyproject-build-system)
36857 (arguments
36858 (list
36859 #:phases #~(modify-phases %standard-phases
36860 (replace 'check
36861 (lambda _
36862 (invoke "./run_tests.py" "--unit"))))))
36863 (native-inputs
36864 (list python-setuptools
36865 python-wheel))
36866 (home-page "https://stem.torproject.org/")
36867 (synopsis
36868 "Python controller library that allows applications to interact with Tor")
36869 (description
36870 "Stem is a Python controller library for Tor. With it you can use Tor's
36871 control protocol to script against the Tor process and read descriptor data
36872 relays publish about themselves.")
36873 (license license:lgpl3)))
36874
36875(define-public python-stltools
36876 (package
36877 (name "python-stltools")
36878 (version "2022.01.20")
36879 (source
36880 (origin
36881 (method git-fetch)
36882 (uri (git-reference
36883 (url "https://github.com/rsmith-nl/stltools")
36884 (commit version)))
36885 (file-name (git-file-name name version))
36886 (sha256
36887 (base32 "1k6dhszza4lpy46qffaqx5zr70ikfqqysbacy7zabnrvz09fd4rs"))))
36888 (build-system pyproject-build-system)
36889 (arguments
36890 (list
36891 #:phases
36892 #~(modify-phases %standard-phases
36893 ;; XXX: Project lacks correct setup.py, setup.cfg or pyproject.toml.
36894 (delete 'build)
36895 (replace 'install
36896 (lambda* (#:key inputs outputs #:allow-other-keys)
36897 (let ((moddir (string-append (site-packages inputs outputs)
36898 "/stltools"))
36899 (bindir (string-append #$output "/bin")))
36900 (copy-recursively "stltools" moddir)
36901 (mkdir-p bindir)
36902 (for-each
36903 (lambda (script)
36904 (let ((source (string-append script ".py"))
36905 (target (string-append bindir "/" script)))
36906 (copy-file source target)
36907 (chmod target #o555)))
36908 '("stl2pov" "stl2ps" "stl2pdf" "stlinfo"))))))))
36909 (native-inputs
36910 (list python-pytest
36911 python-setuptools))
36912 (propagated-inputs
36913 (list python-pycairo))
36914 (home-page "https://github.com/rsmith-nl/stltools")
36915 (synopsis "Python modules and scripts for handling STL files")
36916 (description
36917 "This package consists of Python modules and scripts for manipulating
36918stereolithography (STL) files. It can convert STL files into POV-ray meshes,
36919PDF and PostScript. The Python modules allow for reading and writing STL
36920files. It supports both the text and binary forms of STL.")
36921 (license license:expat)))
36922
36923(define-public python-stone
36924 (package
36925 (name "python-stone")
36926 (version "3.3.9")
36927 (source
36928 (origin
36929 (method git-fetch)
36930 (uri (git-reference
36931 (url "https://github.com/dropbox/stone")
36932 (commit (string-append "v" version))))
36933 (file-name (git-file-name name version))
36934 (sha256
36935 (base32 "1x0kj4jygssjn66lbkln95chhf85vzy1wnpziy9jvpf4kbc1bmfy"))))
36936 (build-system pyproject-build-system)
36937 (native-inputs
36938 (list python-pytest
36939 python-setuptools))
36940 (propagated-inputs
36941 (list python-jinja2
36942 python-packaging
36943 python-ply
36944 python-six)) ;hard requirement, still
36945 (home-page "https://github.com/dropbox/stone")
36946 (synopsis "Official Api Spec Language for Dropbox")
36947 (description
36948 "Stone is an interface description language (IDL) for APIs.")
36949 (license license:expat)))
36950
36951(define-public python-stopit
36952 (package
36953 (name "python-stopit")
36954 (version "1.1.2")
36955 (source
36956 (origin
36957 (method git-fetch)
36958 (uri (git-reference
36959 (url "https://github.com/glenfant/stopit")
36960 (commit version)))
36961 (file-name (git-file-name name version))
36962 (sha256
36963 (base32 "1g3xwd62389643hrz6bljq0ddd1yvwpfk4nrv29naf09pl1m8wmr"))))
36964 (build-system pyproject-build-system)
36965 (arguments
36966 (list #:test-backend #~'custom
36967 #:test-flags #~(list "tests.py")))
36968 (native-inputs (list python-setuptools))
36969 (home-page "https://pypi.python.org/pypi/stopit")
36970 (synopsis "Timeout control decorator and context managers")
36971 (description
36972 "Raise asynchronous exceptions in other threads, control the timeout of
36973blocks or callables with two context managers and two decorators.")
36974 (license license:expat)))
36975
36976(define-public python-straight-plugin
36977 (package
36978 (name "python-straight-plugin")
36979 (properties '((commit . "363b0af4a2560bf9a3cb61160ecf28a1a1b9c91f")
36980 (revision . "0")))
36981 (version (git-version "1.4.1"
36982 (assoc-ref properties 'revision)
36983 (assoc-ref properties 'commit)))
36984 (source
36985 (origin
36986 (method git-fetch)
36987 (uri (git-reference
36988 (url "https://github.com/ironfroggy/straight.plugin")
36989 (commit (assoc-ref properties 'commit))))
36990 (file-name (git-file-name name version))
36991 (sha256
36992 (base32 "03p2apj7i9m38nmccfhvzldmzd61icv145vpmifln3mvh09jm6c2"))))
36993 (build-system pyproject-build-system)
36994 (arguments
36995 (list
36996 #:test-backend #~'custom
36997 #:test-flags #~(list "tests.py")))
36998 (native-inputs (list python-mock python-setuptools))
36999 (home-page "https://github.com/ironfroggy/straight.plugin")
37000 (synopsis "Simple namespaced plugin facility")
37001 (description
37002 "Straight Plugin provides a type of plugin you can create from almost any
37003existing Python modules, and an easy way for outside developers to add
37004functionality and customization to your projects with their own plugins.")
37005 (license license:expat)))
37006
37007(define-public python-streamtracer
37008 (package
37009 (name "python-streamtracer")
37010 (version "2.4.0")
37011 (source
37012 (origin
37013 (method url-fetch)
37014 (uri (pypi-uri "streamtracer" version))
37015 (sha256
37016 (base32 "01ncr8q58xkz2dydjdg4a0c3kv4mpd6j1lzj4p0cmpg7jdi24cmr"))))
37017 (build-system cargo-build-system)
37018 (arguments
37019 (list
37020 #:imported-modules `(,@%cargo-build-system-modules
37021 ,@%pyproject-build-system-modules)
37022 #:modules '((guix build cargo-build-system)
37023 ((guix build pyproject-build-system) #:prefix py:)
37024 (guix build utils))
37025 #:phases
37026 (with-extensions (list (pyproject-guile-json))
37027 #~(modify-phases %standard-phases
37028 (add-after 'build 'build-python-module
37029 (assoc-ref py:%standard-phases 'build))
37030 (add-after 'build-python-module 'install-python-module
37031 (assoc-ref py:%standard-phases 'install))
37032 (add-after 'install-python-module 'add-install-to-pythonpath
37033 (assoc-ref py:%standard-phases 'add-install-to-pythonpath))
37034 (add-after 'check 'check-python-module
37035 (lambda* (#:key tests? #:allow-other-keys)
37036 (when tests?
37037 (with-directory-excursion #$output
37038 (invoke "pytest" "-vv")))))))
37039 #:install-source? #false))
37040 (native-inputs
37041 (list maturin
37042 python-pytest
37043 python-pytest-doctestplus
37044 python-wrapper))
37045 (propagated-inputs
37046 (list python-numpy
37047 python-packaging))
37048 (inputs (cargo-inputs 'python-streamtracer))
37049 (home-page "https://github.com/sunpy/streamtracer")
37050 (synopsis "Rapid streamline tracing in Python")
37051 (description
37052 "streamtracer is a Python package for rapid streamline tracing on
37053regularly spaced grids. The actual streamline tracing is done at a low level
37054in Rust, with a nice Python API provided on top.")
37055 (license license:gpl3+)))
37056
37057(define-public python-strenum
37058 (package
37059 (name "python-strenum")
37060 (version "0.4.15")
37061 (source
37062 (origin
37063 (method git-fetch)
37064 (uri (git-reference
37065 (url "https://github.com/irgeek/StrEnum")
37066 (commit (string-append "v" version))))
37067 (file-name (git-file-name name version))
37068 (sha256
37069 (base32 "1bvk7v5f3sr7awcacdmw5lfzsnn6j52q45va9xpc71n5qxydqbfn"))))
37070 (build-system pyproject-build-system)
37071 (arguments
37072 (list
37073 #:test-flags
37074 #~(list "--ignore=doc/")
37075 #:phases
37076 #~(modify-phases %standard-phases
37077 (add-after 'unpack 'fix-version
37078 ;; Versioneer is useless when there is no git metadata.
37079 (lambda _
37080 (substitute* "setup.py"
37081 (("version=versioneer.get_version\\(),")
37082 (format #f "version=~s," #$version)))))
37083 (add-after 'unpack 'fix-pytest-config
37084 (lambda _
37085 (substitute* "pytest.ini"
37086 (("addopts =.*") "")))))))
37087 (native-inputs
37088 (list python-pytest
37089 python-setuptools))
37090 (home-page "https://github.com/irgeek/StrEnum")
37091 (synopsis "Enum that inherits from str")
37092 (description "StrEnum is a Python @code{enum.Enum} that inherits from
37093@code{str} to complement @code{enum.IntEnum} in the standard library.")
37094 (license license:expat)))
37095
37096(define-public python-structlog
37097 (package
37098 (name "python-structlog")
37099 (version "25.5.0")
37100 (source
37101 (origin
37102 (method url-fetch)
37103 (uri (pypi-uri "structlog" version))
37104 (sha256
37105 (base32 "167wj0hxrsa9kbalh86vvwqs105zi8ld1ikh8lyibndypsij5189"))))
37106 (build-system pyproject-build-system)
37107 (native-inputs
37108 (list python-hatch-fancy-pypi-readme
37109 python-hatch-vcs
37110 python-hatchling
37111 python-pytest
37112 python-pytest-asyncio
37113 python-time-machine))
37114 (home-page "https://www.structlog.org/")
37115 (synopsis "Structured Logging for Python")
37116 (description "@code{structlog} changes logging in Python by adding structure
37117to your log entries.")
37118 (license (list license:asl2.0 license:expat))))
37119
37120(define-public python-style
37121 (package
37122 (name "python-style")
37123 (version "1.1.6")
37124 (source
37125 (origin
37126 (method url-fetch)
37127 (uri (pypi-uri "style" version))
37128 (sha256
37129 (base32 "1dcfb578v9mrwh92rgms87gql0gp4vgj6l9hpgyfg0wbd3rh3bfh"))))
37130 (build-system pyproject-build-system)
37131 (arguments
37132 (list #:tests? #f)) ;no tests in PyPI, package is 6y old
37133 (native-inputs
37134 (list python-setuptools))
37135 (home-page "https://github.com/lmittmann/style")
37136 (synopsis "Terminal string styling")
37137 (description
37138"@code{python-style} is a simple terminal string styling package. Its API is
37139a port of the chalk package for javascript.")
37140 (license license:expat)))
37141
37142(define-public python-svgelements
37143 (package
37144 (name "python-svgelements")
37145 (version "1.9.6")
37146 (source
37147 (origin
37148 (method url-fetch)
37149 (uri (pypi-uri "svgelements" version))
37150 (sha256
37151 (base32 "1xrp7yxg65dqdrmghriljf9hh2smq2zhzr2hzmqifgfd0ijas0kw"))))
37152 (build-system pyproject-build-system)
37153 (native-inputs
37154 (list python-anyio
37155 python-pytest
37156 python-numpy
37157 python-pillow
37158 python-scipy
37159 python-setuptools
37160 python-wheel))
37161 (home-page "https://github.com/meerk40t/svgelements")
37162 (synopsis "SVG parsing for elements, paths, and other SVG objects")
37163 (description
37164 "This module does high fidelity SVG parsing and geometric rendering.
37165The goal is to successfully and correctly process SVG for use with any scripts
37166that may need or want to use SVG files as geometric data.")
37167 (license license:expat)))
37168
37169(define-public python-svgutils
37170 (package
37171 (name "python-svgutils")
37172 (version "0.3.4")
37173 (source
37174 (origin
37175 (method url-fetch)
37176 (uri (pypi-uri "svgutils" version))
37177 (sha256
37178 (base32 "0lz0w2ajdvwd269a7ppnzawmx8px0116j0nx8xvhlihxrd28zx4y"))))
37179 (build-system pyproject-build-system)
37180 (arguments
37181 (list #:tests? #f)) ;no test in PyPI archive, depend on Nose
37182 (native-inputs
37183 (list python-setuptools))
37184 (propagated-inputs
37185 (list python-lxml))
37186 (home-page "https://svgutils.readthedocs.io")
37187 (synopsis "Python SVG editor")
37188 (description "This is an utility package that helps with editing and
37189concatenating SVG files. It is especially directed at scientists preparing
37190final figures for submission to journals. So far it supports arbitrary
37191placement and scaling of SVG figures and adding markers, such as labels.")
37192 (license license:expat)))
37193
37194(define-public python-swagger-spec-validator
37195 (package
37196 (name "python-swagger-spec-validator")
37197 (version "3.0.4")
37198 (source
37199 (origin
37200 (method git-fetch)
37201 (uri (git-reference
37202 (url "https://github.com/Yelp/swagger_spec_validator")
37203 (commit (string-append "v" version))))
37204 (file-name (git-file-name name version))
37205 (sha256
37206 (base32 "1vmwg0432s22g48i2ys1ay441wmgkhjann1s165r499wg3pksggi"))))
37207 (build-system pyproject-build-system)
37208 (native-inputs
37209 (list python-pytest
37210 python-setuptools))
37211 (propagated-inputs
37212 (list python-importlib-resources
37213 python-jsonschema
37214 python-pyyaml
37215 python-typing-extensions))
37216 (home-page "https://github.com/Yelp/swagger_spec_validator")
37217 (synopsis "Validation of Swagger specifications")
37218 (description
37219 "@code{swagger_spec_validator} provides a library for validating Swagger
37220API specifications.")
37221 (license license:asl2.0)))
37222
37223(define-public python-syllables
37224 (package
37225 (name "python-syllables")
37226 (version "1.0.3")
37227 (source
37228 (origin
37229 (method git-fetch)
37230 (uri (git-reference
37231 (url "https://github.com/prosegrinder/python-syllables")
37232 (commit (string-append "v" version))))
37233 (file-name (git-file-name name version))
37234 (sha256
37235 (base32 "12yv9d7hmrkw10p2nivk0c9b96rm6040zfif6pj4sm1vg3n8ik6n"))))
37236 (build-system pyproject-build-system)
37237 (native-inputs
37238 (list python-cmudict
37239 python-pytest
37240 python-setuptools))
37241 (home-page "https://github.com/prosegrinder/python-syllables")
37242 (synopsis "Package for estimating the number of syllables in a word")
37243 (description
37244 "This package provides a Python package for estimating the number of
37245syllables in a word.")
37246 (license license:gpl3)))
37247
37248(define-public python-sympy
37249 (package
37250 (name "python-sympy")
37251 (version "1.13.3")
37252 (source
37253 (origin
37254 (method url-fetch)
37255 (uri (pypi-uri "sympy" version))
37256 (sha256
37257 (base32 "1nf4zrjjbnv47n6sl6x9blfyarski61vdjaz4ygb62hfag3d4zxj"))))
37258 (build-system pyproject-build-system)
37259 (arguments
37260 '(#:phases
37261 (modify-phases %standard-phases
37262 (replace 'check
37263 (lambda* (#:key tests? #:allow-other-keys)
37264 (if tests?
37265 (invoke "python3" "-c"
37266 "import sympy; sympy.test(\"/core\")")))))))
37267 (propagated-inputs (list python-mpmath))
37268 (native-inputs
37269 (list python-hypothesis
37270 python-pytest
37271 python-setuptools
37272 python-wheel))
37273 (home-page "https://www.sympy.org/")
37274 (synopsis "Python library for symbolic mathematics")
37275 (description
37276 "SymPy is a Python library for symbolic mathematics. It aims to become a
37277full-featured computer algebra system (CAS) while keeping the code as simple
37278as possible in order to be comprehensible and easily extensible.")
37279 (license license:bsd-3)))
37280
37281(define-public python-tables
37282 (package
37283 (name "python-tables")
37284 ;; XXX: Compatability fix for numexpr 2.13.0, see:
37285 ;; <https://github.com/PyTables/PyTables/pull/1256>.
37286 (properties '((commit . "aad9079c80ce3ae7f385d00af760d171dcc10535")
37287 (revision . "0")))
37288 (version (git-version "3.10.2"
37289 (assoc-ref properties 'revision)
37290 (assoc-ref properties 'commit)))
37291 (source
37292 (origin
37293 (method git-fetch)
37294 (uri (git-reference
37295 (url "https://github.com/PyTables/PyTables")
37296 (commit (assoc-ref properties 'commit))))
37297 (file-name (git-file-name name version))
37298 (sha256
37299 (base32 "0gnqj1gj6dnr167pacmynvghw8bwwll6nlz843rm95r07zi6blrm"))
37300 (snippet '(begin
37301 (use-modules (guix build utils))
37302 (delete-file-recursively "hdf5-blosc")
37303 (delete-file-recursively "c-blosc")))))
37304 (build-system pyproject-build-system)
37305 (arguments
37306 (list
37307 #:phases
37308 #~(modify-phases %standard-phases
37309 (add-after 'unpack 'disable-tuning
37310 (lambda _
37311 (substitute* "setup.py"
37312 (("cpu_flags = .*")
37313 "cpu_flags = ['sse2']\n"))))
37314 (add-after 'unpack 'fix-reference-to-blosc2
37315 (lambda* (#:key inputs #:allow-other-keys)
37316 (substitute* "tables/__init__.py"
37317 (("( +)os.path.join\\(current_dir, blosc2_lib_hardcoded\\),"
37318 m indent)
37319 (string-append indent
37320 "\""
37321 (search-input-file inputs "/lib/libblosc2.so")
37322 "\",\n" m)))))
37323 (add-before 'build 'pre-build
37324 (lambda _
37325 (substitute* "setup.py"
37326 (("hdf5-blosc/src")
37327 (format #f "~a/src"
37328 #$(package-source (this-package-input "hdf5-blosc")))))
37329 (invoke "make" "distclean") ;Regenerate C code with Cython
37330 (setenv "BLOSC2_DIR" #$(this-package-input "cblosc2"))
37331 (setenv "BLOSC_DIR" #$(this-package-input "c-blosc"))
37332 (setenv "BZIP2_DIR" #$(this-package-input "bzip2"))
37333 (setenv "HDF5_DIR" #$(this-package-input "hdf5"))
37334 (setenv "LZO_DIR" #$(this-package-input "lzo"))))
37335 (add-before 'check 'pre-check
37336 (lambda _
37337 (setenv "HOME" "/tmp")))
37338 (replace 'check
37339 (lambda* (#:key tests? #:allow-other-keys)
37340 (when tests?
37341 (with-directory-excursion "/tmp"
37342 ;; Performing only a light (yet comprehensive) subset of the
37343 ;; test suite. If you want a more complete test, try
37344 ;; passing the --heavy flag to this script (or set the
37345 ;; 'heavy' parameter in case you are using tables.test()
37346 ;; call). The whole suite will take more than 4 hours to
37347 ;; complete on a relatively modern CPU and around 512 MB of
37348 ;; main memory.
37349 (invoke "python" "-m" "tables.tests.test_all"))))))))
37350 (native-inputs
37351 (list pkg-config
37352 python-cython
37353 python-pytest
37354 python-setuptools
37355 python-sphinx))
37356 (inputs
37357 (list bzip2
37358 c-blosc
37359 c-blosc2
37360 hdf5
37361 hdf5-blosc
37362 lzo))
37363 (propagated-inputs
37364 (list python-blosc2
37365 python-numexpr
37366 python-numpy
37367 python-packaging
37368 python-py-cpuinfo
37369 python-typing-extensions))
37370 (home-page "https://www.pytables.org/")
37371 (synopsis "Hierarchical datasets for Python")
37372 (description "PyTables is a package for managing hierarchical datasets and
37373designed to efficiently cope with extremely large amounts of data.")
37374 (license license:bsd-3)))
37375
37376(define-public python-tablib
37377 (package
37378 (name "python-tablib")
37379 (version "3.9.0")
37380 (source
37381 (origin
37382 (method url-fetch)
37383 (uri (pypi-uri "tablib" version))
37384 (sha256
37385 (base32 "1qjzbpaln1grr5ngcm2apd5dxp0gcrwis5n60hg60d8gvf7bsshv"))))
37386 (build-system pyproject-build-system)
37387 (native-inputs
37388 (list python-pytest
37389 python-pytest-cov
37390 python-setuptools
37391 python-setuptools-scm))
37392 (inputs ;; [cli]
37393 (list python-tabulate))
37394 (propagated-inputs
37395 (list python-markuppy
37396 python-odfpy
37397 python-openpyxl
37398 python-pyyaml
37399 python-xlrd
37400 python-xlwt))
37401 (home-page "https://tablib.readthedocs.io")
37402 (synopsis "Format agnostic tabular data library")
37403 (description
37404 "@code{tablib} is a format-agnostic tabular dataset library,
37405written in Python. Supported output formats are Excel (Sets + Books),
37406JSON (Sets + Books), YAML (Sets + Books), HTML (Sets), Jira (Sets),
37407TSV (Sets), ODS (Sets), CSV (Sets), and DBF (Sets).
37408
37409@code{tablib} also supports Pandas DataFrames (Sets). Anyhow, since pandas is
37410quite huge, this Guix package doesn't depend on pandas. In case, just also
37411install @code{python-pandas}.")
37412 (license license:expat)))
37413
37414(define-public python-tabulate
37415 (package
37416 (name "python-tabulate")
37417 (version "0.9.0")
37418 (source
37419 (origin
37420 (method url-fetch)
37421 (uri (pypi-uri "tabulate" version))
37422 (sha256
37423 (base32 "0g4b0qnbw55igbpxfxzciqvb6w8ncw4gmcgyq0lyavcnylmv3580"))))
37424 (build-system pyproject-build-system)
37425 (native-inputs
37426 (list python-pytest
37427 python-setuptools-scm
37428 python-setuptools))
37429 (propagated-inputs
37430 (list python-wcwidth))
37431 (home-page "https://github.com/astanin/python-tabulate")
37432 (synopsis "Pretty-print tabular data")
37433 (description
37434 "Tabulate is a library and command-line utility to pretty-print tabular
37435data in Python.")
37436 (license license:expat)))
37437
37438(define-public python-takethetime
37439 (package
37440 (name "python-takethetime")
37441 (version "0.3.1")
37442 (source
37443 (origin
37444 (method url-fetch)
37445 (uri (pypi-uri "TakeTheTime" version))
37446 (sha256
37447 (base32 "1y9gzqb9l1f2smx8783ccjzjvby5mphshgrfks7s75mml59h9qyv"))))
37448 (build-system pyproject-build-system)
37449 (arguments
37450 (list #:tests? #f)) ; tests are time dependent and not provided in PyPI
37451 (native-inputs
37452 (list python-setuptools
37453 python-wheel))
37454 (home-page "https://github.com/ErikBjare/TakeTheTime")
37455 (synopsis "Timing chunks of code")
37456 (description
37457 "This package implements a functionality for time taking using context
37458managers.")
37459 (license license:expat)))
37460
37461(define-public python-taskgroup
37462 (package
37463 (name "python-taskgroup")
37464 (version "0.0.0a4")
37465 (source
37466 (origin
37467 (method url-fetch)
37468 (uri (pypi-uri "taskgroup" version))
37469 (sha256
37470 (base32 "170m7b59nxrhzs0nz6brj9brz4rzvw6k587ja0cnc9qy48nr027b"))))
37471 (build-system pyproject-build-system)
37472 (arguments
37473 (list #:tests? #f)) ; no tests in PyPI and Git checkout
37474 (native-inputs
37475 (list python-flit-core))
37476 (home-page "https://github.com/graingert/taskgroup")
37477 (synopsis "Backport of asyncio.TaskGroup, asyncio.Runner and asyncio.timeout")
37478 (description
37479 "This package provides a backport of @code{asyncio.TaskGroup},
37480@code{asyncio.Runner} and @code{asyncio.timeout}.")
37481 (license license:expat)))
37482
37483(define-public python-tasklogger
37484 (package
37485 (name "python-tasklogger")
37486 (version "1.2.0")
37487 (source
37488 (origin
37489 (method url-fetch)
37490 (uri (pypi-uri "tasklogger" version))
37491 (sha256
37492 (base32 "1901mibcp6aiyjy8afnybrxnb0dkbdxlbvjqbr3gginlw7dr18xh"))))
37493 (build-system pyproject-build-system)
37494 (native-inputs
37495 (list python-pytest
37496 python-numpy
37497 python-setuptools))
37498 (propagated-inputs
37499 (list python-deprecated))
37500 (home-page "https://github.com/scottgigante/tasklogger")
37501 (synopsis "Extension to the core Python logging library")
37502 (description "This package provides an extension to the core Python
37503logging library for logging the beginning and completion of tasks and
37504subtasks.")
37505 (license license:gpl2)))
37506
37507(define-public python-tatsu
37508 (package
37509 (name "python-tatsu")
37510 (version "5.13.2")
37511 (source
37512 (origin
37513 (method git-fetch)
37514 (uri (git-reference
37515 (url "https://github.com/neogeny/TatSu")
37516 (commit (string-append "v" version))))
37517 (file-name (git-file-name name version))
37518 (sha256
37519 (base32 "0ppgi5r55iirzhnf988b32yvh8ly8lzxbg59y0zgqfaxbma50650"))))
37520 (build-system pyproject-build-system)
37521 (native-inputs
37522 (list python-pytest
37523 python-setuptools))
37524 (home-page "https://tatsu.readthedocs.io/en/stable/")
37525 (synopsis "PEG/Packrat Parser generator for Python")
37526 (description
37527 "TatSu (竜) takes a grammar in a variation of Extended Backus-Naur
37528Form (EBNF) as input, and outputs a memoizing Parsing Expression Grammar (PEG)
37529or Packrat parser in Python.")
37530 (license license:bsd-2)))
37531
37532(define-public python-tblib
37533 (package
37534 (name "python-tblib")
37535 (version "3.1.0")
37536 (source
37537 (origin
37538 (method url-fetch)
37539 (uri (pypi-uri "tblib" version))
37540 (sha256
37541 (base32 "0lnnbicpxx774s29nkbic4rrqvy4rhxd8skx5pp6zxh7kwn4qh06"))))
37542 (build-system pyproject-build-system)
37543 (arguments
37544 (list
37545 ;; Don't run benchmark tests.
37546 #:test-flags #~(list "--ignore=tests/test_perf.py")
37547 #:phases
37548 #~(modify-phases %standard-phases
37549 (add-after 'unpack 'fix-pytest-config
37550 (lambda _
37551 (substitute* "pytest.ini"
37552 (("--benchmark-disable") "")))))))
37553 (native-inputs
37554 (list python-pytest
37555 python-setuptools))
37556 (home-page "https://github.com/ionelmc/python-tblib")
37557 (synopsis "Traceback serialization library")
37558 (description
37559 "Traceback serialization allows you to:
37560
37561@enumerate
37562@item Pickle tracebacks and raise exceptions with pickled tracebacks in
37563different processes. This allows better error handling when running code over
37564multiple processes (imagine multiprocessing, billiard, futures, celery etc).
37565
37566@item Parse traceback strings and raise with the parsed tracebacks.
37567@end enumerate\n")
37568 (license license:bsd-3)))
37569
37570(define-public python-telethon
37571 (package
37572 (name "python-telethon")
37573 (version "1.41.1")
37574 (source
37575 (origin
37576 (method git-fetch)
37577 (uri (git-reference
37578 (url "https://github.com/LonamiWebs/Telethon")
37579 (commit (string-append "v" version))))
37580 (file-name (git-file-name name version))
37581 (sha256
37582 (base32 "0rbzqbxsihqm2w1zrvaaafvzwyqqyjx49wfffxrnsr9m32giwzsp"))))
37583 (build-system pyproject-build-system)
37584 (native-inputs
37585 (list python-pytest
37586 python-pytest-asyncio-0.26
37587 python-pytest-trio
37588 python-setuptools))
37589 (propagated-inputs
37590 (list python-rsa python-pyaes))
37591 (home-page "https://docs.telethon.dev")
37592 (synopsis "Full-featured Telegram client library for Python 3")
37593 (description "This library is designed to make it easy to write Python
37594programs that can interact with Telegram.")
37595 (license license:expat)))
37596
37597(define-public python-tempdir
37598 (package
37599 (name "python-tempdir")
37600 (version "0.7.1")
37601 (source
37602 (origin
37603 (method url-fetch)
37604 (uri (pypi-uri "tempdir" version))
37605 (sha256
37606 (base32 "13msyyxqbicr111a294x7fsqbkl6a31fyrqflx3q7k547gnq15k8"))))
37607 (build-system pyproject-build-system)
37608 (arguments (list #:tests? #f)) ; No tests.
37609 (native-inputs (list python-setuptools))
37610 (home-page "https://pypi.org/project/tempdir/")
37611 (synopsis "Python library for managing temporary directories")
37612 (description
37613 "This library manages temporary directories that are automatically
37614deleted with all their contents when they are no longer needed. It is
37615particularly convenient for use in tests.")
37616 (license license:expat)))
37617
37618(define-public python-tempora
37619 (package
37620 (name "python-tempora")
37621 (version "5.8.1")
37622 (source
37623 (origin
37624 (method url-fetch)
37625 (uri (pypi-uri "tempora" version))
37626 (sha256
37627 (base32 "1k9d6qmlp0i4v3d0dcqcsndvmng3lfdh4y0p8gwy9i8cg7ndkddb"))))
37628 (build-system pyproject-build-system)
37629 (arguments
37630 (list
37631 ;; Do not test the myproject.toml build as it tries to pull dependencies
37632 ;; from the Internet.
37633 #:test-flags #~(list "-k" "not project"
37634 "tests")))
37635 (native-inputs
37636 (list python-freezegun
37637 python-pytest
37638 python-setuptools
37639 python-setuptools-scm
37640 python-tzdata))
37641 (propagated-inputs (list python-dateutil python-jaraco-functools))
37642 (home-page "https://github.com/jaraco/tempora")
37643 (synopsis "Python date and time objects and routines")
37644 (description
37645 "The @code{tempora} Python library contains miscellaneous date and time
37646related utilities and constants, routines for measuring, profiling, and
37647getting datetime-aware @acronym{UTC, Coordinated Universal Time} values as
37648well as an event scheduler.")
37649 (license license:expat)))
37650
37651(define-public python-tenacity
37652 (package
37653 (name "python-tenacity")
37654 (version "9.0.0")
37655 (source
37656 (origin
37657 (method url-fetch)
37658 (uri (pypi-uri "tenacity" version))
37659 (sha256
37660 (base32 "0fyp421r038naskvyhj90hkq0az96477njad4rhs6annjz53fzw0"))))
37661 (build-system pyproject-build-system)
37662 (native-inputs
37663 (list python-pytest
37664 python-setuptools
37665 python-setuptools-scm
37666 python-tornado-6
37667 python-typeguard
37668 python-wheel))
37669 (home-page "https://github.com/jd/tenacity")
37670 (synopsis "Retrying library for python")
37671 (description
37672 "Tenacity is a general-purpose python library to simplify the task of
37673adding retry behavior to just about anything.")
37674 (license license:asl2.0)))
37675
37676(define-public python-term-background
37677 (package
37678 (name "python-term-background")
37679 (version "1.0.2")
37680 (source
37681 (origin
37682 (method url-fetch)
37683 (uri (pypi-uri "term_background" version))
37684 (sha256
37685 (base32 "0p674silrwc3jncncmdnj1lr6pl2q5qbx0xi3mzjq9sgcs5vmp4n"))))
37686 (arguments
37687 (list
37688 #:phases
37689 '(modify-phases %standard-phases
37690 (add-after 'unpack 'fix-build
37691 (lambda _ (delete-file "setup.py"))))))
37692 (build-system pyproject-build-system)
37693 (native-inputs
37694 (list python-pytest
37695 python-setuptools
37696 python-setuptools-scm
37697 python-wrapper
37698 python-wheel))
37699 (home-page "http://github.com/rocky/shell-term-background")
37700 (synopsis "Determine if shell has a light or dark background")
37701 (description "This package determines if shell has a light or dark
37702background.")
37703 (license license:gpl2+)))
37704
37705(define-public python-term-image
37706 (package
37707 (name "python-term-image")
37708 (version "0.7.2")
37709 (source
37710 (origin
37711 ;; We need the full repo to run the tests.
37712 (method git-fetch)
37713 (uri (git-reference
37714 (url "https://github.com/AnonymouX47/term-image")
37715 (commit (string-append "v" version))))
37716 (file-name (git-file-name name version))
37717 (sha256
37718 (base32 "1lsd5m0k5m99arkca2rzrrlln10c8ax6xfawqwjnspcbf8l3h3dq"))))
37719 (build-system pyproject-build-system)
37720 (arguments
37721 (list #:test-flags
37722 #~(list "tests"
37723 ;; These tests require network access.
37724 "-k" (string-append "not test_from_url"
37725 " and not test_source"
37726 " and not test_close"))
37727 #:phases
37728 #~(modify-phases %standard-phases
37729 (add-after 'unpack 'adjust-dependencies
37730 (lambda _
37731 (substitute* "setup.py"
37732 (("pillow>=9.1,<11") "pillow>=9.1,<12")))))))
37733 (propagated-inputs (list python-pillow python-requests))
37734 (native-inputs
37735 (list python-pytest
37736 python-setuptools
37737 python-urwid))
37738 (home-page "https://github.com/AnonymouX47/term-image")
37739 (synopsis "Display images in the terminal")
37740 (description "term-image is a library and program to display images on
37741compatible terminals.
37742
37743Features:
37744@enumerate
37745@item Multiple image formats (basically all formats supported by
37746@code{PIL.Image.open()})
37747@item Multiple image source types: PIL image instance, local file, URL
37748@item Multiple image render styles (with automatic support detection)
37749@item Support for multiple terminal graphics protocols, including Kitty
37750@item Transparency support (with multiple options)
37751@item Animated image support (including transparent ones)
37752@item Integration into various TUI / terminal-based output libraries
37753@item Terminal size awareness
37754@item Automatic and manual image sizing
37755@item Horizontal and vertical alignment
37756@item Automatic and manual font ratio adjustment (to preserve image aspect
37757ratio)
37758@end enumerate")
37759 (license license:expat)))
37760
37761(define-public python-termcolor
37762 (package
37763 (name "python-termcolor")
37764 (version "2.5.0")
37765 (source
37766 (origin
37767 (method url-fetch)
37768 (uri (pypi-uri "termcolor" version))
37769 (sha256
37770 (base32 "0vwaxyr2vk8gi7s1slq74nb0ssbb0wcn208ziqp48j3dv8kqv3cr"))))
37771 (build-system pyproject-build-system)
37772 (native-inputs
37773 (list python-hatch-vcs
37774 python-hatchling
37775 python-pytest
37776 python-pytest-cov))
37777 (home-page "https://pypi.org/project/termcolor/")
37778 (synopsis "ANSII Color formatting for terminal output")
37779 (description
37780 "This package provides ANSII Color formatting for output in terminals.")
37781 (license license:expat)))
37782
37783(define-public python-termcolor-1
37784 (package
37785 (inherit python-termcolor)
37786 (version "1.1.0")
37787 (source
37788 (origin
37789 (method url-fetch)
37790 (uri (pypi-uri "termcolor" version))
37791 (sha256
37792 (base32
37793 "0fv1vq14rpqwgazxg4981904lfyp84mnammw7y046491cv76jv8x"))))
37794 ;; There are no tests
37795 (arguments (list #:tests? #false))
37796 (native-inputs
37797 (list python-setuptools
37798 python-wheel))))
37799
37800(define-public python-termcolor-next
37801 (package
37802 (inherit python-termcolor)
37803 (version "3.1.0")
37804 (source
37805 (origin
37806 (method url-fetch)
37807 (uri (pypi-uri "termcolor" version))
37808 (sha256
37809 (base32 "0w2rwl4h7664illllkmicdh3fz3z3pznqxbaxkp0j6aqxvxxfvba"))))))
37810
37811(define-public python-terminaltables
37812 (package
37813 (name "python-terminaltables")
37814 (version "3.1.0")
37815 (source
37816 (origin
37817 (method git-fetch)
37818 (uri (git-reference
37819 (url "https://github.com/Robpol86/terminaltables")
37820 (commit (string-append "v" version))))
37821 (file-name (git-file-name name version))
37822 (sha256 (base32 "1jlm7n6kxypbr8mvwpd7hf9hbfk0a002ad03wqgxlri4aw8pk39a"))))
37823 (build-system pyproject-build-system)
37824 ;; XXX: A lot of test fail with flaky behavior.
37825 (arguments (list #:tests? #f))
37826 (native-inputs
37827 (list python-colorclass
37828 python-colorama
37829 python-pytest
37830 python-setuptools
37831 python-termcolor))
37832 (home-page "https://github.com/Robpol86/terminaltables")
37833 (synopsis
37834 "Generate simple tables in terminals from a nested list of strings")
37835 (description
37836 "This package makes it easy to draw tables in terminal/console
37837applications from a list of lists of strings. It supports multi-line rows.")
37838 (license license:expat)))
37839
37840(define-public python-termstyle
37841 (package
37842 (name "python-termstyle")
37843 (version "0.1.11")
37844 (source
37845 (origin
37846 (method url-fetch)
37847 (uri (pypi-uri "termstyle" version))
37848 (sha256
37849 (base32 "17wzkkcqy5zc0g68xlad3kcv66iw14d2pwqc0h9420gak0vbhx7g"))))
37850 (build-system pyproject-build-system)
37851 (arguments
37852 (list #:test-backend #~'custom
37853 #:test-flags #~(list "test3.py")))
37854 (native-inputs
37855 (list python-setuptools))
37856 (home-page "https://github.com/gfxmonk/termstyle")
37857 (synopsis "Console text coloring for Python")
37858 (description "This package provides console text coloring for Python.")
37859 (license license:bsd-3)))
37860
37861(define-public python-text-unidecode
37862 (package
37863 (name "python-text-unidecode")
37864 (version "1.3")
37865 (source
37866 (origin
37867 (method url-fetch)
37868 (uri (pypi-uri "text-unidecode" version))
37869 (sha256
37870 (base32 "14xb99fdv52j21dsljgsbmbaqv10ps4b453p229r29sdn4xn1mms"))))
37871 (build-system pyproject-build-system)
37872 (native-inputs
37873 (list python-pytest
37874 python-setuptools))
37875 (home-page "https://github.com/kmike/text-unidecode/")
37876 (synopsis "Decode Unicode data")
37877 (description
37878 "@code{text-unidecode} is a basic Python port of the @code{Text::Unidecode}
37879Perl library. It can create ASCII representations of Unicode data. In general
37880users should prefer the @code{python-unidecode} package which offers better
37881memory usage and transliteration quality.")
37882 ;; The user can choose either license.
37883 (license (list license:clarified-artistic license:gpl2+))))
37884
37885(define-public python-textdistance
37886 (package
37887 (name "python-textdistance")
37888 (version "4.6.3")
37889 (source
37890 (origin
37891 (method git-fetch)
37892 (uri (git-reference
37893 (url "https://github.com/life4/textdistance")
37894 (commit version)))
37895 (file-name (git-file-name name version))
37896 (sha256
37897 (base32 "1qaplikab46p38jqr93bxd26vvxcnvib15fjxmmp4cbsiy5196sg"))))
37898 (build-system pyproject-build-system)
37899 ;; tests: 430 passed, 1446 warnings
37900 (native-inputs
37901 (list python-numpy
37902 python-pytest
37903 python-setuptools))
37904 (propagated-inputs
37905 (list python-jellyfish
37906 python-distance
37907 python-levenshtein
37908 python-pylev
37909 python-pyxdameraulevenshtein
37910 python-rapidfuzz))
37911 (home-page "https://github.com/life4/textdistance")
37912 (synopsis "Compute distance between the two texts")
37913 (description "@code{textdistance} is a pure Python library for comparing
37914distance between two or more sequences by many algorithms.")
37915 (license license:expat)))
37916
37917(define-public python-textparser
37918 (package
37919 (name "python-textparser")
37920 (version "0.24.0")
37921 (source
37922 (origin
37923 (method url-fetch)
37924 (uri (pypi-uri "textparser" version))
37925 (sha256
37926 (base32 "0dc3aqbzh0x13i6cmr73q777wv8nxyk3p0kdnynh5l59bbkhixsn"))))
37927 (build-system pyproject-build-system)
37928 (arguments
37929 (list #:test-backend #~'unittest))
37930 (native-inputs (list python-setuptools))
37931 (home-page "https://github.com/eerimoq/textparser")
37932 (synopsis "Fast text parser for Python")
37933 (description "This library provides a text parser written in the Python
37934language. It aims to be fast.")
37935 (license license:expat)))
37936
37937(define-public python-texttable
37938 (package
37939 (name "python-texttable")
37940 (version "1.6.4")
37941 (source
37942 (origin
37943 (method git-fetch)
37944 (uri (git-reference
37945 (url "https://github.com/foutaise/texttable/")
37946 (commit (string-append "v" version))))
37947 (file-name (git-file-name name version))
37948 (sha256
37949 (base32 "1lcn76wx6fsj8d79gs985irkqz5qbwq1v9ji9jxsra6dbb643v5j"))))
37950 (build-system pyproject-build-system)
37951 (arguments (list #:test-flags #~(list "tests.py")))
37952 (native-inputs (list python-pytest python-setuptools))
37953 (home-page "https://github.com/foutaise/texttable/")
37954 (synopsis "Create simple ASCII tables in Python")
37955 (description
37956 "This package provides a Python module for creating simple ASCII
37957tables.")
37958 (license license:expat)))
37959
37960(define-public python-textual
37961 (package
37962 (name "python-textual")
37963 (version "3.5.0")
37964 (source
37965 (origin
37966 (method git-fetch)
37967 (uri (git-reference
37968 (url "https://github.com/Textualize/textual")
37969 (commit (string-append "v" version))))
37970 (file-name (git-file-name name version))
37971 (sha256
37972 (base32 "1sldkhy8phk9c7pln70dyb6aya7qpxb5niym9s91z144dv6ykgws"))))
37973 (build-system pyproject-build-system)
37974 (arguments
37975 (list #:test-flags
37976 ;; Snapshot tests require python-pytest-textual-snapshot which
37977 ;; in turn depends on python-textual.
37978 '(list "--ignore=tests/snapshot_tests/test_snapshots.py"
37979 "-k" (string-append
37980 ;; Broken for unknown reason.
37981 "not test_textual_env_var"
37982 ;; Tests that require python-treesitter-languages.
37983 " and not test_widget_construct"
37984 " and not test_setting_builtin_language_via_constructor"
37985 " and not test_setting_builtin_language_via_attribute"
37986 " and not test_setting_language_to_none"
37987 " and not test_setting_unknown_language"
37988 " and not test_register_language"
37989 " and not test_update_highlight_query"
37990 " and not test_default_theme"
37991 " and not test_setting_builtin_themes"
37992 " and not test_setting_unknown_theme_raises_exception"
37993 " and not test_registering_and_setting_theme"))))
37994 (propagated-inputs
37995 (list python-markdown-it-py
37996 python-platformdirs
37997 python-rich
37998 python-tree-sitter
37999 ;; python-tree-sitter-languages ; optional, not packed yet
38000 python-typing-extensions))
38001 (native-inputs
38002 (list python-poetry-core
38003 python-pytest
38004 python-pytest-asyncio
38005 python-pytest-xdist))
38006 (home-page "https://github.com/Textualize/textual")
38007 (synopsis "Build text user interfaces in Python")
38008 (description "Textual is a @acronym{TUI, Text User Interface} framework
38009for Python inspired by modern web development.")
38010 (license license:expat)))
38011
38012(define-public python-tftpy
38013 (package
38014 (name "python-tftpy")
38015 (version "0.8.6")
38016 (source
38017 (origin
38018 (method git-fetch)
38019 (uri (git-reference
38020 (url "https://github.com/msoulier/tftpy")
38021 (commit version)))
38022 (file-name (git-file-name name version))
38023 (sha256
38024 (base32 "11cs52skmisg7rlmcxghmpcxfszcwmph6cvmfdn2p0ks6ckfy9q2"))))
38025 (build-system pyproject-build-system)
38026 (arguments
38027 (list
38028 #:test-backend #~'unittest
38029 #:test-flags #~(list "tests/test.py")
38030 #:phases
38031 #~(modify-phases %standard-phases
38032 (add-before 'check 'configure-tests
38033 (lambda* (#:key tests? #:allow-other-keys)
38034 (when tests?
38035 ;; The default DEBUG logging level is way too verbose.
38036 (substitute* "tests/test.py"
38037 (("logging\\.DEBUG")
38038 "logging.INFO"))))))))
38039 (native-inputs (list python-setuptools))
38040 (home-page "https://tftpy.sourceforge.net/")
38041 (synopsis "Python trivial file transfer protocol (TFTP) library")
38042 (description
38043 "TFTPy is a trivial file transfer protocol (TFTP) Python library. It can
38044be used to act both as a TFTP client or TFTP server.")
38045 (license license:expat)))
38046
38047(define-public python-three-merge
38048 (package
38049 (name "python-three-merge")
38050 (version "0.1.1")
38051 (source
38052 (origin
38053 ;; There are no tests in the PyPI tarball.
38054 (method git-fetch)
38055 (uri (git-reference
38056 (url "https://github.com/spyder-ide/three-merge")
38057 (commit (string-append "v" version))))
38058 (file-name (git-file-name name version))
38059 (sha256
38060 (base32 "1fw28swh6jq4myr09j7gv68l241b8vwg470ak5xv0x4xwh2a1m86"))))
38061 (build-system pyproject-build-system)
38062 (propagated-inputs
38063 (list python-diff-match-patch))
38064 (native-inputs
38065 (list python-pytest python-setuptools python-wheel))
38066 (home-page "https://github.com/spyder-ide/three-merge")
38067 (synopsis "Library for merging two strings with respect to a base one")
38068 (description
38069 "This package provides a Python library to perform a 3-way merge between
38070strings, based on @code{diff-match-patch}. This library performs merges at a
38071character level, as opposed to most VCS systems, which opt for a line-based
38072approach.")
38073 (license license:expat)))
38074
38075(define-public python-throttler
38076 (package
38077 (name "python-throttler")
38078 (version "1.2.2")
38079 (source
38080 (origin
38081 (method git-fetch)
38082 (uri (git-reference
38083 (url "https://github.com/uburuntu/throttler")
38084 (commit (string-append "v" version))))
38085 (sha256
38086 (base32 "1gn21x0zkm7rr7qijlz7nvw7z0mm1j2r0r2lslg7wln1z36gjkbw"))))
38087 (build-system pyproject-build-system)
38088 (native-inputs
38089 (list python-aiohttp
38090 python-codecov
38091 python-flake8
38092 python-pytest
38093 python-pytest-asyncio
38094 python-pytest-cov
38095 python-setuptools
38096 python-wheel))
38097 (home-page "https://github.com/uburuntu/throttler")
38098 (synopsis "Throttling with asyncio support")
38099 (description
38100 "This is a Python package for easy throttling with asyncio support.")
38101 (license license:expat)))
38102
38103(define-public python-tifffile
38104 (package
38105 (name "python-tifffile")
38106 (version "2025.10.4")
38107 (source
38108 (origin
38109 (method url-fetch)
38110 (uri (pypi-uri "tifffile" version))
38111 (sha256
38112 (base32 "0f1ybmr2jz19gjg92p9vz3qib49m0x4ipxvrvjyfa6r1mcb7qhrf"))))
38113 (build-system pyproject-build-system)
38114 ;; Tests require lfdfiles, which depends on tifffile
38115 (arguments (list #:tests? #f))
38116 (propagated-inputs
38117 (list python-numpy))
38118 (native-inputs
38119 (list python-setuptools))
38120 (home-page "https://www.lfd.uci.edu/~gohlke/")
38121 (synopsis "Read and write TIFF(r) files")
38122 (description
38123 "This package lets you read image and metadata from many bio-scientific
38124formats such as plain TIFF, BigTIFF, OME-TIFF, STK, LSM, SGI,NIH, ImageJ,
38125MicroManager, MD GEL, and FluoView files. It also lets you write numpy arrays
38126to TIFF, BigTIFF, and ImageJ hyperstack compatible files.")
38127 (license license:bsd-3)))
38128
38129(define-public python-tiktoken
38130 (package
38131 (name "python-tiktoken")
38132 (version "0.9.0")
38133 (source
38134 (origin
38135 (method url-fetch)
38136 (uri (pypi-uri "tiktoken" version))
38137 (sha256
38138 (base32 "0p9cg6n8mzdi4lbbwxrrp26chy5hr14bqmzr3w74kq1qm6k5qanh"))))
38139 (build-system cargo-build-system)
38140 (arguments
38141 (list
38142 #:install-source? #false
38143 #:imported-modules
38144 (append %pyproject-build-system-modules
38145 %cargo-build-system-modules)
38146 #:modules
38147 '((guix build cargo-build-system)
38148 ((guix build pyproject-build-system) #:prefix py:)
38149 (guix build utils))
38150 #:phases
38151 (with-extensions (list (pyproject-guile-json))
38152 #~(modify-phases %standard-phases
38153 (replace 'build
38154 (assoc-ref py:%standard-phases 'build))
38155 (add-after 'install 'wrap
38156 (lambda _
38157 ;; Collection of python- and pyproject-build-system phases
38158 ;; between 'install and 'check.
38159 (assoc-ref py:%standard-phases 'add-install-to-pythonpath)
38160 (assoc-ref py:%standard-phases 'add-install-to-path)
38161 (assoc-ref py:%standard-phases 'wrap)
38162 (assoc-ref py:%standard-phases 'create-entrypoints)
38163 (assoc-ref py:%standard-phases 'compile-bytecode)))
38164 (replace 'install
38165 (assoc-ref py:%standard-phases 'install))))))
38166 (propagated-inputs (list python-regex python-requests))
38167 (inputs (cargo-inputs 'python-tiktoken))
38168 (native-inputs
38169 (list python-setuptools
38170 python-setuptools-rust
38171 python-wheel
38172 python-wrapper))
38173 (home-page "https://github.com/openai/tiktoken/")
38174 (synopsis "Fast BPE tokeniser for use with OpenAI's models")
38175 (description
38176 "Tiktoken is a fast @dfn{byte pair encoding} (BPE) tokeniser for use with
38177@code{OpenAI's} models.")
38178 (license license:expat)))
38179
38180(define-public python-timeout-decorator
38181 ;; TODO: Remove when python-requests-caches releses a fresh version dropping
38182 ;; it, see, <https://github.com/requests-cache/requests-cache/pull/1111>.
38183 (package
38184 (name "python-timeout-decorator")
38185 (version "0.5.0")
38186 (source
38187 (origin
38188 (method url-fetch)
38189 (uri (pypi-uri "timeout-decorator" version))
38190 (sha256
38191 (base32 "1mxk2qyydhzncm93z08kvj5ssxq3fr2n7pkrrji28nqwvdc2ybva"))))
38192 (build-system pyproject-build-system)
38193 (arguments (list #:tests? #f))
38194 (native-inputs (list python-setuptools python-wheel))
38195 (home-page "https://github.com/pnpnpn/timeout-decorator")
38196 (synopsis "Timeout decorator")
38197 (description "This package provides a decorator that raises an error
38198when an operation takes longer than expected.")
38199 (license license:expat)))
38200
38201(define-public python-titlecase
38202 (package
38203 (name "python-titlecase")
38204 (version "2.4.1")
38205 (source
38206 (origin
38207 (method url-fetch)
38208 (uri (pypi-uri "titlecase" version))
38209 (sha256
38210 (base32 "1x9myq3rlbw6wh946ncch8px7wyabhzacy2fjji13nmvrivs50vx"))))
38211 (build-system pyproject-build-system)
38212 (arguments
38213 (list
38214 #:test-backend #~'unittest))
38215 (native-inputs
38216 (list python-setuptools))
38217 (home-page "https://github.com/ppannuto/python-titlecase")
38218 (synopsis "Capitalize strings similar to book titles")
38219 (description
38220 "Python-Titlecase is a Python port of John Gruber's titlecase.pl.
38221It capitalizes (predominantly English) strings in a way that is similar to
38222book titles, using the New York Times Manual of Style to leave certain words
38223lowercase.")
38224 (license license:expat)))
38225
38226(define-public python-tlsh
38227 (package
38228 (name "python-tlsh")
38229 (version "4.11.2")
38230 (home-page "https://github.com/trendmicro/tlsh")
38231 (source
38232 (origin
38233 (method git-fetch)
38234 (uri (git-reference (url home-page) (commit version)))
38235 (file-name (git-file-name name version))
38236 (sha256
38237 (base32 "1gb5j73nw3nmx030rf8pm75rns5syxhv44zxr6i74kjicyly1i9w"))))
38238 (build-system pyproject-build-system)
38239 (arguments
38240 (list
38241 #:phases
38242 #~(modify-phases %standard-phases
38243 (add-before 'build 'configure
38244 (lambda _
38245 (invoke "cmake" "."))) ;to generate tlsh_version.h
38246 (add-after 'configure 'chdir
38247 (lambda _
38248 (chdir "py_ext")))
38249 (replace 'check
38250 (lambda* (#:key tests? #:allow-other-keys)
38251 (when tests?
38252 (with-directory-excursion "../Testing"
38253 (invoke "./python_test.sh"))))))))
38254 (native-inputs (list cmake-minimal python-setuptools))
38255 (synopsis "Fuzzy matching library for Python")
38256 (description
38257 "Trend Micro Locality Sensitive Hash (TLSH) is a fuzzy matching library.
38258Given a byte stream with a minimum length of 256 bytes, TLSH generates a hash
38259value which can be used for similarity comparisons. Similar objects have
38260similar hash values, which allows for the detection of similar objects by
38261comparing their hash values. The byte stream should have a sufficient amount
38262of complexity; for example, a byte stream of identical bytes will not generate
38263a hash value.")
38264 (license license:asl2.0)))
38265
38266(define-public python-tokenize-rt
38267 (package
38268 (name "python-tokenize-rt")
38269 (version "6.2.0")
38270 (source
38271 (origin
38272 (method git-fetch)
38273 (uri (git-reference
38274 (url "https://github.com/asottile/tokenize-rt")
38275 (commit (string-append "v" version))))
38276 (file-name (git-file-name name version))
38277 (sha256
38278 (base32 "1maa9sifma0a6v7kl7mmyqzj0jdclzlp4wjr0vkdx95raihxx4fv"))))
38279 (build-system pyproject-build-system)
38280 (native-inputs (list python-pytest python-setuptools))
38281 (home-page "https://github.com/asottile/tokenize-rt")
38282 (synopsis "Wrapper around the stdlib tokenize which roundtrips")
38283 (description
38284 "This Python library is a wrapper around @code{tokenize} from the Python
38285standard library. It provides two additional tokens @code{ESCAPED_NL} and
38286@code{UNIMPORTANT_WS}, and a @code{Token} data type. Use @code{src_to_tokens}
38287and @code{tokens_to_src} to roundtrip.")
38288 (license license:expat)))
38289
38290(define-public python-tomlkit
38291 (package
38292 (name "python-tomlkit")
38293 (version "0.13.3")
38294 (source
38295 (origin
38296 (method url-fetch)
38297 (uri (pypi-uri "tomlkit" version))
38298 (sha256
38299 (base32 "18fjmmhiv5jkkg1dwidmxd0sjqnkf675igizxsa2ppspxr3z4323"))))
38300 (build-system pyproject-build-system)
38301 (native-inputs
38302 (list python-poetry-core
38303 python-pytest
38304 python-pyyaml))
38305 (home-page "https://github.com/sdispater/tomlkit")
38306 (synopsis "Style-preserving TOML library")
38307 (description
38308 "TOML Kit is a 1.0.0rc1-compliant TOML library. It includes a parser that
38309preserves all comments, indentations, whitespace and internal element ordering,
38310and makes them accessible and editable via an intuitive API. It can also
38311create new TOML documents from scratch using the provided helpers. Part of the
38312implementation has been adapted, improved, and fixed from Molten.")
38313 (license license:expat)))
38314
38315(define-public python-toolrack
38316 (package
38317 (name "python-toolrack")
38318 (version "4.0.3")
38319 (source
38320 (origin
38321 (method git-fetch)
38322 (uri (git-reference
38323 (url "https://github.com/albertodonato/toolrack")
38324 (commit (string-append "v" version))))
38325 (file-name (git-file-name name version))
38326 (sha256
38327 (base32
38328 "1aglfj7j25fiwx9jh1rl34mlhfpdhn8yrkn30vhkz9yw7zrx42h0"))))
38329 (build-system pyproject-build-system)
38330 (arguments
38331 (list
38332 #:phases
38333 #~(modify-phases %standard-phases
38334 (add-after 'unpack 'patch-/bin/sh
38335 (lambda _
38336 (substitute* "tests/aio/process_test.py"
38337 (("/bin/sh")
38338 (which "sh"))))))))
38339 (native-inputs
38340 (list python-pytest
38341 python-pytest-asyncio
38342 python-pytest-mock
38343 python-setuptools))
38344 (home-page "https://github.com/albertodonato/toolrack")
38345 (synopsis "Collection of Python utility functions and classes")
38346 (description "This package provides a collection of miscellaneous utility
38347functions and classes.")
38348 (license license:lgpl3+)))
38349
38350(define-public python-toolshed
38351 (package
38352 (name "python-toolshed")
38353 (version "0.4.6")
38354 (source
38355 (origin
38356 (method url-fetch)
38357 (uri (pypi-uri "toolshed" version))
38358 (sha256
38359 (base32 "14zvz51gzf9i1i3d1sj363ba4rksl6lcf4lz1arl8hpqgcbir8r3"))))
38360 (build-system pyproject-build-system)
38361 (arguments
38362 (list #:tests? #f)) ;tests are not included in PyPI archive
38363 (native-inputs
38364 (list python-setuptools))
38365 (home-page "https://github.com/brentp/toolshed/")
38366 (synopsis "Collection of modules and functions for working with data")
38367 (description "This is a collection of well-tested, simple modules and
38368functions that aim to reduce boilerplate when working with data.")
38369 (license license:bsd-2)))
38370
38371(define-public python-toolz
38372 (package
38373 (name "python-toolz")
38374 (version "1.0.0")
38375 (source
38376 (origin
38377 (method url-fetch)
38378 (uri (pypi-uri "toolz" version))
38379 (sha256
38380 (base32 "00ks0jhl1jwm9576c5sh10pnla8ni21yvg4kcxasr627l3cy71ic"))))
38381 (build-system pyproject-build-system)
38382 (native-inputs
38383 (list python-pytest
38384 python-setuptools
38385 python-wheel))
38386 (home-page "https://github.com/pytoolz/toolz/")
38387 (synopsis "List processing tools and functional utilities")
38388 (description
38389 "This package provides a set of utility functions for iterators,
38390functions, and dictionaries.")
38391 (license license:bsd-3)))
38392
38393(define-public python-toposort
38394 (package
38395 (name "python-toposort")
38396 (version "1.10")
38397 (source
38398 (origin
38399 (method url-fetch)
38400 (uri (pypi-uri "toposort" version))
38401 (sha256
38402 (base32 "1gd66z5dy6j7qs5qkj1pg0vb15rwd571yq02fkm9d9nhaff4gfxz"))))
38403 (build-system pyproject-build-system)
38404 (arguments
38405 (list #:test-backend #~'custom
38406 #:test-flags #~(list "-m" "test.test_toposort")))
38407 (native-inputs (list python-setuptools))
38408 (home-page "https://gitlab.com/ericvsmith/toposort")
38409 (synopsis "Topological sort algorithm")
38410 (description
38411 "This package provides an implementation of a topological sort
38412algorithm.")
38413 (license license:asl2.0)))
38414
38415(define-public python-towncrier
38416 (package
38417 (name "python-towncrier")
38418 (version "25.8.0")
38419 (source
38420 (origin
38421 (method url-fetch)
38422 (uri (pypi-uri "towncrier" version))
38423 (sha256
38424 (base32 "1c8fjjwlx29jgllxvyzby4cn51iraxba0cmfnfmmgb9iz0lnvwgf"))))
38425 (build-system pyproject-build-system)
38426 (native-inputs
38427 (list git-minimal/pinned ;tests create git repositories
38428 python-hatchling
38429 python-pytest
38430 python-twisted))
38431 (propagated-inputs
38432 (list python-click
38433 python-jinja2))
38434 (home-page "https://towncrier.readthedocs.io/en/stable/")
38435 (synopsis "Manage release notes")
38436 (description
38437 "@code{towncrier} is a utility to produce useful, summarized news files
38438 (also known as changelogs) for a project.")
38439 (license license:expat)))
38440
38441(define-public python-tqdm
38442 (package
38443 (name "python-tqdm")
38444 (version "4.67.1")
38445 (source
38446 (origin
38447 (method url-fetch)
38448 (uri (pypi-uri "tqdm" version))
38449 (sha256
38450 (base32 "1wi7cql2fc76b5z9v1sr96ix2gxcb974z8qfydjkmh885k2zkbpq"))))
38451 (build-system pyproject-build-system)
38452 (arguments
38453 (list #:test-flags
38454 '(list "-o" "asyncio_mode=auto"
38455 "-k" "not perf and not test_rlock_creation")))
38456 (native-inputs
38457 (list python-pytest
38458 python-pytest-asyncio
38459 python-pytest-timeout
38460 python-setuptools
38461 python-setuptools-scm
38462 python-toml
38463 python-wheel))
38464 (home-page "https://github.com/tqdm/tqdm")
38465 (synopsis "Fast, extensible progress meter")
38466 (description
38467 "Make loops show a progress bar on the console by just wrapping any
38468iterable with @code{|tqdm(iterable)|}. Offers many options to define
38469design and layout.")
38470 (license (list license:mpl2.0 license:expat))))
38471
38472(define-public python-traitlets
38473 (package
38474 (name "python-traitlets")
38475 (version "5.14.1")
38476 (source
38477 (origin
38478 (method url-fetch)
38479 (uri (pypi-uri "traitlets" version))
38480 (sha256
38481 (base32 "0zjj8ha4z5lbhhmvcl3q8wp5qmwqq0lwxma3d8qvh10s6xdi11c5"))))
38482 (build-system pyproject-build-system)
38483 (arguments
38484 (list
38485 #:test-flags
38486 '(list "-k" "not mypy_list_typing and not mypy_dict_typing")))
38487 (native-inputs
38488 (list python-argcomplete
38489 python-hatchling
38490 python-mypy
38491 python-pytest
38492 python-pytest-mock
38493 python-pytest-mypy-testing))
38494 (home-page "https://ipython.org")
38495 (synopsis "Configuration system for Python applications")
38496 (description
38497 "Traitlets is a framework that lets Python classes have attributes with
38498type checking, dynamically calculated default values, and ‘on change’
38499callbacks. The package also includes a mechanism to use traitlets for
38500configuration, loading values from files or from command line arguments. This
38501is a distinct layer on top of traitlets, so you can use traitlets in your code
38502without using the configuration machinery.")
38503 (license license:bsd-3)))
38504
38505(define-public python-translate-toolkit
38506 (package
38507 (name "python-translate-toolkit")
38508 (version "3.15.6")
38509 (source
38510 (origin
38511 (method url-fetch)
38512 (uri (pypi-uri "translate_toolkit" version))
38513 (sha256
38514 (base32 "0p23c5nvfw19wg2h4rqxf301z0023yl7ivpjyhr5byxf0sxnqnpq"))))
38515 (build-system pyproject-build-system)
38516 (arguments
38517 (list
38518 ;; tests: 2828 passed, 3 skipped, 28 deselected, 32 xfailed, 11 warnings
38519 #:test-flags
38520 ;; TODO: Some of the optional inputs are not packaged yet.
38521 #~(list #$@(map (lambda (file) (string-append "--ignore="
38522 "tests/translate/"
38523 file))
38524 (list "convert/test_ini2po.py"
38525 "convert/test_php2po.py"
38526 "convert/test_po2ini.py"
38527 "convert/test_po2php.py"
38528 "storage/test_cpo.py"
38529 "storage/test_fluent.py"
38530 "storage/test_ini.py"
38531 "storage/test_php.py"
38532 "storage/test_po.py"
38533 "storage/test_pypo.py"
38534 "storage/test_subtitles.py"))
38535 #$@(map (lambda (test) (string-append "--deselect="
38536 "tests/translate/storage/"
38537 test))
38538 ;; UnicodeDecodeError: 'utf-8' codec can't decode byte
38539 ;; 0xff in position 0: invalid start byte
38540 (list "test_csvl10n.py::TestCSV::test_encoding_save"
38541 ;; FileNotFoundError: [Errno 2] No such file or
38542 ;; directory: 'msgfmt'
38543 "test_mo.py::TestMOFile::test_output"
38544 ;; assert 0 == -16200
38545 "test_poheader.py::test_timezones"))
38546 #$@(map (lambda (test) (string-append "--deselect="
38547 "tests/translate/tools/"
38548 test))
38549 ;; XXX: Some issues with XML parsing.
38550 (list "test_junitmsgfmt.py::test_output"
38551 "test_pocount.py::test_output"
38552 "test_pocount.py::test_cases"))
38553 "-k" "not test_open_office_to_xliff and not test_po_to_xliff")))
38554 (native-inputs
38555 (list python-pytest
38556 python-setuptools
38557 python-setuptools-scm))
38558 (propagated-inputs
38559 (list python-cwcwidth
38560 python-cheroot
38561 ;; python-aeidon
38562 ;; python-fluent
38563 python-iniparse
38564 python-lxml
38565 python-mistletoe
38566 python-phply
38567 python-pyparsing
38568 python-ruamel.yaml
38569 python-vobject))
38570 (home-page "https://toolkit.translatehouse.org")
38571 (synopsis "Tools and API for translation and localization engineering")
38572 (description
38573 "Tools and API for translation and localization engineering. It contains
38574several utilities, as well as an API for building localization tools.")
38575 (license license:gpl2+)))
38576
38577;; XXX: See: <https://codeberg.org/guix/guix/pulls/3780#issuecomment-7957715>
38578(define-public python-translate-toolkit-for-offlate
38579 (hidden-package
38580 (package
38581 (inherit python-translate-toolkit)
38582 (version "3.6.2")
38583 (source
38584 (origin
38585 (method url-fetch)
38586 (uri (pypi-uri "translate-toolkit" version ".tar.gz"))
38587 (sha256
38588 (base32 "0m4cpsp7x7h5m5agg4ybscf7y86wla46q2lvxpi2myplb6qlgcli"))))
38589 (arguments
38590 (list #:tests? #f)))))
38591
38592(define-public python-translitcodec
38593 (package
38594 (name "python-translitcodec")
38595 (version "0.7.0")
38596 (source
38597 (origin
38598 (method git-fetch)
38599 (uri (git-reference
38600 (url "https://github.com/claudep/translitcodec")
38601 (commit (string-append "version-" version))))
38602 (file-name (git-file-name name version))
38603 (sha256
38604 (base32 "1cj11sa5hy8ga7p0dgwi4g4gv0qx6c1yi2csgnvxiir16ywslhpw"))))
38605 (build-system pyproject-build-system)
38606 (native-inputs (list python-pytest python-setuptools))
38607 (home-page "https://github.com/claudep/translitcodec")
38608 (synopsis "Unicode to 8-bit charset transliteration codec")
38609 (description
38610 "This package contains codecs for transliterating ISO 10646 texts into
38611best-effort representations using smaller coded character sets (ASCII,
38612ISO 8859, etc.).")
38613 (license license:expat)))
38614
38615(define-public python-treelib
38616 (package
38617 (name "python-treelib")
38618 (version "1.8.0")
38619 (source
38620 (origin
38621 (method git-fetch)
38622 (uri (git-reference
38623 (url "https://github.com/caesar0301/treelib")
38624 (commit (string-append "v" version))))
38625 (file-name (git-file-name name version))
38626 (sha256
38627 (base32 "0jd3rdaq8v7ykb626cm1gxa03higqnn2pmnv46fc0lc55xbrkxlf"))
38628 (patches
38629 (search-patches "python-treelib-remove-python2-compat.patch"))))
38630 (build-system pyproject-build-system)
38631 (native-inputs (list python-poetry-core python-pytest))
38632 (home-page "https://github.com/caesar0301/treelib")
38633 (synopsis "Implementation of a tree structure in Python")
38634 (description
38635 "This package provides a Python implementation of a tree structure.")
38636 (license license:asl2.0)))
38637
38638(define-public python-trio
38639 (package
38640 (name "python-trio")
38641 (version "0.28.0")
38642 (source
38643 (origin
38644 (method url-fetch)
38645 (uri (pypi-uri "trio" version))
38646 (sha256
38647 (base32 "019wqwlbj185skknbjd7paxqqx6vl5gpqk2fwmc5d2lyzsb7hm2f"))))
38648 (build-system pyproject-build-system)
38649 (arguments
38650 (list
38651 #:test-flags
38652 `(list "-k"
38653 (string-append
38654 ;; This tests times out.
38655 "not test_ki_protection_works"
38656 " and not test_KI_interrupts"
38657 ;; This fails with: signal only works in main thread of the main interpreter
38658 " and not test_catch_signals_race_condition_on_exit"
38659 ;; Assertion errors.
38660 " and not test_named_thread_os"
38661 " and not test_has_pthread_setname_np"
38662 " and not test_guest_mode_ki"
38663 " and not test_run_in_trio_thread_ki"
38664 " and not test_simple_cancel_scope_usage_doesnt_create\
38665_cyclic_garbage"
38666 " and not test_nursery_cancel_doesnt_create_cyclic_garbage"
38667 " and not test_cancel_scope_exit_doesnt_create_cyclic_garbage"
38668 " and not test_locals_destroyed_promptly_on_cancel"
38669 " and not test_ipython_exc_handler"
38670 " and not test_for_leaking_fds"
38671 ;; Signals don’t work in the build sandbox.
38672 " and not test_open_signal_receiver"
38673 ;; These try to raise KeyboardInterrupt which does not work
38674 ;; in the build environment.
38675 " and not test_ki_self"
38676 " and not test_ki_wakes_us_up"
38677 ;; Failure in name resolution.
38678 " and not test_getnameinfo"
38679 " and not test_SocketType_resolve"
38680 ;; OSError: protocol not found.
38681 " and not test_getprotobyname"
38682 ;; EOFError: Ran out of input.
38683 " and not test_static_tool_sees_all_symbols")
38684 ,@(if (package? (this-package-native-input "python-trustme"))
38685 '()
38686 `("--ignore=src/trio/_tests/test_dtls.py"
38687 "--ignore=src/trio/_tests/test_highlevel_ssl_helpers.py"
38688 "--ignore=src/trio/_tests/test_ssl.py"))
38689 ;; It rerquires black and ruff to generate a final report.
38690 "--ignore=src/trio/_tests/tools/test_gen_exports.py"
38691 "src/trio/_tests")
38692 #:phases
38693 '(modify-phases %standard-phases
38694 (add-after 'unpack 'ignore-deprecations
38695 (lambda _
38696 (substitute* "pyproject.toml"
38697 ((" \"error\",") " \"ignore\","))))
38698 (add-before 'check 'set-env
38699 (lambda _
38700 ;; Tests require a writable home.
38701 (setenv "HOME" "/tmp")
38702 ;; #$output is first in path which causes "import file mismatch"
38703 (setenv "PYTHONPATH" (string-append (getcwd) "/src:$PYTHONPATH")))))))
38704 (native-inputs
38705 (append
38706 (if (supported-package? python-pyopenssl)
38707 (list python-pyopenssl)
38708 '())
38709 (list python-pytest
38710 python-setuptools)
38711 (if (supported-package? python-trustme)
38712 (list python-trustme)
38713 '())
38714 (list python-wheel)))
38715 (propagated-inputs
38716 (list python-attrs
38717 python-cffi
38718 python-exceptiongroup
38719 python-idna
38720 python-outcome
38721 python-sniffio
38722 python-sortedcontainers))
38723 (home-page "https://github.com/python-trio/trio")
38724 (synopsis "Friendly Python library for async concurrency and I/O")
38725 (description
38726 "Trio strives to be a production-quality, async/await-native I/O library
38727for Python. Like all async libraries, its main purpose is to help you write
38728programs that do multiple things at the same time with parallelized I/O.")
38729 ;; Either license applies.
38730 (license (list license:expat license:asl2.0))))
38731
38732(define-public python-trio-typing
38733 (package
38734 (name "python-trio-typing")
38735 (version "0.10.0")
38736 (source
38737 (origin
38738 (method url-fetch)
38739 (uri (pypi-uri "trio-typing" version))
38740 (sha256
38741 (base32 "1hvsj3w500i33ykfgh3sfkjnxhxf05incx131smshlkd562fcph6"))))
38742 (build-system pyproject-build-system)
38743 (native-inputs (list python-pytest python-setuptools python-wheel))
38744 (propagated-inputs
38745 (list python-async-generator
38746 python-importlib-metadata
38747 python-mypy-extensions
38748 python-packaging
38749 python-trio
38750 python-typing-extensions))
38751 (home-page "https://github.com/python-trio/trio-typing")
38752 (synopsis "Static type checking support for Trio and related projects")
38753 (description
38754 "This package provides:
38755
38756@itemize
38757@item PEP 561 typing stubs packages for the Trio project packages:
38758
38759@itemize
38760@item trio (@code{trio-stubs})
38761@item outcome (@code{outcome-stubs})
38762@item async_generator (@code{async_generator-stubs})
38763@end itemize
38764
38765@item A package @code{trio_typing} containing types that Trio programs often
38766want to refer to (@code{AsyncGenerator[Y, S]} and @code{TaskStatus[T])} and
38767a mypy plugin that smooths over some limitations in the basic type hints.
38768@end itemize")
38769 ;; Either license applies.
38770 (license (list license:expat license:asl2.0))))
38771
38772(define-public python-trubar
38773 (package
38774 (name "python-trubar")
38775 (version "0.3.4")
38776 (source
38777 (origin
38778 (method url-fetch)
38779 (uri (pypi-uri "trubar" version))
38780 (sha256
38781 (base32 "149l5wid1b41gmfzsrhapcigcbcsflviz8p1pfa937443fxw1dkd"))))
38782 (build-system pyproject-build-system)
38783 (arguments
38784 (list
38785 #:test-flags
38786 #~(list "-k" (string-join
38787 ;; AttributeError: module 'libcst' has no attribute
38788 ;; 'FlattenSentinel'. Did you mean: 'MaybeSentinel'?
38789 (list "not test_import_from_future"
38790 "test_inport_after_docstring"
38791 ;; AssertionError: Items in the second set but not
38792 ;; the first
38793 "test_walk_files")
38794 " and not "))))
38795 (native-inputs
38796 (list python-pytest
38797 python-setuptools
38798 python-wheel))
38799 (propagated-inputs
38800 (list python-libcst
38801 python-pyyaml))
38802 (home-page "https://github.com/janezd/trubar")
38803 (synopsis "Utility for translation of Python sources")
38804 (description
38805 "This package provides a tool for translation and localization of Python
38806programs via modification of source files. Trubar supports f-strings and does
38807not require any changes to the original source code, such as marking strings
38808for translation.")
38809 (license license:expat)))
38810
38811(define-public python-twine
38812 (package
38813 (name "python-twine")
38814 (version "6.2.0")
38815 (source
38816 (origin
38817 (method url-fetch)
38818 (uri (pypi-uri "twine" version))
38819 (sha256
38820 (base32 "1kvm9cdvbnh232wafww1w5scaic9kkrwhlff1mvmk68cswphvvg5"))))
38821 (build-system pyproject-build-system)
38822 (arguments
38823 (list
38824 ;; tests: 228 passed, 1 deselected
38825 #:test-flags
38826 ;; Assertion is not equal for one tests.
38827 #~(list "--deselect=tests/test_check.py::test_fails_rst_syntax_error")))
38828 (native-inputs
38829 (list python-pretend
38830 python-pytest
38831 python-pytest-socket
38832 python-setuptools
38833 python-setuptools-scm))
38834 (propagated-inputs
38835 (list python-id
38836 python-keyring
38837 python-packaging
38838 python-readme-renderer
38839 python-requests
38840 python-requests-toolbelt
38841 python-rfc3986
38842 python-rich
38843 python-urllib3))
38844 (home-page "https://github.com/pypa/twine")
38845 (synopsis "Collection of utilities for interacting with PyPI")
38846 (description
38847 "@code{twine} currently supports registering projects and uploading
38848distributions. It authenticates the user over HTTPS, allows them to pre-sign
38849their files and supports any packaging format (including wheels).")
38850 (license license:asl2.0)))
38851
38852(define-public python-twisted
38853 (package
38854 (name "python-twisted")
38855 (version "25.5.0")
38856 (source
38857 (origin
38858 (method git-fetch)
38859 (uri (git-reference
38860 (url "https://github.com/twisted/twisted")
38861 (commit (string-append "twisted-" version))))
38862 (file-name (git-file-name name version))
38863 (sha256
38864 (base32 "07v2ssr2s6zcj2r6nvp28x7i3awjb6k8gz0mi4wg606gw4kdgxsk"))))
38865 (build-system pyproject-build-system)
38866 (arguments
38867 (list
38868 ;; tests: skips=638, successes=9759
38869 #:test-backend #~'custom
38870 #:test-flags
38871 #~(list "-m" "twisted.trial"
38872 "--temp-directory=/tmp/_trial_temp"
38873 (string-append "-j" (number->string (min 8 (parallel-job-count))))
38874 "twisted")
38875 #:phases
38876 #~(modify-phases %standard-phases
38877 (add-after 'unpack 'disable-broken-tests
38878 (lambda _
38879 (for-each delete-file
38880 (list
38881 ;; No idea why they fail
38882 "src/twisted/test/test_log.py"
38883 ;; Network tests
38884 "src/twisted/conch/test/test_cftp.py"
38885 "src/twisted/internet/test/test_endpoints.py"
38886 "src/twisted/protocols/test/test_tls.py"
38887 "src/twisted/test/test_sslverify.py"
38888 "src/twisted/web/test/test_agent.py"
38889 "src/twisted/web/test/test_tap.py"
38890 ;; These need a git executable
38891 "src/twisted/python/test/test_release.py"
38892 ;; These leave behind a socket file, which breaks the
38893 ;; build with "...has an unsupported type"
38894 "src/twisted/internet/test/test_unix.py"
38895 "src/twisted/test/test_unix.py"
38896 ;; These complain about missing test modules.
38897 "src/twisted/test/test_failure.py"
38898 "src/twisted/web/test/test_http2.py"
38899 "src/twisted/conch/test/test_forwarding.py")))))))
38900 (propagated-inputs
38901 (list python-attrs
38902 python-automat
38903 python-bcrypt
38904 python-constantly
38905 python-hyperlink
38906 python-incremental
38907 python-typing-extensions
38908 python-zope-interface
38909 ;; [conch]
38910 python-appdirs
38911 python-bcrypt
38912 python-cryptography
38913 ;; [http2]
38914 python-h2
38915 python-priority
38916 ;; [tls]
38917 python-idna
38918 python-pyopenssl
38919 python-service-identity
38920 ;; [serial]
38921 python-pyserial))
38922 (native-inputs
38923 (list glibc-utf8-locales ;for OpenTestLogTests.test_utf8
38924 python-hatch-fancy-pypi-readme
38925 python-hatchling
38926 python-httpx
38927 python-hypothesis
38928 python-incremental
38929 python-pyhamcrest
38930 python-pytest))
38931 (home-page "https://twistedmatrix.com/")
38932 (synopsis "Asynchronous networking framework written in Python")
38933 (description
38934 "Twisted is an extensible framework for Python programming, with special
38935focus on event-based network programming and multiprotocol integration.")
38936 (license license:expat)))
38937
38938(define-public python-txredisapi
38939 (let ((commit "d2259a379695284f4a84d7821ed47e1db409501d")
38940 ;; The latest version is 1.4.11, but it contains a bug:
38941 ;; https://github.com/IlyaSkriblovsky/txredisapi/pull/157. That bug is
38942 ;; patched in commit d2259a3.
38943 (revision "0"))
38944 (package
38945 (name "python-txredisapi")
38946 (version (git-version "1.4.11" revision commit))
38947 (source
38948 (origin
38949 (method git-fetch)
38950 ;; The source distribution on PyPi is missing test files:
38951 ;; https://github.com/IlyaSkriblovsky/txredisapi/pull/155
38952 (uri (git-reference
38953 (url "https://github.com/IlyaSkriblovsky/txredisapi")
38954 (commit commit)))
38955 (file-name (git-file-name name version))
38956 (sha256
38957 (base32 "0v9r01cn5zb0jjb1h394y667345yp17485bl5d4k80019b34dm98"))))
38958 (build-system pyproject-build-system)
38959 (arguments
38960 (list #:test-backend #~'custom
38961 #:test-flags #~(list "-m" "twisted.trial" "tests")
38962 #:phases
38963 #~(modify-phases %standard-phases
38964 ;; The tests require a running Redis server.
38965 (add-before 'check 'start-redis
38966 (lambda _
38967 (invoke "redis-server" "--daemonize" "yes"))))))
38968 (propagated-inputs (list python-twisted))
38969 (native-inputs (list python-mock python-setuptools redis))
38970 (home-page "https://github.com/IlyaSkriblovsky/txredisapi")
38971 (synopsis "Non-blocking Redis client for Python")
38972 (description "txredisapi is a non-blocking client driver for the Redis
38973database, written in Python. It uses Twisted for asynchronous communication
38974with Redis.")
38975 (license license:asl2.0))))
38976
38977(define-public python-typeapi
38978 (package
38979 (name "python-typeapi")
38980 (version "2.2.4")
38981 (source
38982 (origin
38983 (method url-fetch)
38984 (uri (pypi-uri "typeapi" version))
38985 (sha256
38986 (base32 "0yzx10cn33gxqvs33vwdf0f959hbkir4yzjp42imf28ca9khga6s"))))
38987 (build-system pyproject-build-system)
38988 (arguments
38989 (list
38990 #:tests? #false)) ;there are none
38991 (propagated-inputs (list python-typing-extensions))
38992 (native-inputs (list python-hatchling))
38993 (home-page "https://pypi.org/project/typeapi/")
38994 (synopsis "Type hints")
38995 (description "The typeapi package provides an object-oriented interface
38996for introspecting PEP484 type hints at runtime, including forward references
38997that make use of the more recent PEP585 and PEP604 type hint features in
38998Python versions that don't natively support them.")
38999 (license license:expat)))
39000
39001(define-public python-typeguard
39002 (package
39003 (name "python-typeguard")
39004 (version "4.4.4")
39005 (source
39006 (origin
39007 (method url-fetch)
39008 (uri (pypi-uri "typeguard" version))
39009 (sha256
39010 (base32 "0x2zkskia5lb1838ys0bhpp9v6y80jkhchzdz874spbhzggx4zrs"))))
39011 (build-system pyproject-build-system)
39012 (native-inputs
39013 (list python-mypy
39014 python-pytest
39015 python-setuptools
39016 python-setuptools-scm))
39017 (propagated-inputs
39018 (list python-typing-extensions))
39019 (home-page "https://github.com/agronholm/typeguard")
39020 (synopsis "Run-time type checker for Python")
39021 (description
39022 "@code{typeguard} provides run-time type checking for functions defined
39023with PEP 484 argument (and return) type annotations.")
39024 (license license:expat)))
39025
39026(define-public python-typer
39027 (package
39028 (name "python-typer")
39029 (version "0.20.0")
39030 (source
39031 (origin
39032 (method git-fetch)
39033 (uri (git-reference
39034 (url "https://github.com/fastapi/typer")
39035 (commit version)))
39036 (file-name (git-file-name name version))
39037 (sha256
39038 (base32 "1a2ay2kj3d3rwjscx3hw2adgqifs3hdp7kwcpdh1bl3iy8mn9xdi"))))
39039 (build-system pyproject-build-system)
39040 (arguments
39041 (list
39042 #:test-flags
39043 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count))))))
39044 (native-inputs
39045 (list python-coverage ;this is required in tests
39046 python-pdm-backend
39047 python-pytest
39048 python-pytest-xdist))
39049 (propagated-inputs
39050 (list python-click
39051 python-typing-extensions
39052 ;; [optional]
39053 python-rich
39054 python-shellingham))
39055 (home-page "https://github.com/fastapi/typer")
39056 (synopsis "Typer builds CLI based on Python type hints")
39057 (description
39058 "Typer is a library for building CLI applications. It's based on Python
390593.6+ type hints.")
39060 (license license:expat)))
39061
39062(define-public python-types-aiofiles
39063 (package
39064 (name "python-types-aiofiles")
39065 (version "25.1.0.20251011")
39066 (source
39067 (origin
39068 (method url-fetch)
39069 (uri (pypi-uri "types_aiofiles" version))
39070 (sha256
39071 (base32 "1zyk53h1017s1pc094w909miwvjsq3yhxlgr2l6d8g6bc2r8laqw"))))
39072 (build-system pyproject-build-system)
39073 (arguments (list #:tests? #f)) ;no tests in PyPI archive
39074 (native-inputs (list python-setuptools))
39075 (home-page "https://github.com/python/typeshed")
39076 (synopsis "Typing stubs for python-aiofiles")
39077 (description "This package providis typing stubs for python-aiofiles.")
39078 (license license:asl2.0)))
39079
39080(define-public python-types-colorama
39081 (package
39082 (name "python-types-colorama")
39083 (version "0.4.15.20250801")
39084 (source
39085 (origin
39086 (method url-fetch)
39087 (uri (pypi-uri "types_colorama" version))
39088 (sha256
39089 (base32 "1xapqdq6450ngzp18nvvkwbs68nnxksk1wyk6wid2qw9sq9msmh2"))))
39090 (build-system pyproject-build-system)
39091 (arguments (list #:tests? #f)) ;no tests in PyPI archive
39092 (native-inputs
39093 (list python-setuptools))
39094 (home-page "https://github.com/python/typeshed")
39095 (synopsis "Typing stubs for colorama")
39096 (description "This package provides typing stubs for colorama.")
39097 (license license:asl2.0)))
39098
39099(define-public python-types-dataclasses
39100 (package
39101 (name "python-types-dataclasses")
39102 (version "0.6.6")
39103 (source
39104 (origin
39105 (method url-fetch)
39106 (uri (pypi-uri "types-dataclasses" version))
39107 (sha256
39108 (base32 "1fgp96m4kfxrwy6rdv3p24jzh6hf68702sfdfhcmm3aniv7jynjb"))))
39109 (build-system pyproject-build-system)
39110 (arguments (list #:tests? #f)) ;no tests
39111 (native-inputs (list python-setuptools))
39112 (home-page "https://github.com/python/typeshed")
39113 (synopsis "Typing stubs for dataclasses")
39114 (description
39115 "This package provides a collection of library stubs for Python, with
39116static types.")
39117 (license license:asl2.0)))
39118
39119(define-public python-types-dateutil
39120 (package
39121 (name "python-types-dateutil")
39122 (version "2.9.0.20240316")
39123 (source
39124 (origin
39125 (method url-fetch)
39126 (uri (pypi-uri "types-python-dateutil" version))
39127 (sha256
39128 (base32 "00h2xi8p6ygdv9nhgwdyx86ky9m9dpdqgmsdji05x4461cj2wbsx"))))
39129 (build-system pyproject-build-system)
39130 (arguments (list #:tests? #f)) ; no tests
39131 (native-inputs
39132 (list python-pytest python-setuptools python-wheel))
39133 (home-page "https://github.com/python/typeshed")
39134 (synopsis "Typing stubs for python-dateutil")
39135 (description
39136 "This is a PEP 561 type stub package for the @code{python-dateutil}
39137package.")
39138 (license license:asl2.0)))
39139
39140(define-public python-types-docutils
39141 (package
39142 (name "python-types-docutils")
39143 (version "0.22.2.20251006")
39144 (source
39145 (origin
39146 (method url-fetch)
39147 (uri (pypi-uri "types_docutils" version))
39148 (sha256
39149 (base32 "1cp3p4bsaa646fa3kpjwjwsqbn6vz77pn57913lkknkf21ch8v63"))))
39150 (build-system pyproject-build-system)
39151 (arguments (list #:tests? #f)) ;no tests
39152 (native-inputs (list python-setuptools))
39153 (home-page "https://github.com/python/typeshed")
39154 (synopsis "Typing stubs for docutils")
39155 (description "This package provides a collection of library stubs for
39156Python, with static types.")
39157 (license license:asl2.0)))
39158
39159(define-public python-types-freezegun
39160 (package
39161 (name "python-types-freezegun")
39162 (version "1.1.8")
39163 (source
39164 (origin
39165 (method url-fetch)
39166 (uri (pypi-uri "types-freezegun" version))
39167 (sha256
39168 (base32 "08g926s8343zwq140zcfwly3qfgmahm7lp0vgb3ics549b2hifzl"))))
39169 (build-system pyproject-build-system)
39170 (arguments
39171 ;; XXX: No tests in PyPi source, but it's also unclear how to get the
39172 ;; right files from source, so ignore them for now.
39173 (list #:tests? #f))
39174 (native-inputs (list python-setuptools python-wheel))
39175 (home-page "https://github.com/python/typeshed")
39176 (synopsis "Typing stubs for @code{freezegun}")
39177 (description "This package contains typing stubs for for @code{freezegun}, a
39178very small subset the Python stubs contained in the complete @code{typeshed}
39179collection.")
39180 (license license:asl2.0)))
39181
39182(define-public python-types-orjson
39183 (package
39184 (name "python-types-orjson")
39185 (version "3.6.2")
39186 (source
39187 (origin
39188 (method url-fetch)
39189 (uri (pypi-uri "types-orjson" version))
39190 (sha256
39191 (base32 "0f66lf2qrl9d4vad42db3dmnzv89h4rr05r5zxx5qcl6kb3zr6ng"))))
39192 (build-system pyproject-build-system)
39193 (arguments (list #:tests? #f)) ;no tests
39194 (native-inputs (list python-setuptools))
39195 (home-page "https://github.com/python/typeshed")
39196 (synopsis "Typing stubs for orjson")
39197 (description "This is a PEP 561 type stub package for the @code{orjson}
39198package. It can be used by type-checking tools like mypy, PyCharm, pytype
39199etc. to check code that uses @code{orjson}.")
39200 (license license:asl2.0)))
39201
39202(define-public python-types-protobuf
39203 (package
39204 (name "python-types-protobuf")
39205 (version "3.20.1")
39206 (source (origin
39207 (method url-fetch)
39208 (uri (pypi-uri "types-protobuf" version))
39209 (sha256
39210 (base32
39211 "000f8n6d4ilihiaf590k73rx3327jh8ima5q5dpxlwz3frj45qrn"))))
39212 (build-system pyproject-build-system)
39213 (arguments
39214 ;; XXX: No tests in PyPi source, but it's also unclear how to get the
39215 ;; right files from source, so ignore them for now.
39216 (list #:tests? #f))
39217 (native-inputs (list python-setuptools python-wheel))
39218 (home-page "https://github.com/python/typeshed")
39219 (synopsis "Typing stubs for @code{protobuf}")
39220 (description "This package contains typing stubs for @code{protobuf}, a
39221very small subset the Python stubs contained in the complete @code{typeshed}
39222collection.")
39223 (license license:asl2.0)))
39224
39225(define-public python-types-python-dateutil
39226 (package
39227 (name "python-types-python-dateutil")
39228 (version "2.9.0.20250708")
39229 (source
39230 (origin
39231 (method url-fetch)
39232 (uri (pypi-uri "types_python_dateutil" version))
39233 (sha256
39234 (base32 "1ay8sp8qshx2na2sa9sz9hg2hb7yrws9ymshqfb9cv1dmdfxgnyc"))))
39235 (build-system pyproject-build-system)
39236 (arguments (list #:tests? #f)) ;no tests in PyPI archive
39237 (native-inputs (list python-setuptools))
39238 (home-page "https://github.com/python/typeshed")
39239 (synopsis "Typing stubs for python-dateutil")
39240 (description "This package providis typing stubs for python-dateutil.")
39241 (license license:asl2.0)))
39242
39243(define-public python-types-pytz
39244 (package
39245 (name "python-types-pytz")
39246 (version "2025.2.0.20250809")
39247 (source
39248 (origin
39249 (method url-fetch)
39250 (uri (pypi-uri "types_pytz" version))
39251 (sha256
39252 (base32 "1r91pvn1w9rb1395qw8w8k22s7w0wf2qfkl3z1qqiclvlbk34bi2"))))
39253 (build-system pyproject-build-system)
39254 (arguments
39255 (list #:tests? #f)) ;no tests provided
39256 (native-inputs (list python-setuptools))
39257 (home-page "https://github.com/python/typeshed")
39258 (synopsis "Typing stubs for pytz")
39259 (description "This package contains typing stubs for @code{pytz}, a very
39260small subset the Python stubs contained in the complete @code{typeshed}
39261collection.")
39262 (license license:asl2.0)))
39263
39264(define-public python-types-pyyaml
39265 (package
39266 (name "python-types-pyyaml")
39267 (version "6.0.12.20250915")
39268 (source
39269 (origin
39270 (method url-fetch)
39271 (uri (pypi-uri "types_pyyaml" version))
39272 (sha256
39273 (base32 "1lyirqjacfmn6bv27b7w0z483yps6gfqfmhnyzkg00y352jm92qg"))))
39274 (build-system pyproject-build-system)
39275 (arguments (list #:tests? #f)) ;no tests in PyPI archive
39276 (native-inputs
39277 (list python-setuptools))
39278 (home-page " https://github.com/python/typeshed")
39279 (synopsis "Typing stubs for PyYAML")
39280 (description "This package provides typing stubs for @code{PyYAML}.")
39281 (license license:asl2.0)))
39282
39283(define-public python-types-regex
39284 (package
39285 (name "python-types-regex")
39286 (version "2025.9.18.20250921")
39287 (source
39288 (origin
39289 (method url-fetch)
39290 (uri (pypi-uri "types_regex" version))
39291 (sha256
39292 (base32 "0gqc8b9d38pdm1l6nryi9rq9vmpis575hqnxlvj904n3n4hhqw71"))))
39293 (build-system pyproject-build-system)
39294 (arguments (list #:tests? #f)) ;no tests in PyPI archive
39295 (native-inputs (list python-setuptools))
39296 (home-page "https://github.com/python/typeshed")
39297 (synopsis "Typing stubs for regex")
39298 (description "This package provides typing stubs for regex.")
39299 (license license:asl2.0)))
39300
39301(define-public python-types-requests
39302 (package
39303 (name "python-types-requests")
39304 (version "2.32.4.20250611")
39305 (source
39306 (origin
39307 (method url-fetch)
39308 (uri (pypi-uri "types_requests" version))
39309 (sha256
39310 (base32 "09pqdfa66d3p5dig26chrd6rpxs5wamxcm0yyl5q69b4xmvqf73l"))))
39311 (build-system pyproject-build-system)
39312 (arguments (list #:tests? #f)) ;no tests in PyPI archive
39313 (native-inputs
39314 (list python-setuptools))
39315 (propagated-inputs
39316 (list python-urllib3))
39317 (home-page "https://github.com/python/typeshed")
39318 (synopsis "Typing stubs for requests")
39319 (description "This package provides typing stubs for requests.")
39320 (license license:asl2.0)))
39321
39322(define-public python-types-setuptools
39323 (package
39324 (name "python-types-setuptools")
39325 (version "80.9.0.20250529")
39326 (source
39327 (origin
39328 (method url-fetch)
39329 (uri (pypi-uri "types_setuptools" version))
39330 (sha256
39331 (base32 "149w6lg8n56k50n08jx450ni9frs2hzbv729sv48c8ds1jx8iq3r"))))
39332 (build-system pyproject-build-system)
39333 (arguments (list #:tests? #f)) ;no tests in PyPI archive
39334 (native-inputs
39335 (list python-setuptools))
39336 (home-page "https://github.com/python/typeshed")
39337 (synopsis "Typing stubs for setuptools")
39338 (description "This package provides typing stubs for setuptools.")
39339 (license license:asl2.0)))
39340
39341(define-public python-types-simplejson
39342 (package
39343 (name "python-types-simplejson")
39344 (version "3.19.0.20241221")
39345 (source
39346 (origin
39347 (method url-fetch)
39348 (uri (pypi-uri "types_simplejson" version))
39349 (sha256
39350 (base32 "0w7wvr84d7bj27hc2bsyh69s9d84zpkdhsibbmsibba91zdzjjhi"))))
39351 (build-system pyproject-build-system)
39352 (arguments
39353 (list
39354 #:tests? #f)) ; no tests in PyPI archive, no release or tags on GitHub
39355 (native-inputs
39356 (list python-setuptools python-wheel))
39357 (home-page "https://github.com/python/typeshed")
39358 (synopsis "Typing stubs for simplejson")
39359 (description "Typing stubs for simplejson.")
39360 (license license:asl2.0)))
39361
39362(define-public python-types-toml
39363 (package
39364 (name "python-types-toml")
39365 (version "0.10.8.20240310")
39366 (source
39367 (origin
39368 (method url-fetch)
39369 (uri (pypi-uri "types-toml" version))
39370 (sha256
39371 (base32 "0c83hfw4aqy01vzlh6r84mz6b2b6n98chfdjp2k3c94p089m0h9x"))))
39372 (build-system pyproject-build-system)
39373 (arguments
39374 (list #:tests? #f)) ;no tests provided
39375 (native-inputs (list python-setuptools))
39376 (home-page "https://github.com/python/typeshed")
39377 (synopsis "Typing stubs for TOML")
39378 (description
39379 "This package contains typing stubs for TOML, a very small subset the
39380Python stubs contained in the complete @code{typeshed} collection.")
39381 (license license:asl2.0)))
39382
39383(define-public python-types-tqdm
39384 (package
39385 (name "python-types-tqdm")
39386 (version "4.67.0.20250809")
39387 (source
39388 (origin
39389 (method url-fetch)
39390 (uri (pypi-uri "types_tqdm" version))
39391 (sha256
39392 (base32 "006md2hnsq79p7d5z3kiaapvl9wwa4dz3yb39jf0n22n2awpmgq2"))))
39393 (build-system pyproject-build-system)
39394 (arguments (list #:tests? #f)) ;no tests in PyPI archive
39395 (native-inputs (list python-setuptools))
39396 (propagated-inputs (list python-types-requests))
39397 (home-page "https://github.com/python/typeshed")
39398 (synopsis "Typing stubs for python-tqdm")
39399 (description "This package providis typing stubs for python-tqdm.")
39400 (license license:asl2.0)))
39401
39402(define-public python-types-ujson
39403 (package
39404 (name "python-types-ujson")
39405 (version "5.10.0.20250822")
39406 (source
39407 (origin
39408 (method url-fetch)
39409 (uri (pypi-uri "types_ujson" version))
39410 (sha256
39411 (base32 "01m0gdcy6plrjxxih96ra86wd2zhn4skzw7k7hvk51gpw5c5ay8a"))))
39412 (build-system pyproject-build-system)
39413 (arguments
39414 (list #:tests? #f)) ;no tests provided
39415 (native-inputs (list python-setuptools))
39416 (home-page "https://github.com/python/typeshed")
39417 (synopsis "Typing stubs for ujson")
39418 (description
39419 "This is a PEP 561 type stub package for the ujson package. It can be
39420used by type-checking tools like mypy, PyCharm, pytype etc. to check code that
39421uses ujson.")
39422 (license license:asl2.0)))
39423
39424(define-public python-types-urllib3
39425 (package
39426 (name "python-types-urllib3")
39427 (version "1.26.25.14")
39428 (source
39429 (origin
39430 (method url-fetch)
39431 (uri (pypi-uri "types-urllib3" version))
39432 (sha256
39433 (base32 "13ys7c7k9pg3lb11qvdgs9xq8j8bvcpjpg61j8dqq6wmgibpz6r2"))))
39434 (build-system pyproject-build-system)
39435 (arguments (list #:tests? #f)) ;no tests in PyPI archive
39436 (native-inputs
39437 (list python-setuptools))
39438 (home-page "https://github.com/python/typeshed")
39439 (synopsis "Typing stubs for urllib3")
39440 (description "This package provides typing stubs for urllib3.")
39441 (license license:asl2.0)))
39442
39443(define-public python-typeshed-client
39444 (package
39445 (name "python-typeshed-client")
39446 (version "2.8.2")
39447 (source
39448 (origin
39449 (method git-fetch)
39450 (uri (git-reference
39451 (url "https://github.com/JelleZijlstra/typeshed_client")
39452 (commit (string-append "v" version))))
39453 (file-name (git-file-name name version))
39454 (sha256
39455 (base32 "0i74ygf49184ab1ipfdzf706wnzs3id15rkysqarzcngdydrcszs"))))
39456 (build-system pyproject-build-system)
39457 (arguments
39458 (list #:test-backend #~'custom
39459 #:test-flags #~(list "tests/test.py")))
39460 (native-inputs
39461 (list python-setuptools))
39462 (propagated-inputs
39463 (list python-importlib-resources
39464 python-typing-extensions))
39465 (home-page "https://github.com/JelleZijlstra/typeshed_client")
39466 (synopsis "Library for accessing stubs in typeshed")
39467 (description
39468 "This package provides a library for accessing stubs in typeshed.")
39469 (license license:expat)))
39470
39471(define-public python-typing-inspect
39472 (package
39473 (name "python-typing-inspect")
39474 (version "0.9.0")
39475 (source
39476 (origin
39477 (method url-fetch)
39478 (uri (pypi-uri "typing_inspect" version))
39479 (sha256
39480 (base32 "0y0z8v4wr5bahlgzjd1il2z8vlfd2asiyb45wia6kvznyqpw8gxj"))))
39481 (build-system pyproject-build-system)
39482 (native-inputs
39483 (list python-pytest
39484 python-setuptools
39485 python-wheel))
39486 (propagated-inputs
39487 (list python-mypy-extensions
39488 python-typing-extensions))
39489 (home-page "https://github.com/ilevkivskyi/typing_inspect")
39490 (synopsis "API for inspection of types in the Python @code{typing} module")
39491 (description
39492 "The @code{typing_inspect} module defines experimental API for runtime
39493inspection of types defined in the Python standard typing module.")
39494 (license license:expat)))
39495
39496(define-public python-typing-inspection
39497 (package
39498 (name "python-typing-inspection")
39499 (version "0.4.2")
39500 (source
39501 (origin
39502 (method git-fetch)
39503 (uri (git-reference
39504 (url "https://github.com/pydantic/typing-inspection")
39505 (commit (string-append "v" version))))
39506 (file-name (git-file-name name version))
39507 (sha256
39508 (base32 "1dqib4arxxaxwyapw6y4pcvm38l8djkhd8cfr149w42bw4xrqr38"))))
39509 (build-system pyproject-build-system)
39510 ;; tests: 89 passed, 3 skipped
39511 (native-inputs
39512 (list python-pytest
39513 python-hatchling))
39514 (propagated-inputs
39515 (list python-typing-extensions))
39516 (home-page "https://github.com/pydantic/typing-inspection")
39517 (synopsis "Runtime typing introspection tools")
39518 (description
39519 "@code{typing-inspection} provides tools to inspect type annotations at
39520runtime.")
39521 (license license:expat)))
39522
39523(define-public python-typogrify
39524 (package
39525 (name "python-typogrify")
39526 (version "2.1.0")
39527 (source
39528 (origin
39529 (method url-fetch)
39530 (uri (pypi-uri "typogrify" version))
39531 (sha256
39532 (base32 "1vk17q04sax8rpdqll5zldnf6l3ixgknbnn9wimnwah3k1701aph"))))
39533 (build-system pyproject-build-system)
39534 (arguments
39535 (list
39536 #:test-flags
39537 #~(list "--doctest-modules"
39538 "typogrify/filters.py"
39539 "typogrify/packages/titlecase/tests.py")))
39540 (native-inputs
39541 (list python-pytest
39542 python-hatchling))
39543 (propagated-inputs
39544 (list python-smartypants))
39545 (home-page "https://github.com/justinmayer/typogrify")
39546 (synopsis "Filters to transform text into typographically-improved HTML")
39547 (description
39548 "@code{typogrify} provides a set of custom filters that automatically
39549apply various transformations to plain text in order to yield
39550typographically-improved HTML. While often used in conjunction with Jinja and
39551Django template systems, the filters can be used in any environment.")
39552 (license license:bsd-3)))
39553
39554(define-public python-ua-parser
39555 (package
39556 (name "python-ua-parser")
39557 (version "0.10.0")
39558 (source
39559 (origin
39560 (method url-fetch)
39561 (uri (pypi-uri "ua-parser" version))
39562 (sha256
39563 (base32
39564 "0csh307zfz666kkk5idrw3crj1x8q8vsqgwqil0r1n1hs4p7ica7"))))
39565 (build-system pyproject-build-system)
39566 (arguments
39567 `(#:tests? #f)) ;no test suite in release
39568 (native-inputs
39569 (list python-pyyaml
39570 python-setuptools))
39571 (home-page "https://github.com/ua-parser/uap-python")
39572 (synopsis "User agent parser")
39573 (description
39574 "@code{ua-parser} is a Python port of Browserscope's user agent parser.")
39575 (license license:asl2.0)))
39576
39577(define-public python-ubelt
39578 (package
39579 (name "python-ubelt")
39580 (version "1.3.6")
39581 (source
39582 (origin
39583 (method git-fetch)
39584 (uri (git-reference
39585 (url "https://github.com/Erotemic/ubelt")
39586 (commit (string-append "v" version))))
39587 (file-name (git-file-name name version))
39588 (sha256
39589 (base32 "1v2kf9lbdfaf9nppdq45rfanz4bdd2v6x59iajcznwgc4jmhj2na"))))
39590 (build-system pyproject-build-system)
39591 (arguments
39592 (list
39593 ;; The builder user home doesn't match HOME, which causes this test to
39594 ;; fail.
39595 #:test-flags #~(list "-k" "not userhome")
39596 #:phases
39597 #~(modify-phases %standard-phases
39598 (add-before 'check 'pre-check
39599 (lambda _
39600 (setenv "HOME" "/tmp")))))) ;else the test suite hangs
39601 (native-inputs
39602 (list python-pytest
39603 python-requests
39604 python-setuptools
39605 python-wheel
39606 python-xdoctest))
39607 (propagated-inputs
39608 (list python-ordered-set))
39609 (home-page "https://github.com/Erotemic/ubelt")
39610 (synopsis "Python library for hashing, caching, timing and more")
39611 (description
39612 "Ubelt is a small library of simple functions that extend the Python
39613standard library. It includes an @acronym{API, Application Programming
39614Interface} to simplify common problems such as caching, timing, computing
39615progress, among other things.")
39616 (license license:asl2.0)))
39617
39618(define-public python-uc-micro-py
39619 (package
39620 (name "python-uc-micro-py")
39621 (version "1.0.1")
39622 (source (origin
39623 (method git-fetch) ;for tests
39624 (uri (git-reference
39625 (url "https://github.com/tsutsu3/uc.micro-py")
39626 (commit (string-append "v" version))))
39627 (file-name (git-file-name name version))
39628 (sha256
39629 (base32
39630 "17f55gi55rg47nm88fn3f8851ph03dgykdp011lxr3j6hk18lyfv"))))
39631 (build-system pyproject-build-system)
39632 (native-inputs (list python-pytest python-setuptools python-wheel))
39633 (home-page "https://github.com/tsutsu3/uc.micro-py")
39634 (synopsis "Unicode data files for linkify-it-py projects")
39635 (description "This package contains a micro subset of Unicode data files
39636for linkify-it-py projects.")
39637 (license license:expat)))
39638
39639(define-public python-ujson
39640 (package
39641 (name "python-ujson")
39642 (version "5.10.0")
39643 (source
39644 (origin
39645 (method url-fetch)
39646 (uri (pypi-uri "ujson" version))
39647 (sha256
39648 (base32
39649 "1habmn3bmmv2ym4ldiijcavdkdzp8h28h60hgwjkhxwcbly8zkdk"))
39650 (modules '((guix build utils)))
39651 (snippet
39652 #~(begin (delete-file-recursively "deps")))))
39653 (build-system pyproject-build-system)
39654 (arguments
39655 (list
39656 #:phases
39657 #~(modify-phases %standard-phases
39658 (add-after 'unpack 'link-to-system-double-conversion
39659 (lambda* (#:key inputs #:allow-other-keys)
39660 (let ((d-c (assoc-ref inputs "double-conversion")))
39661 (substitute* "setup.py"
39662 (("./deps/double-conversion/double-conversion\"")
39663 (string-append d-c "/include/double-conversion\""))
39664 (("-lstdc++" stdc)
39665 (string-append "-L" d-c "/lib\","
39666 " \"-ldouble-conversion\","
39667 " \"" stdc)))))))))
39668 (native-inputs
39669 (list double-conversion
39670 python-pytest
39671 python-setuptools
39672 python-setuptools-scm
39673 python-wheel))
39674 (home-page "https://github.com/ultrajson/ultrajson")
39675 (synopsis "Ultra fast JSON encoder and decoder for Python")
39676 (description
39677 "UltraJSON is an ultra fast JSON encoder and decoder written in pure C with
39678bindings for Python 3.")
39679 (license license:bsd-3)))
39680
39681(define-public python-ukkonen
39682 (package
39683 (name "python-ukkonen")
39684 (version "1.0.1")
39685 (source
39686 (origin
39687 ;; There are no tests in the PyPI tarball.
39688 (method git-fetch)
39689 (uri (git-reference
39690 (url "https://github.com/asottile/ukkonen")
39691 (commit (string-append "v" version))))
39692 (file-name (git-file-name name version))
39693 (sha256
39694 (base32 "17gspl2dsykg000275svvyam4k7wz9ypi9xrfrmsgcgryczravlc"))))
39695 (build-system pyproject-build-system)
39696 (native-inputs (list python-pytest python-setuptools python-wheel))
39697 (propagated-inputs (list python-cffi))
39698 (home-page "https://github.com/asottile/ukkonen")
39699 (synopsis "Implementation of bounded Levenshtein distance (Ukkonen)")
39700 (description "This package is an implementation of of bounded Levenshtein
39701distance (Ukkonen).")
39702 (license license:expat)))
39703
39704(define-public python-ukpostcodeparser
39705 (package
39706 (name "python-ukpostcodeparser")
39707 (version "1.1.2")
39708 (source (origin
39709 (method url-fetch)
39710 (uri (pypi-uri "UkPostcodeParser" version))
39711 (sha256
39712 (base32
39713 "03jkf1ygbwq3akzbcjyjk1akc1hv2sfgx90306pq1nwklbpn80lk"))))
39714 (build-system pyproject-build-system)
39715 (arguments
39716 (list
39717 #:test-flags
39718 #~(list
39719 ;; Tests for lowercase postcodes fail.
39720 "-k" (string-join
39721 (list "not test_091 "
39722 "test_097 "
39723 "test_098 "
39724 "test_125 "
39725 "test_131")
39726 " and not ")
39727 "ukpostcodeparser/test/parser.py")))
39728 (native-inputs
39729 (list python-pytest python-setuptools))
39730 (home-page "https://github.com/hamstah/ukpostcodeparser")
39731 (synopsis "UK Postcode parser for Python")
39732 (description
39733 "This library provides the @code{parse_uk_postcode} function for
39734parsing UK postcodes.")
39735 (license license:expat)))
39736
39737(define-public python-ulid
39738 (package
39739 (name "python-ulid")
39740 (version "3.1.0")
39741 (source
39742 (origin
39743 (method git-fetch)
39744 (uri (git-reference
39745 (url "https://github.com/mdomke/python-ulid")
39746 (commit version)))
39747 (file-name (git-file-name name version))
39748 (sha256
39749 (base32 "0m1sixmqynlalsw50af5mv5q4gpz2052d1p2ig9hr7yqmdvqcz6p"))))
39750 (build-system pyproject-build-system)
39751 (arguments
39752 (list
39753 #:phases
39754 #~(modify-phases %standard-phases
39755 (add-after 'unpack 'set-version
39756 (lambda _
39757 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
39758 (native-inputs
39759 (list python-freezegun
39760 python-hatch-fancy-pypi-readme
39761 python-hatch-vcs
39762 python-hatchling
39763 python-pytest))
39764 (propagated-inputs
39765 (list python-pydantic))
39766 (home-page "https://github.com/mdomke/python-ulid")
39767 (synopsis "Universally unique lexicographically sortable identifier")
39768 (description
39769 "ULID is a universally unique lexicographically sortable identifier.
39770It is:
39771@itemize
39772@item 128-bit compatible with UUID
39773@item 1.21e+24 unique ULIDs per millisecond
39774@item lexicographically sortable!
39775@item canonically encoded as a 26 character string, as opposed to the 36
39776character UUID
39777@item uses Crockford's base32 for better efficiency and readability (5 bits
39778per character)
39779@item case insensitive
39780@item no special characters (URL safe)
39781@item monotonic sort order (correctly detects and handles the same
39782millisecond)
39783@end itemize")
39784 (license license:expat)))
39785
39786(define-public python-uncertainties
39787 (package
39788 (name "python-uncertainties")
39789 (version "3.2.3")
39790 (source
39791 (origin
39792 (method url-fetch)
39793 (uri (pypi-uri "uncertainties" version))
39794 (sha256
39795 (base32
39796 "0c9hl35jvld1a1vinh9mdcpfgz4ykqinlm1dj917lqbgd0z6b9bn"))))
39797 (build-system pyproject-build-system)
39798 (native-inputs
39799 (list python-pytest python-setuptools python-setuptools-scm python-wheel))
39800 (propagated-inputs (list python-numpy))
39801 (home-page "https://uncertainties.readthedocs.io/en/latest/")
39802 (synopsis "Calculations with uncertainties")
39803 (description
39804 "The uncertainties package transparently handles calculations with
39805numbers with uncertainties. It can also yield the derivatives of any
39806expression.")
39807 (license license:bsd-3)))
39808
39809(define-public python-unicodedata2
39810 (package
39811 (name "python-unicodedata2")
39812 (version "16.0.0")
39813 (source
39814 (origin
39815 (method url-fetch)
39816 (uri (pypi-uri "unicodedata2" version))
39817 (sha256
39818 (base32 "1z3llixb4cd6cc6nmyps5vv2sss14n3x6dzcc65xg75mj9jqsj05"))))
39819 (build-system pyproject-build-system)
39820 (native-inputs
39821 (list python-pytest
39822 python-setuptools))
39823 (home-page "https://github.com/fonttools/unicodedata2")
39824 (synopsis "Python unicodedata backport")
39825 (description "This package corresponds to the latest @code{unicodedata}
39826standard Python module.")
39827 (license license:asl2.0)))
39828
39829(define-public python-unicode-linebreak
39830 (package
39831 (name "python-unicode-linebreak")
39832 (version "0.0.2")
39833 (source
39834 (origin
39835 (method git-fetch)
39836 (uri (git-reference
39837 (url "https://github.com/mondeja/py-unicode-linebreak")
39838 (commit (string-append "v" version))))
39839 (file-name (git-file-name name version))
39840 (sha256
39841 (base32 "0qvh729b2q82sy057qgldcbz513wxnsckmwl3c18wkyb3c1iq2qk"))))
39842 (build-system pyproject-build-system)
39843 (arguments
39844 (list
39845 #:imported-modules `(,@%cargo-build-system-modules
39846 ,@%pyproject-build-system-modules)
39847 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
39848 (guix build pyproject-build-system)
39849 (guix build utils))
39850 #:test-backend #~'unittest
39851 #:phases
39852 #~(modify-phases %standard-phases
39853 (add-after 'unpack 'prepare-cargo-build-system
39854 (lambda args
39855 (for-each
39856 (lambda (phase)
39857 (format #t "Running cargo phase: ~a~%" phase)
39858 (apply (assoc-ref cargo:%standard-phases phase)
39859 #:cargo-target #$(cargo-triplet)
39860 args))
39861 '(unpack-rust-crates
39862 configure
39863 check-for-pregenerated-files
39864 patch-cargo-checksums)))))))
39865 (native-inputs
39866 (append
39867 (list maturin
39868 rust
39869 `(,rust "cargo"))
39870 (or (and=> (%current-target-system)
39871 (compose list make-rust-sysroot))
39872 '())))
39873 (inputs (cargo-inputs 'unicode_linebreak))
39874 (home-page "https://github.com/mondeja/py-unicode-linebreak")
39875 (synopsis "Markdown paragraph wrapper")
39876 (description
39877 "This package provides a Markdown paragraph wrapper using Unicode Line
39878Breaking Algorithm written in Rust with Python bindings.")
39879 (license license:expat)))
39880
39881(define-public python-unicodeitplus
39882 (package
39883 (name "python-unicodeitplus")
39884 (version "0.3.1")
39885 (source
39886 (origin
39887 (method url-fetch)
39888 (uri (pypi-uri "unicodeitplus" version))
39889 (sha256
39890 (base32 "1mssdjih7dqz25lrb2pyjg2yvab0b9c7a5k1llx1yzkkqbqyh74c"))))
39891 (build-system pyproject-build-system)
39892 (native-inputs
39893 (list python-pytest
39894 python-setuptools
39895 python-setuptools-scm))
39896 (propagated-inputs
39897 (list python-lark))
39898 (home-page "https://github.com/HDembinski/unicodeitplus")
39899 (synopsis "Convert simple LaTeX to an Unicode approximation")
39900 (description
39901 "This package provides a more complete LaTeX to Unicode converter than
39902@code{unicodeit} using a parser generated from @acronym{EBNF, Extended
39903Backus-Naur Form} with the Lark library.")
39904 (license license:bsd-3)))
39905
39906(define-public python-unidecode
39907 (package
39908 (name "python-unidecode")
39909 (version "1.4.0")
39910 (source
39911 (origin
39912 (method url-fetch)
39913 (uri (pypi-uri "Unidecode" version))
39914 (sha256
39915 (base32 "08rbx8vxsnj06cvrdxy80zrn9hk25lwcqfh2fdjng2rk1189hdff"))))
39916 (build-system pyproject-build-system)
39917 (native-inputs
39918 (list python-pytest python-setuptools))
39919 (home-page "https://pypi.org/project/Unidecode/")
39920 (synopsis "ASCII transliterations of Unicode text")
39921 (description
39922 "Unidecode provides ASCII transliterations of Unicode text. Unidecode is
39923useful when integrating with legacy code that doesn't support Unicode, or for
39924ease of entry of non-Roman names on a US keyboard, or when constructing ASCII
39925machine identifiers from human-readable Unicode strings that should still be
39926somewhat intelligible.")
39927 (license license:gpl2+)))
39928
39929(define-public python-unique-log-filter
39930 (package
39931 (name "python-unique-log-filter")
39932 (version "0.1.0")
39933 (source
39934 (origin
39935 (method git-fetch)
39936 (uri (git-reference
39937 (url "https://github.com/twizmwazin/unique_log_filter")
39938 (commit (string-append "v" version))))
39939 (file-name (git-file-name name version))
39940 (sha256
39941 (base32 "036mh6nqskck2fa1q2inasqxb9wcz2p09qcpldnnffzcy1a6kzba"))))
39942 (build-system pyproject-build-system)
39943 (arguments
39944 (list #:test-backend #~'custom
39945 #:test-flags #~(list "test_unique_log_filter.py")))
39946 (native-inputs (list python-flit-core))
39947 (home-page "https://github.com/twizmwazin/unique_log_filter")
39948 (synopsis "Log filter that removes duplicate log messages")
39949 (description
39950 "This library provides a filter for the @code{logging} module
39951from the Python standard library which allows removing duplicate log
39952messages.")
39953 (license license:bsd-2)))
39954
39955(define-public python-uniseg
39956 (package
39957 (name "python-uniseg")
39958 (version "0.10.0")
39959 (source
39960 (origin
39961 (method url-fetch)
39962 (uri (pypi-uri "uniseg" version))
39963 (sha256
39964 (base32 "18sj1i7xlssrsfwlr95bd4x78mfhq0v6irfx3b7fkgr17a5jbsmm"))))
39965 (build-system pyproject-build-system)
39966 (native-inputs
39967 (list python-pytest
39968 python-setuptools
39969 python-setuptools-scm))
39970 (home-page "https://bitbucket.org/emptypage/uniseg-python")
39971 (synopsis "Python library to determine Unicode text segmentations")
39972 (description
39973 "Uniseg is a Python package used to determine Unicode text segmentations.
39974Supported segmentations include:
39975@enumerate
39976@item @dfn{Code point} (any value in the Unicode codespace)
39977@item @dfn{Grapheme cluster} (user-perceived character made of a single or
39978multiple Unicode code points, e.g. \"G\" + acute-accent)
39979@item Word break
39980@item Sentence break
39981@item Line break
39982@end enumerate")
39983 (license license:expat)))
39984
39985(define-public python-universal-pathlib
39986 (package
39987 (name "python-universal-pathlib")
39988 (version "0.2.6")
39989 (source
39990 (origin
39991 (method git-fetch)
39992 (uri (git-reference
39993 (url "https://github.com/fsspec/universal_pathlib")
39994 (commit (string-append "v" version))))
39995 (file-name (git-file-name name version))
39996 (sha256
39997 (base32 "0y2czk4civjjy9v8vhv6icivk4lapjcjzhdxjrrm3629apqja7wp"))))
39998 (build-system pyproject-build-system)
39999 (arguments
40000 (list
40001 #:tests? #f ;requires network
40002 #:phases
40003 #~(modify-phases %standard-phases
40004 (add-after 'unpack 'set-version
40005 (lambda _
40006 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
40007 (native-inputs
40008 (list python-setuptools
40009 python-setuptools-scm))
40010 (propagated-inputs
40011 (list python-fsspec
40012 python-pathlib-abc))
40013 (home-page "https://github.com/fsspec/universal_pathlib")
40014 (synopsis
40015 "@code{pathlib} API extended to use @code{fsspec} backends")
40016 (description
40017 "Universal Pathlib is a Python library that extends the @code{pathlib.Path}
40018API to support a variety of backend filesystems via filesystem_spec.")
40019 (license license:expat)))
40020
40021(define-public python-unpaddedbase64
40022 (package
40023 (name "python-unpaddedbase64")
40024 (version "2.1.0")
40025 (source
40026 (origin
40027 (method git-fetch)
40028 (uri (git-reference
40029 (url "https://github.com/matrix-org/python-unpaddedbase64")
40030 (commit (string-append "v" version))))
40031 (file-name (git-file-name name version))
40032 (sha256
40033 (base32 "1n6har8pxv0mqb96lanzihp1xf76aa17jw3977drb1fgz947pnmz"))))
40034 (build-system pyproject-build-system)
40035 (native-inputs (list python-poetry-core
40036 python-pytest
40037 python-setuptools
40038 python-wheel))
40039 (home-page "https://github.com/matrix-org/python-unpaddedbase64")
40040 (synopsis "Encode and decode Base64 without “=” padding")
40041 (description
40042 "RFC 4648 specifies that Base64 should be padded to a multiple of 4 bytes
40043using “=” characters. However this conveys no benefit so many protocols
40044choose to use Base64 without the “=” padding.")
40045 (license license:asl2.0)))
40046
40047(define-public python-update-checker
40048 (package
40049 (name "python-update-checker")
40050 (version "0.18.0")
40051 (source
40052 (origin
40053 (method url-fetch)
40054 (uri (pypi-uri "update-checker" version))
40055 (sha256
40056 (base32 "04yb5a9mi45ax50m2m0ih6gdvkk1j7gfmy83dd58i1f59axlabba"))))
40057 (build-system pyproject-build-system)
40058 (native-inputs
40059 (list python-pytest
40060 python-setuptools))
40061 (propagated-inputs
40062 (list python-requests))
40063 (home-page "https://github.com/bboe/update_checker")
40064 (synopsis "Python module that will check for package updates")
40065 (description "This package provides a Python module that will check for
40066package updates.")
40067 (license license:bsd-2)))
40068
40069(define-public python-uri-template
40070 (package
40071 (name "python-uri-template")
40072 (version "1.3.0")
40073 (source
40074 (origin
40075 (method url-fetch)
40076 (uri (pypi-uri "uri-template" version))
40077 (sha256
40078 (base32 "1ixczlgnsjv2850r6w0cb2npwcwzdqri8njr1pi7v371cpmzh00f"))))
40079 (build-system pyproject-build-system)
40080 (arguments
40081 (list
40082 #:phases
40083 '(modify-phases %standard-phases
40084 (replace 'check
40085 (lambda* (#:key tests? #:allow-other-keys)
40086 (when tests?
40087 (invoke "python3" "test.py")))))))
40088 (native-inputs
40089 (list python-setuptools
40090 python-setuptools-scm
40091 python-wheel))
40092 (home-page "https://gitlab.linss.com/open-source/python/uri-template")
40093 (synopsis "RFC 6570 URI Template Processor")
40094 (description "This package implements URI Template expansion in strict
40095adherence to RFC 6570, but adds a few extensions.")
40096 (license license:expat)))
40097
40098(define-public python-urwid
40099 (package
40100 (name "python-urwid")
40101 (version "3.0.3")
40102 (source
40103 (origin
40104 (method url-fetch)
40105 (uri (pypi-uri "urwid" version))
40106 (sha256
40107 (base32
40108 "16zdji1fdr5jbry9h01dxwnadrygs1xj415jqnhmmnlcavfh821h"))))
40109 (build-system pyproject-build-system)
40110 (arguments
40111 (list
40112 #:test-flags
40113 #~(list "tests"
40114 ;; According to Debian these tests are cursed.
40115 ;; https://salsa.debian.org/python-team/packages/urwid/-/blob/debian/2.1.2-2/debian/changelog#L141
40116 "--ignore=tests/test_vterm.py")))
40117 (native-inputs
40118 (list python-pytest
40119 python-pytest-cov
40120 python-setuptools
40121 python-setuptools-scm))
40122 (propagated-inputs
40123 (list python-wcwidth
40124 ;; [optional]
40125 python-pygobject
40126 python-pyzmq
40127 python-tornado
40128 python-pyserial
40129 python-twisted))
40130 (home-page "https://urwid.org")
40131 (synopsis "Console user interface library for Python")
40132 (description
40133 "Urwid is a curses-based UI/widget library for Python. It includes many
40134features useful for text console applications.")
40135 (license license:lgpl2.1+)))
40136
40137(define-public python-urwid-2
40138 (package
40139 (inherit python-urwid)
40140 (name "python-urwid")
40141 (version "2.6.16")
40142 (source
40143 (origin
40144 (method url-fetch)
40145 (uri (pypi-uri "urwid" version))
40146 (sha256
40147 (base32 "18ijvgf1l7jvmg45x1cysn3c9rdrg1w0405acig3hk7476cj7bck"))))))
40148
40149(define-deprecated/public-alias python-urwid-3
40150 python-urwid) ;may be removed after 2025-11-12
40151
40152(define-public python-urwid-for-zulip-term
40153 ;; [email protected] requires exact 2.1.2 version otherewise some tests fail
40154 ;; to pass, remove when no longer required.
40155 (hidden-package
40156 (package
40157 (inherit python-urwid)
40158 (version "2.1.2")
40159 (source
40160 (origin
40161 (method url-fetch)
40162 (uri (pypi-uri "urwid" version))
40163 (sha256
40164 (base32 "1bky2bra6673xx8jy0826znw6cmxs89wcwwzda8d025j3jffx2sq"))))
40165 (arguments
40166 (list #:tests? #f)))))
40167
40168(define-public python-urwid-readline
40169 (package
40170 (name "python-urwid-readline")
40171 (version "0.15.1")
40172 (source
40173 (origin
40174 (method git-fetch)
40175 (uri (git-reference
40176 (url "https://github.com/rr-/urwid_readline")
40177 (commit version)))
40178 (file-name (git-file-name name version))
40179 (sha256
40180 (base32 "0zhpx86gvpkziclb7bcqn73fadkzn805rjqy7lzhrza46lphq8qy"))))
40181 (build-system pyproject-build-system)
40182 (native-inputs
40183 (list python-pytest
40184 python-setuptools))
40185 (propagated-inputs
40186 (list python-urwid))
40187 (home-page "https://github.com/rr-/urwid_readline")
40188 (synopsis "Text input widget for urwid that supports readline shortcuts")
40189 (description
40190 "This package provides a textbox edit widget for @code{python-urwid} that
40191supports @code{readline} shortcuts.")
40192 (license license:expat)))
40193
40194(define-public python-urwidgets
40195 (package
40196 (name "python-urwidgets")
40197 (version "0.2.1")
40198 (source
40199 (origin
40200 (method url-fetch)
40201 (uri (pypi-uri "urwidgets" version))
40202 (sha256
40203 (base32 "1vrydw9h8c5gi89dnv12a9cdyyxaffvxl1kq51f118cxjk9brwpr"))))
40204 (build-system pyproject-build-system)
40205 (arguments
40206 (list #:tests? #f)) ;no tests
40207 (native-inputs
40208 (list python-setuptools))
40209 (propagated-inputs
40210 (list python-urwid-2))
40211 (home-page "https://github.com/AnonymouX47/urwidgets")
40212 (synopsis "Collection of widgets for urwid")
40213 (description
40214 "This package provides a collection of widgets for urwid.")
40215 (license license:expat)))
40216
40217(define-public python-urwidtrees
40218 (package
40219 (name "python-urwidtrees")
40220 (version "1.0.4")
40221 (source
40222 (origin
40223 (method git-fetch)
40224 ;; package author intends on distributing via github rather than pypi:
40225 ;; https://github.com/pazz/alot/issues/877#issuecomment-230173331
40226 (uri (git-reference
40227 (url "https://github.com/pazz/urwidtrees")
40228 (commit version)))
40229 (file-name (git-file-name name version))
40230 (sha256
40231 (base32
40232 "17k0gx8i7wrzw6skzdjh9b8v3n6lb5zvg9jrybc3d09p8ipvc31i"))))
40233 (build-system pyproject-build-system)
40234 (arguments
40235 '(#:tests? #f)) ; no tests
40236 (propagated-inputs (list python-urwid))
40237 (native-inputs (list python-mock python-setuptools python-wheel))
40238 (home-page "https://github.com/pazz/urwidtrees")
40239 (synopsis "Tree widgets for urwid")
40240 (description "Urwidtrees is a Widget Container API for the @code{urwid}
40241toolkit. Use it to build trees of widgets.")
40242 (license license:gpl3+)))
40243
40244(define-public python-user-agents
40245 (package
40246 (name "python-user-agents")
40247 (version "2.2.0")
40248 (source
40249 (origin
40250 (method git-fetch)
40251 (uri (git-reference
40252 (url "https://github.com/selwin/python-user-agents")
40253 (commit (string-append "v" version))))
40254 (file-name (git-file-name name version))
40255 (sha256
40256 (base32 "0pcbjqj21c2ixhl414bh2h8khi8y1igzfpkyqwan1pakix0lq45a"))))
40257 (build-system pyproject-build-system)
40258 (arguments
40259 (list #:test-backend #~'unittest))
40260 (native-inputs
40261 (list python-setuptools))
40262 (propagated-inputs
40263 (list python-ua-parser))
40264 (home-page "https://github.com/selwin/python-user-agents")
40265 (synopsis "User Agent strings parsing library")
40266 (description
40267 "A library to identify devices (phones, tablets) and their capabilities by
40268parsing (browser/HTTP) user agent strings.")
40269 (license license:expat)))
40270
40271(define-public python-userpath
40272 (package
40273 (name "python-userpath")
40274 (version "1.9.2")
40275 (source
40276 (origin
40277 (method url-fetch)
40278 (uri (pypi-uri "userpath" version))
40279 (sha256
40280 (base32 "05fqxzdi27vqm5lywxs6bm2j4d8k91fx2ihqhg65g4h6mf6jhlkc"))))
40281 (build-system pyproject-build-system)
40282 (arguments
40283 ;; See https://github.com/ofek/userpath/issues/43.
40284 ;; In Guix, tests try to find the temporary build directory in PATH, but
40285 ;; only the store output is present.
40286 (list #:tests? #f))
40287 (native-inputs (list python-hatchling python-pytest))
40288 (propagated-inputs (list python-click))
40289 (home-page "https://github.com/ofek/userpath")
40290 (synopsis "Add locations to the user's PATH")
40291 (description "This package provides a tool for modifying a user's PATH.")
40292 (license license:expat)))
40293
40294(define-public python-userspacefs
40295 (package
40296 (name "python-userspacefs")
40297 (version "3.1.1")
40298 (source
40299 (origin
40300 (method url-fetch)
40301 (uri (pypi-uri "userspacefs" version))
40302 (sha256
40303 (base32 "0lfzgijza3p4wbrhlf8pzj89j7caj8x6aij78d4izppvq4kfjqs6"))))
40304 (build-system pyproject-build-system)
40305 (arguments
40306 (list #:tests? #f ;no tests
40307 #:phases
40308 #~(modify-phases %standard-phases
40309 (add-after 'unpack 'hardcode-libfuse
40310 (lambda* (#:key inputs #:allow-other-keys)
40311 (substitute* "userspacefs/fusepy.py"
40312 (("^_libfuse_path.*")
40313 (string-append "_libfuse_path = '"
40314 (search-input-file inputs "lib/libfuse.so")
40315 "'\n"))))))))
40316 (inputs (list fuse-2))
40317 (native-inputs (list python-setuptools))
40318 (propagated-inputs (list python-aiohttp python-typing-extensions))
40319 (home-page "https://thelig.ht/code/userspacefs/readme.html")
40320 (synopsis "User-space file systems for Python")
40321 (description
40322 "@code{userspacefs} is a library that allows you to easily write
40323user-space file systems in Python.")
40324 (license license:gpl3+)))
40325
40326(define-public python-utils
40327 (package
40328 (name "python-utils")
40329 (version "3.9.1")
40330 (source
40331 (origin
40332 (method url-fetch)
40333 (uri (pypi-uri "python_utils" version))
40334 (sha256
40335 (base32 "18292j4p1bvlpbrfj2cgkdby6dpgnl5gbjwly0qb4pj1j914nmzb"))))
40336 (build-system pyproject-build-system)
40337 (arguments
40338 (list
40339 #:phases
40340 #~(modify-phases %standard-phases
40341 (add-after 'unpack 'fix-pytest-config
40342 (lambda _
40343 ;; Drop test coverage requirements.
40344 (substitute* "pytest.ini"
40345 ((".*--cov.*") "")))))))
40346 (native-inputs
40347 (list python-pytest
40348 python-pytest-asyncio
40349 python-setuptools))
40350 (propagated-inputs
40351 (list python-loguru
40352 python-typing-extensions))
40353 (home-page "https://github.com/WoLpH/python-utils")
40354 (synopsis "Convenient utilities not included with the standard Python install")
40355 (description
40356 "Python Utils is a collection of small Python functions and classes
40357which make common patterns shorter and easier.")
40358 (license license:bsd-2)))
40359
40360(define-public python-uuid6
40361 (package
40362 (name "python-uuid6")
40363 (version "2025.0.1")
40364 (source
40365 (origin
40366 (method git-fetch)
40367 (uri (git-reference
40368 (url "https://github.com/oittaa/uuid6-python")
40369 (commit version)))
40370 (file-name (git-file-name name version))
40371 (sha256
40372 (base32 "0xawnq7b0vzcvrw50jfdagn4a2javyav108hlpf31kbn7rn03jhk"))))
40373 (build-system pyproject-build-system)
40374 (arguments
40375 (list
40376 #:test-flags
40377 ;; Test is time based: AssertionError: 13987034766.015247 !=
40378 ;; 13987034766.01471 within 3 places (0.000537872314453125 difference)
40379 #~(list "--deselect=test/test_uuid6.py::UUIDTests::test_time")
40380 #:phases
40381 #~(modify-phases %standard-phases
40382 (add-after 'unpack 'set-version
40383 (lambda _
40384 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
40385 (native-inputs
40386 (list python-pytest
40387 python-setuptools
40388 python-setuptools-scm))
40389 (home-page "https://github.com/oittaa/uuid6-python")
40390 (synopsis "Time-based UUID formats which are suited for use as a database key")
40391 (description
40392 "This module extends immutable UUID objects (the UUID class) with the
40393functions @code{uuid6()}, @code{uuid7()}, and @code{uuid8()} from the proposed
40394@url{https://datatracker.ietf.org/doc/rfc9562/, IETF RFC 9562}.")
40395 (license license:expat)))
40396
40397(define-public python-validate-email
40398 (package
40399 (name "python-validate-email")
40400 (version "1.3")
40401 (source
40402 (origin
40403 (method url-fetch)
40404 (uri (pypi-uri "validate_email" version))
40405 (sha256
40406 (base32 "1bxffaf5yz2cph8ki55vdvdypbwkvn2xr1firlcy62vqbzf1jivq"))))
40407 (build-system pyproject-build-system)
40408 (arguments (list #:tests? #f)) ;no tests in PyPI or Git
40409 (native-inputs
40410 (list python-setuptools))
40411 (home-page "https://github.com/syrusakbary/validate_email")
40412 (synopsis "Verifies if an email address is valid and really exists")
40413 (description
40414 "@code{validate_email} can be used to verify if an email address is
40415valid and really exists.")
40416 (license license:lgpl3+)))
40417
40418(define-public python-validators
40419 (package
40420 (name "python-validators")
40421 (version "0.34.0")
40422 (source
40423 (origin
40424 (method url-fetch)
40425 (uri (pypi-uri "validators" version))
40426 (sha256
40427 (base32 "07vq3s77f5yndn7jfx39jbsaq5m8wqc3p52v4i6sgyasnh3y8zv4"))))
40428 (build-system pyproject-build-system)
40429 (arguments
40430 (list
40431 ;; python-eth-hash is not packed yet.
40432 #:test-flags #~(list "--ignore=tests/crypto_addresses/test_eth_address.py")))
40433 (native-inputs
40434 (list python-pytest
40435 python-setuptools
40436 python-wheel))
40437 (propagated-inputs
40438 (list python-decorator
40439 ;; python-eth-hash ; optional, not packed yet.
40440 python-six))
40441 (home-page "https://github.com/kvesteri/validators")
40442 (synopsis "Data validation library")
40443 (description
40444 "This package contains validators for different things such as email
40445addresses, IP addresses, URLs, hashes and more. It has been designed to be
40446easy to use and not require defining a schema or form just to validate some
40447input.")
40448 (license license:expat)))
40449
40450(define-public python-valkey
40451 (package
40452 (name "python-valkey")
40453 (version "6.1.1")
40454 (source
40455 (origin
40456 (method git-fetch)
40457 (uri (git-reference
40458 (url "https://github.com/valkey-io/valkey-py")
40459 (commit (string-append "v" version))))
40460 (file-name (git-file-name name version))
40461 (sha256
40462 (base32 "05zmnb8lmygv75zx0hb40s2rgr53sy4g0sizcb9mq8fd09z5i0n2"))))
40463 (build-system pyproject-build-system)
40464 (arguments
40465 ;; XXX: A lot of tests fail with ConnectionError
40466 ;; Maybe we need to spawn a valkey server?
40467 (list #:tests? #f))
40468 (native-inputs
40469 (list python-setuptools))
40470 (home-page "https://github.com/valkey-io/valkey-py")
40471 (synopsis "Python client for Valkey")
40472 (description
40473 "This package provides a python client for the @code{Valkey} key-value
40474store, forked from redis-py.")
40475 (license license:expat)))
40476
40477;; XXX: No fresh releases or updates since 2016, consider to remove, leaf
40478;; package.
40479(define-public python-vcversioner
40480 (package
40481 (name "python-vcversioner")
40482 (version "2.16.0.0")
40483 (source
40484 (origin
40485 (method url-fetch)
40486 (uri (pypi-uri "vcversioner" version))
40487 (sha256
40488 (base32
40489 "16z10sm78jd7ca3jbkgc3q5i8a8q7y1h21q1li21yy3rlhbhrrns"))))
40490 (build-system pyproject-build-system)
40491 (arguments
40492 (list #:tests? #f)) ;no tests in PyPI archvie
40493 (native-inputs
40494 (list python-setuptools))
40495 (home-page "https://github.com/habnabit/vcversioner")
40496 (synopsis "Python library for version number discovery")
40497 (description
40498 "Vcversioner is a Python library that inspects tagging information in a
40499variety of version control systems in order to discover version numbers.")
40500 (license license:isc)))
40501
40502(define-public python-vdf
40503 (package
40504 (name "python-vdf")
40505 (version "3.4")
40506 (source
40507 (origin
40508 (method git-fetch) ; no tests in PyPI release
40509 (uri (git-reference
40510 (url "https://github.com/ValvePython/vdf")
40511 (commit (string-append "v" version))))
40512 (file-name (git-file-name name version))
40513 (sha256
40514 (base32 "1xc0sd21xgf08pf6dwa4l23y9jb6yqaw61rr03ns0d2r6sby137a"))))
40515 (build-system pyproject-build-system)
40516 (native-inputs
40517 (list python-pytest python-setuptools))
40518 (home-page "https://github.com/ValvePython/vdf")
40519 (synopsis "Work with Valve's VDF text format")
40520 (description
40521 "This package provides @code{python-vdf}, a library for working with
40522 Valve's VDF text format.")
40523 (license license:expat)))
40524
40525(define-public python-vendetect
40526 (package
40527 (name "python-vendetect")
40528 (version "0.0.3")
40529 (source
40530 (origin
40531 (method url-fetch)
40532 (uri (pypi-uri "vendetect" version))
40533 (sha256
40534 (base32 "0hi13sbgr8y66mih2xyzczjfff4lwymkn9cw5215ms2nn6qq9rhi"))))
40535 (build-system pyproject-build-system)
40536 (propagated-inputs (list python-copydetect python-rich))
40537 (native-inputs (list python-hatchling python-pytest))
40538 (home-page "https://github.com/trailofbits/vendetect")
40539 (synopsis "Detect vendored and copy-pasted code")
40540 (description
40541 "Vendetect helps identify copied or vendored code between repositories,
40542making it easier to detect when code has been copied with or without
40543attribution. It uses similarity detection algorithms to compare code files
40544and highlight matching sections.")
40545 (license license:agpl3+)))
40546
40547;; XXX: No updates since 2017.
40548(define-public python-verboselogs
40549 (package
40550 (name "python-verboselogs")
40551 (version "1.7")
40552 (source
40553 (origin
40554 (method url-fetch)
40555 (uri (pypi-uri "verboselogs" version))
40556 (sha256
40557 (base32 "09z4d1jiasn7k1hs5af2ckmnrd0i1d1m04bhfjhv7z6svzfdwgg3"))))
40558 (build-system pyproject-build-system)
40559 (arguments
40560 (list
40561 #:test-flags
40562 ;; Do not run pylint plugin test, as astroid is an old unsupported
40563 ;; version.
40564 #~(list "-k" "not test_pylint_plugin"
40565 "verboselogs/tests.py")))
40566 (native-inputs
40567 (list python-mock
40568 python-pytest
40569 python-setuptools))
40570 (home-page "https://verboselogs.readthedocs.io")
40571 (synopsis "Verbose logging level for Python's logging module")
40572 (description
40573 "The @code{verboselogs} package extends Python's @code{logging} module to
40574add the log levels NOTICE, SPAM, SUCCESS and VERBOSE.")
40575 (license license:expat)))
40576
40577(define-public python-verlib2
40578 (package
40579 (name "python-verlib2")
40580 (version "0.3.1")
40581 (source
40582 (origin
40583 (method git-fetch)
40584 (uri (git-reference
40585 (url "https://github.com/pyveci/verlib2")
40586 (commit (string-append "v" version))))
40587 (file-name (git-file-name name version))
40588 (sha256
40589 (base32 "1xp0qfzy4l4fs1rn1670fbf7d7xv1p2s3rplspx8xqszjd5j0n8c"))))
40590 (build-system pyproject-build-system)
40591 (propagated-inputs (list python-importlib-metadata))
40592 (native-inputs
40593 (list python-pretend python-pytest python-pytest-cov python-setuptools))
40594 (home-page "https://github.com/pyveci/verlib2")
40595 (synopsis "Python versioning utilities")
40596 (description
40597 "This package provides a standalone variant of @code{distutils.version} and
40598@code{packaging.version}, without anything else.")
40599 (license license:bsd-2)))
40600
40601;; XXX: No updates since 2018, consider to remove when fails to build, it's a
40602;; leaf package.
40603(define-public python-version
40604 ;; No version tags available in the git repo; just using bare commit instead.
40605 (let ((commit "5232eea250ab72cc5cb72b0b75efb35d2192b906")
40606 (revision "1"))
40607 (package
40608 (name "python-version")
40609 (version (git-version "0.0.2" revision commit))
40610 (source
40611 (origin
40612 (method git-fetch)
40613 (uri (git-reference
40614 (url "https://gitlab.com/halfak/python_version")
40615 (commit commit)))
40616 (file-name (git-file-name name version))
40617 (sha256
40618 (base32 "0w210559ypdynlj9yn40m9awzkaknwrf682i99hswl7h66sdgh0h"))))
40619 (build-system pyproject-build-system)
40620 (arguments
40621 (list #:tests? #f)) ;no tests
40622 (native-inputs
40623 (list python-setuptools))
40624 (home-page "https://gitlab.com/halfak/python_version")
40625 (synopsis "Python version checking utility")
40626 (description
40627 "This package provides a simple utility for checking the python version.")
40628 (license license:expat))))
40629
40630(define-public python-versioneer
40631 (package
40632 (name "python-versioneer")
40633 (version "0.29")
40634 (source
40635 (origin
40636 (method url-fetch)
40637 (uri (pypi-uri "versioneer" version))
40638 (sha256
40639 (base32
40640 "0cap4cjckxp9mlkprqayfs77k3pn5iwpr2riacdxc4bjhnwq7cjs"))
40641 (patches (search-patches "python-versioneer-guix-support.patch"))))
40642 (build-system pyproject-build-system)
40643 (arguments
40644 (list
40645 ;; Minimize test requirements.
40646 #:test-flags
40647 #~(list "--deselect=test/git/test_git.py::Repo::test_pyproject"
40648 "--ignore=test/git/test_invocations.py"
40649 "--ignore=test/test_render.py")
40650 #:phases
40651 #~(modify-phases %standard-phases
40652 (add-before 'check 'pre-check
40653 (lambda _
40654 (invoke "python" "setup.py" "make_versioneer"
40655 "make_long_version_py_git"))))))
40656 (native-inputs
40657 (list git-minimal/pinned
40658 python-pytest
40659 python-setuptools
40660 python-wheel))
40661 (propagated-inputs
40662 (list python-tomli))
40663 (home-page "https://github.com/python-versioneer/python-versioneer")
40664 (synopsis "Version-string management for VCS-controlled trees")
40665 (description
40666 "@code{versioneer} is a tool for managing a recorded version number in
40667distutils-based python projects. The goal is to remove the tedious and
40668error-prone \"update the embedded version string\" step from your release
40669process.")
40670 (license license:unlicense)))
40671
40672(define-public python-verspec
40673 (package
40674 (name "python-verspec")
40675 (version "0.1.0")
40676 (source
40677 (origin
40678 (method url-fetch)
40679 (uri (pypi-uri "verspec" version))
40680 (sha256
40681 (base32 "07n06wv85fm4vl1ird2mja0823js3x322wgs9gdnq1djjyk4ql64"))))
40682 (build-system pyproject-build-system)
40683 (arguments
40684 (list
40685 #:phases
40686 #~(modify-phases %standard-phases
40687 (add-before 'check 'pre-check
40688 (lambda _
40689 (invoke "touch" "test/__init__.py"))))))
40690 (native-inputs
40691 (list python-pretend
40692 python-pytest
40693 python-setuptools))
40694 (home-page "https://github.com/jimporter/verspec")
40695 (synopsis "Flexible version handling for Python")
40696 (description
40697 "This Python library handles software versions and specifiers. It is
40698adapted from the @code{packaging} package.")
40699 (license (list license:bsd-2 license:asl2.0))))
40700
40701(define-public python-vine
40702 (package
40703 (name "python-vine")
40704 (version "5.1.0")
40705 (source
40706 (origin
40707 (method url-fetch)
40708 (uri (pypi-uri "vine" version))
40709 (sha256
40710 (base32 "1q31krwxdvwawdn1kfqmpplix31d4jhs0qng26908hawsf0yjqlb"))))
40711 (build-system pyproject-build-system)
40712 (arguments
40713 (list
40714 #:test-flags
40715 ;; AttributeError: 'test_barrier' object has no attribute 'ps'.
40716 #~(list "-k" (string-join
40717 (list "not test_evaluate"
40718 "test_reverse"
40719 "test_cancel"
40720 "test_throw")
40721 " and not "))))
40722 (native-inputs
40723 (list python-pytest python-setuptools python-wheel))
40724 (home-page "https://github.com/celery/vine")
40725 (synopsis "Promises for Python")
40726 (description
40727 "@code{vine} provides a special implementation of promises in that it can
40728be used both for \"promise of a value\" and lazy evaluation. The biggest
40729upside for this is that everything in a promise can also be a promise,
40730e.g. filters, callbacks and errbacks can all be promises.")
40731 (license license:bsd-3)))
40732
40733(define-public python-virtualenv
40734 (package
40735 (name "python-virtualenv")
40736 (version "20.29.1")
40737 (source
40738 (origin
40739 (method url-fetch)
40740 (uri (pypi-uri "virtualenv" version))
40741 (sha256
40742 (base32
40743 "0dfwnn8i1y33kgxhi4xyhsj4yr5vsin7zf9c343bcbyk700rgf5q"))))
40744 (build-system pyproject-build-system)
40745 (arguments
40746 (list
40747 #:test-flags
40748 #~(list "-k" (string-join
40749 (list
40750 ;; These tests require Internet access.
40751 "not test_seed_link_via_app_data"
40752 ;; AssertionError: assert 'python' in ['python3',
40753 ;; 'python3.11'].
40754 ;;
40755 ;; PythonInfo() returns: 'system_executable':
40756 ;; '/gnu/store/...-python-wrapper-3.11.11/bin/python'
40757 "test_fallback_existent_system_executable")
40758 " and not "))))
40759 (native-inputs
40760 (list python-flaky
40761 python-hatch-vcs
40762 python-hatchling
40763 python-packaging
40764 python-pytest
40765 python-pytest-env
40766 python-pytest-freezer
40767 python-pytest-mock
40768 python-pytest-timeout
40769 python-setuptools
40770 python-time-machine))
40771 (propagated-inputs
40772 (list python-distlib
40773 python-filelock
40774 python-platformdirs))
40775 (home-page "https://virtualenv.pypa.io/")
40776 (synopsis "Virtual Python environment builder")
40777 (description
40778 "Virtualenv is a tool to create isolated Python environments.")
40779 (license license:expat)))
40780
40781(define-public python-virtualenv-for-hatch
40782 ;; For [email protected], remove when no longer required.
40783 (hidden-package
40784 (package
40785 (inherit python-virtualenv)
40786 (version "20.25.3")
40787 (source
40788 (origin
40789 (method url-fetch)
40790 (uri (pypi-uri "virtualenv" version))
40791 (sha256
40792 (base32 "1gj57xqgrg53yfn9ypikgky01hvazxdyl556kwsc7b7avyxm9dbv")))))))
40793
40794;; XXX: No new release since 2021, no updates on default branch since 2023, no
40795;; users in Guix; consider to remove if it keeps failing to build.
40796(define-public python-virtualenv-clone
40797 (package
40798 (name "python-virtualenv-clone")
40799 (version "0.5.7")
40800 (source
40801 (origin
40802 (method git-fetch)
40803 (uri (git-reference
40804 (url "https://github.com/edwardgeorge/virtualenv-clone")
40805 (commit version)))
40806 (file-name (git-file-name name version))
40807 (sha256
40808 (base32 "0p0d1y3axvjfnxlgwjx2374gikc8bmc82g0m7yashihbikh7pcxa"))))
40809 (build-system pyproject-build-system)
40810 (arguments
40811 (list
40812 #:test-flags
40813 #~(list "-k" (string-join
40814 ;; UnicodeDecodeError: 'utf-8' codec can't decode byte
40815 ;; 0xba in position 10: invalid start byte
40816 (list "not test_clone_contents"
40817 ;; AssertionError: All versions were skipped.
40818 "test_clone_syspath"
40819 "test_clone_version"
40820 "test_virtualenv_syspath"
40821 "test_virtualenv_versions")
40822 " and not "))))
40823 (native-inputs
40824 (list python-pytest
40825 python-setuptools
40826 python-tomli
40827 python-virtualenv
40828 python-wheel))
40829 (home-page "https://github.com/edwardgeorge/virtualenv-clone")
40830 (synopsis "Clone a non-relocatable virtualenv cleanly")
40831 (description
40832 "Clone non-relocatable virtualenvs without breaking site-packages.")
40833 (license license:expat)))
40834
40835(define-public python-vncdotool
40836 (package
40837 (name "python-vncdotool")
40838 (version "1.2.0")
40839 (source
40840 (origin
40841 (method git-fetch)
40842 (uri (git-reference
40843 (url "http://github.com/sibson/vncdotool")
40844 (commit (string-append "v" version))))
40845 (file-name (git-file-name name version))
40846 (sha256
40847 (base32 "1adsc263qsa3hcyk8mhv0wwq44h8zhcksx92chd5rr1wz37zmc22"))))
40848 (build-system pyproject-build-system)
40849 (propagated-inputs (list python-pillow python-pycryptodomex python-twisted))
40850 (native-inputs (list python-pexpect python-pytest python-pyvirtualdisplay
40851 python-setuptools python-wheel))
40852 (home-page "http://github.com/sibson/vncdotool")
40853 (synopsis "Command line VNC client")
40854 (description
40855 "This package provides a Python command line VNC client. It can be
40856useful to automating interactions with virtual machines or hardware devices
40857that are otherwise difficult to control.")
40858 (license license:expat)))
40859
40860(define-public python-vncdotool-bootstrap
40861 (hidden-package
40862 (package/inherit python-vncdotool
40863 (arguments (list #:tests? #f))
40864 (native-inputs (list python-pexpect python-pytest python-setuptools
40865 python-wheel)))))
40866
40867(define-public python-vobject
40868 (package
40869 (name "python-vobject")
40870 (version "0.9.9")
40871 (source (origin
40872 (method url-fetch)
40873 (uri (pypi-uri "vobject" version))
40874 (sha256
40875 (base32
40876 "13mk8wrg7js0zv3w8246jnxb3i5yp4ascl1csp0q9787wbbyai5c"))))
40877 (build-system pyproject-build-system)
40878 (arguments
40879 '(;; The test suite relies on some non-portable Windows interfaces. Tests
40880 ;; are rewokred on master's HEAD.
40881 #:tests? #f))
40882 (native-inputs
40883 (list python-setuptools))
40884 (propagated-inputs
40885 (list python-dateutil
40886 python-pytz
40887 python-six)) ;it's dropped on master's HEAD
40888 (home-page "https://py-vobject.github.io/")
40889 (synopsis "Parse and generate vCard and vCalendar files")
40890 (description
40891 "Vobject is intended to be a full featured Python package for parsing
40892and generating vCard and vCalendar files. Currently, iCalendar files are
40893supported and well tested. vCard 3.0 files are supported, and all data should
40894be imported, but only a few components are understood in a sophisticated way.")
40895 (license license:asl2.0)))
40896
40897(define-public python-voluptuous
40898 (package
40899 (name "python-voluptuous")
40900 (version "0.15.2")
40901 (source
40902 (origin
40903 (method url-fetch)
40904 (uri (pypi-uri "voluptuous" version))
40905 (sha256
40906 (base32 "1akr0adq9can0ibravqzl4aaf20rgv47g9gk596hn8ykqhrapz3g"))))
40907 (build-system pyproject-build-system)
40908 (native-inputs
40909 (list python-pytest
40910 python-setuptools))
40911 (home-page "https://github.com/alecthomas/voluptuous")
40912 (synopsis "Python data validation library")
40913 (description
40914 "Voluptuous is a Python data validation library. It is primarily
40915intended for validating data coming into Python as JSON, YAML, etc.")
40916 (license license:bsd-3)))
40917
40918(define-public python-wadler-lindig
40919 (package
40920 (name "python-wadler-lindig")
40921 (version "0.1.7")
40922 (source
40923 (origin
40924 ;; GitHub includes the tests, unlike the PyPI tarball
40925 (method git-fetch)
40926 (uri (git-reference
40927 (url "https://github.com/patrick-kidger/wadler_lindig")
40928 (commit (string-append "v" version))))
40929 (file-name (git-file-name name version))
40930 (sha256
40931 (base32 "0nl2zx75p0fza3xyd5qsl4gx68hma677gin68d290ivk6zmkdzx8"))))
40932 (build-system pyproject-build-system)
40933 (native-inputs (list python-hatchling python-pytest python-numpy))
40934 (home-page "https://docs.kidger.site/wadler_lindig")
40935 (synopsis "Pretty printer for Python using the Wadler-Lindig algorithm")
40936 (description
40937 "Wadler-Lindig is a minimal, zero-dependency pretty-printing
40938library for Python that implements a simplified version of the Wadler-Lindig
40939algorithm. Designed to consume less horizontal space than Python's
40940built-in pprint.pprint, it produces compact, well-formatted representations
40941even for complex custom types.")
40942 (license license:asl2.0)))
40943
40944(define-public python-wand
40945 (package
40946 (name "python-wand")
40947 (version "0.6.13")
40948 (source
40949 (origin
40950 (method url-fetch)
40951 (uri (pypi-uri "Wand" version))
40952 (sha256
40953 (base32 "1jpwm956vm35hmgjndr2jwrcql0bwvpsl88q5nr0x8ppxa2380gm"))))
40954 (build-system pyproject-build-system)
40955 (arguments
40956 (list
40957 #:test-flags
40958 ;; These two tests fail even though the signatures are identical.
40959 '(list "-k" "not fourier_transform")
40960 #:phases
40961 #~(modify-phases %standard-phases
40962 (add-after 'unpack 'hardcode-lib-path
40963 (lambda _
40964 (substitute* "wand/api.py"
40965 (("os\\.environ\\.get\\('MAGICK_HOME'\\)")
40966 (string-append "\"" #$(this-package-input "imagemagick") "\""))
40967 (("os\\.environ\\.get\\('WAND_MAGICK_LIBRARY_SUFFIX'\\)")
40968 "\".Q16\"")))))))
40969 (native-inputs
40970 (list python-setuptools python-pytest python-wheel))
40971 (inputs
40972 (list imagemagick))
40973 (home-page "https://docs.wand-py.org/")
40974 (synopsis "MagickWand API binding for Python")
40975 (description
40976 "Wand is a ctypes-based binding for ImageMagick's MagickWand library.")
40977 (license license:expat)))
40978
40979(define-public python-wasabi
40980 (package
40981 (name "python-wasabi")
40982 (version "1.1.3")
40983 (source
40984 (origin
40985 (method url-fetch)
40986 (uri (pypi-uri "wasabi" version))
40987 (sha256
40988 (base32 "0y085r7hym3x34a9jgxl5cd8gsh617rdmd187q6dn29q027h1csb"))))
40989 (build-system pyproject-build-system)
40990 (arguments
40991 (list
40992 #:test-flags
40993 ;; Test requires nbconvert which is huge.
40994 #~(list "--deselect=wasabi/tests/test_jupyter.py::test_jupyter")))
40995 (native-inputs
40996 (list python-pytest
40997 python-setuptools))
40998 (propagated-inputs
40999 (list python-colorama))
41000 (home-page "https://github.com/ines/wasabi")
41001 (synopsis "Console printing and formatting toolkit")
41002 (description
41003 "This package provides a lightweight console printing and formatting
41004toolkit for Python.")
41005 (license license:expat)))
41006
41007(define-public python-watchdog
41008 (package
41009 (name "python-watchdog")
41010 (version "6.0.0")
41011 (source
41012 (origin
41013 (method url-fetch)
41014 (uri (pypi-uri "watchdog" version))
41015 (sha256
41016 (base32 "10n2v2iflhdriwfp34yvhfcckqb6vs7378fdvqj8xbm3zn17rpwx"))))
41017 (build-system pyproject-build-system)
41018 (arguments
41019 (list
41020 #:test-flags
41021 #~(list "-k" (string-join
41022 (list "not test_kill_auto_restart"
41023 "test_auto_restart_on_file_change_debounce"
41024 ;; Fails with too many open files.
41025 "test_select_fd")
41026 " and not "))))
41027 (native-inputs
41028 (list python-pytest
41029 python-pytest-cov
41030 python-pytest-timeout
41031 python-setuptools))
41032 (propagated-inputs
41033 (list python-pyyaml))
41034 (home-page "https://github.com/gorakhargosh/watchdog")
41035 (synopsis "File system events monitoring")
41036 (description "This package provides a way to monitor file system events
41037such as a file modification and trigger an action. This is similar to inotify,
41038but portable.")
41039 (license license:asl2.0)))
41040
41041(define-public python-watchfiles
41042 (package
41043 (name "python-watchfiles")
41044 (version "1.1.1")
41045 (source
41046 (origin
41047 (method git-fetch)
41048 (uri (git-reference
41049 (url "https://github.com/samuelcolvin/watchfiles")
41050 (commit (string-append "v" version))))
41051 (file-name (git-file-name name version))
41052 (sha256
41053 (base32 "1jj9lqbkk8q61g74lykqgyx4ck30kxs7ljkxqzwd2lwdhh4jfm2j"))))
41054 (build-system pyproject-build-system)
41055 (arguments
41056 (list
41057 ;; Missing file in source.
41058 #:test-flags ''("-k" "not test_docs_examples")
41059 #:imported-modules `(,@%cargo-build-system-modules
41060 ,@%pyproject-build-system-modules)
41061 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
41062 (guix build pyproject-build-system)
41063 (guix build utils))
41064 #:phases
41065 #~(modify-phases %standard-phases
41066 (add-after 'unpack 'prepare-cargo-build-system
41067 (lambda args
41068 (for-each
41069 (lambda (phase)
41070 (format #t "Running cargo phase: ~a~%" phase)
41071 (apply (assoc-ref cargo:%standard-phases phase)
41072 #:cargo-target #$(cargo-triplet)
41073 args))
41074 '(unpack-rust-crates
41075 configure
41076 check-for-pregenerated-files
41077 patch-cargo-checksums))))
41078 (add-after 'build 'install-rust-library
41079 (lambda _
41080 (copy-file "target/release/lib_rust_notify.so"
41081 "watchfiles/_rust_notify.so"))))))
41082 (native-inputs
41083 (append
41084 (list maturin
41085 python-anyio
41086 python-dirty-equals
41087 python-pytest
41088 python-pytest-mock
41089 python-pytest-timeout
41090 rust
41091 `(,rust "cargo"))
41092 (or (and=> (%current-target-system)
41093 (compose list make-rust-sysroot))
41094 '())))
41095 (inputs
41096 (cargo-inputs 'python-watchfiles))
41097 (propagated-inputs
41098 (list python-anyio))
41099 (home-page "https://github.com/samuelcolvin/watchfiles")
41100 (synopsis "Simple, modern file watching and code reload in Python")
41101 (description
41102 "Simple, modern file watching and code reload in Python inspired by
41103@code{watchdog}. Among the differences are a unified approach for each
41104operating systems and an elegant approach to concurrency using threading.")
41105 (license license:expat)))
41106
41107(define-public python-wcwidth
41108 (package
41109 (name "python-wcwidth")
41110 (version "0.2.13")
41111 (source (origin
41112 (method url-fetch)
41113 (uri (pypi-uri "wcwidth" version))
41114 (sha256
41115 (base32
41116 "1dbj74q1iz349sdkxrkc90f7xd4y7a9bdvgxg3cqdcly7430rskj"))))
41117 (build-system pyproject-build-system)
41118 (native-inputs (list python-pytest
41119 python-pytest-cov
41120 python-setuptools
41121 python-wheel))
41122 (home-page "https://github.com/jquast/wcwidth")
41123 (synopsis "Measure number of terminal column cells of wide-character codes")
41124 (description "Wcwidth measures the number of terminal column cells of
41125wide-character codes. It is useful for those implementing a terminal emulator,
41126or programs that carefully produce output to be interpreted by one. It is a
41127Python implementation of the @code{wcwidth} and @code{wcswidth} C functions
41128specified in POSIX.1-2001 and POSIX.1-2008.")
41129 (license license:expat)))
41130
41131(define-public python-whatever
41132 (package
41133 (name "python-whatever")
41134 (version "0.7")
41135 (source
41136 (origin
41137 (method git-fetch)
41138 (uri (git-reference
41139 (url "https://github.com/Suor/whatever")
41140 (commit version)))
41141 (file-name (git-file-name name version))
41142 (sha256
41143 (base32 "1x5b4r3fppp208v52hn8inf2988w4llbkw9kvfc3w81dhmrf5fvq"))))
41144 (build-system pyproject-build-system)
41145 (native-inputs
41146 (list python-pytest python-setuptools python-wheel))
41147 (home-page "https://github.com/Suor/whatever")
41148 (synopsis "Make anonymous functions by partial application of operators")
41149 (description "@code{whatever} provides an easy way to make anonymous
41150functions by partial application of operators.")
41151 (license license:bsd-3)))
41152
41153(define-public python-whatthepatch
41154 (package
41155 (name "python-whatthepatch")
41156 (version "1.0.7")
41157 (source
41158 (origin
41159 (method url-fetch)
41160 (uri (pypi-uri "whatthepatch" version))
41161 (sha256
41162 (base32 "1pvygmgj9xqs8d9lsjxvg1mymni8pjsd44yl0a74002jxbmv9vwy"))))
41163 (build-system pyproject-build-system)
41164 (native-inputs (list python-pytest python-setuptools))
41165 (home-page "https://github.com/cscorley/whatthepatch")
41166 (synopsis "Patch parsing and application library")
41167 (description
41168 "This package provides a patch parsing and application library.")
41169 (license license:expat)))
41170
41171(define-public python-wheel-filename
41172 (package
41173 (name "python-wheel-filename")
41174 (version "1.4.2")
41175 (source
41176 (origin
41177 (method url-fetch)
41178 (uri (pypi-uri "wheel_filename" version))
41179 (sha256
41180 (base32 "1zcqq8mydjjrk8x5xlm53bavs51jm40nz42a7500pd6bbm31r2c7"))))
41181 (build-system pyproject-build-system)
41182 (native-inputs (list python-hatchling python-pytest python-pytest-cov))
41183 (home-page "https://github.com/wheelodex/wheel-filename")
41184 (synopsis "Parse wheel filenames")
41185 (description
41186 "This software allows you to verify
41187@url{https://packaging.python.org/en/latest/specifications/binary-distribution-format/, wheel}
41188filenames and parse them into their component fields.
41189
41190This package adheres strictly to the standard, with the following
41191exceptions:
41192
41193@itemize @bullet
41194@item
41195Version components may be any sequence of the relevant set of
41196characters; they are not verified for PEP 440 compliance.
41197@item
41198The @file{.whl} file extension is matched case-insensitively.
41199@end itemize")
41200 (license license:expat)))
41201
41202(define-public python-whenever
41203 (package
41204 (name "python-whenever")
41205 (version "0.9.2")
41206 (source
41207 (origin
41208 (method url-fetch)
41209 (uri (pypi-uri "whenever" version))
41210 (sha256
41211 (base32 "1awcy5s25z2f7yk4n4x3ibjhypxz7ilgz4hi3fiww58pdcgzcnpw"))))
41212 (build-system pyproject-build-system)
41213 (arguments
41214 (list
41215 ;; tests: 2170 passed, 3 skipped, 2 warnings
41216 #:phases
41217 #~(modify-phases %standard-phases
41218 ;; Use the pure python version
41219 (add-before 'build 'setenv
41220 (lambda _
41221 (setenv "WHENEVER_NO_BUILD_RUST_EXT" "1")))
41222 (add-before 'check 'set-check-environment
41223 (lambda* (#:key inputs #:allow-other-keys)
41224 (setenv "TZ" "UTC")
41225 (setenv "TZDIR"
41226 (search-input-directory inputs
41227 "share/zoneinfo")))))))
41228 (propagated-inputs
41229 (list python-time-machine python-tzdata python-tzlocal))
41230 (native-inputs
41231 (list python-pytest
41232 python-setuptools
41233 tzdata-for-tests))
41234 (home-page "https://whenever.readthedocs.io/")
41235 (synopsis "Modern datetime library for Python")
41236 (description "Modern datetime library for Python. Supports:
41237@itemize
41238@item DST-safe arithmetic
41239@item Nanosecond precision
41240@item Date arithmetic
41241@end itemize")
41242 (license license:expat)))
41243
41244;; XXX: See: <https://github.com/cookiecutter/whichcraft/issues/26>.
41245(define-public python-whichcraft
41246 (package
41247 (name "python-whichcraft")
41248 (version "0.6.1")
41249 (source
41250 (origin
41251 (method url-fetch)
41252 (uri (pypi-uri "whichcraft" version))
41253 (sha256
41254 (base32
41255 "11yfkzyplizdgndy34vyd5qlmr1n5mxis3a3svxmx8fnccdvknxc"))))
41256 (build-system pyproject-build-system)
41257 (native-inputs
41258 (list python-pytest python-setuptools))
41259 (home-page "https://github.com/pydanny/whichcraft")
41260 (synopsis "Cross-platform cross-python shutil.which functionality")
41261 (description
41262 "This package provides a shim of the shutil.which function that's
41263designed to work across multiple versions of Python.")
41264 (license license:bsd-3)))
41265
41266(define-public python-whoosh
41267 ;; XXX: 2.7.4 was placed in 2016 and no longer copatible with how setuptools
41268 ;; parses setup.py, use the latest commit, see:
41269 ;; <https://codeberg.org/guix/guix/issues/3318>,
41270 ;; <https://github.com/whoosh-community/whoosh/issues/561>.
41271 (let ((commit "d9a3fa2a4905e7326c9623c89e6395713c189161")
41272 (revision "0"))
41273 (package
41274 (name "python-whoosh")
41275 (version (git-version "2.7.4" revision commit))
41276 (source
41277 (origin
41278 (method git-fetch)
41279 (uri (git-reference
41280 (url "https://github.com/mchaput/whoosh")
41281 (commit commit)))
41282 (file-name (git-file-name name version))
41283 (sha256
41284 (base32 "1i16229nkggl9qi57kxapbc4f2p2wpr67fswvr97w13839d6dxpp"))))
41285 (build-system pyproject-build-system)
41286 (native-inputs
41287 (list python-pytest python-setuptools))
41288 (propagated-inputs
41289 (list python-cached-property))
41290 (home-page "https://github.com/mchaput/whoosh")
41291 (synopsis "Full text indexing, search, and spell checking library")
41292 (description
41293 "Whoosh is a fast, pure-Python full text indexing, search, and spell
41294checking library.")
41295 (license license:bsd-2))))
41296
41297(define-public python-widgetsnbextension
41298 (package
41299 (name "python-widgetsnbextension")
41300 (version "4.0.14")
41301 (source
41302 (origin
41303 (method url-fetch)
41304 (uri (pypi-uri "widgetsnbextension" version))
41305 (sha256
41306 (base32 "1bxm6ys3kmxfhi8dns9q6xrjkxijfa606qpq5lhr7f7dwc29nqm3"))))
41307 (build-system pyproject-build-system)
41308 (arguments
41309 (list #:tests? #f)) ;no tests in PyPI or git
41310 (native-inputs
41311 (list python-jupyter-packaging
41312 python-setuptools))
41313 (home-page "https://ipython.org")
41314 (synopsis "IPython HTML widgets for Jupyter")
41315 (description "This package provides interactive HTML widgets for Jupyter
41316notebooks.")
41317 (license license:bsd-3)))
41318
41319(define-public python-wrapt
41320 (package
41321 (name "python-wrapt")
41322 (version "1.17.0")
41323 (source
41324 (origin
41325 (method url-fetch)
41326 (uri (pypi-uri "wrapt" version))
41327 (sha256
41328 (base32
41329 "00886b7ry1vdbvpc2wi880y563xf6y4mxwwfm1q12wvw66i7l60n"))))
41330 (build-system pyproject-build-system)
41331 (native-inputs (list python-pytest python-setuptools python-wheel))
41332 (home-page "https://github.com/GrahamDumpleton/wrapt")
41333 (synopsis "Module for decorators, wrappers and monkey patching")
41334 (description
41335 "The aim of the wrapt module is to provide a transparent object proxy for
41336 Python, which can be used as the basis for the construction of function
41337 wrappers and decorator functions.")
41338 (license license:bsd-2)))
41339
41340(define-public python-wurlitzer
41341 (package
41342 (name "python-wurlitzer")
41343 (version "3.1.1")
41344 (source
41345 (origin
41346 (method url-fetch)
41347 (uri (pypi-uri "wurlitzer" version))
41348 (sha256
41349 (base32 "1ncvsc6b0bscvj5dn4iyyw42sf7ssgdqkzxr0bc8f97hp5519fdz"))))
41350 (build-system pyproject-build-system)
41351 (arguments
41352 (list #:test-flags #~(list "test.py")))
41353 (native-inputs
41354 (list python-pytest
41355 python-setuptools))
41356 (home-page "https://github.com/minrk/wurlitzer")
41357 (synopsis "Capture C-level output in context managers")
41358 (description
41359 "This library helps to redirect @code{sys.stdout} to a stream or a file
41360while executing some piece of code, including C code running within a Python
41361process.")
41362 (license license:expat)))
41363
41364(define-public python-xattr
41365 (package
41366 (name "python-xattr")
41367 (version "1.2.0")
41368 (source
41369 (origin
41370 (method url-fetch)
41371 (uri (pypi-uri "xattr" version))
41372 (sha256
41373 (base32 "19z0wp1plr5g8a3jknipii3qmqp3znwd63zqrhx19gpixwhqwk56"))))
41374 (build-system pyproject-build-system)
41375 (native-inputs
41376 (list python-pytest
41377 python-setuptools))
41378 (propagated-inputs
41379 (list python-cffi))
41380 (home-page "https://github.com/xattr/xattr")
41381 (synopsis "Python wrapper for extended file system attributes")
41382 (description "This package provides a Python wrapper for using extended
41383file system attributes. Extended attributes extend the basic attributes of files
41384and directories in the file system. They are stored as name:data pairs
41385associated with file system objects (files, directories, symlinks, etc).")
41386 (license license:expat)))
41387
41388(define-public python-xdg
41389 (package
41390 (name "python-xdg")
41391 (version "6.0.0")
41392 (source (origin
41393 (method url-fetch)
41394 (uri (pypi-uri "xdg" version))
41395 (sha256
41396 (base32
41397 "14hwk9j5zjc8rvirw95mrb07zdnpjaxjx2mj3rnq8pnlyaa809r4"))))
41398 (build-system pyproject-build-system)
41399 (arguments (list #:tests? #f)) ; No tests in PyPi tarball.
41400 (native-inputs
41401 (list python-poetry-core))
41402 (home-page "https://github.com/srstevenson/xdg-base-dirs")
41403 (synopsis "Variables defined by the XDG Base Directory Specification")
41404 (description "xdg-base-dirs is a Python module that provides functions to
41405return paths to the directories defined by the XDG Base Directory
41406Specification, to save you from duplicating the same snippet of logic in every
41407Python utility you write that deals with user cache, configuration, or data
41408files.")
41409 (license license:isc)))
41410
41411(define-public python-xlib
41412 (package
41413 (name "python-xlib")
41414 (version "0.33")
41415 (source
41416 (origin
41417 (method git-fetch)
41418 (uri (git-reference
41419 (url "https://github.com/python-xlib/python-xlib")
41420 (commit version)))
41421 (file-name (git-file-name name version))
41422 (sha256
41423 (base32 "03d28lx6sz0724ps6lnn4m6s0cfspgwqdf2l773lqf88add8wkmv"))))
41424 (build-system pyproject-build-system)
41425 (arguments
41426 `(#:phases
41427 (modify-phases %standard-phases
41428 (add-before 'check 'start-xserver
41429 (lambda* (#:key inputs #:allow-other-keys)
41430 (let ((xorg-server (assoc-ref inputs "xorg-server")))
41431 ;; There must be a running X server and make check doesn't
41432 ;; start one. Therefore we must do it.
41433 (system (format #f "~a/bin/Xvfb :1 &" xorg-server))
41434 (setenv "DISPLAY" ":1")))))))
41435 (native-inputs
41436 (list python-mock
41437 python-pytest
41438 python-setuptools
41439 xorg-server))
41440 (propagated-inputs
41441 (list python-six))
41442 (home-page "https://github.com/python-xlib/python-xlib")
41443 (synopsis "Python X11 client library")
41444 (description
41445 "The Python X Library is intended to be a fully functional
41446X client library for Python programs. It is useful to implement
41447low-level X clients. It is written entirely in Python.")
41448 (license license:gpl2+)))
41449
41450(define-public python-xlrd
41451 (package
41452 (name "python-xlrd")
41453 (version "2.0.2")
41454 (source
41455 (origin
41456 (method git-fetch) ;no tests in PyPI archive
41457 (uri (git-reference
41458 (url "https://github.com/python-excel/xlrd")
41459 (commit version)))
41460 (file-name (git-file-name name version))
41461 (sha256
41462 (base32 "1zgb03a4l2an2hy17w0nlyfisl53jzf8csdj90f5xkibbnjsg3y3"))))
41463 (build-system pyproject-build-system)
41464 (native-inputs
41465 (list python-pytest
41466 python-setuptools))
41467 (home-page "https://www.python-excel.org/")
41468 (synopsis "Library for extracting data from Excel files")
41469 (description "This package provides a library to extract data from
41470spreadsheets using Microsoft Excel proprietary file formats @samp{.xls} and
41471@samp{.xlsx} (versions 2.0 onwards). It has support for Excel dates and is
41472Unicode-aware. It is not intended as an end-user tool.")
41473 (license license:bsd-3)))
41474
41475(define-public python-xlsxwriter
41476 (package
41477 (name "python-xlsxwriter")
41478 (version "3.2.0")
41479 (source
41480 (origin
41481 ;; There are no tests in the PyPI tarball.
41482 (method git-fetch)
41483 (uri (git-reference
41484 (url "https://github.com/jmcnamara/XlsxWriter")
41485 (commit (string-append "RELEASE_" version))))
41486 (file-name (git-file-name name version))
41487 (sha256
41488 (base32 "1g16xb4nsjd807qcm8756ixlxxvdjmbr2v7r6wxkajw1h4m8id0w"))))
41489 (build-system pyproject-build-system)
41490 (native-inputs
41491 (list python-setuptools
41492 python-wheel))
41493 (home-page "https://github.com/jmcnamara/XlsxWriter")
41494 (synopsis "Python module for creating Excel XLSX files")
41495 (description
41496 "XlsxWriter is a Python module that can be used to write text, numbers,
41497formulas and hyperlinks to multiple worksheets in an Excel 2007+ XLSX file.")
41498 (license license:bsd-2)))
41499
41500;;; Note: this package is unmaintained since 2018 (archived on GitHub).
41501(define-public python-xlwt
41502 (package
41503 (name "python-xlwt")
41504 (version "1.3.0")
41505 (source
41506 (origin
41507 (method url-fetch)
41508 (uri (pypi-uri "xlwt" version))
41509 (sha256
41510 (base32 "123c2pdamshkq75wwvck8fq0cjq1843xd3x9qaiz2a4vg9qi56f5"))))
41511 (build-system pyproject-build-system)
41512 (native-inputs (list python-pytest python-setuptools python-wheel))
41513 (home-page "https://www.python-excel.org/")
41514 (synopsis "Library for creating spreadsheet Excel files")
41515 (description
41516 "@code{xlwt} is a library for writing data and formatting information to
41517older Excel files (i.e. .xls). The package itself is pure Python with no
41518dependencies on modules or packages outside the standard Python distribution.
41519It is not intended as an end-user tool.")
41520 (license license:bsd-3)))
41521
41522(define-public python-xmldiff
41523 (package
41524 (name "python-xmldiff")
41525 (version "3.0b1")
41526 (source
41527 (origin
41528 (method git-fetch)
41529 (uri (git-reference
41530 (url "https://github.com/Shoobx/xmldiff")
41531 (commit version)))
41532 (file-name (git-file-name name version))
41533 (sha256
41534 (base32 "0p4ry9dl719gmgkxksdv4ghyyzib1irg6g27bbkla2wmprrj1ai9"))))
41535 (build-system pyproject-build-system)
41536 (native-inputs (list python-pytest python-setuptools))
41537 (propagated-inputs (list python-lxml))
41538 (home-page "https://github.com/Shoobx/xmldiff")
41539 (synopsis "Creates diffs of XML files")
41540 (description "This Python tool figures out the differences between two
41541similar XML files, in the same way the @command{diff} utility does it.")
41542 (license license:expat)))
41543
41544(define-public python-xmlsec
41545 (package
41546 (name "python-xmlsec")
41547 (version "1.3.16")
41548 (source
41549 (origin
41550 (method url-fetch)
41551 (uri (pypi-uri "xmlsec" version))
41552 (sha256
41553 (base32 "178zg6jl3v7j4cdxxzqzr16m3wqfisai98xa0sh4q7bd9ia70v1b"))))
41554 (build-system pyproject-build-system)
41555 (arguments
41556 (list
41557 ;; See https://github.com/xmlsec/python-xmlsec/issues/210
41558 #:test-flags '(list "-n" "1"
41559 ;; This causes other tests to segfault.
41560 "-k" "not test_reinitialize_module")
41561 #:phases
41562 #~(modify-phases %standard-phases
41563 ;; FIXME: This is very unfortunate. I can't seem to find a way to
41564 ;; hardcode the location of this library, so users will also need to
41565 ;; set LD_LIBRARY_PATH.
41566 (add-before 'check 'pre-check
41567 (lambda* (#:key inputs #:allow-other-keys)
41568 (setenv "LD_LIBRARY_PATH"
41569 (dirname (search-input-file inputs "lib/libxmlsec1-openssl.so.1.3.7"))))))))
41570 (inputs (list openssl libltdl libxslt libxml2))
41571 (propagated-inputs (list python-lxml xmlsec-openssl))
41572 (native-inputs (list pkg-config
41573 python-lxml
41574 python-pkgconfig
41575 python-pytest
41576 python-pytest-xdist
41577 python-setuptools
41578 python-setuptools-scm
41579 python-wheel))
41580 (home-page "https://github.com/xmlsec/python-xmlsec")
41581 (synopsis "Python bindings for the XML Security Library")
41582 (description "This package provides Python bindings for the XML Security
41583Library.")
41584 (license license:expat)))
41585
41586(define-public python-xmp-toolkit
41587 (package
41588 (name "python-xmp-toolkit")
41589 (version "2.1.0")
41590 (source
41591 (origin
41592 (method url-fetch)
41593 (uri (pypi-uri "python_xmp_toolkit" version))
41594 (sha256
41595 (base32 "1np2njq6c1fnxh6bbh3xp2slz5dm7aamknv7hxax53a11p3a42na"))))
41596 (build-system pyproject-build-system)
41597 (arguments
41598 (list
41599 #:phases
41600 #~(modify-phases %standard-phases
41601 (add-after 'unpack 'patch-source
41602 (lambda* (#:key inputs #:allow-other-keys)
41603 (substitute* "libxmp/exempi.py"
41604 (("ctypes.util.find_library\\('exempi'\\)")
41605 (format #f "~s" (search-input-file
41606 inputs "lib/libexempi.so")))))))))
41607 (native-inputs
41608 (list python-pytest
41609 python-flit-core))
41610 (inputs
41611 (list exempi))
41612 (propagated-inputs
41613 (list python-pytz))
41614 (home-page "https://github.com/python-xmp-toolkit/python-xmp-toolkit")
41615 (synopsis "Python XMP Toolkit for working with metadata")
41616 (description "Python XMP Toolkit is a library for working with XMP
41617metadata, as well as reading/writing XMP metadata stored in many different
41618file formats.
41619
41620Python XMP Toolkit is wrapping Exempi (using ctypes), a C/C++ XMP library
41621based on Adobe XMP Toolkit, ensuring that future updates to the XMP standard
41622are easily incorporated into the library with a minimum amount of work.")
41623 (license license:bsd-3)))
41624
41625(define-public python-yamllint
41626 (package
41627 (name "python-yamllint")
41628 (version "1.37.1")
41629 (source
41630 (origin
41631 (method url-fetch)
41632 (uri (pypi-uri "yamllint" version))
41633 (sha256
41634 (base32 "0p9401y9f1pgxi9lggmw6wv135kfnd361n3hjh2civ4vap2w1xw1"))))
41635 (build-system pyproject-build-system)
41636 (arguments
41637 (list #:test-backend #~'unittest))
41638 (native-inputs
41639 (list python-setuptools))
41640 (propagated-inputs
41641 (list python-pathspec python-pyyaml))
41642 (home-page "https://github.com/adrienverge/yamllint")
41643 (synopsis "Linter for YAML files")
41644 (description
41645 "Yamllint is a linter for YAML files. yamllint does not only check for
41646syntax validity, but for weirdnesses like key repetition and cosmetic problems
41647such as lines length, trailing spaces, indentation, etc.")
41648 (license license:gpl3+)))
41649
41650(define-public python-yamlloader
41651 (package
41652 (name "python-yamlloader")
41653 (version "1.5.2")
41654 (source
41655 (origin
41656 (method url-fetch)
41657 (uri (pypi-uri "yamlloader" version))
41658 (sha256
41659 (base32 "06y4xaajsjjynrv2m6ar3hwiif2mk3z3lgwxn2l1qsv238rc22n1"))))
41660 (build-system pyproject-build-system)
41661 (arguments
41662 (list #:test-backend #~'unittest
41663 #:test-flags #~(list "discover" "-v")))
41664 (native-inputs
41665 (list python-hatch-vcs
41666 python-hatchling
41667 python-hypothesis))
41668 (propagated-inputs
41669 (list python-pyyaml))
41670 (home-page "https://github.com/Phynix/yamlloader")
41671 (synopsis "Ordered YAML loader and dumper for PyYAML")
41672 (description
41673 "This package provides loaders and dumpers for PyYAML. Currently, an
41674OrderedDict loader/dumper is implemented, allowing to keep items order when
41675loading resp. dumping a file from/to an OrderedDict (Python 3.8+: Also regular
41676dicts are supported and are the default items to be loaded to. As of Python
416773.7 preservation of insertion order is a language feature of regular dicts.)
41678It was originally mirrored from
41679@url{https://github.com/fmenabe/python-yamlordereddictloader,
41680yamlordereddict}.")
41681 (license license:expat)))
41682
41683;; XXX: Deprecated, the <https://github.com/Phynix/yamlloader> project provide
41684;; an improved version of this library with unit tests, performance
41685;; improvements (by providing access to the C implementation of PyYAML) and is
41686;; more actively developed.
41687(define-public python-yamlordereddictloader
41688 (package
41689 (name "python-yamlordereddictloader")
41690 (version "0.4.2")
41691 (source
41692 (origin
41693 (method git-fetch)
41694 (uri (git-reference
41695 (url "https://github.com/fmenabe/python-yamlordereddictloader")
41696 (commit version)))
41697 (file-name (git-file-name name version))
41698 (sha256
41699 (base32 "1rwvasdmfq7lbd2bm7vmx759fv535cp5ndyhf845fqd86mr7a94c"))))
41700 (build-system pyproject-build-system)
41701 (arguments
41702 (list #:tests? #f)) ;no tests
41703 (native-inputs
41704 (list python-setuptools))
41705 (propagated-inputs
41706 (list python-pyyaml))
41707 (home-page "https://github.com/fmenabe/python-yamlordereddictloader")
41708 (synopsis "Loader and a dumper for PyYAML")
41709 (description
41710 "yamlordereddictloader is a Python package that provides a loader and a
41711dumper for PyYAML allowing to keep items order when loading a file (by putting
41712them in OrderedDict objects) and to manage OrderedDict objects when dumping to
41713a file.")
41714 (license license:expat)))
41715
41716(define-public python-yapf
41717 (package
41718 (name "python-yapf")
41719 (version "0.43.0")
41720 (source
41721 (origin
41722 (method url-fetch)
41723 (uri (pypi-uri "yapf" version))
41724 (sha256
41725 (base32
41726 "13i1sn0jfm7snfdzbyrawxl457bdmgsxkmg0n8h99zzdpwjamlq0"))))
41727 (build-system pyproject-build-system)
41728 (propagated-inputs
41729 (list python-platformdirs python-tomli))
41730 (native-inputs
41731 (list python-pytest python-setuptools python-wheel))
41732 (home-page "https://github.com/google/yapf")
41733 (synopsis "Formatter for Python code")
41734 (description "YAPF is a formatter for Python code. It's based off of
41735@dfn{clang-format}, developed by Daniel Jasper. In essence, the algorithm
41736takes the code and reformats it to the best formatting that conforms to the
41737style guide, even if the original code didn't violate the style guide.")
41738 (license license:asl2.0)))
41739
41740(define-public python-yapsy
41741 (package
41742 (name "python-yapsy")
41743 (version "1.12.2")
41744 (source
41745 (origin
41746 (method url-fetch)
41747 (uri (pypi-uri "Yapsy" version))
41748 (sha256
41749 (base32 "12rznbnswfw0w7qfbvmmffr9r317gl1rqg36nijwzsklkjgks4fq"))))
41750 (build-system pyproject-build-system)
41751 (arguments
41752 (list #:test-backend #~'unittest))
41753 (native-inputs
41754 (list python-setuptools))
41755 (home-page "https://yapsy.sourceforge.net")
41756 (synopsis "Simple plugin system for Python applications")
41757 (description "Yapsy, or Yet Another Plugin SYstem, is a small library
41758implementing the core mechanisms needed to build a plugin system into a wider
41759application.
41760
41761The main purpose is to depend only on Python's standard libraries and to
41762implement only the basic functionalities needed to detect, load and keep track
41763of several plugins.")
41764 (license license:bsd-3)))
41765
41766(define-public python-yaspin
41767 (package
41768 (name "python-yaspin")
41769 (version "3.2.0")
41770 (source
41771 (origin
41772 (method url-fetch)
41773 (uri
41774 (pypi-uri "yaspin" version))
41775 (sha256
41776 (base32 "1ryc5099sjsa49fhcm6dp5l4rp9v9yxrh17ml78y89idfbbfhvs1"))))
41777 (build-system pyproject-build-system)
41778 ;; tests: 3007 passed, 1758 skipped
41779 (native-inputs
41780 (list python-poetry-core
41781 python-pytest
41782 python-pytest-mock))
41783 (propagated-inputs
41784 (list python-termcolor-next))
41785 (home-page "https://github.com/pavdmyt/yaspin")
41786 (synopsis "Yet Another Terminal Spinner")
41787 (description "Yaspin provides a terminal spinner to indicate the progress
41788during long operations.")
41789 (license license:expat)))
41790
41791(define-public python-yattag
41792 (package
41793 (name "python-yattag")
41794 (version "1.16.1")
41795 (source
41796 (origin
41797 (method url-fetch)
41798 (uri (pypi-uri "yattag" version))
41799 (sha256
41800 (base32 "1x2is0lkpywvqaayc21n1cvfbq0havzx46i83033wpgawxag5a5s"))))
41801 (build-system pyproject-build-system)
41802 (native-inputs
41803 (list python-pytest
41804 python-setuptools
41805 python-wheel))
41806 (home-page "https://www.yattag.org/")
41807 (synopsis "HTML or XML generator for Python")
41808 (description
41809 "Yattag is a Python library for generating HTML or XML in a pythonic
41810way.")
41811 (license license:lgpl2.1)))
41812
41813(define-public python-yq
41814 (package
41815 (name "python-yq")
41816 (version "3.4.3")
41817 (source
41818 (origin
41819 (method url-fetch)
41820 (uri (pypi-uri "yq" version))
41821 (sha256
41822 (base32 "0fvf4n7wpbc0gdxhw8c008rcv092vw96f84j5xdp1krhdwd6ln5s"))))
41823 (build-system pyproject-build-system)
41824 (arguments
41825 (list
41826 #:test-backend #~'custom
41827 #:test-flags #~(list "test/test.py" "-v")
41828 #:phases
41829 #~(modify-phases %standard-phases
41830 (add-after 'unpack 'patch
41831 (lambda _
41832 (substitute* "yq/__init__.py"
41833 (("Popen\\(\\[\"jq")
41834 (string-append
41835 "Popen([\""
41836 #$(this-package-input "jq") "/bin/jq"))))))))
41837 (native-inputs
41838 (list python-hatchling
41839 python-hatch-vcs))
41840 (inputs
41841 (list jq))
41842 (propagated-inputs
41843 (list python-argcomplete
41844 python-pyyaml
41845 python-tomlkit
41846 python-xmltodict))
41847 (home-page "https://github.com/kislyuk/yq")
41848 (synopsis "Command-line YAML/XML processor")
41849 (description
41850 "This package provides @command{yq} and @command{xq} for processing YAML
41851and XML respectively. The processing is done through @command{jq},
41852@command{jq} filters can be used to process the data as it passes through.")
41853 (license license:asl2.0)))
41854
41855(define-public python-yte
41856 (package
41857 (name "python-yte")
41858 (version "1.8.1") ;TODO higher versions depend on uv_build
41859 (source
41860 (origin
41861 (method git-fetch)
41862 (uri (git-reference
41863 (url "https://github.com/koesterlab/yte")
41864 (commit (string-append "v" version))))
41865 (sha256
41866 (base32 "05qrmjf9x6wvy8976kqiy3axk3im8jbc8hpc1yrbidm099vik0ni"))))
41867 (build-system pyproject-build-system)
41868 (arguments
41869 (list
41870 #:test-flags #~(list "tests.py")
41871 #:phases
41872 '(modify-phases %standard-phases
41873 (add-after 'unpack 'set-HOME
41874 (lambda _ (setenv "HOME" "/tmp"))))))
41875 (propagated-inputs (list python-dpath python-plac python-pyyaml))
41876 (native-inputs (list python-numpy python-poetry-core python-pytest))
41877 (home-page "https://github.com/koesterlab/yte")
41878 (synopsis "YAML template engine with Python expressions")
41879 (description
41880 "This package provides a YAML template engine with Python expressions.")
41881 (license license:expat)))
41882
41883(define-public python-zarr
41884 (package
41885 (name "python-zarr")
41886 (version "2.18.7")
41887 (source
41888 (origin
41889 (method url-fetch)
41890 (uri (pypi-uri "zarr" version))
41891 (sha256
41892 (base32
41893 "1xbjjpjskykbdskck5p1f0grh6wq36437ll0n5kazi6s2ipzdf5j"))))
41894 (build-system pyproject-build-system)
41895 (arguments
41896 (list
41897 #:test-flags
41898 #~(list "--numprocesses" (number->string (parallel-job-count))
41899 ;; This tests are flaky. The pass several times on my laptop
41900 ;; but occasionally fail. They fail pretty reliably on the
41901 ;; build farm.
41902 "-k" (string-append "not test_lazy_loader and not open_array"
41903 ;; File not found.
41904 " and not test_filesystem_path"))
41905 #:phases
41906 #~(modify-phases %standard-phases
41907 (add-before 'build 'set-version
41908 (lambda _
41909 (substitute* "pyproject.toml"
41910 (("^version_file.*") "")
41911 (("dynamic = \\[\"version\"\\]")
41912 (string-append "version = \"" #$version "\"")))))
41913 (add-after 'unpack 'disable-service-tests
41914 (lambda _
41915 (setenv "ZARR_TEST_ABS" "0")
41916 (setenv "ZARR_TEST_MONGO" "0")
41917 (setenv "ZARR_TEST_REDIS" "0"))))))
41918 (propagated-inputs
41919 (list python-asciitree
41920 python-fasteners
41921 python-numcodecs
41922 python-numpy))
41923 (native-inputs
41924 (list python-pytest
41925 python-pytest-xdist
41926 python-setuptools
41927 python-wheel))
41928 (home-page "https://github.com/zarr-developers/zarr-python")
41929 (synopsis "Chunked, compressed, N-dimensional arrays for Python")
41930 (description
41931 "This package provides an implementation of chunked, compressed,
41932N-dimensional arrays for Python.")
41933 (license license:expat)))
41934
41935(define-public python-zeroc-ice
41936 (package
41937 (name "python-zeroc-ice")
41938 (version "3.7.10.1")
41939 (source (origin
41940 (method url-fetch)
41941 (uri (pypi-uri "zeroc-ice" version))
41942 (sha256
41943 (base32
41944 "0r46q4hd7xbpvnidbra1prkg4xhmajxjjmclfqgp3pv0lgyslqxh"))))
41945 (build-system pyproject-build-system)
41946 (arguments
41947 ;; XXX: No tests in PyPI, tere are tests in Git, but there is no 3.7.10.1
41948 ;; tag.
41949 ;;
41950 ;; See:
41951 ;; - URL: <https://raw.githubusercontent.com/zeroc-ice>
41952 ;; - File: <ice/refs/heads/main/python/allTests.py>
41953 (list #:tests? #f))
41954 (inputs (list openssl))
41955 (native-inputs (list python-setuptools))
41956 (home-page "https://zeroc.com")
41957 (synopsis "RPC framework")
41958 (description
41959 "Ice is a comprehensive RPC framework. Ice helps you network your
41960software by taking care of all interactions with low-level network programming
41961interfaces.")
41962 (license license:gpl2)))
41963
41964;; Package variant to build [email protected]
41965(define-public python-zeroc-ice-3.6
41966 (package
41967 (inherit python-zeroc-ice)
41968 (version "3.6.5")
41969 (source (origin
41970 (method url-fetch)
41971 (uri (pypi-uri "zeroc-ice" version))
41972 (sha256
41973 (base32
41974 "0mikjfvq26kh8asnn9v55z41pap4c5ypymqnwwi4xkavc3mzyda2"))
41975 (patches
41976 (search-patches
41977 "python-zeroc-ice-3.6.5-python-3.11-support.patch"))))
41978 (arguments
41979 (substitute-keyword-arguments (package-arguments python-zeroc-ice)
41980 ((#:phases phases #~%standard-phases)
41981 #~(modify-phases #$phases
41982 (add-before 'build 'relax-gcc-14-strictness
41983 (lambda _
41984 (setenv "CFLAGS"
41985 "-g -O2 -Wno-error=implicit-function-declaration")))))))))
41986
41987(define-public python-zeroconf
41988 (package
41989 (name "python-zeroconf")
41990 (version "0.38.1")
41991 (source
41992 (origin
41993 (method git-fetch)
41994 (uri (git-reference
41995 (url "https://github.com/jstasiak/python-zeroconf")
41996 (commit version)))
41997 (file-name (git-file-name name version))
41998 (sha256
41999 (base32 "1p1a0ywlg5sq0ilcphmz9h4kayscz0q1lyfk57j7mwxyx4gl9cpi"))))
42000 (build-system pyproject-build-system)
42001 (arguments
42002 (list
42003 #:test-flags
42004 #~(list
42005 "-k" (string-append
42006 ;; XXX: Despite asyncio, this test fails.
42007 "not test_run_coro_with_timeout and not "
42008 ;; XXX: Networking isn't available.
42009 (string-join
42010 (list "test_integration_with_listener_ipv6"
42011 "test_launch_and_close_v4_v6"
42012 "test_launch_and_close_context_manager"
42013 "test_launch_and_close"
42014 "test_close_multiple_times")
42015 " and not ")))))
42016 (native-inputs
42017 (list python-pytest python-pytest-asyncio python-setuptools))
42018 (propagated-inputs
42019 (list python-ifaddr))
42020 (home-page "https://github.com/jstasiak/python-zeroconf")
42021 (synopsis "Pure Python mDNS service discovery")
42022 (description "Pure Python multicast DNS (mDNS) service discovery library
42023(Bonjour/Avahi compatible).")
42024 (license license:lgpl2.1+)))
42025
42026(define-public python-zict
42027 (package
42028 (name "python-zict")
42029 (version "3.0.0")
42030 (source
42031 (origin
42032 (method url-fetch)
42033 (uri (pypi-uri "zict" version))
42034 (sha256
42035 (base32
42036 "19gvr41xi5fazkzkg33kwrk70sv50hygng0cg70ayym9nriy48g3"))))
42037 (build-system pyproject-build-system)
42038 (arguments
42039 (list
42040 #:test-flags
42041 ;; This uses "importorskip", but it won't skip.
42042 '(list "--ignore=tests/test_lmdb.py")))
42043 (propagated-inputs
42044 (list python-heapdict))
42045 (native-inputs
42046 (list python-pytest
42047 python-pytest-asyncio
42048 python-pytest-repeat
42049 python-pytest-timeout
42050 python-setuptools
42051 python-wheel))
42052 (home-page "https://zict.readthedocs.io/en/latest/")
42053 (synopsis "Composable mutable mapping tools")
42054 (description "This package provides abstract @code{MutableMapping} classes
42055that consume and build on other @code{MutableMappings}. Several of these can
42056be composed with one another to form intuitive interfaces over complex storage
42057systems policies.")
42058 (license license:bsd-3)))
42059
42060(define-public python-zipfly
42061 (package
42062 (name "python-zipfly")
42063 (version "6.0.5")
42064 (source
42065 (origin
42066 (method url-fetch)
42067 (uri (pypi-uri "zipfly" version))
42068 (sha256
42069 (base32
42070 "1h7g922a8lsqd69j8blgcgg0lcd8kz51b2p4glfqmgx4vi1nkick"))))
42071 (build-system pyproject-build-system)
42072 (arguments
42073 (list #:test-backend #~'unittest))
42074 (native-inputs (list python-setuptools))
42075 (home-page "https://github.com/sandes/zipfly")
42076 (synopsis "Zip archive generator")
42077 (description "ZipFly is a zip archive generator. It was created to
42078generate very large zip archives for immediate sending out to clients, or
42079for writing large zip archives without memory inflation.")
42080 (license license:expat)))
42081
42082(define-public python-zipstream-new
42083 (package
42084 (name "python-zipstream-new")
42085 (version "1.1.8")
42086 (source
42087 (origin
42088 (method git-fetch) ; no tests in PyPI release
42089 (uri (git-reference
42090 (url "https://github.com/arjan-s/python-zipstream")
42091 (commit (string-append "v" version))))
42092 (file-name (git-file-name name version))
42093 (sha256
42094 (base32 "14vhgg8mcjqi8cpzrw8qzbij2fr2a63l2a8fhil21k2r8vzv92cv"))))
42095 (build-system pyproject-build-system)
42096 (arguments
42097 (list #:test-backend #~'unittest))
42098 (native-inputs (list python-setuptools))
42099 (home-page "https://github.com/arjan-s/python-zipstream")
42100 (synopsis "Zipfile generator that takes input files as well as streams")
42101 (description "@code{zipstream.py} is a zip archive generator based on
42102@code{zipfile.py}. It was created to generate a zip file generator for
42103streaming. This is beneficial for when you want to provide a downloadable
42104archive of a large collection of regular files, which would be infeasible
42105to generate the archive prior to downloading or of a very large file that
42106you do not want to store entirely on disk or on memory.")
42107 ;; No copyright headers in the source. The LICENSE file indicates GPL3.
42108 (license license:gpl3)))
42109
42110(define-public python2-dbus
42111 (package/inherit python-dbus
42112 (name "python2-dbus")
42113 (inputs `(("python" ,python-2)
42114 ("libxcrypt" ,libxcrypt) ;required by Python.h
42115 ,@(alist-delete "python"
42116 (package-inputs python-dbus))))
42117 (arguments
42118 `(#:configure-flags '("PYTHON_VERSION=2")))))
42119
42120(define-public shrinkwrap
42121 (package
42122 (name "shrinkwrap")
42123 (version "0.1.0")
42124 (source
42125 (origin
42126 (method git-fetch)
42127 (uri (git-reference
42128 (url "https://github.com/fzakaria/shrinkwrap")
42129 (commit (string-append "v" version))))
42130 (file-name (git-file-name name version))
42131 (sha256
42132 (base32 "1f3qrygj16y767q2c7pn9j6m95ggcmj9s5cx9v92ygygly4mr3jp"))))
42133 (build-system pyproject-build-system)
42134 (native-inputs
42135 (list python-click
42136 python-poetry-core
42137 python-pypa-build
42138 python-pytest))
42139 (inputs (list python-lief python-sh))
42140 (home-page "https://github.com/fzakaria/shrinkwrap")
42141 (synopsis "Emboss needed dependencies on the top level executable")
42142 (description
42143 "@code{shrinkwrap} is a tool which will discover all transitive dynamic
42144shared objects, and lift them up to the executable referenced by absolute
42145path.")
42146 (license license:expat)))
42147
42148(define-public staticsite
42149 (package
42150 (name "staticsite")
42151 (version "2.5")
42152 (source
42153 (origin
42154 (method git-fetch)
42155 (uri (git-reference
42156 (url "https://github.com/spanezz/staticsite")
42157 (commit (string-append "v" version))))
42158 (file-name (git-file-name name version))
42159 (sha256
42160 (base32 "0fk0yy0flwwfqwb4gsizr7gnkadas4rjffn3mnzlwmkn08z3w0c7"))))
42161 (build-system pyproject-build-system)
42162 (arguments
42163 (list
42164 #:phases
42165 #~(modify-phases %standard-phases
42166 (add-after 'unpack 'use-themes-in-output
42167 (lambda _
42168 (substitute* "staticsite/global_settings.py"
42169 (("/usr/share/staticsite") #$output))))
42170 (add-after 'install 'install-themes
42171 (lambda _
42172 (let ((themedir (string-append #$output "/themes")))
42173 (copy-recursively "themes" themedir)))))))
42174 (native-inputs
42175 (list python-hatchling
42176 python-pytest))
42177 (inputs
42178 (list perl-image-exiftool
42179 python-dateutil
42180 python-docutils
42181 python-jinja2
42182 python-markdown
42183 python-pillow
42184 python-pytz
42185 python-pyyaml
42186 python-ruamel.yaml
42187 python-slugify
42188 python-toml
42189 tzdata-for-tests))
42190 (home-page "https://github.com/spanezz/staticsite")
42191 (synopsis "Static site generator")
42192 (description
42193 "Statistic is a static site generator based on Markdown and Jinja2.")
42194 (license (list license:gpl3+ license:expat))))
42195
42196;;;
42197;;; Avoid adding new packages to the end of this file. To reduce the chances
42198;;; of a merge conflict, place them above by existing packages with similar
42199;;; functionality or similar names.
42200;;;