projects/guix·blob perlssl · refs

42540 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, 2026 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, 2026 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, 2026 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-2026 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 © 2023-2026 Spencer King <[email protected]>
158;;; Copyright © 2024 Timothee Mathieu <[email protected]>
159;;; Copyright © 2024 Ian Eure <[email protected]>
160;;; Copyright © 2024 Adriel Dumas--Jondeau <[email protected]>
161;;; Copyright © 2024 Navid Afkhami <[email protected]>
162;;; Copyright © 2024 TakeV <[email protected]>
163;;; Copyright © 2024, 2025 David Elsing <[email protected]>
164;;; Copyright © 2024 Rick Huijzer <[email protected]>
165;;; Copyright © 2024 Peter Kannewitz <[email protected]>
166;;; Copyright © 2024 Aaron Covrig <[email protected]>
167;;; Copyright © 2024 Markku Korkeala <[email protected]>
168;;; Copyright © 2025 Jordan Moore <[email protected]>
169;;; Copyright © 2025 Dariqq <[email protected]>
170;;; Copyright © 2025-2026 Nguyễn Gia Phong <[email protected]>
171;;; Copyright © 2025, 2026 Cayetano Santos <[email protected]>
172;;; Copyright © 2025 Jake Forster <[email protected]>
173;;; Copyright © 2025 Luis Felipe López Acevedo <[email protected]>
174;;; Copyright © 2025 Josep Bigorra <[email protected]>
175;;; Copyright © 2025 Matthias Riße <[email protected]>
176;;; Copyright © 2025 Ghislain Vaillant <[email protected]>
177;;; Copyright © 2025 Allan Adair <[email protected]>
178;;; Copyright © 2025-2026 Hennadii Stepanov <[email protected]>
179;;; Copyright © 2025 Luca Kredel <[email protected]>
180;;; Copyright © 2025 Isidor Zeuner <[email protected]>
181;;; Copyright © 2025 Andy Tai <[email protected]>
182;;; Copyright © 2026 Daniel Khodabakhsh <[email protected]>
183;;; Copyright © 2026 Akiyoshi Suda <[email protected]>
184;;; Copyright © 2026 Sughosha <[email protected]>
185;;; Copyright © 2026 orahcio <[email protected]>
186;;; Copyright © 2026 John Dawson <[email protected]>
187;;;
188;;; This file is part of GNU Guix.
189;;;
190;;; GNU Guix is free software; you can redistribute it and/or modify it
191;;; under the terms of the GNU General Public License as published by
192;;; the Free Software Foundation; either version 3 of the License, or (at
193;;; your option) any later version.
194;;;
195;;; GNU Guix is distributed in the hope that it will be useful, but
196;;; WITHOUT ANY WARRANTY; without even the implied warranty of
197;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
198;;; GNU General Public License for more details.
199;;;
200;;; You should have received a copy of the GNU General Public License
201;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
202
203(define-module (gnu packages python-xyz)
204 #:use-module (gnu packages algebra)
205 #:use-module (gnu packages attr)
206 #:use-module (gnu packages autotools)
207 #:use-module (gnu packages backup)
208 #:use-module (gnu packages base)
209 #:use-module (gnu packages bash)
210 #:use-module (gnu packages bdw-gc)
211 #:use-module (gnu packages bioinformatics)
212 #:use-module (gnu packages boost)
213 #:use-module (gnu packages build-tools)
214 #:use-module (gnu packages c)
215 #:use-module (gnu packages check)
216 #:use-module (gnu packages cmake)
217 #:use-module (gnu packages compression)
218 #:use-module (gnu packages cpp)
219 #:use-module (gnu packages crypto)
220 #:use-module (gnu packages databases)
221 #:use-module (gnu packages dbm)
222 #:use-module (gnu packages dictionaries)
223 #:use-module (gnu packages digest)
224 #:use-module (gnu packages django)
225 #:use-module (gnu packages djvu)
226 #:use-module (gnu packages dns)
227 #:use-module (gnu packages documentation)
228 #:use-module (gnu packages duckdb)
229 #:use-module (gnu packages elf)
230 #:use-module (gnu packages emulators)
231 #:use-module (gnu packages enchant)
232 #:use-module (gnu packages file)
233 #:use-module (gnu packages fonts)
234 #:use-module (gnu packages fontutils)
235 #:use-module (gnu packages freedesktop)
236 #:use-module (gnu packages gcc)
237 #:use-module (gnu packages gdb)
238 #:use-module (gnu packages geo)
239 #:use-module (gnu packages ghostscript)
240 #:use-module (gnu packages glib)
241 #:use-module (gnu packages gnome)
242 #:use-module (gnu packages gnupg)
243 #:use-module (gnu packages graphviz)
244 #:use-module (gnu packages gsasl)
245 #:use-module (gnu packages gtk)
246 #:use-module (gnu packages guile-xyz)
247 #:use-module (gnu packages haskell-xyz)
248 #:use-module (gnu packages icu4c)
249 #:use-module (gnu packages image)
250 #:use-module (gnu packages image-processing)
251 #:use-module (gnu packages imagemagick)
252 #:use-module (gnu packages inkscape)
253 #:use-module (gnu packages iso-codes)
254 #:use-module (gnu packages java)
255 #:use-module (gnu packages javascript)
256 #:use-module (gnu packages jupyter)
257 #:use-module (gnu packages kerberos)
258 #:use-module (gnu packages less)
259 #:use-module (gnu packages libevent)
260 #:use-module (gnu packages libffi)
261 #:use-module (gnu packages libusb)
262 #:use-module (gnu packages linux)
263 #:use-module (gnu packages llvm)
264 #:use-module (gnu packages machine-learning)
265 #:use-module (gnu packages man)
266 #:use-module (gnu packages markup)
267 #:use-module (gnu packages maths)
268 #:use-module (gnu packages messaging)
269 #:use-module (gnu packages monitoring)
270 #:use-module (gnu packages multiprecision)
271 #:use-module (gnu packages ncurses)
272 #:use-module (gnu packages networking)
273 #:use-module (gnu packages node)
274 #:use-module (gnu packages nss)
275 #:use-module (gnu packages openstack)
276 #:use-module (gnu packages pcre)
277 #:use-module (gnu packages pdf)
278 #:use-module (gnu packages perl)
279 #:use-module (gnu packages photo)
280 #:use-module (gnu packages pkg-config)
281 #:use-module (gnu packages protobuf)
282 #:use-module (gnu packages python)
283 #:use-module (gnu packages python-build)
284 #:use-module (gnu packages python-check)
285 #:use-module (gnu packages python-compression)
286 #:use-module (gnu packages python-crypto)
287 #:use-module (gnu packages python-science)
288 #:use-module (gnu packages python-web)
289 #:use-module (gnu packages qt)
290 #:use-module (gnu packages rdf)
291 #:use-module (gnu packages readline)
292 #:use-module (gnu packages regex)
293 #:use-module (gnu packages rpc)
294 #:use-module (gnu packages rust)
295 #:use-module (gnu packages rust-apps)
296 #:use-module (gnu packages scanner)
297 #:use-module (gnu packages search)
298 #:use-module (gnu packages serialization)
299 #:use-module (gnu packages shells)
300 #:use-module (gnu packages sphinx)
301 #:use-module (gnu packages ssh)
302 #:use-module (gnu packages statistics)
303 #:use-module (gnu packages task-management)
304 #:use-module (gnu packages tcl)
305 #:use-module (gnu packages tex)
306 #:use-module (gnu packages texinfo)
307 #:use-module (gnu packages time)
308 #:use-module (gnu packages tls)
309 #:use-module (gnu packages tree-sitter)
310 #:use-module (gnu packages version-control)
311 #:use-module (gnu packages video)
312 #:use-module (gnu packages web)
313 #:use-module (gnu packages wxwidgets)
314 #:use-module (gnu packages xdisorg)
315 #:use-module (gnu packages xml)
316 #:use-module (gnu packages xorg)
317 #:use-module (gnu packages)
318 #:use-module (guix build-system cargo)
319 #:use-module (guix build-system cmake)
320 #:use-module (guix build-system copy)
321 #:use-module (guix build-system gnu)
322 #:use-module (guix build-system meson)
323 #:use-module (guix build-system pyproject)
324 #:use-module (guix deprecation)
325 #:use-module (guix download)
326 #:use-module (guix gexp)
327 #:use-module (guix git-download)
328 #:use-module (guix hg-download)
329 #:use-module ((guix licenses) #:prefix license:)
330 #:use-module (guix packages)
331 #:use-module (guix utils)
332 #:use-module (ice-9 match)
333 #:use-module (srfi srfi-1)
334 #:use-module (srfi srfi-26))
335
336(define-public python-accumulation-tree
337 ;; Only minor releases (0.x) are tagged, not patch versions.
338 (let ((commit "3617051f952ce12385c015be8e3d052d1883f17a")
339 (revision "0"))
340 (package
341 (name "python-accumulation-tree")
342 (version (git-version "0.6.4" revision commit))
343 (source
344 (origin
345 (method git-fetch)
346 (uri (git-reference
347 (url "https://github.com/tkluck/accumulation_tree")
348 (commit commit)))
349 (file-name (git-file-name name version))
350 (sha256
351 (base32 "0bgqy07rpiyz60y8nfh8mha38l650x25l4bbbv6fx42czw7kzhbx"))
352 (modules '((guix build utils)))
353 (snippet ;use src layout for isolated tests
354 #~(let* ((src "src/")
355 (old "accumulation_tree/")
356 (new (string-append src old)))
357 (mkdir src)
358 (rename-file old new)
359 (substitute* "setup.py"
360 (("packages=" all)
361 (string-append "package_dir={'': '" src "'}, " all))
362 ((old)
363 new))))))
364 (build-system pyproject-build-system)
365 (arguments
366 (list #:test-backend #~'custom
367 #:test-flags #~'("-m" "doctest" "README.md" "tests.md")))
368 (native-inputs (list python-cloudpickle python-cython python-setuptools))
369 (home-page "https://github.com/tkluck/accumulation_tree")
370 (synopsis "Red-black tree with fast value accumulation in a key range")
371 (description
372 "This Python package implements a red-black tree which also stores
373partial aggregations at each node, making getting aggregations
374of key range slices an O(log(N)) operation.
375
376This data structure is very similar to a binary indexed tree,
377with heap allocation instead of a flat array to represent a tree.")
378 (license license:expat))))
379
380(define-public python-anaconda-cli-base
381 (package
382 (name "python-anaconda-cli-base")
383 (version "0.8.1")
384 (source
385 (origin
386 (method url-fetch)
387 (uri (pypi-uri "anaconda_cli_base" version))
388 (sha256
389 (base32 "0r2cvz99vrvcm399qsfxiak5qb3mbr0kbvdrkbnm20l9lq2g18zr"))))
390 (build-system pyproject-build-system)
391 (native-inputs
392 (list python-hatch-vcs
393 python-hatchling
394 python-pytest
395 python-pytest-mock
396 python-setuptools-scm
397 python-types-requests))
398 (propagated-inputs
399 (list python-click
400 python-packaging
401 python-pydantic-settings
402 python-readchar
403 python-rich
404 python-tomli
405 python-tomlkit
406 python-typer))
407 (home-page "https://anaconda.github.io/anaconda-cli-base/")
408 (synopsis "Base CLI entrypoint Anaconda CLI plugins")
409 (description
410 "This package provides a base CLI entrypoint supporting Anaconda CLI plugins.")
411 (license license:bsd-3)))
412
413(define-public python-annexremote
414 (package
415 (name "python-annexremote")
416 (version "1.6.6")
417 (source
418 (origin
419 (method git-fetch)
420 (uri (git-reference
421 (url "https://github.com/Lykos153/AnnexRemote")
422 (commit (string-append "v" version))))
423 (file-name (git-file-name name version))
424 (sha256
425 (base32 "0fhd712z143mvsidlwhnq951cvkbfcpybbim3fiyn6r3l1r46a25"))))
426 (build-system pyproject-build-system)
427 (native-inputs
428 (list python-pytest
429 python-setuptools
430 python-setuptools-scm))
431 (home-page "https://github.com/Lykos153/AnnexRemote")
432 (synopsis "Helper module to easily develop git-annex special remotes")
433 (description
434 "This package provides a helper module to develop special remotes for
435git-annex. AnnexRemote implements the line-based external special remote
436protocol of git-annex, while leaving the behavior of the remote up to the
437user.")
438 (license license:gpl3)))
439
440(define-public python-annotated-doc
441 (package
442 (name "python-annotated-doc")
443 (version "0.0.4")
444 (source
445 (origin
446 (method git-fetch)
447 (uri (git-reference
448 (url "https://github.com/fastapi/annotated-doc")
449 (commit version)))
450 (file-name (git-file-name name version))
451 (sha256
452 (base32 "13fh58q1a8kvrx1kjgr6qmd09jhikxc7wlyccajpfz657ipjif9v"))))
453 (build-system pyproject-build-system)
454 (native-inputs
455 (list python-pytest
456 python-pdm-backend))
457 (home-page "https://github.com/fastapi/annotated-doc")
458 (synopsis "Annotated for some Python objects")
459 (description
460 "This package implements a functionality for document parameters, class
461attributes, return types, and variables inline, with
462Annotated.")
463 (license license:expat)))
464
465(define-public python-archspec
466 (package
467 (name "python-archspec")
468 (version "0.2.5")
469 (source
470 (origin
471 (method git-fetch)
472 (uri (git-reference
473 (url "https://github.com/archspec/archspec")
474 (commit (string-append "v" version))
475 (recursive? #t)))
476 (file-name (git-file-name name version))
477 (sha256
478 (base32 "0pdqdyzwy75fmcv4ncvar57r3zvfbnqgsya6dgfkzjfd0wvwby05"))))
479 (build-system pyproject-build-system)
480 (native-inputs
481 (list python-jsonschema
482 python-poetry-core
483 python-pytest))
484 (home-page "https://github.com/archspec/archspec")
485 (synopsis "Library to query system architecture")
486 (description
487 "Archspec offers human-readable labels for system architecture aspects.
488These aspects include CPU, network fabrics, etc. In addition, it offers
489APIs to detect, query, and compare them.")
490 (license license:expat)))
491
492(define-public python-astar
493 ;; The Git repository has no tag.
494 (let ((commit "b48388f5fa7dc1e5069ff85b05f0ad72ea8d5e93")
495 (revision "0"))
496 (package
497 (name "python-astar")
498 (version (git-version "0.99" revision commit))
499 (source
500 (origin
501 (method git-fetch)
502 (uri (git-reference
503 (url "https://github.com/jrialland/python-astar")
504 (commit commit)))
505 (file-name (git-file-name name version))
506 (sha256
507 (base32 "1gc4r3xmvw7hgqfadr2cz024ywbzmfak319cdkahd3dzpvyh404q"))))
508 (build-system pyproject-build-system)
509 ;; Despite pytest being listed in tool.poetry.group.dev.dependencies,
510 ;; the test suite has been written for unittest.
511 (native-inputs (list python-poetry-core))
512 (home-page "https://github.com/jrialland/python-astar")
513 (synopsis "Implementation of the A* search algorithm")
514 (description
515 "The @code{astar} Python package provide a generic implementation
516of the A* graph traversal and pathfinding algorithm.")
517 (license license:bsd-3))))
518
519(define-public python-asyncclick
520 (package
521 (name "python-asyncclick")
522 (version "8.3.0.3")
523 (source
524 (origin
525 (method url-fetch)
526 (uri (pypi-uri "asyncclick" version))
527 (sha256
528 (base32 "1i8jb2mir9gflw9pram720diq6fb2yn8pjja1m1q3arzq64zl993"))))
529 (build-system pyproject-build-system)
530 ;; tests: 1418 passed, 21 skipped, 1 xfailed
531 (native-inputs
532 (list less
533 python-flit-core
534 python-pytest
535 python-trio))
536 (propagated-inputs
537 (list python-anyio))
538 (home-page "https://github.com/python-trio/asyncclick")
539 (synopsis "Python composable command line utility, trio-compatible version ")
540 (description
541 "AsyncClick is a fork of Click that works well with anyio, Trio, or
542asyncio.")
543 (license license:bsd-3)))
544
545(define-public python-asyncstdlib
546 (package
547 (name "python-asyncstdlib")
548 (version "3.13.0")
549 (source
550 (origin
551 (method url-fetch)
552 (uri (pypi-uri "asyncstdlib" version))
553 (sha256
554 (base32 "0cxms50gygrvp4n4rk5xxhnl6k7nsrhhixdyk6xk70hi9ysgz9pj"))))
555 (build-system pyproject-build-system)
556 (native-inputs (list python-flit-core python-pytest))
557 (home-page "https://asyncstdlib.readthedocs.io")
558 (synopsis "Compatibility layer between the Python stdlib and @code{async}
559callables")
560 (description
561 "The @code{asyncstdlib} library re-implements functions and classes of
562the Python standard library to make them compatible with @code{async}
563callables, iterables and context managers. It is fully agnostic to
564@code{async} event loops and seamlessly works with @code{asyncio}, third-party
565libraries such as @code{trio}, as well as any custom @code{async} event
566loop.")
567 (license license:expat)))
568
569(define-public python-awesomeversion
570 (package
571 (name "python-awesomeversion")
572 (version "24.6.0")
573 (source
574 (origin
575 (method git-fetch)
576 (uri (git-reference
577 (url "https://github.com/ludeeus/awesomeversion")
578 (commit version)))
579 (file-name (git-file-name name version))
580 (sha256
581 (base32 "1kvzhhd2ah0sadlsp5xs3qbiknixq4xwhk3yb6kmhcdl2zcbi4cn"))
582 (modules '((guix build utils)))
583 (snippet #~(substitute* "pyproject.toml"
584 (("version = \"0\"")
585 (format #f "version = \"~a\"" #$version))))))
586 (build-system pyproject-build-system)
587 (native-inputs
588 (list python-poetry-core
589 python-pytest
590 python-pytest-snapshot))
591 (home-page "https://github.com/ludeeus/awesomeversion")
592 (synopsis "Create and compare version objects")
593 (description
594 "This package provides a way to make anything a version object, and
595compare against a vast section of other version formats.")
596 (license license:expat)))
597
598(define-public python-awkward-cpp
599 (package
600 (name "python-awkward-cpp")
601 ;; TODO: any higher versions need pybind11 >= 3, see:
602 ;; <https://codeberg.org/guix/guix/pulls/4696>.
603 (version "47")
604 (source
605 (origin
606 (method url-fetch)
607 (uri (pypi-uri "awkward_cpp" version))
608 (sha256
609 (base32 "03wm649lzr1vgp99d303p53m1ybaf655mpvy30rapv8hd2bz8v37"))))
610 (build-system pyproject-build-system)
611 ;; tests: 22304 passed, 524 skipped
612 (native-inputs
613 (list cmake-minimal
614 pybind11-2
615 python-pytest
616 python-scikit-build-core))
617 (propagated-inputs
618 (list python-numpy))
619 (home-page "https://awkward-array.org/")
620 (synopsis "CPU kernels and compiled extensions for Awkward Array")
621 (description "Awkward CPP provides precompiled routines for the awkward
622package. It is not useful on its own, only as a dependency for awkward.")
623 (license license:bsd-3)))
624
625(define-public python-awkward
626 (package
627 (name "python-awkward")
628 (version "2.8.5")
629 (source
630 (origin
631 (method url-fetch)
632 (uri (pypi-uri "awkward" version))
633 (sha256
634 (base32 "12bw8hkxnx4pkwamih933c5syrjg1pyql288b7h190mr1d24k42b"))))
635 (build-system pyproject-build-system)
636 (arguments
637 (list
638 ;; tests: 2798 passed, 156 skipped
639 #:test-flags
640 ;; CUDA is and requires proprietary software.
641 #~(list "--ignore=tests-cuda-kernels/"
642 "--ignore=tests-cuda/")))
643 (native-inputs
644 (list python-hatch-fancy-pypi-readme
645 python-hatchling
646 python-pytest))
647 (propagated-inputs
648 (list python-awkward-cpp
649 python-fsspec
650 python-importlib-metadata
651 python-numpy
652 python-packaging))
653 (home-page "https://awkward-array.org/")
654 (synopsis "Manipulate JSON-like data with NumPy-like idioms")
655 (description "Awkward Array is a library for nested, variable-sized data,
656including arbitrary-length lists, records, mixed types, and missing data,
657using NumPy-like idioms.")
658 (license license:bsd-3)))
659
660(define-public python-bresenham
661 (package
662 (name "python-bresenham")
663 (version "0.2.1")
664 (source
665 (origin
666 (method git-fetch)
667 (uri (git-reference
668 (url "https://github.com/encukou/bresenham")
669 (commit (string-append "v" version))))
670 (file-name (git-file-name name version))
671 (sha256
672 (base32 "07h04l50y35rhp13mqis61d1dkd7426q1gdfy5hd6rcgcfv15kxd"))))
673 (build-system pyproject-build-system)
674 (native-inputs
675 (list python-pytest
676 python-setuptools
677 python-wheel))
678 (home-page "https://github.com/encukou/bresenham")
679 (synopsis "Implementation of Bresenham's line drawing algorithm")
680 (description
681 "This package provides a Python implementation of
682@url{https://en.wikipedia.org/wiki/Bresenham's_line_algorithm, Bresenham's
683line drawing algorithm}.")
684 (license license:expat)))
685
686(define-public python-catppuccin
687 (package
688 (name "python-catppuccin")
689 (version "2.5.0")
690 (source
691 (origin
692 (method url-fetch)
693 (uri (pypi-uri "catppuccin" version))
694 (sha256
695 (base32 "0d38gjn6661pb9jl4bg6l698aw4llir44xacrg8nj8xw6nzz6d9h"))))
696 (build-system pyproject-build-system)
697 (native-inputs
698 (list python-hatchling python-pytest
699 ;; These are optional dependencies but required for tests.
700 python-matplotlib python-pygments python-rich))
701 (home-page "https://github.com/catppuccin/python")
702 (synopsis "Pastel palette for Python libraries")
703 (description "Catppuccin for Python is a soothing pastel palette for Python
704libraries. It aims to be the middle ground between low and high contrast
705themes. It also includes themes for IPython, Matplotlib, Pygments and Rich.")
706 (license license:expat)))
707
708(define-public python-calmjs-parse
709 (package
710 (name "python-calmjs-parse")
711 (version "1.3.3")
712 (source
713 (origin
714 (method git-fetch)
715 (uri (git-reference
716 (url "https://github.com/calmjs/calmjs.parse/")
717 (commit version)))
718 (file-name (git-file-name name version))
719 (sha256
720 (base32 "08dmi4chamk5dbdpvrc0nb09iybfhj3wqwxgffiqnkj7030qhqb8"))))
721 (build-system pyproject-build-system)
722 ;; tests: 797 passed, 1 warning
723 (native-inputs (list python-pytest python-setuptools))
724 (propagated-inputs (list python-ply))
725 (home-page "https://github.com/calmjs/calmjs.parse/")
726 (synopsis "Parsers for ECMA standards")
727 (description
728 "@code{Calmjs-parse} is a collection of helper libraries for
729understanding ECMA script.")
730 (license license:expat)))
731
732(define-public python-chameleon
733 (package
734 (name "python-chameleon")
735 (version "4.6.0")
736 (source
737 (origin
738 (method url-fetch)
739 (uri (pypi-uri "Chameleon" version))
740 (sha256
741 (base32 "06qwg3sk26m53b1sl8b798scik7klkx53vijs7d8mwzpyqlxf34i"))))
742 (build-system pyproject-build-system)
743 (native-inputs
744 (list python-pytest
745 python-setuptools))
746 (home-page "https://chameleon.readthedocs.io")
747 (synopsis "Fast HTML/XML Template Compiler")
748 (description
749 "Chameleon is an HTML/XML template engine for Python. It uses the page
750templates language.")
751 ;; Project is duo licensed, see: LICENSE.txt.
752 (license (list license:zpl2.1
753 license:psfl))))
754
755(define-public python-conda-content-trust
756 (package
757 (name "python-conda-content-trust")
758 (version "0.2.0")
759 (source
760 (origin
761 (method git-fetch)
762 (uri (git-reference
763 (url "https://github.com/conda/conda-content-trust")
764 (commit version)))
765 (file-name (git-file-name name version))
766 (sha256
767 (base32 "1yvfwm7i18sfvgdasibdgnghvj5w5p4hr6i37v0cspwmkczgna7z"))))
768 (build-system pyproject-build-system)
769 (arguments
770 (list
771 #:test-flags
772 ;; XXX: Not packaged yet:
773 ;; <https://github.com/secure-systems-lab/securesystemslib>.
774 ;;
775 ;; ImportError: The securesystemslib library is required, which appears
776 ;; to be unavailable.
777 #~(list #$@(map (lambda (test) (string-append "--deselect="
778 "tests/test_root.py::"
779 test))
780 (list "test_sign_root_metadata_dict_via_gpg"
781 "test_sign_root_metadata_via_gpg"
782 "test_gpg_pubkey_in_ssl_format")))))
783 (native-inputs
784 (list python-hatch-vcs
785 python-hatchling
786 python-pytest))
787 (propagated-inputs
788 (list python-cryptography))
789 (home-page "https://github.com/conda/conda-content-trust")
790 (synopsis "Signing and verification tools for Conda")
791 (description
792 "This package implements a functionalit of signing and verification tools
793for Conda. @url{https://theupdateframework.io/, Based on The Update
794Framework (TUF)}, conda-content-trust is intended to ensure that when users in
795the conda ecosystem obtain a package or data about that package, they can know
796whether or not it is trustworthy (e.g. originally comes from a reliable source
797and has not been tampered with). A basic library and basic CLI are included
798to provide signing, verification, and trust delegation functionality.")
799 (license license:bsd-3)))
800
801(define-public python-conda-inject
802 (package
803 (name "python-conda-inject")
804 (version "1.3.2")
805 (source
806 (origin
807 (method git-fetch)
808 (uri (git-reference
809 (url "https://github.com/koesterlab/conda-inject")
810 (commit (string-append "v" version))))
811 (file-name (git-file-name name version))
812 (sha256
813 (base32 "1aig9l676wc2sjb20y7rdqf0hfcfjhh92yfiy82mf7kfnv7rp3rk"))))
814 (build-system pyproject-build-system)
815 (arguments
816 (list #:tests? #f)) ; tests require setting up Conda
817 (native-inputs
818 (list python-poetry-core))
819 (propagated-inputs
820 (list python-pyyaml))
821 (home-page "https://github.com/koesterlab/conda-inject")
822 (synopsis "Inject a conda environment into the current python environment")
823 (description
824 "This package provides helper functions for injecting a conda
825environment into the current python environment (by modifying @code{sys.path},
826without actually changing the current python environment).")
827 (license license:expat)))
828
829(define-public python-copydetect
830 (package
831 (name "python-copydetect")
832 (version "0.5.0")
833 (source
834 (origin
835 (method git-fetch)
836 (uri (git-reference
837 (url "https://github.com/blingenf/copydetect")
838 (commit version)))
839 (sha256
840 (base32 "0hp9994bbnzp79xxprgwsbgc0w06sb4n82nghl90w1z9zbvwn6gz"))))
841 (build-system pyproject-build-system)
842 (propagated-inputs (list python-jinja2
843 python-matplotlib
844 python-numpy
845 python-pygments
846 python-tqdm))
847 (native-inputs (list python-setuptools
848 python-pytest
849 python-wheel))
850 (home-page "https://github.com/blingenf/copydetect")
851 (synopsis "Code plagiarism detection tool")
852 (description "Copydetect is a tool to detect likely instances of plagiarism
853based on the winnowing algorithm. It takes a list of directories as input and
854generates an HTML report displaying copied slices as output.")
855 (license license:expat)))
856
857(define-public python-couleur
858 (package
859 (name "python-couleur")
860 (version "0.7.4")
861 (source
862 (origin
863 (method url-fetch)
864 (uri (pypi-uri "couleur" version))
865 (sha256
866 (base32 "1fk175k6l8isx43jmh7n7xyzb18ysdixzr74dxqqhpyd5sbsb5hy"))))
867 (build-system pyproject-build-system)
868 (arguments (list #:tests? #f)) ;no tests in PyPI, tests depend on Nose
869 (native-inputs
870 (list python-setuptools
871 python-wheel))
872 (home-page "https://github.com/gabrielfalcao/couleur")
873 (synopsis "ANSI terminal tool for Python")
874 (description
875 "This package provides an ANSI terminal tool for Python, colored shell
876and other handy fancy features.")
877 (license license:lgpl3+)))
878
879(define-public python-crc
880 (package
881 (name "python-crc")
882 (version "7.1.0")
883 (source
884 (origin
885 (method git-fetch)
886 (uri (git-reference
887 (url "https://github.com/Nicoretti/crc/")
888 (commit version)))
889 (file-name (git-file-name name version))
890 (sha256
891 (base32 "1b9164z6v3ng5s8564a0gjdzqws6zf5aqvk6mnzw7ysk6d5rbb9r"))))
892 (build-system pyproject-build-system)
893 (native-inputs
894 (list python-poetry-core
895 python-pytest
896 python-wheel))
897 (home-page "https://nicoretti.github.io/crc/")
898 (synopsis "Pure Python CRC library")
899 (description
900 "This library computes and verifies @acronym{Cyclic Redundancy Check,
901CRC} checksums, using predefined and custom CRC configurations.
902
903Configurations:
904@table @asis
905@item CRC8
906 CCITT AUTOSAR SAEJ1850 SAEJ1850_ZERO BLUETOOTH MAXIM-DOW
907@item CRC16
908 XMODEM GSM PROFIBUS MODBUS IBM-3740 KERMIT
909@item CRC32
910 CRC32 AUTOSAR BZIP2 POSIX
911@item CRC64
912 CRC64
913@end table")
914 (license license:bsd-2)))
915
916(define-public python-cron-converter
917 (package
918 (name "python-cron-converter")
919 (version "1.3.1")
920 (source
921 (origin
922 (method git-fetch)
923 (uri (git-reference
924 (url "https://github.com/Sonic0/cron-converter")
925 (commit (string-append "v" version))))
926 (file-name (git-file-name name version))
927 (sha256
928 (base32 "0k5svwh9g6fxjx567iwjysq8x07cmy8qfwpk0pm0jjrgr42w9l6c"))))
929 (build-system pyproject-build-system)
930 (arguments
931 (list #:test-backend #~'unittest
932 #:test-flags #~(list "discover" "--verbose" "tests/unit")))
933 (native-inputs
934 (list python-dateutil
935 python-setuptools))
936 (propagated-inputs
937 (list python-dateutil))
938 (home-page "https://github.com/Sonic0/cron-converter")
939 (synopsis "Cron string parser and scheduler for Python")
940 (description
941 "Cron-converter provides a Cron string parser (from string/lists to
942string/lists) and iteration for the datetime object with a cron like format.")
943 (license license:expat)))
944
945(define-public python-curtsies
946 (package
947 (name "python-curtsies")
948 (version "0.4.3")
949 (source
950 (origin
951 (method url-fetch)
952 (uri (pypi-uri "curtsies" version))
953 (sha256
954 (base32 "09c8c4vssm2zkq017xj99vhcrisfva4nkz92w8dly4jjz7xhyahh"))))
955 (build-system pyproject-build-system)
956 (native-inputs
957 (list python-pyte
958 python-pytest
959 python-setuptools
960 python-wheel))
961 (propagated-inputs
962 (list python-blessed
963 python-cwcwidth))
964 (home-page "https://github.com/bpython/curtsies")
965 (synopsis "Library for curses-like terminal interaction with colored strings")
966 (description
967 "Curtsies is a Python library for interacting with the terminal. It
968features string-like objects which carry formatting information, per-line
969fullscreen terminal rendering, and keyboard input event reporting.")
970 (license license:expat)))
971
972(define-public python-customtkinter
973 (package
974 (name "python-customtkinter")
975 (version "5.2.2")
976 (source
977 (origin
978 (method git-fetch)
979 (uri (git-reference
980 (url "https://github.com/TomSchimansky/CustomTkinter")
981 (commit (string-append "v" version))))
982 (file-name (git-file-name name version))
983 (sha256
984 (base32 "0vma6x8zg7d5h2ggphi6m7bnqzskxysi9rcpkr6rrgylfrsv03fn"))))
985 (build-system pyproject-build-system)
986 (arguments
987 (list
988 #:phases
989 #~(modify-phases %standard-phases
990 (add-before 'check 'start-xorg-server
991 (lambda _
992 (setenv "HOME" "/tmp")
993 ;; The test suite requires a running X server.
994 (system "Xvfb :99 -screen 0 1024x768x24 &")
995 (setenv "DISPLAY" ":99.0")))
996 (replace 'check
997 (lambda* (#:key tests? #:allow-other-keys)
998 (when tests?
999 (with-directory-excursion "test"
1000 (invoke "python" "unit_tests/test_all.py"))))))))
1001 (propagated-inputs
1002 (list (list python "tk")
1003 python-darkdetect
1004 python-packaging))
1005 (native-inputs
1006 (list python-setuptools
1007 xorg-server-for-tests))
1008 (home-page "https://customtkinter.tomschimansky.com")
1009 (synopsis
1010 "Python @acronym{User Interface, UI} library based on Tkinter")
1011 (description
1012 "CustomTkinter provides fully customizable widgets, created and used
1013like normal Tkinter widgets, which can also be used in combination with normal
1014Tkinter elements.")
1015 (license license:expat)))
1016
1017(define-public python-cyclopts
1018 (package
1019 (name "python-cyclopts")
1020 (version "4.14.0")
1021 (source
1022 (origin
1023 (method git-fetch)
1024 (uri (git-reference
1025 (url "https://github.com/BrianPugh/cyclopts")
1026 (commit (string-append "v" version))))
1027 (file-name (git-file-name name version))
1028 (sha256
1029 (base32 "0wbhlpdl7higrgwd45si48l5k1kgjms6f4lzqd6y9qmbfsx0x48l"))))
1030 (build-system pyproject-build-system)
1031 (arguments
1032 (list
1033 ;; tests: 2194 passed, 95 skipped, 69 deselected, 3 warnings
1034 #:test-flags
1035 #~(list #$@(map (lambda (test) (string-append "--deselect="
1036 "tests/completion/"
1037 "test_bash.py::"
1038 test))
1039 (list "test_list_path_multi_positional_default_case"
1040 "test_eq_form_path_completion"
1041 "test_bash_path_completion_reflects_caller_cwd"))
1042 "--deselect=tests/completion/test_behavior.py::test_behavior")))
1043 (native-inputs
1044 (list python-docutils
1045 python-hatch-vcs
1046 python-hatchling
1047 python-mkdocs
1048 python-pexpect
1049 python-pydantic
1050 python-pytest
1051 python-pytest-mock
1052 python-pyyaml
1053 python-sphinx
1054 python-syrupy
1055 python-toml
1056 python-trio))
1057 (propagated-inputs
1058 (list python-attrs
1059 python-docstring-parser
1060 python-rich
1061 python-rich-rst
1062 python-tomli
1063 python-typing-extensions))
1064 (home-page "https://github.com/BrianPugh/cyclopts")
1065 (synopsis "Intuitive, easy CLIs based on type hints")
1066 (description
1067 "Cyclopts is a modern, easy-to-use command-line interface (CLI) framework
1068that aims to provide an intuitive & efficient developer experience.")
1069 (license license:asl2.0)))
1070
1071(define-public python-darkdetect
1072 (package
1073 (name "python-darkdetect")
1074 (version "0.8.0")
1075 (source
1076 (origin
1077 (method url-fetch)
1078 (uri (pypi-uri "darkdetect" version))
1079 (sha256
1080 (base32 "1cgqgpz36dfn7hsqc29ha9pmxmzdjlwdq9aclkgbagi6f08qwhmm"))))
1081 (build-system pyproject-build-system)
1082 (arguments
1083 (list
1084 #:tests? #f)) ;no tests in PyPI or Git.
1085 (native-inputs (list python-setuptools))
1086 (home-page "https://github.com/albertosottile/darkdetect")
1087 (synopsis "Detect OS dark mode from Python")
1088 (description
1089 "This package allows to detect if the user is using Dark Mode.")
1090 (license license:bsd-3)))
1091
1092(define-public python-decopatch
1093 (package
1094 (name "python-decopatch")
1095 (version "1.4.10")
1096 (source
1097 (origin
1098 (method url-fetch)
1099 (uri (pypi-uri "decopatch" version))
1100 (sha256
1101 (base32 "082pnnc7a1d7rk40k7m72w7kw8dk7g8m3yzq4cn1hl217z4ljzwm"))))
1102 (build-system pyproject-build-system)
1103 (arguments
1104 (list #:tests? #f)) ;XXX: cycles with python-pytest-cases
1105 (native-inputs
1106 (list python-setuptools
1107 python-setuptools-scm))
1108 (propagated-inputs
1109 (list python-makefun))
1110 (home-page "https://github.com/smarie/python-decopatch")
1111 (synopsis "Create decorators easily in Python")
1112 (description
1113 "This package provide implements a functionality to simplify writing
1114decorators in Python.")
1115 (license license:bsd-3)))
1116
1117(define-public python-discovery
1118 (package
1119 (name "python-discovery")
1120 (version "1.2.1")
1121 (source
1122 (origin
1123 (method git-fetch)
1124 (uri (git-reference
1125 (url "https://github.com/tox-dev/python-discovery")
1126 (commit version)))
1127 (file-name (git-file-name name version))
1128 (sha256
1129 (base32 "0zshaiar80h5zzbgv05z74kj8y4dgc96hwqfj2gziwdpcyl3rapp"))))
1130 (build-system pyproject-build-system)
1131 (arguments
1132 (list
1133 #:test-flags
1134 ;; assert []
1135 #~(list "--deselect=tests/test_discovery.py::test_get_paths_no_path_env")))
1136 (native-inputs
1137 (list python-pytest
1138 python-pytest-mock
1139 python-hatchling
1140 python-hatch-vcs))
1141 (propagated-inputs
1142 (list python-filelock
1143 python-platformdirs))
1144 (home-page "https://github.com/tox-dev/python-discovery")
1145 (synopsis "Python interpreter discovery")
1146 (description
1147 "@code{python-discovery} is a library for discovering Python interpreters
1148installed on the current machine which may have multiple Python versions from
1149system packages, @code{pyenv}, @code{mise}, @code{asdf}, @code{uv}, or the
1150Windows registry (PEP 514). This library finds the right one.")
1151 (license license:expat)))
1152
1153(define-public python-distance
1154 (let ((commit "ad7f9dc7e9b0e88a08d0cefd1442f4ab1dd1779b")
1155 (revision "0"))
1156 (package
1157 (name "python-distance")
1158 (version (git-version "0.1.3" revision commit))
1159 (source
1160 (origin
1161 (method git-fetch)
1162 (uri (git-reference
1163 (url "https://github.com/doukremt/distance")
1164 (commit commit)))
1165 (file-name (git-file-name name version))
1166 (sha256
1167 (base32 "1vcn0506dy68xyjxdjsl75zzc4b8lmg2yxjgak4i35l7a97yzvwy"))))
1168 (build-system pyproject-build-system)
1169 (arguments
1170 (list #:test-backend #~'custom
1171 #:test-flags #~(list "tests/tests.py")))
1172 (native-inputs (list python-setuptools))
1173 (home-page "https://github.com/doukremt/distance")
1174 (synopsis "Utilities for comparing sequences")
1175 (description
1176 "This package provides helpers for computing similarities between
1177arbitrary sequences. Included metrics are Levenshtein, Hamming, Jaccard, and
1178Sorensen distance, plus some bonuses. All distance computations are
1179implemented in pure Python, and most of them are also implemented in C.")
1180 (license license:gpl2+))))
1181
1182(define-public python-doi
1183 (package
1184 (name "python-doi")
1185 (version "0.2.0")
1186 (source
1187 (origin
1188 (method url-fetch)
1189 (uri (pypi-uri "python-doi" version))
1190 (sha256
1191 (base32 "16pxc7llqb14f2n5ccd88pz4sygwl51slssqm2g23g8rndpya09f"))))
1192 (build-system pyproject-build-system)
1193 (arguments
1194 (list #:test-flags
1195 #~(list "-vv"
1196 (string-append "-k not (test_validate_doi "
1197 "or test_get_real_url_from_doi)"))))
1198 (native-inputs
1199 (list python-pytest
1200 python-pytest-xdist
1201 python-setuptools
1202 python-sphinx
1203 python-sphinx-autobuild
1204 python-sphinx-rtd-theme))
1205 (home-page "https://github.com/papis/python-doi")
1206 (synopsis "Python package to work with Document Object Identifier (doi)")
1207 (description
1208 "Python package to work with Document Object Identifier (doi).")
1209 (license license:gpl3)))
1210
1211(define-public python-domdf-python-tools
1212 (package
1213 (name "python-domdf-python-tools")
1214 (version "3.10.0")
1215 (source
1216 (origin
1217 (method url-fetch)
1218 (uri (pypi-uri "domdf_python_tools" version))
1219 (sha256
1220 (base32 "16727afn92bp6hj4hvp27scc5ldz1y27z9abbxgi9sgiyk90iqra"))))
1221 (build-system pyproject-build-system)
1222 (native-inputs (list python-hatch-requirements-txt))
1223 (arguments (list #:tests? #f)) ;no tests in PyPI archive
1224 (propagated-inputs
1225 (list python-natsort
1226 python-typing-extensions))
1227 (home-page "https://github.com/domdfcoding/domdf_python_tools")
1228 (synopsis "Helpful functions for Python")
1229 (description
1230 "This package provide helpful functions for Python's testing and
1231packaging tasks.")
1232 (license license:expat)))
1233
1234(define-public python-duet
1235 (package
1236 (name "python-duet")
1237 (version "0.2.9")
1238 (source
1239 (origin
1240 (method git-fetch)
1241 (uri (git-reference
1242 (url "https://github.com/google/duet")
1243 (commit (string-append "v" version))))
1244 (file-name (git-file-name name version))
1245 (sha256
1246 (base32 "1y1jkhlhhdg0bvlv65xqarhr86sph25zj5c7nshrrv8351973ciz"))))
1247 (build-system pyproject-build-system)
1248 (native-inputs (list python-pytest python-setuptools))
1249 (home-page "https://github.com/google/duet")
1250 (synopsis "Simple future-based async library for Python")
1251 (description
1252 "This package provides a simple @code{Future}-based async library for
1253Python. Duet uses a structured concurrency approach to async programming,
1254relying on the @code{Future} interface for parallelism. Duet also provides
1255a way to run async/await coroutines around those @code{Future}s. Unlike most
1256async libraries, duet is re-entrant.")
1257 (license license:asl2.0)))
1258
1259(define-public python-envs
1260 (package
1261 (name "python-envs")
1262 (version "1.4")
1263 (source
1264 (origin
1265 (method url-fetch)
1266 (uri (pypi-uri "envs" version))
1267 (sha256
1268 (base32 "160358zskyg6g606lndjcv7yd2nv5f7ca14y55lds72xk333b14x"))))
1269 (build-system pyproject-build-system)
1270 (arguments
1271 (list #:test-backend #~'unittest))
1272 (native-inputs
1273 (list python-packaging python-poetry-core))
1274 (propagated-inputs
1275 (list python-click python-jinja2 python-terminaltables))
1276 (home-page "https://github.com/capless/envs")
1277 (synopsis "Easy access of environment variables from Python")
1278 (description
1279 "This package implements a functionality to access of environment
1280variables from Python with support for strings, booleans, list, tuples, and
1281dicts.")
1282 (license license:asl2.0)))
1283
1284(define-public python-exitcode
1285 (package
1286 (name "python-exitcode")
1287 (version "0.1.0")
1288 (source
1289 (origin
1290 (method url-fetch)
1291 (uri (pypi-uri "exitcode" version))
1292 (sha256
1293 (base32 "01yybyi4pkvvf4382p28gh4lkxrcyl5vcx2xk95nbsb8011f37mw"))))
1294 (build-system pyproject-build-system)
1295 (arguments
1296 (list #:tests? #f)) ; no tests in PyPI or Git
1297 (native-inputs
1298 (list python-poetry-core
1299 python-setuptools))
1300 (home-page "https://github.com/rumpelsepp/exitcode")
1301 (synopsis "Preferred system exit codes as defined by sysexits.h")
1302 (description
1303 "This package implements a preferred system exit codes as defined by
1304@url{https://man.openbsd.org/sysexits, sysexits.h}. This library is inspired by
1305Rust's @url{https://docs.rs/exitcode, exitcode}.")
1306 (license license:expat)))
1307
1308(define-public python-exrex
1309 (package
1310 (name "python-exrex")
1311 (version "0.12.0")
1312 (source
1313 (origin
1314 (method git-fetch)
1315 (uri (git-reference
1316 (url "https://github.com/asciimoo/exrex")
1317 (commit (string-append "v" version))))
1318 (file-name (git-file-name name version))
1319 (sha256
1320 (base32 "0lvhkxfrpgi7g6lzp97m1hqzkn5aa9yr544jff2ya2w49c5flg81"))))
1321 (build-system pyproject-build-system)
1322 (arguments (list #:test-backend #~'custom
1323 #:test-flags #~'("tests.py")))
1324 (native-inputs (list python-setuptools))
1325 (home-page "https://github.com/asciimoo/exrex")
1326 (synopsis "Irregular methods for regular expressions")
1327 (description
1328 "Exrex is a command line tool and Python module that generates all,
1329or random, matching strings to a given regular expression.")
1330 (license license:agpl3+)))
1331
1332(define-public python-ezdxf
1333 (package
1334 (name "python-ezdxf")
1335 (version "1.3.5")
1336 (source
1337 (origin
1338 (method git-fetch)
1339 (uri (git-reference
1340 (url "https://github.com/mozman/ezdxf")
1341 (commit (string-append "v" version))))
1342 (sha256
1343 (base32 "14rb99dakzzpdflnsw2wr2y0s28fhqz4dp78mi823457bdpv18ix"))))
1344 (build-system pyproject-build-system)
1345 (native-inputs (list python-cython python-pillow python-pytest
1346 python-setuptools unzip))
1347 (propagated-inputs (list python-fonttools python-numpy python-pyparsing
1348 python-typing-extensions))
1349 (home-page "https://ezdxf.mozman.at/")
1350 (synopsis "Python library to read and write DXF drawings")
1351 (description "ezdxf is a Python package to create new DXF files and
1352read/modify/write existing DXF files.")
1353 (license license:expat)))
1354
1355(define-public python-fastnumbers
1356 (package
1357 (name "python-fastnumbers")
1358 (version "5.1.1")
1359 (source
1360 (origin
1361 (method url-fetch)
1362 (uri (pypi-uri "fastnumbers" version))
1363 (sha256
1364 (base32 "0jzsylarbckivx762rxmc9syn7a6hqq3xhp5xnpfsln0rlhs0gqq"))))
1365 (build-system pyproject-build-system)
1366 (native-inputs
1367 (list python-numpy
1368 python-pytest
1369 python-setuptools
1370 python-setuptools-scm))
1371 (home-page "https://github.com/SethMMorton/fastnumbers")
1372 (synopsis "Super-fast and clean conversions to numbers")
1373 (description
1374 "This package provides provides drop-in replacements for the Python
1375built-in @code{int} and @code{float} that are on par or faster with the Python
1376equivalents.")
1377 (license license:expat)))
1378
1379(define-public python-findpython
1380 (package
1381 (name "python-findpython")
1382 (version "0.7.0")
1383 (source
1384 (origin
1385 (method url-fetch)
1386 (uri (pypi-uri "findpython" version))
1387 (sha256
1388 (base32 "1p3kqr00sym0yaddsbaw1gf7nslfnscnd050q6ipj9rmfry68ccb"))))
1389 (build-system pyproject-build-system)
1390 (native-inputs
1391 (list python-pdm-backend
1392 python-pytest))
1393 (propagated-inputs
1394 (list python-packaging
1395 python-platformdirs))
1396 (home-page "https://github.com/frostming/findpython")
1397 (synopsis "Find Python versions the system")
1398 (description
1399 "This package provides a utility to find Python versions on the current
1400system.")
1401 (license license:expat)))
1402
1403(define-public python-flexcache
1404 (package
1405 (name "python-flexcache")
1406 (version "0.3")
1407 (source
1408 (origin
1409 (method url-fetch)
1410 (uri (pypi-uri "flexcache" version))
1411 (sha256
1412 (base32 "0mh6c3s0ykmnnhzys72xq5ls4myzpz1y86fmz0ngw6v2l3aknx0q"))))
1413 (build-system pyproject-build-system)
1414 (native-inputs
1415 (list python-pytest
1416 python-pytest-mpl
1417 python-pytest-subtests
1418 python-setuptools
1419 python-setuptools-scm
1420 python-wheel))
1421 (propagated-inputs
1422 (list python-typing-extensions))
1423 (home-page "https://github.com/hgrecco/flexcache")
1424 (synopsis "Caching transformed versions of a source object")
1425 (description
1426 "This package implements a functionality to cache on disk the result of
1427expensive calculations. It was started as part of
1428@url{https://github.com/hgrecco/pint, Pint}, the Python units package.")
1429 (license license:bsd-3)))
1430
1431(define-public python-flexparser
1432 (package
1433 (name "python-flexparser")
1434 (version "0.4")
1435 (source
1436 (origin
1437 (method url-fetch)
1438 (uri (pypi-uri "flexparser" version))
1439 (sha256
1440 (base32 "1cpn5scxnxbd2jrnany4znzzn9im5h5gwr59bp62rglman89hv96"))))
1441 (build-system pyproject-build-system)
1442 (native-inputs
1443 (list python-pytest
1444 python-pytest-mpl
1445 python-pytest-subtests
1446 python-setuptools
1447 python-setuptools-scm
1448 python-wheel))
1449 (propagated-inputs
1450 (list python-typing-extensions))
1451 (home-page "https://github.com/hgrecco/flexparser")
1452 (synopsis "Parsing made fun ... using typing")
1453 (description "This project provides a typed parser. It was started as
1454part of @url{https://github.com/hgrecco/pint, Pint}, the Python units
1455package. ")
1456 (license license:bsd-3)))
1457
1458(define-public python-gest-api
1459 (package
1460 (name "python-gest-api")
1461 (version "0.1")
1462 (source
1463 (origin
1464 (method url-fetch)
1465 (uri (pypi-uri "gest_api" version))
1466 (sha256
1467 (base32 "1a15glcwadq7zkp3dzrlbwj2k5xr1lad8xp9yzg8zarg0whjfwf5"))))
1468 (build-system pyproject-build-system)
1469 (native-inputs
1470 (list python-pytest
1471 python-setuptools))
1472 (propagated-inputs
1473 (list python-pydantic))
1474 (home-page "https://github.com/campa-consortium/gest-api")
1475 (synopsis "Standardization for generators")
1476 (description
1477 "This package provides a standard for generating test points and
1478exchanging variables, objectives, and constraints in optimization problems.
1479
1480It is an effort to standardize the interface of the generators in optimization
1481libraries such as:
1482@itemize
1483@item @url{https://github.com/ChristopherMayes/Xopt, Xopt} - flexible
1484high-level optimization in Python
1485@item @url{https://github.com/optimas-org/optimas, optimas} - optimization at
1486scale, powered by @code{libEnsemble}
1487@item @url{https://github.com/Libensemble/libensemble, libEnsemble} - a Python
1488toolkit for coordinating asynchronous and dynamic ensembles of calculations
1489@item @url{https://github.com/radiasoft/rsopt, rsopt} - flexible configuration
1490and execution of large, black-box optimization problems
1491@end itemize")
1492 (license license:bsd-3)))
1493
1494(define-public python-grapheme
1495 ;; 0.6.0 has not git tag, PyPI has no tests. use the latest commit on master
1496 ;; branch.
1497 (let ((commit "66f07ca02fc64a9ea2f9b4ad66593b226d473adb")
1498 (revision "0"))
1499 (package
1500 (name "python-grapheme")
1501 (version (git-version "0.6.0" revision commit))
1502 (source
1503 (origin
1504 (method git-fetch)
1505 (uri (git-reference
1506 (url "https://github.com/alvinlindstam/grapheme")
1507 (commit commit)))
1508 (file-name (git-file-name name version))
1509 (sha256
1510 (base32 "0fqw6iymg7s8q1pfwijx0awcj1j55jppx7hfa5ci7y0c7x4jc8v9"))))
1511 (build-system pyproject-build-system)
1512 (native-inputs
1513 (list python-pytest
1514 python-setuptools))
1515 (home-page "https://github.com/alvinlindstam/grapheme")
1516 (synopsis "Unicode grapheme helpers")
1517 (description
1518 "This package provides a functionality for working with user perceived
1519characters. More specifically, string manipulation and calculation functions
1520for working with grapheme cluster groups (graphemes) as defined by the
1521@url{http://unicode.org/reports/tr29/, Unicode Standard Annex #29}.")
1522 (license license:expat))))
1523
1524(define-public python-halo
1525 (package
1526 (name "python-halo")
1527 (version "0.0.31")
1528 (source
1529 (origin
1530 (method url-fetch)
1531 (uri (pypi-uri "halo" version))
1532 (sha256
1533 (base32 "1mn97h370ggbc9vi6x8r6akd5q8i512y6kid2nvm67g93r9a6rvv"))))
1534 (build-system pyproject-build-system)
1535 (arguments
1536 (list #:tests? #f)) ;no tests in PyPI archive, no tags in Git
1537 (native-inputs
1538 (list python-setuptools))
1539 (propagated-inputs
1540 (list python-colorama
1541 python-log-symbols
1542 python-six
1543 python-spinners
1544 python-termcolor))
1545 (home-page "https://github.com/manrajgrover/halo")
1546 (synopsis "Python library to display graphical spinners in the terminal")
1547 (description
1548 "Halo is a Python library to display graphical spinners in the terminal.
1549It also supports IPython/Jupyter.")
1550 (license license:expat)))
1551
1552(define-public python-hatch-argparse-manpage
1553 (package
1554 (name "python-hatch-argparse-manpage")
1555 (version "1.0.0")
1556 (source
1557 (origin
1558 (method git-fetch)
1559 (uri (git-reference
1560 (url "https://github.com/damonlynch/hatch-argparse-manpage")
1561 (commit (string-append "v" version))))
1562 (file-name (git-file-name name version))
1563 (sha256
1564 (base32 "1zhh3q7xfz9mvwdihjprw89g0ffl0m5xc6v24cskrm4j35wgmq25"))))
1565 (build-system pyproject-build-system)
1566 (arguments (list #:tests? #f)) ; No tests upstream.
1567 (native-inputs (list python-hatchling))
1568 (propagated-inputs (list python-argparse-manpage python-rich))
1569 (home-page "https://github.com/damonlynch/hatch-argparse-manpage")
1570 (synopsis "Hatch build hook plugin to generate manual pages")
1571 (description
1572 "This package provides a build hook plugin for Hatch to automatically
1573 bs generate a manual page from an ArgumentParser object, using argparse-manpage
1574by Pavel Raiskup.")
1575 (license license:gpl3+)))
1576
1577(define-public python-hatch-gettext
1578 (package
1579 (name "python-hatch-gettext")
1580 (version "1.1.0")
1581 (source
1582 (origin
1583 (method git-fetch)
1584 (uri (git-reference
1585 (url "https://github.com/damonlynch/hatch-gettext")
1586 (commit (string-append "v" version))))
1587 (file-name (git-file-name name version))
1588 (sha256
1589 (base32 "0q35pscb6grwpdghxig8i0016gdsqn3jmcqi844yg9dcrvj4swwq"))))
1590 (build-system pyproject-build-system)
1591 (arguments (list #:tests? #f)) ; No tests upstream.
1592 (native-inputs (list python-hatchling))
1593 (propagated-inputs (list python-rich))
1594 (home-page "https://github.com/damonlynch/hatch-gettext")
1595 (synopsis "Hatch build hook plugin for GNU gettext")
1596 (description
1597 "This package provides a build hook plugin for Hatch that compiles
1598 bsmulti-lingual messages with GNU gettext's tools msgfmt.")
1599 (license license:gpl3+)))
1600
1601(define-public python-hatch-nodejs-version
1602 (package
1603 (name "python-hatch-nodejs-version")
1604 (version "0.4.0")
1605 (source
1606 (origin
1607 (method git-fetch)
1608 (uri (git-reference
1609 (url "https://github.com/agoose77/hatch-nodejs-version")
1610 (commit (string-append "v" version))))
1611 (file-name (git-file-name name version))
1612 (sha256
1613 (base32 "00ik9yjc9329qq487lk0hs04jsj6l0adffb39l3711p1bhf3pv9r"))))
1614 (build-system pyproject-build-system)
1615 (propagated-inputs (list python-hatchling))
1616 (native-inputs (list python-hatchling python-pytest))
1617 (home-page "https://github.com/agoose77/hatch-nodejs-version")
1618 (synopsis "Hatch plugin for versioning from a package.json file")
1619 (description "This package provides a hatch plugin for fetching a version
1620from a @code{package.json} file.")
1621 (license license:expat)))
1622
1623(define-public python-hatch-regex-commit
1624 (package
1625 (name "python-hatch-regex-commit")
1626 (version "0.0.4")
1627 (source
1628 (origin
1629 (method git-fetch)
1630 (uri (git-reference
1631 (url "https://github.com/frankie567/hatch-regex-commit")
1632 (commit (string-append "v" version))))
1633 (file-name (git-file-name name version))
1634 (sha256
1635 (base32 "01ngfz2x49h323akksfhwlpp6hiy36ai5gnxfspd10g2rjm7gny5"))))
1636 (build-system pyproject-build-system)
1637 (arguments (list #:tests? #f)) ;test directory is empty
1638 (propagated-inputs (list python-hatchling))
1639 (native-inputs (list python-hatchling))
1640 (home-page "https://github.com/frankie567/hatch-regex-commit")
1641 (synopsis "Hatch plugin to create a commit and tag when bumping version")
1642 (description
1643 "This provides a plugin for Hatch that automatically creates a Git commit
1644and tag after version bumping.")
1645 (license license:expat)))
1646
1647;; TODO: Move to ci or task-runners, see:
1648;; <https://codeberg.org/guix/guix/issues/3096>.
1649(define-public python-huey
1650 (package
1651 (name "python-huey")
1652 (version "2.5.3")
1653 (source
1654 (origin
1655 (method git-fetch)
1656 (uri (git-reference
1657 (url "https://github.com/coleifer/huey")
1658 (commit version)))
1659 (file-name (git-file-name name version))
1660 (sha256
1661 (base32 "189sin0k9imiddm10xa5llql3953p1jv6dqgxm78hy18qrlbkz02"))))
1662 (build-system pyproject-build-system)
1663 (arguments
1664 (list
1665 #:phases
1666 #~(modify-phases %standard-phases
1667 (add-after 'unpack 'remove-which
1668 (lambda _
1669 (substitute* "huey/tests/test_kt_huey.py"
1670 (("^has_ktserver = sp.call\\(\\['which', 'ktserver'\\].*$")
1671 "has_ktserver = False"))))
1672 (replace 'check
1673 (lambda* (#:key tests? #:allow-other-keys)
1674 (when tests?
1675 (spawn "redis-server" '("redis-server"))
1676 (invoke "python3" "-m" "runtests" "--verbosity" "2")))))))
1677 (native-inputs (list python-setuptools redis tzdata-for-tests))
1678 (propagated-inputs (list python-redis))
1679 (home-page "https://huey.readthedocs.io")
1680 (synopsis "Lightweight task queue for Python")
1681 (description
1682 "Huey is a lightweight task queue for Python applications. Huey
1683supports:
1684@itemize
1685@item Redis, SQLite, file-system, or in-memory storage
1686@item multi-process, multi-thread or greenlet task execution models
1687@item scheduling tasks to execute at a given time, or after a given delay
1688@item scheduling recurring tasks, like a crontab
1689@item automatically retrying tasks that fail
1690@item task prioritization
1691@item task result storage
1692@item task expiration
1693@item task locking
1694@item task pipelines and chains
1695@end itemize")
1696 (license license:expat)))
1697
1698(define-public python-id
1699 (package
1700 (name "python-id")
1701 (version "1.5.0")
1702 (source
1703 (origin
1704 (method url-fetch)
1705 (uri (pypi-uri "id" version))
1706 (sha256
1707 (base32 "07acfgq7vmbz94p5axn9d40m8qjcgfllfkr4jz7dpfxcksjbhb19"))))
1708 (build-system pyproject-build-system)
1709 (native-inputs
1710 (list python-flit-core
1711 python-pretend
1712 python-pytest))
1713 (propagated-inputs
1714 (list python-requests))
1715 (home-page "https://github.com/di/id")
1716 (synopsis "Tool for generating OIDC identities")
1717 (description
1718 "This package provides a tool for generating @code{OIDC, OpenID Connect}
1719identities.")
1720 (license license:asl2.0)))
1721
1722(define-public python-iniparse
1723 (package
1724 (name "python-iniparse")
1725 (version "0.5.1")
1726 (source
1727 (origin
1728 (method git-fetch)
1729 (uri (git-reference
1730 (url "https://github.com/candlepin/python-iniparse")
1731 (commit version)))
1732 (file-name (git-file-name name version))
1733 (sha256
1734 (base32 "0hh676j1yw7krwmzpaxl59bhl5g04dbbzbr84qryrw420npy2prp"))))
1735 (build-system pyproject-build-system)
1736 (arguments
1737 (list
1738 #:test-backend #~'custom
1739 #:test-flags #~(list "runtests.py")
1740 #:phases
1741 #~(modify-phases %standard-phases
1742 (add-before 'check 'disable-tests
1743 (lambda _
1744 ;; XXX: Three tests failed to compare lists.
1745 (substitute* "tests/test_compat.py"
1746 (("test_read_returns_file_list")
1747 "disabled_test_read_returns_file_list")))))))
1748 (native-inputs
1749 (list python-setuptools))
1750 (home-page "https://github.com/candlepin/python-iniparse")
1751 (synopsis "Accessing and Modifying INI files")
1752 (description
1753 "iniparse is a INI parser for Python which is:
1754@itemize
1755@item Compatible with ConfigParser: Backward compatible implementations of
1756ConfigParser, RawConfigParser, and SafeConfigParser are included that are
1757API-compatible with the Python standard library.
1758@item Preserves structure of INI files: Order of sections & options,
1759indentation, comments, and blank lines are preserved as far as possible when
1760data is updated.
1761@item More convenient: Values can be accessed using dotted notation
1762(@code{cfg.user.name}), or using container syntax
1763(@code{cfg['user']['name']}).
1764@end itemize")
1765 (license license:expat)))
1766
1767(define-public python-inotify
1768 (package
1769 (name "python-inotify")
1770 (version "0.2.12")
1771 (source
1772 (origin
1773 (method git-fetch)
1774 (uri (git-reference
1775 (url "https://github.com/dsoprea/PyInotify")
1776 (commit version)))
1777 (file-name (git-file-name name version))
1778 (sha256
1779 (base32 "1n1rqpzk70ap2i4zk2k0znz407i909y2001v65agy7y30apjzb67"))))
1780 (build-system pyproject-build-system)
1781 (arguments
1782 (list
1783 #:phases
1784 #~(modify-phases %standard-phases
1785 (add-after 'unpack 'fix-requirements
1786 (lambda _
1787 (substitute* "inotify/resources/requirements.txt"
1788 (("build")
1789 "")))))))
1790 (native-inputs (list python-pytest python-setuptools))
1791 (propagated-inputs (list python-pyasyncore))
1792 (home-page "https://github.com/dsoprea/PyInotify")
1793 (synopsis "Linux filesystem activity monitor library for Python")
1794 (description
1795 "This package provides an efficient and elegant inotify (Linux filesystem
1796activity monitor) library for Python.")
1797 (license license:gpl2)))
1798
1799(define-public python-intervaltree
1800 (package
1801 (name "python-intervaltree")
1802 (version "3.1.0")
1803 (source
1804 (origin
1805 (method url-fetch)
1806 (uri (pypi-uri "intervaltree" version))
1807 (sha256
1808 (base32
1809 "0bcm6c6r4ck9nfj9xwz4rm2swc5lrjvmw3lyl6rgj639jf41nawh"))))
1810 (build-system pyproject-build-system)
1811 (arguments
1812 `(#:phases
1813 (modify-phases %standard-phases
1814 ;; pytest seems to have a check to make sure the user is testing
1815 ;; their checked-out code and not an installed, potentially
1816 ;; out-of-date copy. This is harmless here, since we just installed
1817 ;; the package, so we disable the check to avoid skipping tests
1818 ;; entirely.
1819 (add-before 'check 'import-mismatch-error-workaround
1820 (lambda _
1821 (setenv "PY_IGNORE_IMPORTMISMATCH" "1")
1822 #t)))))
1823 (propagated-inputs
1824 (list python-sortedcontainers))
1825 (native-inputs
1826 (list python-setuptools python-pytest))
1827 (home-page "https://github.com/chaimleib/intervaltree")
1828 (synopsis "Editable interval tree data structure")
1829 (description
1830 "This package provides a mutable, self-balancing interval tree
1831implementation for Python. Queries may be by point, by range overlap, or by
1832range envelopment. This library was designed to allow tagging text and time
1833intervals, where the intervals include the lower bound but not the upper
1834bound.")
1835 (license license:asl2.0)))
1836
1837(define-public python-jschon
1838 (package
1839 (name "python-jschon")
1840 (version "0.11.1")
1841 (source
1842 (origin
1843 (method git-fetch)
1844 (uri (git-reference
1845 (url "https://github.com/marksparkza/jschon/")
1846 (commit (string-append "v" version))
1847 (recursive? #t))) ;required for tests
1848 (sha256
1849 (base32 "0javlbq83ffy98kinhl7i17ja00917856yg55qlbn8048lhc9sxq"))
1850 (file-name (git-file-name name version))))
1851 (build-system pyproject-build-system)
1852 (propagated-inputs
1853 (list python-rfc3986))
1854 (native-inputs
1855 (list python-coverage
1856 python-hypothesis
1857 python-pytest
1858 python-pytest-benchmark
1859 python-pytest-httpserver
1860 python-requests
1861 python-setuptools))
1862 (home-page "https://jschon.readthedocs.io/")
1863 (synopsis "Object-oriented JSON Schema implementation for Python")
1864 (description
1865 "This package provides a JSON toolkit for Python developers.")
1866 (license license:expat)))
1867
1868(define-public python-jsonpath-ng
1869 (package
1870 (name "python-jsonpath-ng")
1871 (version "1.7.0" )
1872 (source
1873 (origin
1874 (method url-fetch)
1875 (uri (pypi-uri "jsonpath-ng" version))
1876 (sha256
1877 (base32 "0g5bpq02pl9mv7mbqixvnagq8f9v0jab6wqmbxw9rxsz9vyzgxgn"))))
1878 (build-system pyproject-build-system)
1879 (native-inputs
1880 (list python-pytest
1881 python-setuptools
1882 python-wheel))
1883 (propagated-inputs
1884 (list python-ply))
1885 (home-page "https://github.com/h2non/jsonpath-ng")
1886 (synopsis "JSONPath Next-Generation")
1887 (description
1888 "This package provides a final implementation of @code{JSONPath} for
1889Python that aims to be standard compliant, including arithmetic and binary
1890comparison operators, as defined in the original
1891@url{http://goessner.net/articles/JsonPath/, JSONPath} proposal.")
1892 (license license:asl2.0)))
1893
1894(define-public python-json-log-formatter
1895 (package
1896 (name "python-json-log-formatter")
1897 (version "1.1.1")
1898 (source
1899 (origin
1900 (method git-fetch)
1901 (uri (git-reference
1902 (url "https://github.com/marselester/json-log-formatter")
1903 (commit (string-append "v" version))))
1904 (file-name (git-file-name name version))
1905 (sha256
1906 (base32 "04zs938mjf131h0lfrkm3c2dfh0x5f8rmaks0i29nlxb71zpg0f2"))))
1907 (build-system pyproject-build-system)
1908 (arguments
1909 (list
1910 #:phases
1911 #~(modify-phases %standard-phases
1912 (replace 'check
1913 (lambda* (#:key tests? #:allow-other-keys)
1914 (when tests?
1915 (invoke "pytest" "-s" "tests.py")))))))
1916 (native-inputs (list python-django
1917 python-pytest
1918 python-setuptools
1919 python-simplejson
1920 python-ujson
1921 python-wheel))
1922 (home-page "https://github.com/marselester/json-log-formatter")
1923 (synopsis "JSON log formatter")
1924 (description "The library helps you to store logs in JSON format.")
1925 (license license:expat)))
1926
1927(define-public python-keeper-secrets-manager-core
1928 ;; released from a monorepo with other packages following various versioning
1929 ;; schemes. This commit was selected because some failing tests were fixed
1930 ;; since the most recent release of the Python SDK packages.
1931 (let ((commit "2c9a63d433721dee129a3647077d59bb243b52ec")
1932 (revision "0"))
1933 (package
1934 (name "python-keeper-secrets-manager-core")
1935 (version (git-version "17.0.0" revision commit))
1936 (source
1937 (origin
1938 (method git-fetch)
1939 (uri (git-reference
1940 (url "https://github.com/Keeper-Security/secrets-manager")
1941 (commit commit)))
1942 (file-name (git-file-name name version))
1943 (sha256
1944 (base32 "1mqx0xv28xyljd4s7wwi154h8v22ayi8k337afhhw0pg2c8150pp"))))
1945 (build-system pyproject-build-system)
1946 (arguments
1947 (list
1948 #:phases
1949 #~(modify-phases %standard-phases
1950 (add-after 'unpack 'chdir
1951 (lambda _
1952 (chdir "sdk/python/core"))))))
1953 (propagated-inputs
1954 (list python-cryptography
1955 python-importlib-metadata
1956 python-requests))
1957 (native-inputs
1958 (list python-pytest
1959 python-setuptools))
1960 (home-page "https://github.com/Keeper-Security/secrets-manager")
1961 (synopsis "Keeper Secrets Manager for Python SDK")
1962 (description
1963 "The Keeper Secrets Manager Python SDK provides access to
1964@url{https://www.keepersecurity.com/secrets-manager.html, Keeper Secrets
1965Management} services.")
1966 (license license:expat))))
1967
1968(define-public python-keeper-secrets-manager-helper
1969 ;; released alongside keeper-secrets-manager-core, but with a different
1970 ;; versioning scheme.
1971 (let ((commit "2c9a63d433721dee129a3647077d59bb243b52ec")
1972 (revision "0"))
1973 (package
1974 (name "python-keeper-secrets-manager-helper")
1975 (version (git-version "1.0.6" revision commit))
1976 (source
1977 (origin
1978 (method git-fetch)
1979 (uri (git-reference
1980 (url "https://github.com/Keeper-Security/secrets-manager")
1981 (commit commit)))
1982 (file-name (git-file-name name version))
1983 (sha256
1984 (base32 "1mqx0xv28xyljd4s7wwi154h8v22ayi8k337afhhw0pg2c8150pp"))))
1985 (build-system pyproject-build-system)
1986 (arguments
1987 (list
1988 #:phases
1989 #~(modify-phases %standard-phases
1990 (add-after 'unpack 'chdir
1991 (lambda _
1992 (chdir "sdk/python/helper"))))))
1993 (propagated-inputs
1994 (list python-iso8601
1995 python-keeper-secrets-manager-core
1996 python-pyyaml))
1997 (native-inputs
1998 (list python-pytest
1999 python-setuptools))
2000 (home-page "https://github.com/Keeper-Security/secrets-manager")
2001 (synopsis "Keeper Secrets Manager for Python SDK helper for managing records")
2002 (description
2003 "Keeper Secrets Manager SDK helper is for creating and managing secret
2004records. It is intended to be used with @code{keeper-secrets-manager-core}.")
2005 (license license:expat))))
2006
2007(define-public python-language-data
2008 (package
2009 (name "python-language-data")
2010 (version "1.3.0")
2011 (source
2012 (origin
2013 (method url-fetch)
2014 (uri (pypi-uri "language_data" version))
2015 (sha256
2016 (base32 "1v6pp8z2wxj3hafl62hbx8sbinpp9cr0r7y80rfi8mcmlf5fy03n"))))
2017 (build-system pyproject-build-system)
2018 (native-inputs
2019 (list python-pytest
2020 python-setuptools
2021 python-setuptools-scm))
2022 (propagated-inputs
2023 (list python-marisa-trie))
2024 (home-page "https://github.com/georgkrause/language_data")
2025 (synopsis "Supplementary data about languages used by the langcodes module")
2026 (description
2027 "language_data is a supplement to the langcodes module, for working with
2028standardized codes for human languages. It stores the more bulky and
2029hard-to-index data about languages, particularly what they are named in
2030various languages.")
2031 (license license:expat)))
2032
2033(define-public python-log-symbols
2034 (package
2035 (name "python-log-symbols")
2036 (version "0.0.14")
2037 (source
2038 (origin
2039 (method url-fetch)
2040 (uri (pypi-uri "log_symbols" version))
2041 (sha256
2042 (base32 "0mh5d0igw33libfmbsr1ri1p1y644p36nwaa2w6kzrd8w5pvq2yg"))))
2043 (build-system pyproject-build-system)
2044 (arguments
2045 (list #:tests? #f)) ;no tests in PyPI archive, tests depend on Nose
2046 (native-inputs
2047 (list python-setuptools))
2048 (propagated-inputs
2049 (list python-colorama))
2050 (home-page "https://github.com/manrajgrover/py-log-symbols")
2051 (synopsis "Python library with graphical symbols for logging on the terminal")
2052 (description
2053 "This package provides a Python library with graphical symbols that can
2054be displayed on the terminal, with color if possible, for logging purposes.")
2055 (license license:expat)))
2056
2057(define-public python-lsprotocol
2058 (package
2059 (name "python-lsprotocol")
2060 (version "2025.0.0")
2061 (source
2062 (origin
2063 (method git-fetch)
2064 (uri (git-reference
2065 (url "https://github.com/microsoft/lsprotocol")
2066 (commit version)))
2067 (file-name (git-file-name name version))
2068 (sha256
2069 (base32 "0m5c2wd7f3i1ipdf0lqhfmgi7d9jw6sa49pvx8828r83r0f9gd8f"))))
2070 (build-system pyproject-build-system)
2071 (arguments
2072 (list
2073 #:tests? #f ;no tests for Python package
2074 #:phases
2075 #~(modify-phases %standard-phases
2076 (add-after 'unpack 'cd-packages-python
2077 (lambda _
2078 (chdir "packages/python"))))))
2079 (native-inputs
2080 (list python-flit-core))
2081 (propagated-inputs
2082 (list python-attrs
2083 python-cattrs))
2084 (home-page "https://github.com/microsoft/lsprotocol")
2085 (synopsis "Python types for Language Server Protocol.")
2086 (description
2087 "@code{lsprotocol} is a Python implementation of object types used in
2088the Language Server Protocol (LSP). This repository contains the code
2089generator and the generated types for LSP.")
2090 (license license:expat)))
2091
2092(define-public python-marisa-trie
2093 (package
2094 (name "python-marisa-trie")
2095 (version "1.3.1")
2096 (source
2097 (origin
2098 (method url-fetch)
2099 (uri (pypi-uri "marisa_trie" version))
2100 (sha256
2101 (base32 "0nzq9yc3qdpnnvhi9zlp6vcpk6id5lx3943pm7zgir1h5z8py44p"))))
2102 (build-system pyproject-build-system)
2103 (native-inputs
2104 (list python-cython
2105 python-hypothesis
2106 python-pytest
2107 python-readme-renderer
2108 python-setuptools))
2109 (home-page "https://github.com/pytries/marisa-trie")
2110 (synopsis "Static memory-efficient Trie-like structures for Python")
2111 (description
2112 "This package provides static memory-efficient and fast Trie-like structures
2113for Python.")
2114 (license license:expat)))
2115
2116(define-public python-menuinst
2117 (package
2118 (name "python-menuinst")
2119 (version "2.4.1")
2120 (source
2121 (origin
2122 (method git-fetch)
2123 (uri (git-reference
2124 (url "https://github.com/conda/menuinst")
2125 (commit version)))
2126 (file-name (git-file-name name version))
2127 (sha256
2128 (base32 "0606j3mwpcj4rqj8mifnrdqqhp8dqf802kagqkp7mmi2wffly27w"))))
2129 (build-system pyproject-build-system)
2130 (arguments
2131 (list
2132 #:tests? #f)) ;tests need conda
2133 (native-inputs
2134 (list python-setuptools
2135 python-setuptools-scm))
2136 (home-page "https://conda.github.io/menuinst/")
2137 (synopsis "Cross platform menu item installation")
2138 (description
2139 "This package provides cross platform menu item installation for conda
2140packages.")
2141 (license license:bsd-3)))
2142
2143(define-public python-multiplex
2144 (package
2145 (name "python-multiplex")
2146 (version "0.6.1")
2147 (source
2148 (origin
2149 (method git-fetch) ;no tests in PyPI archive
2150 (uri (git-reference
2151 (url "https://github.com/dankilman/multiplex")
2152 (commit version)))
2153 (file-name (git-file-name name version))
2154 (sha256
2155 (base32 "1a662liqhiya47i6vrz3q03w08viqg3wj5j3g58mz175hcdcmmmv"))))
2156 (build-system pyproject-build-system)
2157 (native-inputs
2158 (list python-poetry-core
2159 python-pytest
2160 python-pytest-asyncio))
2161 (propagated-inputs
2162 (list python-aiofiles
2163 python-aiostream
2164 python-click
2165 python-easy-ansi-0.3
2166 python-pyte))
2167 (home-page "https://github.com/dankilman/multiplex")
2168 (synopsis "Parallel stream of outputs from multiple processes")
2169 (description
2170 "This package provides a functionality to view output of multiple
2171processes, in parallel, in the console, with an interactive TUI.")
2172 (license license:expat)))
2173
2174(define-public python-nrepl
2175 (package
2176 (name "python-nrepl")
2177 (version "0.3.1")
2178 (source
2179 (origin
2180 (method git-fetch)
2181 (uri (git-reference
2182 (url "https://git.sr.ht/~ngraves/nrepl-python")
2183 (commit version)))
2184 (file-name (git-file-name name version))
2185 (sha256
2186 (base32 "1ns8c5d29vi11qma1nnazsja5nibknp97ig0lg45wfpjbb5ngl2b"))))
2187 (build-system pyproject-build-system)
2188 (arguments
2189 (list
2190 #:test-flags
2191 #~(list "--numprocesses" (number->string (parallel-job-count)))))
2192 (native-inputs
2193 (list python-flit-core
2194 python-pytest
2195 python-pytest-asyncio
2196 python-pytest-xdist))
2197 (propagated-inputs
2198 (list python-fastbencode
2199 python-gevent
2200 python-ipython))
2201 (home-page "https://git.sr.ht/~ngraves/nrepl-python")
2202 (synopsis "NREPL server for Python")
2203 (description
2204 "This package provides an implementation of the @url{https://nrepl.org,
2205NREPL} protocol for Python.")
2206 (license license:gpl3+)))
2207
2208(define-public python-num2words
2209 (package
2210 (name "python-num2words")
2211 (version "0.5.14")
2212 (source
2213 (origin
2214 (method git-fetch)
2215 (uri (git-reference
2216 (url "https://github.com/savoirfairelinux/num2words")
2217 (commit (string-append "v" version))))
2218 (file-name (git-file-name name version))
2219 (sha256
2220 (base32 "1h52kgh1h4q9nkkplpwix2xs6f6wwvlxq09clznr2589xv39iqlz"))))
2221 (build-system pyproject-build-system)
2222 (arguments
2223 (list
2224 #:test-flags
2225 #~(list "--ignore" "tests/test_cli.py"))) ;Requires delegator.py.
2226 (native-inputs (list python-pytest python-setuptools))
2227 (propagated-inputs (list python-docopt))
2228 (home-page "https://github.com/savoirfairelinux/num2words")
2229 (synopsis "Convert numbers to words in multiple languages")
2230 (description
2231 "@code{num2words} is a library that converts numbers like 42 to words like
2232forty-two. It supports multiple languages, and can even generate ordinal
2233numbers like forty-second.")
2234 (license license:lgpl2.1)))
2235
2236(define-public python-orderly-set
2237 (package
2238 (name "python-orderly-set")
2239 (version "5.5.0")
2240 (source
2241 (origin
2242 (method url-fetch)
2243 (uri (pypi-uri "orderly_set" version))
2244 (sha256
2245 (base32 "1kp64m0nabhhb0zxr4f8idrmniraahnfwq41gx7adbyqwk48awg8"))))
2246 (build-system pyproject-build-system)
2247 (native-inputs (list python-flit-core python-pytest))
2248 (home-page "https://github.com/seperman/orderly-set")
2249 (synopsis "Multiple implementations of Ordered Set")
2250 (description "Orderly Set is a package containing multiple implementations
2251of Ordered Set.")
2252 (license license:expat)))
2253
2254(define-public python-pandocfilters
2255 (package
2256 (name "python-pandocfilters")
2257 (version "1.5.1")
2258 (source
2259 (origin
2260 (method url-fetch)
2261 (uri (pypi-uri "pandocfilters" version))
2262 (sha256
2263 (base32 "17lknixjja23jczlv8afgfky94m4gwl7wc36iczw1sz4brallaq0"))))
2264 (build-system pyproject-build-system)
2265 (arguments
2266 (list #:tests? #f)) ;require pandoc to run tests
2267 (native-inputs
2268 (list python-setuptools))
2269 (home-page "https://github.com/jgm/pandocfilters")
2270 (synopsis "Python module for writing Pandoc filters")
2271 (description "Pandoc is a powerful utility to transform various
2272input formats into a wide range of output formats. To alter the
2273exported output document, Pandoc allows the usage of filters, which
2274are pipes that read a JSON serialization of the Pandoc AST from stdin,
2275transform it in some way, and write it to stdout. It allows therefore
2276to alter the processing of Pandoc's supported input formats, for
2277instance one can add new syntax elements to markdown, etc.
2278
2279This package provides Python bindings.")
2280 (license license:bsd-3)))
2281
2282(define-public python-panflute
2283 (package
2284 (name "python-panflute")
2285 (version "2.3.1")
2286 (source
2287 (origin
2288 (method url-fetch)
2289 (uri (pypi-uri "panflute" version))
2290 (sha256
2291 (base32 "07wg5md93jcdkpiqljwr3p1xzvm6nf7vbiay0bp84fgg6hmd06sz"))))
2292 (build-system pyproject-build-system)
2293 (arguments
2294 (list #:tests? #f)) ;require pandoc to run tests
2295 (native-inputs
2296 (list python-setuptools))
2297 (propagated-inputs
2298 (list python-click
2299 python-pyyaml))
2300 (home-page "http://scorreia.com/software/panflute/")
2301 (synopsis "Pythonic Pandoc filters")
2302 (description
2303 "Panflute is a Python package that makes Pandoc filters fun to write.
2304It is a pythonic alternative to John MacFarlane's pandocfilters, from which it
2305is heavily inspired.")
2306 (license license:bsd-3)))
2307
2308(define-public python-pastel
2309 (package
2310 (name "python-pastel")
2311 (version "0.2.1")
2312 (source
2313 (origin
2314 (method git-fetch)
2315 (uri (git-reference
2316 (url "https://github.com/sdispater/pastel")
2317 (commit version)))
2318 (file-name (git-file-name name version))
2319 (sha256
2320 (base32 "1lwip9qaqfacgwnl5ykr0846y1nky228k7h7vzrgyqj1viapprsv"))))
2321 (build-system pyproject-build-system)
2322 (arguments
2323 (list
2324 #:test-flags
2325 #~(list "pastel" "tests/")
2326 #:phases
2327 #~(modify-phases %standard-phases
2328 (add-after 'unpack 'use-poetry-core
2329 (lambda _
2330 ;; Patch to use the core poetry API.
2331 (substitute* "pyproject.toml"
2332 (("poetry.masonry.api") "poetry.core.masonry.api")))))))
2333 (native-inputs (list python-poetry-core python-pytest))
2334 (home-page "https://github.com/sdispater/pastel")
2335 (synopsis "Library to colorize strings in your terminal")
2336 (description
2337 "Pastel is a simple library to help you colorize strings in your
2338terminal.")
2339 (license license:expat)))
2340
2341(define-public python-pathlib-abc
2342 (package
2343 (name "python-pathlib-abc")
2344 (version "0.5.0")
2345 (source
2346 (origin
2347 (method url-fetch)
2348 (uri (pypi-uri "pathlib_abc" version))
2349 (sha256
2350 (base32 "1hy2rscq3msbpjs17jbhsqjs800kcnv2w1n425yh1ly609a9x726"))))
2351 (build-system pyproject-build-system)
2352 (native-inputs (list python-pytest python-hatchling))
2353 (home-page "https://github.com/barneygale/pathlib-abc")
2354 (synopsis "Python base classes for rich path objects")
2355 (description
2356 "This package is a preview of pathlib functionality planned for a future
2357release of Python; specifically, it provides three ABCs that can be used to
2358implement path classes for non-local filesystems")
2359 (license license:psfl)))
2360
2361;; XXX: It's for [email protected], remove when no longer required.
2362(define-public python-pathlib-abc-for-python-pathy
2363 (hidden-package
2364 (package
2365 (inherit python-pathlib-abc)
2366 (version "0.1.1")
2367 (source
2368 (origin
2369 (method url-fetch)
2370 (uri (pypi-uri "pathlib_abc" version))
2371 (sha256
2372 (base32 "1gjsj7r331i54kbisy0zz1h9icx1hv6n97jaj5s7f3wvj7fpnkh8")))))))
2373
2374(define-public python-pbs-installer
2375 (package
2376 (name "python-pbs-installer")
2377 (version "2025.09.18")
2378 (source
2379 (origin
2380 (method git-fetch)
2381 (uri (git-reference
2382 (url "https://github.com/frostming/pbs-installer")
2383 (commit version)))
2384 (file-name (git-file-name name version))
2385 (sha256
2386 (base32 "0f5gpr4xp71d46vk2ggbb31bhagj4drf1ijl1lg1jd1apimr0jkf"))))
2387 (build-system pyproject-build-system)
2388 (arguments
2389 (list
2390 #:tests? #f ;no tests provided
2391 #:phases
2392 #~(modify-phases %standard-phases
2393 (add-before 'build 'set-version
2394 (lambda _
2395 (setenv "PDM_BUILD_SCM_VERSION" #$version))))))
2396 (native-inputs
2397 (list python-pdm-backend
2398 python-pytest))
2399 (propagated-inputs
2400 (list python-httpx
2401 python-zstandard))
2402 (home-page "https://github.com/frostming/pbs-installer")
2403 (synopsis "Installer for Python Build Standalone")
2404 (description
2405 "This package implements an installer for
2406@url{https://github.com/astral-sh/python-build-standalone, Python Build
2407Standalone}.")
2408 (license license:expat)))
2409
2410(define-public python-phply
2411 (package
2412 (name "python-phply")
2413 (version "1.2.6")
2414 (source
2415 (origin
2416 (method url-fetch)
2417 (uri (pypi-uri "phply" version))
2418 (sha256
2419 (base32 "05s9v2q6b2r0i65zfw4jf1nzb619zgw0anl08ls7ll2z516pf9qb"))))
2420 (build-system pyproject-build-system)
2421 (native-inputs
2422 (list python-pytest
2423 python-setuptools))
2424 (propagated-inputs
2425 (list python-ply))
2426 (home-page "https://github.com/viraptor/phply")
2427 (synopsis "PHP parser written in Python using PLY")
2428 (description
2429 "@code{phply} is a parser for the PHP programming language written using
2430PLY,a Lex/YACC-style parser generator toolkit for Python.")
2431 (license license:bsd-3)))
2432
2433(define-public python-puccinialin
2434 (package
2435 (name "python-puccinialin")
2436 (version "0.1.5")
2437 (source
2438 (origin
2439 (method url-fetch)
2440 (uri (pypi-uri "puccinialin" version))
2441 (sha256
2442 (base32 "00nnqcvvyn10zxkhgzcfn8czwvdzm0vh5z16plb0dxspccd69dmv"))))
2443 (build-system pyproject-build-system)
2444 (arguments
2445 (list #:tests? #f)) ;no tests in PyPI or Git
2446 (native-inputs
2447 (list python-hatchling))
2448 (propagated-inputs
2449 (list python-httpx
2450 python-platformdirs
2451 python-tqdm))
2452 (home-page "https://github.com/konstin/puccinialin")
2453 (synopsis "Helper for bootstrapping Rust-based build back-ends for Python")
2454 (description
2455 "This tool helps to install Rust into a temporary directory, allowing
2456support of Rust-based Python builds. Cargo and rustc are installed into a
2457cache directory, to avoid modifying the host's environment, and further
2458activated using a set of environment variables.")
2459 (license (list license:expat license:asl2.0))))
2460
2461(define-public python-py010parser
2462 (package
2463 (name "python-py010parser")
2464 (version "0.1.18")
2465 (source
2466 (origin
2467 (method git-fetch)
2468 (uri (git-reference
2469 (url "https://github.com/d0c-s4vage/py010parser")
2470 (commit (string-append "v" version))))
2471 (file-name (git-file-name name version))
2472 (sha256 (base32 "0yiyal9vxrni2yy3f6fwpndxz4kih6pwm9ikgrmhx4nq0fkb68m3"))
2473 (modules '((guix build utils)))
2474 (snippet #~(begin
2475 ;; Unbundle ply.
2476 (substitute* "requirements.txt"
2477 (("^six\\>.*") ""))
2478 (substitute* "setup.py"
2479 (("(packages += \\['py010parser').*\\]" all first)
2480 (string-append first "]")))
2481 (delete-file-recursively "py010parser/ply")
2482 (substitute* (find-files "py010parser" "\\.py$")
2483 ((" .*\\.ply\\>") " ply"))
2484 ;; Avoid regenerating the lex table.
2485 (substitute* '("py010parser/__init__.py"
2486 "py010parser/c_parser.py")
2487 (("(lex_optimize=)[A-Za-z]+(,)" all open close)
2488 (string-append open "False" close)))
2489 (substitute* '("py010parser/__init__.py"
2490 "setup.py")
2491 (("\\{\\{VERSION\\}\\}") #$version))
2492 (substitute* "setup.cfg"
2493 (("description-file") "description_file"))))))
2494 (build-system pyproject-build-system)
2495 (arguments (list #:test-backend #~'unittest
2496 #:test-flags #~'("discover" "tests")))
2497 (propagated-inputs (list python-regex python-ply))
2498 (native-inputs (list python-setuptools))
2499 (home-page "https://github.com/d0c-s4vage/py010parser")
2500 (synopsis "Parser of 010 editor's template")
2501 (description
2502 "@code{py010parser} is a Python library for parsing templates
2503for the Sweetscape 010 binary-format editor.")
2504 (license license:bsd-3)))
2505
2506(define-public python-pyasynchat
2507 (package
2508 (name "python-pyasynchat")
2509 (version "1.0.5")
2510 (source
2511 (origin
2512 (method git-fetch)
2513 (uri (git-reference
2514 (url "https://github.com/simonrob/pyasynchat")
2515 (commit (string-append "v" version))))
2516 (file-name (git-file-name name version))
2517 (sha256
2518 (base32 "1fsxr7rv662wwlpq8fklj8z6g0x9f693l0mk1qhib5v5xni99698"))))
2519 (build-system pyproject-build-system)
2520 (native-inputs
2521 (list python-pytest
2522 python-setuptools))
2523 (propagated-inputs
2524 (list python-pyasyncore))
2525 (home-page "https://github.com/simonrob/pyasynchat")
2526 (synopsis "Make asynchat available for Python 3.12 onwards")
2527 (description
2528 "This package contains the
2529@url{https://docs.python.org/3.11/library/asynchat.html, asynchat} module as
2530found in Python versions prior to 3.12. It is provided so that existing code
2531relying on @code{import asynchat} is able to continue being used without
2532significant refactoring.")
2533 (license license:psfl)))
2534
2535(define-public python-pyasyncore
2536 (package
2537 (name "python-pyasyncore")
2538 (version "1.0.5")
2539 (source
2540 (origin
2541 (method git-fetch)
2542 (uri (git-reference
2543 (url "https://github.com/simonrob/pyasyncore")
2544 (commit (string-append "v" version))))
2545 (file-name (git-file-name name version))
2546 (sha256
2547 (base32 "11fk83w9dwnwhg5z1524w6h021yvn0aqn2hsf929yzyk0rmsr6c2"))))
2548 (build-system pyproject-build-system)
2549 (native-inputs (list python-pytest python-setuptools))
2550 (home-page "https://github.com/simonrob/pyasyncore")
2551 (synopsis "Make asyncore available for Python 3.12 onwards")
2552 (description
2553 "This package contains the
2554@url{https://docs.python.org/3.11/library/asyncore.html, asyncore} module as
2555found in Python versions prior to 3.12. It is provided so that existing code
2556relying on @code{import asyncore} is able to continue being used without
2557significant refactoring.")
2558 (license license:psfl)))
2559
2560(define-public python-pyconify
2561 (package
2562 (name "python-pyconify")
2563 (version "0.2.1")
2564 (source
2565 (origin
2566 (method git-fetch)
2567 (uri (git-reference
2568 (url "https://github.com/pyapp-kit/pyconify")
2569 (commit (string-append "v" version))))
2570 (file-name (git-file-name name version))
2571 (sha256
2572 (base32 "19amhlha8n9fh9sq4iy1rpasmcagslxbvbjlnv012zndcca22mk6"))))
2573 (build-system pyproject-build-system)
2574 (arguments
2575 (list #:tests? #f)) ;require netwok access
2576 (native-inputs
2577 (list python-hatch-vcs
2578 python-hatchling))
2579 (propagated-inputs
2580 (list python-requests))
2581 (home-page "https://github.com/pyapp-kit/pyconify")
2582 (synopsis "Python wrapper for the Iconify API")
2583 (description
2584 "This packge provides a Python wrapper for the
2585@url{https://github.com/iconify, Iconify} API. Iconify is a versatile icon
2586framework that includes 100+ icon sets with more than 100,000 icons from
2587FontAwesome, Material Design Icons, DashIcons, Feather Icons, EmojiOne, Noto
2588Emoji and many other open source icon sets.")
2589 (license license:bsd-3)))
2590
2591(define-public python-pygls
2592 (package
2593 (name "python-pygls")
2594 (version "2.0.0")
2595 (source
2596 (origin
2597 (method git-fetch)
2598 (uri (git-reference
2599 (url "https://github.com/openlawlibrary/pygls")
2600 (commit (string-append "v" version))))
2601 (file-name (git-file-name name version))
2602 (sha256
2603 (base32 "1y1adnmr4w4c3zk1lzk21fdz9ab9c1az7acm1rz262h0q7bwl0km"))))
2604 (build-system pyproject-build-system)
2605 ;; tests: 265 passed, 8 skipped
2606 (native-inputs
2607 (list python-pytest
2608 python-pytest-asyncio
2609 python-poetry-core))
2610 (propagated-inputs
2611 (list python-attrs
2612 python-cattrs
2613 python-lsprotocol))
2614 (home-page "https://github.com/openlawlibrary/pygls")
2615 (synopsis "Pythonic generic language server")
2616 (description
2617 "This package provides a pythonic generic language server (pronounced
2618like pie glass').")
2619 (license license:asl2.0)))
2620
2621(define-public python-pyls-spyder
2622 (package
2623 (name "python-pyls-spyder")
2624 (version "0.4.0")
2625 (source
2626 (origin
2627 (method git-fetch)
2628 (uri (git-reference
2629 (url "https://github.com/spyder-ide/pyls-spyder")
2630 (commit (string-append "v" version))))
2631 (file-name (git-file-name name version))
2632 (sha256
2633 (base32 "11ajbsia60d4c9s6m6rbvaqp1d69fcdbq6a98lkzkkzv2b9pdhkk"))))
2634 (build-system pyproject-build-system)
2635 (propagated-inputs (list python-lsp-server))
2636 (native-inputs (list python-pytest python-setuptools))
2637 (home-page "https://github.com/spyder-ide/pyls-spyder")
2638 (synopsis "Spyder extensions for @code{python-lsp-server}")
2639 (description "This package provides Spyder-specific extras for the
2640Language Server Protocol (LSP) on Python, such as document symbol searching
2641and others.")
2642 (license license:expat)))
2643
2644(define-public python-pylsp-rope
2645 (package
2646 (name "python-pylsp-rope")
2647 (version "0.1.17")
2648 (source
2649 (origin
2650 (method git-fetch)
2651 (uri (git-reference
2652 (url "https://github.com/python-rope/pylsp-rope")
2653 (commit version)))
2654 (file-name (git-file-name name version))
2655 (sha256
2656 (base32 "1mgmlqv75z6cpqqak4vqprrgdhxa4b2ll56zijjx9bkn0rjr4jc0"))))
2657 (build-system pyproject-build-system)
2658 (native-inputs
2659 (list python-pytest
2660 python-setuptools))
2661 (propagated-inputs
2662 (list python-lsp-server
2663 python-rope))
2664 (home-page "https://github.com/python-rope/pylsp-rope")
2665 (synopsis
2666 "Extended refactoring capabilities for Python LSP Server using Rope")
2667 (description
2668 "This plugs in to Python LSP Server, adding code actions that refactor
2669using Rope.")
2670 (license license:expat)))
2671
2672(define-public python-pypydispatcher
2673 (package
2674 (name "python-pypydispatcher")
2675 (version "2.1.2")
2676 (source
2677 (origin
2678 (method url-fetch)
2679 (uri (pypi-uri "PyPyDispatcher" version))
2680 (sha256
2681 (base32 "1wihj7xgq5fk91li0id6a311lyrnmq7ch8rbr9dm7lprrzgwbgmn"))))
2682 (build-system pyproject-build-system)
2683 (native-inputs
2684 (list python-pytest
2685 python-setuptools
2686 python-setuptools-scm))
2687 (home-page "https://github.com/scrapy/pypydispatcher")
2688 (synopsis "Multi-producer-multi-consumer signal dispatching mechanism")
2689 (description
2690 "This package implements a functionality of pulti-producer-multi-consumer
2691signal dispatching mechanism. It's a fork of
2692http://pydispatcher.sourceforge.net/ with PyPy support.")
2693 (license license:bsd-3)))
2694
2695(define-public python-pyread-eagle
2696 (package
2697 (name "python-pyread-eagle")
2698 (version "1.0.3")
2699 (source
2700 (origin
2701 (method git-fetch)
2702 (uri (git-reference
2703 (url "https://github.com/kyleaoman/pyread_eagle")
2704 (commit version)))
2705 (file-name (git-file-name name version))
2706 (sha256
2707 (base32 "0x8j5wkp46hbfccm88c7dmf8ak488llv1748i2g94npic2rx8yd4"))))
2708 (build-system pyproject-build-system)
2709 (arguments
2710 ;; TODO: Tests need additional test data, see tests/test_regions.py.
2711 (list #:tests? #f))
2712 (native-inputs
2713 (list python-setuptools))
2714 (propagated-inputs
2715 (list python-h5py
2716 python-numpy))
2717 (home-page "https://github.com/kyleaoman/pyread_eagle")
2718 (synopsis "Read routines for Eagle HDF5 snapshots for Python")
2719 (description
2720 "This package provides a pure-python port of
2721@url{https://github.com/jchelly/read_eagle, J. Helly's read_eagle}.")
2722 (license license:gpl3)))
2723
2724(define-public python-pyte
2725 (package
2726 (name "python-pyte")
2727 (version "0.8.2")
2728 (source
2729 (origin
2730 (method git-fetch)
2731 (uri (git-reference
2732 (url "https://github.com/selectel/pyte")
2733 (commit version)))
2734 (file-name (git-file-name name version))
2735 (sha256
2736 (base32 "1cdhnl6rp4kcbs3s766519k80pf5ma18mgv6cyidf4nbgysjavmv"))))
2737 (build-system pyproject-build-system)
2738 (propagated-inputs (list python-wcwidth))
2739 (native-inputs (list python-pytest python-setuptools python-wheel))
2740 (home-page "https://pyte.readthedocs.io/")
2741 (synopsis "Simple VTXXX-compatible terminal emulator")
2742 (description "@code{pyte} is an in-memory VTxxx-compatible terminal
2743emulator. @var{VTxxx} stands for a series of video terminals, developed by
2744DEC between 1970 and 1995. The first and probably most famous one was the
2745VT100 terminal, which is now a de-facto standard for all virtual terminal
2746emulators.
2747
2748pyte is a fork of vt102, which was an incomplete pure Python implementation
2749of VT100 terminal.")
2750 (license license:lgpl3+)))
2751
2752(define-public python-pytokens
2753 (package
2754 (name "python-pytokens")
2755 (version "0.4.1")
2756 (source
2757 (origin
2758 (method git-fetch)
2759 (uri (git-reference
2760 (url "https://github.com/tusharsadhwani/pytokens")
2761 (commit version)))
2762 (file-name (git-file-name name version))
2763 (sha256
2764 (base32 "0j5ip72ldyazgznbwxzmrp4j4hwlk2x9yvzdk5yaivnkknhqxq0c"))))
2765 (build-system pyproject-build-system)
2766 (arguments
2767 (list
2768 #:phases
2769 #~(modify-phases %standard-phases
2770 (add-before 'build 'build-with-cython
2771 (lambda _
2772 (setenv "PYTOKENS_USE_MYPYC" "0"))))))
2773 (native-inputs
2774 (list python-cython
2775 python-pytest
2776 python-setuptools))
2777 (home-page "https://github.com/tusharsadhwani/pytokens")
2778 (synopsis "Spec compliant Python 3.14+ tokenizer")
2779 (description
2780 "This package provides a Fast, spec compliant Python 3.14+ tokenizer that
2781runs on older Pythons.")
2782 (license license:expat)))
2783
2784(define-public python-pyuca
2785 (package
2786 (name "python-pyuca")
2787 (version "1.2")
2788 (source
2789 (origin
2790 (method git-fetch)
2791 (uri (git-reference
2792 (url "https://github.com/jtauber/pyuca")
2793 (commit (string-append "v" version))))
2794 (file-name (git-file-name name version))
2795 (sha256
2796 (base32 "1zi301f1kpzcnkgd90ax8f1xhylcxy2c9fy3ym4pwc9mzbxs9198"))))
2797 (build-system pyproject-build-system)
2798 (arguments
2799 (list #:tests? #f)) ; there are no tests
2800 (native-inputs (list python-setuptools))
2801 (home-page "https://github.com/jtauber/pyuca")
2802 (synopsis "Python implementation of the Unicode Collation Algorithm")
2803 (description "This package provides a Python implementation of the
2804@url{http://unicode.org/reports/tr10/, Unicode Collation Algorithm}.")
2805 (license license:expat)))
2806
2807(define-public python-pyxdameraulevenshtein
2808 (package
2809 (name "python-pyxdameraulevenshtein")
2810 (version "1.8.0")
2811 (source
2812 (origin
2813 (method git-fetch)
2814 (uri (git-reference
2815 (url "https://github.com/lanl/pyxDamerauLevenshtein")
2816 (commit (string-append "v" version))))
2817 (file-name (git-file-name name version))
2818 (sha256
2819 (base32 "1qmmpgf8qxv5pfnqp328qqsj34jvyc63w8659xx18d8405agcjdr"))))
2820 (build-system pyproject-build-system)
2821 (native-inputs (list python-cython python-pytest python-setuptools))
2822 (home-page "https://github.com/lanl/pyxDamerauLevenshtein")
2823 (synopsis "Damerau-Levenshtein edit distance algorithm")
2824 (description
2825 "@code{pyxDamerauLevenshtein} implements the Damerau-Levenshtein (DL)
2826edit distance algorithm for Python in Cython for high performance.")
2827 (license license:bsd-3)))
2828
2829(define-public python-represent
2830 (package
2831 (name "python-represent")
2832 (version "2.1")
2833 (source
2834 (origin
2835 (method url-fetch)
2836 (uri (pypi-uri "Represent" version))
2837 (sha256
2838 (base32 "1b5wbnkjirscfqwcb6ik8klky0ajm4qs2yvabqxnpfp72if02b8b"))))
2839 (build-system pyproject-build-system)
2840 (native-inputs
2841 ;; XXX This might be too much for testing, maybe switch them off as it's
2842 ;; a simple middleware library.
2843 (list python-ipython
2844 python-pytest
2845 python-rich
2846 python-setuptools))
2847 (home-page "https://github.com/RazerM/represent")
2848 (synopsis "Create @code{__repr__} automatically or declaratively for Python")
2849 (description
2850 "This package implements a functionality to generate Python
2851@code{__repr__} methods automatically or declaratively.")
2852 (license license:expat)))
2853
2854(define-public python-rich-argparse
2855 (package
2856 (name "python-rich-argparse")
2857 (version "1.8.0")
2858 (source
2859 (origin
2860 (method git-fetch)
2861 (uri (git-reference
2862 (url "https://github.com/hamdanal/rich-argparse")
2863 (commit (string-append "v" version))))
2864 (file-name (git-file-name name version))
2865 (sha256
2866 (base32
2867 "0kz77mv9grlqpjzqvmslqyl86xk40ync9g5ihp6kziw2gwk71vyd"))))
2868 (build-system pyproject-build-system)
2869 (native-inputs
2870 (list python-pytest
2871 python-hatchling))
2872 (propagated-inputs
2873 (list python-rich))
2874 (home-page "https://github.com/hamdanal/rich-argparse")
2875 (synopsis "Format argparse and optparse help using rich")
2876 (description
2877 "This package improves the look and readability of argparse's help while
2878requiring minimal changes to the code.")
2879 (license license:expat)))
2880
2881(define-public python-rich-rst
2882 (package
2883 (name "python-rich-rst")
2884 (version "2.0.1")
2885 (source
2886 (origin
2887 (method git-fetch)
2888 (uri (git-reference
2889 (url "https://github.com/wasi-master/rich-rst")
2890 (commit (string-append "v" version))))
2891 (file-name (git-file-name name version))
2892 (sha256
2893 (base32 "1in5rjzgxyjaqj1vqq8mrcwxxm00whqd2bw8lqs717alxw3f4ygf"))))
2894 (build-system pyproject-build-system)
2895 (native-inputs
2896 (list python-pytest
2897 python-setuptools))
2898 (propagated-inputs
2899 (list python-pygments
2900 python-rich))
2901 (home-page "https://wasi-master.github.io/rich-rst")
2902 (synopsis "Beautiful reStructuredText renderer for Rich")
2903 (description
2904 "This package turns @url{https://docutils.sourceforge.io/rst.html, reST}
2905documents into @url{https://rich.readthedocs.io/en/latest/, Rich}
2906renderables.")
2907 (license license:expat)))
2908
2909(define-public python-roman-numerals
2910 (package
2911 (name "python-roman-numerals")
2912 (version "3.1.0")
2913 (source
2914 (origin
2915 (method url-fetch)
2916 (uri (pypi-uri "roman_numerals" version))
2917 (sha256
2918 (base32 "0l956dwchx6hjncax2kh7xdk8ymfz90jhrxkpmhx6jwd3vy3ckiq"))))
2919 (build-system pyproject-build-system)
2920 (native-inputs (list python-flit-core python-pytest))
2921 (home-page "https://pypi.org/project/roman-numbers/")
2922 (synopsis "Python library to manipulate Roman numerals")
2923 (description "This package provides a Python library to manipulate
2924well-formed Roman numerals.")
2925 (license license:expat)))
2926
2927(define-public python-rush
2928 (package
2929 (name "python-rush")
2930 (version "2021.04.0")
2931 (source
2932 (origin
2933 (method git-fetch)
2934 (uri (git-reference
2935 (url "https://github.com/sigmavirus24/rush")
2936 (commit version)))
2937 (file-name (git-file-name name version))
2938 (sha256
2939 (base32 "0brqjw34n14rij58giwyqlagjnp11npvsrlwrqj5pbn7rmgd2mhx"))))
2940 (build-system pyproject-build-system)
2941 (arguments
2942 (list
2943 #:test-flags
2944 ;; E ValueError: Redis URL must specify one of the following schemes
2945 ;; (redis://, rediss://, unix://)
2946 #~(list "-k" (string-append "not test_valid_url[redis://]"
2947 " and not test_valid_url[rediss://]"))))
2948 (native-inputs
2949 (list python-mock
2950 python-redis
2951 python-rfc3986
2952 python-pytest
2953 python-setuptools))
2954 (propagated-inputs
2955 (list python-attrs))
2956 (home-page "https://github.com/sigmavirus24/rush")
2957 (synopsis "Throttling and rate-limiting algorithms for Python")
2958 (description
2959 "This package provides is a small collection of algorithms that can be
2960reused when throttling user interactions with a resource (e.g., an API).")
2961 (license license:expat)))
2962
2963(define-public python-rustworkx
2964 (package
2965 (name "python-rustworkx")
2966 (version "0.17.1")
2967 (source
2968 (origin
2969 (method git-fetch)
2970 (uri (git-reference
2971 (url "https://github.com/Qiskit/rustworkx")
2972 (commit version)))
2973 (file-name (git-file-name name version))
2974 (sha256
2975 (base32 "0sr0wrfb9wzxcljhb7swwgk2hdxqjfmcfj785jq624mx14kqc4k8"))))
2976 (build-system pyproject-build-system)
2977 (arguments
2978 (list
2979 #:test-flags #~(list "--test-path" "tests")
2980 #:imported-modules (append %cargo-build-system-modules
2981 %pyproject-build-system-modules)
2982 #:modules '(((guix build cargo-build-system)
2983 #:prefix cargo:)
2984 (guix build pyproject-build-system)
2985 (guix build utils))
2986 #:phases
2987 #~(modify-phases %standard-phases
2988 (add-after 'unpack 'prepare-cargo-build-system
2989 (lambda args
2990 (for-each
2991 (lambda (phase)
2992 (format #t "Running cargo phase: ~a~%" phase)
2993 (apply (assoc-ref cargo:%standard-phases phase)
2994 #:cargo-target #$(cargo-triplet) args))
2995 '(unpack-rust-crates
2996 configure
2997 check-for-pregenerated-files
2998 patch-cargo-checksums))))
2999 (add-before 'check 'pre-check
3000 (lambda _
3001 ;; Delete the source directory to avoid interference.
3002 (delete-file-recursively "rustworkx")
3003 ;; Matplotlib needs to be able to write its configuration file
3004 ;; somewhere.
3005 (setenv "MPLCONFIGDIR" "/tmp")
3006 ;; For fontconfig.
3007 (setenv "XDG_CACHE_HOME" "/tmp"))))))
3008 (propagated-inputs (list python-numpy))
3009 (native-inputs
3010 (append (list graphviz
3011 python-matplotlib
3012 python-networkx
3013 python-pillow
3014 python-setuptools
3015 python-setuptools-rust
3016 python-stestr
3017 rust
3018 `(,rust "cargo"))
3019 (or (and=> (%current-target-system)
3020 (compose list make-rust-sysroot))
3021 '())))
3022 (inputs (cargo-inputs 'python-rustworkx))
3023 (home-page "https://www.rustworkx.org")
3024 (synopsis "High performance graph library for Python")
3025 (description
3026 "@code{rustworkx} is a Python package for working with graphs and complex
3027networks. It enables the creation, interaction with, and study of graphs and
3028networks.")
3029 (license license:asl2.0)))
3030
3031(define-public python-safety-schemas
3032 (package
3033 (name "python-safety-schemas")
3034 (version "0.0.14")
3035 (source
3036 (origin
3037 (method url-fetch)
3038 (uri (pypi-uri "safety_schemas" version))
3039 (sha256
3040 (base32 "0smgszbd3nb7jh61cgpycqhcvfwwdyaai5amw8mmf6g9b5x3z5a9"))))
3041 (build-system pyproject-build-system)
3042 (arguments
3043 (list
3044 #:test-flags
3045 #~(list "-k" (string-join
3046 ;; These tests are failing for unknown reasons.
3047 ;; (AssertionError).
3048 (list "not test_model[ConfigModel-ConfigModel]"
3049 "test_model[MetadataModel-MetadataModel]"
3050 "test_model[PolicyFileModel-PolicyFileModel]"
3051 "test_model[ProjectModel-ProjectModel]"
3052 "test_model[ReportModel-ReportModel]")
3053 " and not "))))
3054 (propagated-inputs (list python-dparse
3055 python-packaging
3056 python-pydantic
3057 python-ruamel.yaml
3058 python-typing-extensions))
3059 (native-inputs (list python-deepdiff python-hatchling python-pytest))
3060 ;; Source code is not yet published outside of PyPI:
3061 ;; https://github.com/pyupio/safety/issues/494
3062 (home-page "https://pypi.org/project/safety-schemas/")
3063 (synopsis "Schemas for Safety tools")
3064 (description "This package contains models and schemas used by Safety.")
3065 (license license:expat)))
3066
3067(define-public python-senf
3068 (package
3069 (name "python-senf")
3070 (version "1.5.1")
3071 (source
3072 (origin
3073 (method git-fetch)
3074 (uri (git-reference
3075 (url "https://github.com/quodlibet/senf")
3076 (commit (string-append "v" version))))
3077 (file-name (git-file-name name version))
3078 (sha256
3079 (base32 "023zqvrxdpss9r6bmp5arhy7bhr8j0qzgzwy04gydcbxhg2kh6nq"))))
3080 (build-system pyproject-build-system)
3081 (arguments
3082 (list
3083 #:test-flags
3084 ;; These tests fail due to various home fetching methods during build.
3085 '(list "--deselect" "tests/test_api.py::test_getuserdir"
3086 "--deselect" "tests/test_api.py::test_expanduser_user")))
3087 (native-inputs (list python-pytest python-setuptools))
3088 (home-page "https://github.com/quodlibet/senf")
3089 (synopsis "Text, bytes and paths conversion functions for Python")
3090 (description "Senf introduces a new platform native string type called
3091fsnative. It adds functions to convert text, bytes and paths to and from that
3092new type and helper functions to integrate it nicely with the Python
3093stdlib.")
3094 (license license:expat)))
3095
3096(define-public python-session-info2
3097 (package
3098 (name "python-session-info2")
3099 (version "0.2")
3100 (source
3101 (origin
3102 (method url-fetch)
3103 (uri (pypi-uri "session_info2" version))
3104 (sha256
3105 (base32 "0xs1mcdz0hf626m3421ryv4f7b5rixz2hm8x88czx2i9196x69g9"))))
3106 (build-system pyproject-build-system)
3107 (arguments
3108 (list
3109 #:test-flags
3110 #~(list "--deselect=tests/test_synthetic.py::test_gpu"
3111 ;; Tests require Jupyter Client.
3112 "--ignore=tests/test_subprocess.py")))
3113 (native-inputs
3114 (list python-hatch-docstring-description
3115 python-hatch-vcs
3116 python-hatchling
3117 python-pytest
3118 python-pytest-asyncio))
3119 (home-page "https://session-info2.readthedocs.io/")
3120 (synopsis "Print versions of imported packages")
3121 (description
3122 "This package implements a functionality to print versions of imported
3123Python packages.")
3124 (license license:mpl2.0)))
3125
3126(define-public python-show-in-file-manager
3127 (package
3128 (name "python-show-in-file-manager")
3129 (version "1.1.6")
3130 (source
3131 (origin
3132 (method git-fetch)
3133 (uri (git-reference
3134 (url "https://github.com/damonlynch/showinfilemanager")
3135 (commit (string-append "v" version))))
3136 (file-name (git-file-name name version))
3137 (sha256
3138 (base32 "08vlrkhjjk1fklbgfrpnc6gz1gpzny90r53rr68ni3j8ld7p7vra"))))
3139 (build-system pyproject-build-system)
3140 (arguments (list #:tests? #f)) ;no tests upstream
3141 (native-inputs
3142 (list python-hatch-argparse-manpage python-hatchling python-pytest))
3143 (propagated-inputs
3144 (list python-packaging python-pyxdg))
3145 (home-page "https://github.com/damonlynch/showinfilemanager")
3146 (synopsis "Open the system file manager and select files in it")
3147 (description
3148 "Show in File Manager is a Python package to open the system file manager
3149and optionally select files in it. The point is not to open the files, but to
3150select them in the file manager, thereby highlighting the files and allowing
3151the user to quickly do something with them.")
3152 (license license:expat)))
3153
3154(define-public python-shxparser
3155 (package
3156 (name "python-shxparser")
3157 (version "0.0.2")
3158 (source
3159 (origin
3160 (method url-fetch)
3161 (uri (pypi-uri "shxparser" version))
3162 (sha256
3163 (base32 "0w7j5ywskandp91v74966pw1pvq9d5zrx5gkjcn84xi8wsyf8hc5"))))
3164 (build-system pyproject-build-system)
3165 (arguments (list #:test-backend #~'unittest))
3166 (native-inputs
3167 (list python-svgelements python-setuptools))
3168 (home-page "https://github.com/tatarize/shxparser")
3169 (synopsis "SHX line font parser")
3170 (description
3171 "This is a pure python parser for SHX Hershey font files that are an
3172AutoCad format which can encode single line fonts. This format is used for
3173many CNC and laser operations.")
3174 (license license:expat)))
3175
3176(define-public python-simplify-polyline
3177 (package
3178 (name "python-simplify-polyline")
3179 (version "0.1.0")
3180 (source
3181 (origin
3182 (method url-fetch)
3183 (uri (pypi-uri "simplify_polyline" version))
3184 (sha256
3185 (base32 "08f6bvwbg04z19pirq4ynsiq89yhbzqh9g6zbnp9fvdnmics7hgw"))))
3186 (build-system pyproject-build-system)
3187 (native-inputs
3188 (list python-pytest
3189 python-setuptools
3190 python-setuptools-scm
3191 python-wheel))
3192 (propagated-inputs
3193 (list python-numpy))
3194 (home-page "https://github.com/ShayHill/simplify_polyline")
3195 (synopsis "Simplify an open or closed polyline")
3196 (description
3197 "This package implements functionality to work with plyline.
3198Features:
3199@itemize
3200@item Visvalingham-Whyatt - removes the smallest triangles formed by
3201three consecutive points in a polyline or polygon
3202@item Douglas-Peucker - gives a better representation of the convex hull
3203@end itemize")
3204 (license license:expat)))
3205
3206(define-public python-siphash24
3207 (package
3208 (name "python-siphash24")
3209 (version "1.8")
3210 (source
3211 (origin
3212 (method git-fetch)
3213 (uri (git-reference
3214 (url "https://github.com/dnicolodi/python-siphash24/")
3215 (commit (string-append "v" version))))
3216 (file-name (git-file-name name version))
3217 (sha256
3218 (base32 "0i75mrm2w10njxqb3g1kp9v8r5d22a0v8vc68v0k8c7l3ncf0lp7"))))
3219 (build-system pyproject-build-system)
3220 (arguments
3221 (list
3222 #:test-backend #~'custom
3223 #:test-flags #~(list "test.py")
3224 #:phases
3225 #~(modify-phases %standard-phases
3226 (add-after 'unpack 'patch-pyproject
3227 (lambda _
3228 (substitute* "pyproject.toml"
3229 ;; meson-python: error: Field `project.license` has an invalid
3230 ;; type, expecting a dictionary of strings (got `Apache-2.0 OR
3231 ;; LGPL-2.1-or-later`)
3232 (("^license = .*")
3233 "license = {text = \"Apache-2.0 OR LGPL-2.1-or-later\"}\n")))))))
3234 (native-inputs
3235 (list pkg-config
3236 python-meson
3237 python-pytest))
3238 (inputs
3239 (list c-siphash))
3240 (home-page "https://github.com/dnicolodi/python-siphash24/")
3241 (synopsis "Streaming-capable SipHash-1-3 and SipHash-2-4 Implementation")
3242 (description
3243 "This package provides a C-based implementation of
3244@url{https://cr.yp.to/siphash/siphash-20120918.pdf, SipHash} with an interface
3245compatible with the hash functions provided by the hashlib standard library
3246module. SipHash-1-3 and SipHash-2-4 variants are currently implemented.")
3247 ;; They are in LICENSES directory:
3248 (license (list license:asl2.0
3249 license:lgpl2.1+))))
3250
3251(define-public python-snakesay
3252 (package
3253 (name "python-snakesay")
3254 (version "0.10.4")
3255 (source
3256 (origin
3257 (method git-fetch)
3258 (uri (git-reference
3259 (url "https://github.com/pythonanywhere/snakesay")
3260 (commit (string-append "v" version))))
3261 (file-name (git-file-name name version))
3262 (sha256
3263 (base32 "06p776nf2v5r9643i6f7hv8z984bjiz0k6z9whzla6b2y637mk93"))))
3264 (build-system pyproject-build-system)
3265 (arguments
3266 ;; XXX: We don't have python-uv-build yet.
3267 (list #:build-backend "setuptools.build_meta"))
3268 (native-inputs (list python-pytest python-setuptools))
3269 (home-page "https://github.com/pythonanywhere/snakesay")
3270 (synopsis "Like @command{cowsay} but with Python flavor")
3271 (description
3272 "This package provides a simple ASCII art pictures generator of a
3273Snake with a message.")
3274 (license license:expat)))
3275
3276(define-public python-jaconv
3277 (package
3278 (name "python-jaconv")
3279 ;; Last release is not tagged.
3280 (properties '((commit . "d4273468279536adb5375ffbfcd34578c6a95b70")
3281 (revision . "0")))
3282 (version (git-version "0.4.0"
3283 (assoc-ref properties 'revision)
3284 (assoc-ref properties 'commit)))
3285 (source
3286 (origin
3287 (method git-fetch)
3288 (uri (git-reference
3289 (url "https://github.com/ikegami-yukino/jaconv")
3290 (commit (assoc-ref properties 'commit))))
3291 (file-name (git-file-name name version))
3292 (sha256
3293 (base32 "00lvkr6jsm2h70658hly5w81ybkfp3x0rmgzpcn0s52d4n4m21fb"))))
3294 (build-system pyproject-build-system)
3295 (native-inputs (list python-setuptools python-pynose))
3296 (home-page "https://github.com/ikegami-yukino/jaconv")
3297 (synopsis
3298 "Pure-Python Japanese character interconverter for Hiragana, Katakana,
3299Hankaku, Zenkaku")
3300 (description
3301 "jaconv (Japanese Converter) is interconverter for Hiragana, Katakana,
3302Hankaku (half-width character) and Zenkaku (full-width character)")
3303 (license license:expat)))
3304
3305(define-public python-janus
3306 (package
3307 (name "python-janus")
3308 (version "1.0.0")
3309 (source
3310 (origin
3311 (method url-fetch)
3312 (uri (pypi-uri "janus" version))
3313 (sha256
3314 (base32 "04hnrdcf03g1s0x3sr72sh9gnszz6kyfsl9dg8a4n0zvvhn6z5yz"))))
3315 (build-system pyproject-build-system)
3316 (native-inputs
3317 (list python-pytest python-pytest-asyncio
3318 python-setuptools python-wheel))
3319 (propagated-inputs (list python-typing-extensions))
3320 (home-page "https://github.com/aio-libs/janus/")
3321 (synopsis
3322 "Sync-async queue to interoperate between asyncio tasks and classic threads")
3323 (description
3324 "Mixed sync-async queue, supposed to be used for communicating between
3325classic synchronous (threaded) code and asynchronous (in terms of
3326@url{https://docs.python.org/3/library/asyncio.html,asyncio}) one. Like
3327@url{https://en.wikipedia.org/wiki/Janus,Janus god} the queue object from the
3328library has two faces: synchronous and asynchronous interface. Synchronous is
3329fully compatible with
3330@url{https://docs.python.org/3/library/queue.html,standard queue},
3331asynchronous one follows
3332@url{https://docs.python.org/3/library/asyncio-queue.html,asyncio queue
3333design}.")
3334 (license license:asl2.0)))
3335
3336(define-public python-concurrent-log-handler
3337 (package
3338 (name "python-concurrent-log-handler")
3339 (version "0.9.25")
3340 ;; No tests in the PyPI tarball.
3341 (source
3342 (origin
3343 (method git-fetch)
3344 (uri (git-reference
3345 (url "https://github.com/Preston-Landers/concurrent-log-handler")
3346 (commit version)))
3347 (file-name (git-file-name name version))
3348 (sha256
3349 (base32 "0jp4zkm0idfdsrq3jzb52iqfkh6xzm7sacz1sa34ffnkyqdk3xzh"))))
3350 (build-system pyproject-build-system)
3351 (arguments
3352 (list
3353 ;; XXX: Tests are broken, no new version fixing them yet.
3354 #:tests? #f))
3355 (native-inputs
3356 (list python-hatchling))
3357 (propagated-inputs
3358 (list python-portalocker))
3359 (home-page "https://github.com/Preston-Landers/concurrent-log-handler")
3360 (synopsis
3361 "Additional log handler for Python's standard @code{logging} package")
3362 (description
3363 "This package provides an additional log handler for Python's standard
3364@code{logging} package (PEP 282). This handler will write log events to a log
3365file which is rotated when the log file reaches a certain size. Multiple
3366processes can safely write to the same log file concurrently and rotated logs
3367can be gzipped if desired. An optional threaded queue logging handler is
3368provided to perform logging in the background.")
3369 (license license:asl2.0)))
3370
3371(define-public python-lazy
3372 (package
3373 (name "python-lazy")
3374 (version "1.6")
3375 (source
3376 (origin
3377 (method url-fetch)
3378 (uri (pypi-uri "lazy" version))
3379 (sha256
3380 (base32 "1sfk1v54dyjxvilcxf9vlnypc5z0mg0i2inb117k5s09qx7349vi"))))
3381 (build-system pyproject-build-system)
3382 (native-inputs (list python-pytest python-setuptools python-wheel))
3383 (home-page "https://github.com/stefanholek/lazy")
3384 (synopsis "Lazy attributes for Python objects")
3385 (description "This package provides a decorator to create lazy
3386attributes.")
3387 (license license:bsd-2)))
3388
3389(define-public python-logfury
3390 (package
3391 (name "python-logfury")
3392 (version "1.0.1")
3393 (source
3394 (origin
3395 (method url-fetch)
3396 (uri (pypi-uri "logfury" version))
3397 (sha256
3398 (base32 "09kanw1iv61hgmd858xkc9kck8ia91qdyb954i4m7bdrxan5s2hk"))))
3399 (build-system pyproject-build-system)
3400 (native-inputs
3401 (list python-pytest
3402 python-setuptools
3403 python-setuptools-scm
3404 python-testfixtures
3405 python-wheel))
3406 (home-page "https://github.com/reef-technologies/logfury/")
3407 (synopsis "Logging of method calls for python libraries")
3408 (description
3409 "Logfury is a tool for python library maintainers. It allows for
3410responsible, low-boilerplate logging of method calls.")
3411 (license license:bsd-3)))
3412
3413(define-public python-logzero
3414 (package
3415 (name "python-logzero")
3416 (version "1.7.0")
3417 (source
3418 (origin
3419 (method git-fetch)
3420 (uri (git-reference
3421 (url "https://github.com/metachris/logzero")
3422 (commit (string-append "v" version))))
3423 (file-name (git-file-name name version))
3424 (sha256
3425 (base32 "1i9c0kynyjws5c24ga0sbidyfww3w5fy98gs67xsyfz4nr7w84b3"))))
3426 (build-system pyproject-build-system)
3427 (native-inputs (list python-pytest python-setuptools))
3428 (home-page "https://github.com/metachris/logzero")
3429 (synopsis "Robust and effective logging for Python")
3430 (description
3431 "@code{logzero} provides a fully configured Python logger object for
3432easy logging and rotating to a console or a file.")
3433 (license license:expat)))
3434
3435(define-public python-logbook
3436 (package
3437 (name "python-logbook")
3438 (version "1.8.2")
3439 (source
3440 (origin
3441 (method url-fetch)
3442 (uri (pypi-uri "logbook" version))
3443 (sha256
3444 (base32 "0afk1nmvj9fp3igzmxa4a048fm21sa4aw1z2ix8jzvs62ry7j6bd"))))
3445 (build-system pyproject-build-system)
3446 (native-inputs
3447 (list python-brotli
3448 python-cython
3449 python-pytest
3450 python-setuptools
3451 python-wheel))
3452 (home-page "https://github.com/getlogbook/logbook")
3453 (synopsis "Logbook is a logging replacement for Python")
3454 (description
3455 "Logbook is a logging system for Python that replaces the standard
3456library’s logging module. It was designed with both complex and simple
3457applications in mind and the idea to make logging fun.")
3458 (license license:bsd-3)))
3459
3460(define-public python-databind-core
3461 (package
3462 (name "python-databind-core")
3463 (version "4.4.2")
3464 (source
3465 (origin
3466 (method url-fetch)
3467 (uri (pypi-uri "databind.core" version))
3468 (sha256
3469 (base32 "130hr19kbzizx9n2q7cwfzfk20ii3cqmqjrzb16psnafll303k2d"))
3470 (snippet
3471 #~(begin (use-modules (guix build utils))
3472 ;; The problem with python-typing-extensions >= 4.7 is only
3473 ;; with python-3.7.
3474 (substitute* "pyproject.toml"
3475 ((",<4.7.*") "\"\n"))))))
3476 (build-system pyproject-build-system)
3477 (arguments
3478 (list
3479 #:phases
3480 #~(modify-phases %standard-phases
3481 (add-after 'install 'fix-name
3482 (lambda* (#:key inputs outputs #:allow-other-keys)
3483 (let* ((sitedir (site-packages inputs outputs))
3484 (dist-info
3485 (string-append sitedir "/databind_core-" #$version ".dist-info")))
3486 (substitute* (string-append dist-info "/METADATA")
3487 (("Name: databind-core")
3488 "Name: databind.core"))
3489 (substitute* (string-append dist-info "/RECORD")
3490 (("databind_core") "databind.core"))
3491 (rename-file dist-info
3492 (string-append sitedir
3493 "/databind.core-"
3494 #$version ".dist-info"))))))))
3495 (propagated-inputs
3496 (list python-deprecated
3497 python-nr-date
3498 python-nr-stream
3499 python-typeapi
3500 python-typing-extensions))
3501 (native-inputs
3502 (list python-poetry-core python-pytest))
3503 (home-page "https://niklasrosenstein.github.io/python-databind/core/")
3504 (synopsis
3505 "Library for de-/serializing Python dataclasses")
3506 (description
3507 "Databind is a library inspired by jackson-databind to de-/serialize
3508Python dataclasses.")
3509 (license license:expat)))
3510
3511(define-public python-databind-json
3512 (package
3513 (name "python-databind-json")
3514 (version "4.4.2")
3515 (source
3516 (origin
3517 (method url-fetch)
3518 (uri (pypi-uri "databind.json" version))
3519 (sha256
3520 (base32 "1lm864d7arfq0pw64hyc83bwn1z94wjg7a22q1xf0qkjynqs70gg"))
3521 (snippet
3522 #~(begin (use-modules (guix build utils))
3523 ;; The problem with python-typing-extensions >= 4.7 is only
3524 ;; with python-3.7.
3525 (substitute* "pyproject.toml"
3526 ((",<4.7.*") "\"\n"))))))
3527 (build-system pyproject-build-system)
3528 (arguments
3529 (list
3530 #:phases
3531 #~(modify-phases %standard-phases
3532 (add-after 'install 'fix-name
3533 (lambda* (#:key inputs outputs #:allow-other-keys)
3534 (let* ((sitedir (site-packages inputs outputs))
3535 (dist-info
3536 (string-append sitedir "/databind_json-" #$version ".dist-info")))
3537 (substitute* (string-append dist-info "/METADATA")
3538 (("Name: databind-json")
3539 "Name: databind.json"))
3540 (substitute* (string-append dist-info "/RECORD")
3541 (("databind_json") "databind.json"))
3542 (rename-file dist-info
3543 (string-append sitedir
3544 "/databind.json-"
3545 #$version ".dist-info"))))))))
3546 (propagated-inputs
3547 (list python-databind-core python-nr-date
3548 python-typeapi python-typing-extensions))
3549 (native-inputs (list python-poetry-core python-pytest))
3550 (home-page "https://niklasrosenstein.github.io/python-databind/json/")
3551 (synopsis
3552 "De-/serialize Python dataclasses to or from JSON payloads")
3553 (description
3554 "The @code{databind.json} package implements the de-/serialization to or
3555from JSON payloads using the @code{databind.core} framework.")
3556 (license license:expat)))
3557
3558(define-public python-docspec
3559 (package
3560 (name "python-docspec")
3561 (version "2.2.1")
3562 (source
3563 (origin
3564 (method url-fetch)
3565 (uri (pypi-uri "docspec" version))
3566 (sha256
3567 (base32 "1zqmdrc6k8pprra8p3wpzq2ml2gph1cfjmsyg07f8b8fvizffm28"))))
3568 (build-system pyproject-build-system)
3569 (arguments (list #:tests? #false)) ;there are none
3570 (propagated-inputs
3571 (list python-databind-core
3572 python-databind-json
3573 python-deprecated))
3574 (native-inputs
3575 (list python-poetry-core))
3576 (home-page "https://github.com/NiklasRosenstein/python-docspec")
3577 (synopsis "Represent API documentation of programming languages")
3578 (description
3579 "Docspec is a JSON object specification for representing API
3580documentation of programming languages.")
3581 (license license:expat)))
3582
3583(define-public python-docspec-python
3584 (package
3585 (name "python-docspec-python")
3586 (version "2.2.1")
3587 (source
3588 (origin
3589 (method url-fetch)
3590 (uri (pypi-uri "docspec_python" version))
3591 (sha256
3592 (base32 "0n8m52vxmlvkj7p5jmd4rfdks65rrp4q4vzak44y6kbg9l5qa6y4"))))
3593 (build-system pyproject-build-system)
3594 (arguments
3595 (list #:tests? #false)) ;there are none
3596 (propagated-inputs (list python-docspec python-nr-util))
3597 (native-inputs (list python-poetry-core))
3598 (home-page "https://github.com/NiklasRosenstein/docspec/")
3599 (synopsis "Produce docspec data from Python source code")
3600 (description
3601 "This package provides a parser based on @code{lib2to3} producing
3602@code{docspec} data from Python source code.")
3603 (license license:expat)))
3604
3605(define-public python-fqdn
3606 (package
3607 (name "python-fqdn")
3608 (version "1.5.1")
3609 (source
3610 (origin
3611 (method url-fetch)
3612 (uri (pypi-uri "fqdn" version))
3613 (sha256
3614 (base32 "17yqckhymnamszhg06751c83rg3fnr5iy33a135bazvngrkx6phh"))))
3615 (build-system pyproject-build-system)
3616 (arguments (list #:tests? #false)) ;there are none
3617 (propagated-inputs (list python-cached-property))
3618 (native-inputs (list python-setuptools python-wheel))
3619 (home-page "https://github.com/ypcrts/fqdn")
3620 (synopsis "Validate domain names against RFC 1123")
3621 (description
3622 "This package validates fully-qualified domain names against RFC 1123, so
3623that they are acceptable to modern bowsers")
3624 (license license:mpl2.0)))
3625
3626(define-public python-fire
3627 (package
3628 (name "python-fire")
3629 (version "0.7.0")
3630 (source
3631 (origin
3632 (method url-fetch)
3633 (uri (pypi-uri "fire" version))
3634 (sha256
3635 (base32 "1pswm79gi51p596zmfvaskx0i15znbr610yws5dgdsing7q505cn"))))
3636 (build-system pyproject-build-system)
3637 (propagated-inputs (list python-termcolor))
3638 (native-inputs (list python-pytest python-setuptools python-wheel))
3639 (synopsis "Library for automatically generating command line interfaces")
3640 (description
3641 "Fire is a library for automatically generating command line interfaces
3642from absolutely any Python object. The following are the advantages:
3643@itemize
3644@item A simple way to create a CLI in Python.
3645@item A helpful tool for developing and debugging Python code.
3646@item Helps with exploring existing code or turning other people's code into a
3647command line interface.
3648@item Makes transitioning between Bash and Python easier.
3649@item Makes using a Python REPL easier by setting up the REPL with the modules
3650and variables you'll need already imported and created.
3651@end itemize")
3652 (home-page "https://github.com/google/python-fire")
3653 (license license:asl2.0)))
3654
3655(define-public python-fit-nbinom
3656 (package
3657 (name "python-fit-nbinom")
3658 (version "1.1")
3659 (source (origin
3660 (method url-fetch)
3661 (uri (pypi-uri "fit_nbinom" version))
3662 (sha256
3663 (base32
3664 "12v8l5i35vjbpvh5i4lw29ys6vpr3z7pysyrx33hxaq09zr015mx"))))
3665 (build-system pyproject-build-system)
3666 (arguments
3667 (list
3668 #:tests? #false ;there are none
3669 #:phases
3670 '(modify-phases %standard-phases
3671 (add-after 'unpack 'remove-invalid-syntax
3672 (lambda _
3673 (substitute* "setup.py"
3674 ((".\\*\"") "\"")))))))
3675 (propagated-inputs (list python-numpy python-scipy))
3676 (native-inputs (list python-setuptools python-wheel))
3677 (home-page "https://github.com/joachimwolff/fit_nbinom")
3678 (synopsis "Negative binomial maximum likelihood estimator")
3679 (description "This package provides an implementation in Python using
3680scipy and numpy of negative binomial maximum likelihood estimation.")
3681 (license license:gpl3+)))
3682
3683(define-public python-docrep
3684 (package
3685 (name "python-docrep")
3686 (version "0.3.2")
3687 (source (origin
3688 (method url-fetch)
3689 (uri (pypi-uri "docrep" version))
3690 (sha256
3691 (base32
3692 "0523jrzjj29kxpdllmfhrfj9kysi9mphp2m7ippjkn5b07i1g2pd"))))
3693 (build-system pyproject-build-system)
3694 (propagated-inputs (list python-six))
3695 (native-inputs (list python-pytest python-setuptools python-wheel))
3696 (home-page "https://github.com/Chilipp/docrep")
3697 (synopsis "Python package for docstring repetition")
3698 (description "Docrep is the documentation repetition module. This module
3699targets developers that develop complex and nested Python APIs and helps them
3700to create a well-documented piece of software.")
3701 (license license:asl2.0)))
3702
3703(define-public python-dotmap
3704 (package
3705 (name "python-dotmap")
3706 (version "1.3.30")
3707 (source
3708 (origin
3709 (method url-fetch)
3710 (uri (pypi-uri "dotmap" version))
3711 (sha256
3712 (base32 "0s5kb2v7jd0narz6m6jcicak3h5pw290wz21cdsv8pq77y9sf8aq"))))
3713 (build-system pyproject-build-system)
3714 (arguments (list #:test-backend #~'unittest))
3715 (native-inputs (list python-setuptools))
3716 (home-page "https://github.com/drgrib/dotmap")
3717 (synopsis "Ordered, dynamically-expandable dot-access dictionary")
3718 (description
3719 "DotMap is a dot-access dictionary subclass that has dynamic
3720hierarchy creation, can be initialized with keys, can be initialized from a
3721dictionary, can be convert to a dictionary, and is ordered by insertion.")
3722 (license license:expat)))
3723
3724(define-public python-dotty-dict
3725 (package
3726 (name "python-dotty-dict")
3727 (version "1.3.1")
3728 (source
3729 (origin
3730 (method git-fetch)
3731 (uri (git-reference
3732 (url "https://github.com/pawelzny/dotty_dict")
3733 (commit (string-append "v" version))))
3734 (sha256
3735 (base32 "0rs83pglkgb4sfnk09rskg8c53hvl7mkjw4vfgl5xc8z13vyi3li"))))
3736 (build-system pyproject-build-system)
3737 (native-inputs
3738 (list python-poetry-core
3739 python-pytest
3740 python-setuptools))
3741 (home-page "https://github.com/pawelzny/dotty_dict")
3742 (synopsis "Python library for accessing dictionaries using a dot syntax")
3743 (description "This package provides a library that wraps the traditional
3744Python dictionaries and provides a syntax to access nested dictionaries values
3745using a dot syntax, for example: @code{dictionary['deeply.nested.key']}.")
3746 (license license:expat)))
3747
3748(define-public python-affine
3749 (package
3750 (name "python-affine")
3751 (version "2.4.0")
3752 (source (origin
3753 (method url-fetch)
3754 (uri (pypi-uri "affine" version))
3755 (sha256
3756 (base32
3757 "1shyvajayyzbkp9dihb4mz835jnkp0kqqbyjfqci6v43da6q2kd2"))))
3758 (build-system pyproject-build-system)
3759 (propagated-inputs (list python-flake8
3760 python-pytest python-pytest-cov))
3761 (native-inputs (list python-flit-core))
3762 (home-page "https://github.com/rasterio/affine")
3763 (synopsis "Matrices describing affine transformation of the plane")
3764 (description "This is a package for matrices describing the affine
3765transformation of the plane.")
3766 (license license:bsd-3)))
3767
3768(define-public python-argopt
3769 (package
3770 (name "python-argopt")
3771 (version "0.9.1")
3772 (source
3773 (origin
3774 (method url-fetch)
3775 (uri (pypi-uri "argopt" version))
3776 (sha256
3777 (base32 "03kpzdz8ib3szq8dpbr63jv0za4rpwal9iwpr3xhyqpzyiwhcy19"))))
3778 (build-system pyproject-build-system)
3779 (native-inputs
3780 (list python-pytest
3781 python-pytest-timeout
3782 python-setuptools
3783 python-setuptools-scm
3784 python-wheel))
3785 (home-page "https://github.com/casperdcl/argopt")
3786 (synopsis "Generate a command-line interface from a docstring")
3787 (description
3788 "This package provides tools to define a command line interface
3789from a docstring rather than the other way around.")
3790 (license license:mpl2.0)))
3791
3792(define-public python-array-api-compat
3793 (package
3794 (name "python-array-api-compat")
3795 (version "1.12.0")
3796 (source
3797 (origin
3798 (method url-fetch)
3799 (uri (pypi-uri "array_api_compat" version))
3800 (sha256
3801 (base32 "0x7r1ni9zpg68yz76dfza07q3pgwxjx15h5p4jn57pjhyqawcnsq"))))
3802 (build-system pyproject-build-system)
3803 ;; Tests would require all supported array libraries, including pytorch
3804 (arguments (list #:tests? #false))
3805 (native-inputs
3806 (list python-setuptools))
3807 (home-page "https://data-apis.org/array-api-compat/")
3808 (synopsis "Array API compatibility wrapper for NumPy et al")
3809 (description
3810 "This package provides a wrapper around @code{NumPy} and other array
3811libraries to make them compatible with the Array API standard")
3812 (license license:expat)))
3813
3814(define-public python-array-api-strict
3815 (package
3816 (name "python-array-api-strict")
3817 (version "2.4.1")
3818 (source
3819 (origin
3820 (method url-fetch)
3821 (uri (pypi-uri "array_api_strict" version))
3822 (sha256
3823 (base32 "0k1v3h54y1yny8mhgwjk6p51zf87farfk1xn9842g5lcrfhxqxvc"))))
3824 (build-system pyproject-build-system)
3825 (arguments
3826 (list
3827 ;; tests: 584 passed, 1 skipped, 2 deselected
3828 #:test-flags
3829 ;; ModuleNotFoundError: No module named 'numpy', not sure why?
3830 #~(list "-k" (string-append "not test_disabled_extensions"
3831 " and not test_environment_variables"))))
3832 (native-inputs
3833 (list python-pytest
3834 python-setuptools
3835 python-setuptools-scm))
3836 (propagated-inputs
3837 (list python-numpy))
3838 (home-page "https://data-apis.org/array-api-strict/")
3839 (synopsis "Strict implementation of the Python array API")
3840 (description
3841 "@code{array_api_strict} is a strict, minimal implementation of the
3842@url{https://data-apis.org/array-api/latest/, Python array API}.
3843
3844The purpose of array-api-strict is to provide an implementation of the array
3845API for consuming libraries to test against so they can be completely sure
3846their usage of the array API is portable.")
3847 (license license:bsd-3)))
3848
3849(define-public python-cachedir-tag
3850 (package
3851 (name "python-cachedir-tag")
3852 (version "0.0.4")
3853 (source
3854 (origin
3855 (method git-fetch)
3856 (uri (git-reference
3857 (url "https://github.com/moreati/python-cachedir-tag")
3858 (commit (string-append "v" version))))
3859 (file-name (git-file-name name version))
3860 (sha256
3861 (base32 "1s78j7ppangzglcc1pwkg0i4bvv47iyx3k4dpxn209sdy2554xqj"))))
3862 (build-system pyproject-build-system)
3863 (arguments '(#:tests? #f)) ;no test
3864 (native-inputs (list python-setuptools))
3865 (home-page "https://github.com/moreati/python-cachedir-tag")
3866 (synopsis
3867 "Handle @file{CACHEDIR.TAG} in cache directories")
3868 (description
3869 "This library handles @url{https://bford.info/cachedir, CACHEDIR.TAG},
3870a file llowing any arbitrary directory to be marked as a cache directory.")
3871 (license license:expat)))
3872
3873(define-public python-cachetools
3874 (package
3875 (name "python-cachetools")
3876 (version "6.1.0")
3877 (source
3878 (origin
3879 (method url-fetch)
3880 (uri (pypi-uri "cachetools" version))
3881 (sha256
3882 (base32 "11s5ajy31r08228nd2sbv9jdir3vs584khxawwydnj18742g9i5l"))))
3883 (build-system pyproject-build-system)
3884 (native-inputs
3885 (list python-pytest
3886 python-setuptools
3887 python-wheel))
3888 (home-page "https://github.com/tkem/cachetools/")
3889 (synopsis "Extensible memoizing collections and decorators")
3890 (description "This module provides various memoizing collections and
3891decorators, including variants of the Python standard library's
3892@code{lru_cache} function decorator.")
3893 (license license:expat)))
3894
3895(define-public python-cachetools-5
3896 (package
3897 (inherit python-cachetools)
3898 (version "5.5.2")
3899 (source
3900 (origin
3901 (method url-fetch)
3902 (uri (pypi-uri "cachetools" version))
3903 (sha256
3904 (base32 "1m20wqipm50zvcgs3z2xksb96qwx1xc1jbhvaxcnglkmj6m1qrhs"))))))
3905
3906(define-public python-colorclass
3907 (package
3908 (name "python-colorclass")
3909 (version "2.2.2")
3910 (source
3911 (origin
3912 (method git-fetch)
3913 (uri (git-reference
3914 (url "https://github.com/matthewdeanmartin/colorclass")
3915 (commit (string-append "v" version))))
3916 (file-name (git-file-name name version))
3917 (sha256
3918 (base32 "1ylj167lfh8yzms30qrkiznv6737hdxra5lk8mhijcjm3hi1cl9l"))))
3919 (build-system pyproject-build-system)
3920 (arguments
3921 (list
3922 #:test-flags
3923 #~(list "-k" "not test_piped") ; Unclear why this test fails.
3924 #:phases
3925 #~(modify-phases %standard-phases
3926 (add-after 'unpack 'use-poetry-core
3927 (lambda _
3928 ;; Patch to use the core poetry API.
3929 (substitute* "pyproject.toml"
3930 (("poetry.masonry.api") "poetry.core.masonry.api")))))))
3931 (native-inputs (list python-poetry-core python-pytest))
3932 (home-page "https://github.com/matthewdeanmartin/colorclass")
3933 (synopsis "Colorful console applications with Python")
3934 (description
3935 "This package provides an ANSI color text library for Python. It
3936provides automatic coloring for dark or light terminals.")
3937 (license license:expat)))
3938
3939(define-public python-colorcet
3940 (package
3941 (name "python-colorcet")
3942 (version "3.1.1a1")
3943 (source
3944 (origin
3945 (method url-fetch)
3946 (uri (pypi-uri "colorcet" version))
3947 (sha256
3948 (base32 "1h15wdgha1cpj5a9p2dy9d8qdqnl5j1a0ylc7wilcfhvnfzcgp08"))))
3949 (build-system pyproject-build-system)
3950 (native-inputs (list python-nbval
3951 python-packaging
3952 python-pytest
3953 python-pytest-mpl
3954 python-setuptools
3955 python-setuptools-scm))
3956 (home-page "https://colorcet.holoviz.org/")
3957 (synopsis "Collection of perceptually uniform colormaps")
3958 (description "Colorcet is a collection of perceptually accurate 256-color
3959colormaps for use with Python plotting programs like Bokeh, Matplotlib,
3960HoloViews, and Datashader.")
3961 (license license:cc-by4.0)))
3962
3963(define-public python-colored
3964 (package
3965 (name "python-colored")
3966 (version "2.3.0")
3967 (source (origin
3968 (method git-fetch)
3969 (uri (git-reference
3970 (url "https://gitlab.com/dslackw/colored")
3971 (commit version)))
3972 (file-name (git-file-name name version))
3973 (sha256
3974 (base32
3975 "00332xdjw5fcj5wx848693355nvlgcf8qmpwkvz3rngfg1q5bxa6"))))
3976 (build-system pyproject-build-system)
3977 (arguments
3978 (list
3979 #:phases
3980 #~(modify-phases %standard-phases
3981 (add-before 'check 'pre-check
3982 (lambda _
3983 ;; Tests expect ANSI escape codes for colors.
3984 (setenv "FORCE_COLOR" "1"))))))
3985 (native-inputs (list python-flit-core python-pytest))
3986 (home-page "https://gitlab.com/dslackw/colored")
3987 (synopsis "Simple library for color and formatting to terminal")
3988 (description "This is a very simple Python library for color and
3989formatting in the terminal. It comes with a collection of color codes and
3990names for 256 color terminal setups.")
3991 (license license:expat)))
3992
3993(define-public python-colored-traceback
3994 ;; No tags in upstream repository.
3995 (let ((commit "98e6dea7111f7681db823c518f18026374a832b9")
3996 (revision "0"))
3997 (package
3998 (name "python-colored-traceback")
3999 (version (git-version "0.4.2" revision commit))
4000 (source
4001 (origin
4002 (method git-fetch)
4003 (uri (git-reference
4004 (url "https://github.com/staticshock/colored-traceback.py")
4005 (commit commit)))
4006 (file-name (git-file-name name version))
4007 (sha256
4008 (base32 "19d5mpwk7398b8fjh6abnr96wz70vf5vb4p207r8sny748rwx451"))))
4009 (build-system pyproject-build-system)
4010 (arguments
4011 ;; Tests are incompatible with current python version.
4012 (list #:tests? #f))
4013 (propagated-inputs (list python-colorama python-pygments))
4014 (native-inputs (list python-setuptools python-wheel))
4015 (home-page "https://github.com/staticshock/colored-traceback.py")
4016 (synopsis "Automatically color uncaught exception tracebacks")
4017 (description "This package provides python utilities to automatically
4018color uncaught exception tracebacks.")
4019 (license license:isc))))
4020
4021(define-public python-colorful
4022 (package
4023 (name "python-colorful")
4024 (version "0.5.8")
4025 (source
4026 (origin
4027 (method git-fetch)
4028 (uri (git-reference
4029 (url "https://github.com/timofurrer/colorful")
4030 (commit (string-append "v" version))))
4031 (file-name (git-file-name name version))
4032 (sha256
4033 (base32 "00ag7h9g4v06japcva70sqibb9k49jrxq97nq3bi16b2y16mafwz"))))
4034 (build-system pyproject-build-system)
4035 (native-inputs
4036 (list python-pytest
4037 python-setuptools))
4038 (propagated-inputs
4039 (list python-colorama))
4040 (home-page "http://github.com/timofurrer/colorful")
4041 (synopsis "Terminal string styling")
4042 (description "Colorful provides an array of text styles, that can be used
4043as functions or string constants to form colored terminal output.")
4044 (license license:expat)))
4045
4046(define-public python-colorthief
4047 (package
4048 (name "python-colorthief")
4049 (version "0.2.1")
4050 (source
4051 (origin
4052 (method url-fetch)
4053 (uri (pypi-uri "colorthief" version))
4054 (sha256
4055 (base32 "08bjsmmkihyksms2vgndslln02rvw56lkxz28d39qrnxbg4v1707"))))
4056 (build-system pyproject-build-system)
4057 (arguments
4058 (list #:tests? #f)) ;no tests in PyPI or Git
4059 (native-inputs (list python-setuptools))
4060 (propagated-inputs (list python-pillow))
4061 (home-page "https://github.com/fengsp/color-thief-py")
4062 (synopsis "Grab the color palette of an image")
4063 (description
4064 "This package provides methods to determine the dominant color
4065of an image, as well as constructing a representative color palette.")
4066 (license license:bsd-3)))
4067
4068(define-public python-construct-classes
4069 (package
4070 (name "python-construct-classes")
4071 (version "0.1.2")
4072 (source
4073 (origin
4074 (method git-fetch)
4075 (uri (git-reference
4076 (url "https://github.com/matejcik/construct-classes")
4077 (commit (string-append "v" version))))
4078 (file-name (git-file-name name version))
4079 (sha256
4080 (base32 "0fmr8nfg543lyqk4164a52jb6lwpq98radicbkhhdfckq9lib2wp"))))
4081 (build-system pyproject-build-system)
4082 (propagated-inputs
4083 (list python-construct))
4084 (native-inputs
4085 (list python-poetry-core
4086 python-pytest))
4087 (home-page "https://github.com/matejcik/construct-classes")
4088 (synopsis "Parse binary structs into dataclasses")
4089 (description "This package provides a parser to parse binary structs
4090into dataclasses.")
4091 (license license:expat)))
4092
4093(define-public python-contourpy
4094 (package
4095 (name "python-contourpy")
4096 (version "1.3.3")
4097 (source
4098 (origin
4099 (method url-fetch)
4100 (uri (pypi-uri "contourpy" version))
4101 (sha256
4102 (base32 "1078vg1lha4z8adrfnpr68sdqmjdn0ml74d4pk804191bcai4gh8"))))
4103 (build-system pyproject-build-system)
4104 (arguments
4105 (list
4106 ;; tests: 1746 passed, 17 skipped, 750 deselected, 1 warning
4107 #:test-flags
4108 ;; To prevent adding Matplotlib reducing closure size, and break cycle.
4109 #~(list "-m" "not image"
4110 ;; Tests that pass but avoided for load reasons.
4111 "-k" "not test_filled_random_big and not test_lines_random_big")))
4112 (native-inputs
4113 (list pybind11-2
4114 python-meson
4115 python-pytest
4116 python-wurlitzer))
4117 (propagated-inputs
4118 (list python-numpy))
4119 (home-page "https://contourpy.readthedocs.io/")
4120 (synopsis
4121 "Python library for calculating contours of 2D quadrilateral grids")
4122 (description
4123 "ContourPy is a Python library for calculating contours of 2D
4124quadrilateral grids. It is written in C++11 and wrapped using pybind11.")
4125 (license license:bsd-3)))
4126
4127(define-public python-lunr
4128 (package
4129 (name "python-lunr")
4130 (version "0.8.0")
4131 (source
4132 (origin
4133 (method url-fetch)
4134 (uri
4135 (pypi-uri "lunr" version))
4136 (sha256
4137 (base32 "0a426nngs8h2mhqm60rwywxh2vb6snrip47w9fhpglkqjl2zav5l"))))
4138 (build-system pyproject-build-system)
4139 (arguments
4140 (list
4141 #:test-flags
4142 '(list "-k" "not TestLanguageSupport"
4143 "--ignore-glob=tests/acceptance_tests/*")))
4144 (native-inputs
4145 (list python-hatch-fancy-pypi-readme
4146 python-hatchling
4147 python-pytest
4148 python-pytest-timeout))
4149 (propagated-inputs
4150 (list python-nltk))
4151 (home-page "https://github.com/yeraydiazdiaz/lunr.py")
4152 (synopsis "Full-text search library")
4153 (description "This package provides python library for full-text search.
4154It indexes documents and provides a search interface for retrieving documents
4155that best match text queries.")
4156 (license license:expat)))
4157
4158(define-public python-mdit-py-plugins
4159 (package
4160 (name "python-mdit-py-plugins")
4161 (version "0.5.0")
4162 (source (origin
4163 (method git-fetch) ;for tests
4164 (uri (git-reference
4165 (url "https://github.com/executablebooks/mdit-py-plugins")
4166 (commit (string-append "v" version))))
4167 (file-name (git-file-name name version))
4168 (sha256
4169 (base32
4170 "1l3g3686lh2w1bmfd8n2qxsn4ipa7byyd57556d63caaiyxkl19i"))))
4171 (build-system pyproject-build-system)
4172 (propagated-inputs
4173 (list python-markdown-it-py
4174 python-attrs))
4175 (native-inputs
4176 (list python-flit-core
4177 python-pytest
4178 python-pytest-regressions))
4179 (home-page "https://github.com/executablebooks/mdit-py-plugins")
4180 (synopsis "Collection of plugins for markdown-it-py")
4181 (description "This package contains a collection of plugins for
4182@code{markdown-it-py} like:
4183@enumerate
4184@item amsmath,
4185@item attrs,
4186@item container,
4187@item definition list,
4188@item dollarmath,
4189@item field list,
4190@item footnote,
4191@item textmath, and
4192@item wordcount.
4193@end enumerate")
4194 (license license:expat)))
4195
4196(define-public python-mdurl
4197 (package
4198 (name "python-mdurl")
4199 (version "0.1.2")
4200 (source
4201 (origin
4202 (method git-fetch) ; no tests data in PyPi package
4203 (uri (git-reference
4204 (url "https://github.com/executablebooks/mdurl")
4205 (commit version)))
4206 (file-name (git-file-name name version))
4207 (sha256
4208 (base32 "0csc777q42jzv4zgdzxmwp8xqlb92ws1jvj09m2smh4klw67q5f3"))))
4209 (build-system pyproject-build-system)
4210 (native-inputs (list python-flit python-pytest))
4211 (home-page "https://github.com/executablebooks/mdurl")
4212 (synopsis "Markdown URL utilities")
4213 (description
4214 "This package implements a Python port of the JavaScript @code{mdurl}.")
4215 (license license:expat)))
4216
4217(define-public python-mkdocs
4218 (package
4219 (name "python-mkdocs")
4220 (version "1.6.1")
4221 (source
4222 (origin
4223 (method git-fetch)
4224 (uri (git-reference
4225 (url "https://github.com/mkdocs/mkdocs")
4226 (commit version)))
4227 (file-name (git-file-name name version))
4228 (sha256
4229 (base32 "02gllyq6myvgmqqsmj3il4f48bsvd617dwg62qx832bnbn0qw115"))))
4230 (build-system pyproject-build-system)
4231 (arguments
4232 (list
4233 ;; tests: 687 passed
4234 #:test-backend #~'unittest
4235 #:test-flags
4236 #~(list "discover" "-s" "mkdocs" "-p" "*tests.py")
4237 #:phases
4238 #~(modify-phases %standard-phases
4239 ;; XXX: Not ideal, but a few tests fail and it's not straightforward
4240 ;; to run tests with pytest (and thus ignore them selectively).
4241 (add-before 'check 'delete-failing-tests
4242 (lambda _
4243 (delete-file "mkdocs/tests/cli_tests.py"))))))
4244 (native-inputs
4245 (list python-hatchling
4246 python-setuptools))
4247 (propagated-inputs
4248 (list python-click
4249 python-ghp-import
4250 python-jinja2
4251 python-markdown
4252 python-markupsafe
4253 python-mergedeep
4254 python-mkdocs-get-deps
4255 python-packaging
4256 python-pathspec
4257 python-pyyaml
4258 python-pyyaml-env-tag
4259 python-watchdog
4260 ;; [optional]
4261 python-babel))
4262 (home-page "https://www.mkdocs.org")
4263 (synopsis "Project documentation with Markdown")
4264 (description
4265 "MkDocs is a static site generator geared towards building project
4266documentation. Documentation source files are written in Markdown, and
4267configured with a single YAML configuration file.")
4268 (license license:bsd-3)))
4269
4270(define-public python-mkdocs-get-deps
4271 (package
4272 (name "python-mkdocs-get-deps")
4273 (version "0.2.0")
4274 (source
4275 (origin
4276 (method git-fetch)
4277 (uri (git-reference
4278 (url "https://github.com/mkdocs/get-deps")
4279 (commit (string-append "v" version))))
4280 (file-name (git-file-name name version))
4281 (sha256
4282 (base32 "0f5ibliw1ccqgydsin27bb7sl7haca09s24xywhmg1cqhm4nda0d"))))
4283 (build-system pyproject-build-system)
4284 (native-inputs
4285 (list python-pytest
4286 python-hatchling))
4287 (propagated-inputs
4288 (list python-mergedeep
4289 python-platformdirs
4290 python-pyyaml))
4291 (home-page "https://github.com/mkdocs/get-deps")
4292 (synopsis "MkDocs extension to list dependencies according to a mkdocs.yml")
4293 (description
4294 "This package provides an @code{MkDocs} extension that lists all dependencies
4295according to a mkdocs.yml file. This command guesses the Python dependencies
4296that a MkDocs site requires in order to build. It simply prints the PyPI
4297packages that need to be installed.")
4298 (license license:expat)))
4299
4300(define-public python-mkdocs-markdownextradata-plugin
4301 (package
4302 (name "python-mkdocs-markdownextradata-plugin")
4303 (version "0.2.5")
4304 (source
4305 (origin
4306 (method git-fetch)
4307 (uri (git-reference
4308 (url "https://github.com/rosscdh/mkdocs-markdownextradata-plugin")
4309 (commit version)))
4310 (file-name (git-file-name name version))
4311 (sha256
4312 (base32 "1a3868s9m7pzyfncpjbjsa9vw5nihssl2v47pxj7h6qa67kvlk3g"))))
4313 (build-system pyproject-build-system)
4314 (native-inputs (list python-pytest python-setuptools))
4315 (propagated-inputs (list python-mkdocs python-pyyaml))
4316 (home-page "https://github.com/rosscdh/mkdocs-markdownextradata-plugin/")
4317 (synopsis "Inject extra variables into the MkDocs markdown template")
4318 (description
4319 "This package provides a MkDocs plugin that injects the mkdocs.yml extra
4320variables into the markdown template.")
4321 (license license:expat)))
4322
4323(define-public python-docstring-to-markdown
4324 (package
4325 (name "python-docstring-to-markdown")
4326 (version "0.15")
4327 (source
4328 (origin
4329 (method url-fetch)
4330 (uri (pypi-uri "docstring-to-markdown" version))
4331 (sha256
4332 (base32 "0gdpabnyl1kyy0cjrnph6xl4fyhgim50a1amsaqq3hahki6i2ip1"))))
4333 (build-system pyproject-build-system)
4334 (native-inputs
4335 (list python-pytest
4336 python-setuptools))
4337 (home-page "https://github.com/python-lsp/docstring-to-markdown")
4338 (synopsis "On the fly conversion of Python docstrings to markdown")
4339 (description
4340 "This module can convert Python docstrings to Markdown. It can recognise
4341reStructuredText inside docstrings and convert multiple of its features to
4342Markdown. It also includes initial support for Google-formatted docstrings.")
4343 (license license:lgpl2.1+)))
4344
4345(define-public python-pdoc
4346 (package
4347 (name "python-pdoc")
4348 (version "13.0.1")
4349 (source (origin
4350 (method git-fetch)
4351 (uri (git-reference
4352 (url "https://github.com/mitmproxy/pdoc")
4353 (commit (string-append "v" version))))
4354 (file-name (git-file-name name version))
4355 (sha256
4356 (base32
4357 "0gxkw607nrd67ck4w8jri9vfrm5g60qvp8b134m8zkiphbxjnx0l"))))
4358 (build-system pyproject-build-system)
4359 (native-inputs (list python-pytest python-jinja2 python-pygments
4360 python-setuptools python-wheel))
4361 (arguments
4362 (list
4363 ;; Some tests fail, presumably because of slight version mismatches of
4364 ;; the dependencies.
4365 #:test-flags
4366 '(list "-k" (string-append "not test_var_with_raising_repr and "
4367 "not test_smoke[mock] and "
4368 "not test_snapshots[html"))))
4369 (home-page "https://pdoc.dev/")
4370 (synopsis "API documentation for Python projects")
4371 (description "pdoc auto-generates API documentation that follows your
4372project's Python module hierarchy. It requires no configuration, has
4373first-class support for type annotations, cross-links between identifiers,
4374comes with an integrated live-reloading web server, uses customizable HTML
4375templates, understands numpydoc and Google-style docstrings.")
4376 (license license:unlicense)))
4377
4378(define-public python-py4j
4379 (package
4380 (name "python-py4j")
4381 (version "0.10.9.7")
4382 (source (origin
4383 (method url-fetch)
4384 (uri (pypi-uri "py4j" version))
4385 (sha256
4386 (base32
4387 "1fwdx92cdaiviradksfyygg05g1fpc3x2lf65bv5rnispcam6vhb"))))
4388 (build-system pyproject-build-system)
4389 (arguments (list #:tests? #f)) ; Requires a running JVM?
4390 (native-inputs (list python-setuptools))
4391 (home-page "https://www.py4j.org/")
4392 (synopsis "Dynamically access arbitrary Java objects from Python")
4393 (description
4394 "This package enables Python programs to dynamically access arbitrary
4395Java objects.")
4396 (license license:bsd-3)))
4397
4398(define-public python-pymdown-extensions
4399 (package
4400 (name "python-pymdown-extensions")
4401 (version "10.16.1")
4402 (source
4403 (origin
4404 (method git-fetch)
4405 (uri (git-reference
4406 (url "https://github.com/facelessuser/pymdown-extensions")
4407 (commit version)))
4408 (file-name (git-file-name name version))
4409 (sha256
4410 (base32 "0r36nk1ppq1wrgb1lcy9asp9872xr0gbhxrjw7dpa8lp6m7nqb9k"))))
4411 (build-system pyproject-build-system)
4412 ;; XXX: A lot of HTML tests fail with negligible discrepancies.
4413 (arguments
4414 (list #:tests? #f))
4415 (native-inputs (list python-hatchling python-pytest python-pyyaml))
4416 (propagated-inputs (list python-markdown))
4417 (home-page "https://github.com/facelessuser/pymdown-extensions")
4418 (synopsis "Extension pack for Python Markdown")
4419 (description
4420 "PyMdown Extensions is a collection of extensions for Python Markdown.
4421All extensions are found under the module namespace of pymdownx.")
4422 (license license:expat)))
4423
4424(define-public python-plotext
4425 (package
4426 (name "python-plotext")
4427 (version "5.2.8")
4428 (source (origin
4429 (method url-fetch)
4430 (uri (pypi-uri "plotext" version))
4431 (sha256
4432 (base32
4433 "1gpy1z2i4vq1mcrhysxahz4339pbl9rzk58rf5m5gf5ym9xji6ii"))))
4434 (build-system pyproject-build-system)
4435 (arguments (list #:tests? #false)) ;there are none
4436 (native-inputs (list python-setuptools python-wheel))
4437 (home-page "https://github.com/piccolomo/plotext")
4438 (synopsis "Plots in the terminal")
4439 (description "Plotext lets you plot directly to the terminal.")
4440 (license license:expat)))
4441
4442(define-public python-plotille
4443 (package
4444 (name "python-plotille")
4445 (version "5.0.0")
4446 (source
4447 (origin
4448 (method git-fetch)
4449 (uri (git-reference
4450 (url "https://github.com/tammoippen/plotille")
4451 (commit (string-append "v" version))))
4452 (file-name (git-file-name name version))
4453 (sha256
4454 (base32 "0ys8ivsbiv58c8rsrk2m2n3sh2rq6qqaa2mhq0hacsgrvmvv0siz"))
4455 (modules '((guix build utils)))
4456 (snippet
4457 #~(begin
4458 ;; Without deleting ./imgs setuptools complains as follows: error:
4459 ;; Multiple top-level packages discovered in a flat-layout:
4460 ;; ['imgs', 'plotille'].
4461 (delete-file-recursively "./imgs")))))
4462 (build-system pyproject-build-system)
4463 (native-inputs
4464 (list python-pytest
4465 python-mock
4466 python-pendulum
4467 python-pytest-mock
4468 python-setuptools
4469 python-wheel))
4470 (home-page "https://github.com/tammoippen/plotille")
4471 (synopsis "Plot in the terminal using braille dots")
4472 (description
4473 "Plotille provides a figure class and graphing functions to create plots,
4474scatter plots, histograms and heatmaps in the terminal using braille dots.")
4475 (license license:expat)))
4476
4477(define-public python-poetry-dynamic-versioning
4478 (package
4479 (name "python-poetry-dynamic-versioning")
4480 (version "1.9.1")
4481 (source
4482 (origin
4483 (method url-fetch)
4484 (uri (pypi-uri "poetry_dynamic_versioning" version))
4485 (sha256
4486 (base32 "0j6sm60x0w31kf5003v4dhp9sdz1i5n5qsfd8r4wm8ksh7gvkryn"))))
4487 (build-system pyproject-build-system)
4488 (arguments
4489 (list
4490 #:test-flags
4491 #~(list "--ignore=tests/test_integration.py"
4492 "-k" (string-join
4493 ;; Tests searching for VCS back end.
4494 (list "not test__get_version__defaults"
4495 "test__enable_in_doc__project_with_dynamic"
4496 "test__enable_in_doc__project_with_version"
4497 "test__get_version__format_jinja"
4498 "test__get_version__format_jinja_imports_with_module_and_item"
4499 "test__get_version__format_jinja_imports_with_module_only"
4500 "test__get_version__format_jinja_with_enforced_style")
4501 " and not "))))
4502 (native-inputs
4503 (list python-poetry-core
4504 python-pytest))
4505 (propagated-inputs
4506 (list python-dunamai
4507 python-jinja2
4508 python-tomlkit))
4509 (home-page "https://github.com/mtkennerly/poetry-dynamic-versioning")
4510 (synopsis "Poetry plugin enabling VCS tags dynamic versioning")
4511 (description
4512 "This package provides a build backend that patches Poetry Core to enable
4513the versioning system in PEP 517 build frontends.")
4514 (license license:expat)))
4515
4516(define-public python-poetry-plugin-export
4517 (package
4518 (name "python-poetry-plugin-export")
4519 (version "1.10.0")
4520 (source
4521 (origin
4522 (method url-fetch)
4523 (uri (pypi-uri "poetry_plugin_export" version))
4524 (sha256
4525 (base32 "1w100731jnrv3nkbnbiginia8sd8ll0vrmljbn14m1yd4kwrvvr6"))))
4526 (build-system pyproject-build-system)
4527 (arguments
4528 (list
4529 #:tests? #f)) ;tests cycle with poetry
4530 (native-inputs
4531 (list python-poetry-core))
4532 (propagated-inputs
4533 (list python-cachy
4534 python-pendulum
4535 python-poetry-core
4536 python-tomlkit))
4537 (home-page "https://python-poetry.org/")
4538 (synopsis "Poetry plugin to export the dependencies to various formats")
4539 (description
4540 "Poetry plugin to export the dependencies to various formats.")
4541 (license license:expat)))
4542
4543(define-public python-portpicker
4544 (package
4545 (name "python-portpicker")
4546 (version "1.6.0")
4547 (source
4548 (origin
4549 (method url-fetch)
4550 (uri (pypi-uri "portpicker" version))
4551 (sha256
4552 (base32 "1yiisk4h8qliwf99khz3lszrpjf6km76fbhzg01fwrbgz7b7yl5x"))))
4553 (build-system pyproject-build-system)
4554 (arguments
4555 (list
4556 #:test-flags
4557 ;; This fails because portserver ends up in bin, not site-packages
4558 '(list "--ignore=src/tests/portserver_test.py")))
4559 (propagated-inputs (list python-psutil))
4560 (native-inputs (list python-pytest python-setuptools python-wheel
4561 net-tools))
4562 (home-page "https://github.com/google/python_portpicker")
4563 (synopsis "Choose unique available network ports")
4564 (description
4565 "This package provides a library to choose unique available network
4566ports.")
4567 (license license:asl2.0)))
4568
4569(define-public python-md-ulb-pwrap
4570 (package
4571 (name "python-md-ulb-pwrap")
4572 (version "0.1.3")
4573 (source
4574 (origin
4575 (method git-fetch)
4576 (uri (git-reference
4577 (url "https://github.com/mondeja/md-ulb-pwrap")
4578 (commit (string-append "v" version))))
4579 (file-name (git-file-name name version))
4580 (sha256
4581 (base32 "08zqms8mz3m4kfsnjqapc8sjyjcaz82pq45lix6rjag67s0dhcn6"))))
4582 (build-system pyproject-build-system)
4583 (arguments
4584 (list
4585 #:imported-modules `(,@%cargo-build-system-modules
4586 ,@%pyproject-build-system-modules)
4587 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
4588 (guix build pyproject-build-system)
4589 (guix build utils))
4590 #:test-backend #~'custom
4591 #:test-flags #~(list "test.py")
4592 #:phases
4593 #~(modify-phases %standard-phases
4594 (add-after 'unpack 'prepare-cargo-build-system
4595 (lambda args
4596 (for-each
4597 (lambda (phase)
4598 (format #t "Running cargo phase: ~a~%" phase)
4599 (apply (assoc-ref cargo:%standard-phases phase)
4600 #:cargo-target #$(cargo-triplet)
4601 args))
4602 '(unpack-rust-crates
4603 configure
4604 check-for-pregenerated-files
4605 patch-cargo-checksums))))
4606 (add-after 'prepare-cargo-build-system 'chdir
4607 (lambda _
4608 (chdir "python"))))))
4609 (native-inputs
4610 (append
4611 (list maturin
4612 python-pytest
4613 python-unicode-linebreak
4614 rust
4615 `(,rust "cargo"))
4616 (or (and=> (%current-target-system)
4617 (compose list make-rust-sysroot))
4618 '())))
4619 (inputs (cargo-inputs 'md_ulb_pwrap))
4620 (home-page "https://github.com/mondeja/md-ulb-pwrap")
4621 (synopsis "Markdown paragraph wrapper")
4622 (description
4623 "This package provides a Markdown paragraph wrapper using Unicode Line
4624Breaking Algorithm written in Rust with Python bindings.")
4625 (license license:expat)))
4626
4627(define-public python-mdx-gh-links
4628 (package
4629 (name "python-mdx-gh-links")
4630 (version "0.4")
4631 (source
4632 (origin
4633 (method url-fetch)
4634 (uri (pypi-uri "mdx_gh_links" version))
4635 (sha256
4636 (base32 "11inr9azx6c174yfikysbw0mx7mpjm03qdqr1am2a510mg1amma1"))))
4637 (build-system pyproject-build-system)
4638 (arguments (list #:tests? #f)) ;tests connect github
4639 (native-inputs (list python-setuptools))
4640 (propagated-inputs (list python-markdown))
4641 (home-page "https://github.com/Python-Markdown/github-links/")
4642 (synopsis "Python-Markdown extension adding support for shorthand links")
4643 (description "This package is an extension to Python-Markdown which adds
4644support for shorthand links to GitHub users, repositories, issues and
4645commits.")
4646 (license license:bsd-3)))
4647
4648(define-public python-mkdocs-material
4649 (package
4650 (name "python-mkdocs-material")
4651 (version "7.3.6")
4652 (source
4653 (origin
4654 (method git-fetch)
4655 (uri (git-reference
4656 (url "https://github.com/squidfunk/mkdocs-material")
4657 (commit version)))
4658 (file-name (git-file-name name version))
4659 (sha256
4660 (base32 "06ghwidcdqimx6jc6yz1zdbyc8rqklkwj5h5cxsihazh0f52fivk"))
4661 (modules '((guix build utils)))
4662 (snippet
4663 ;; TODO There are still bundled assets and minified JS.
4664 #~(delete-file-recursively "material/assets/javascripts/lunr/min"))))
4665 (build-system pyproject-build-system)
4666 (arguments
4667 (list
4668 #:tests? #f ; No tests.
4669 #:phases
4670 #~(let ((symlink-js
4671 (lambda (inputs)
4672 (for-each
4673 (lambda (lang)
4674 (let* ((filename (string-append "lunr." lang ".min.js"))
4675 (file (string-append "share/javascript/" filename)))
4676 (symlink (search-input-file inputs file) filename)))
4677 (list "ar" "da" "de" "es" "fi" "fr" "hu" "it" "ja" "multi"
4678 "nl" "no" "pt" "ro" "ru" "stemmer.support" "sv" "tr"
4679 "vi")))))
4680 (modify-phases %standard-phases
4681 ;; Requirement mkdocs-material-extensions
4682 ;; in-turn requires mkdocs-material. This causes
4683 ;; circular dependency, so we remove this requirement.
4684 (add-after 'unpack 'patch-requirements
4685 (lambda _
4686 (substitute* "requirements.txt"
4687 (("mkdocs-material-extensions.*$")
4688 ""))))
4689 (add-after 'ensure-no-mtimes-pre-1980 'inject-javascript-assets
4690 (lambda* (#:key inputs #:allow-other-keys)
4691 (mkdir-p "material/assets/javascripts/lunr/min")
4692 (with-directory-excursion "material/assets/javascripts/lunr/min"
4693 (symlink-js inputs))))
4694 (add-after 'wrap 'replace-javascript-assets
4695 (lambda* (#:key inputs outputs #:allow-other-keys)
4696 (let* ((site (site-packages inputs outputs))
4697 (js-assets (string-append site "/material/"
4698 "assets/javascripts")))
4699 (with-directory-excursion js-assets
4700 (delete-file-recursively "lunr/min")
4701 (mkdir-p "lunr/min")
4702 (with-directory-excursion "lunr/min"
4703 (symlink-js inputs))))))))))
4704 (native-inputs (list python-setuptools))
4705 (inputs (list js-lunr-ar
4706 js-lunr-da
4707 js-lunr-de
4708 js-lunr-es
4709 js-lunr-fi
4710 js-lunr-fr
4711 js-lunr-hu
4712 js-lunr-it
4713 js-lunr-ja
4714 js-lunr-nl
4715 js-lunr-no
4716 js-lunr-pt
4717 js-lunr-ro
4718 js-lunr-ru
4719 js-lunr-sv
4720 js-lunr-tr
4721 js-lunr-vi
4722 js-lunr-multi
4723 js-lunr-stemmer-support))
4724 (propagated-inputs
4725 (list python-markdown python-mkdocs python-pygments
4726 python-pymdown-extensions))
4727 (home-page "https://squidfunk.github.io/mkdocs-material/")
4728 (synopsis "Material Design theme for MkDocs")
4729 (description "This package provides a theme plugin for the static site
4730generator MkDocs.")
4731 (license license:expat)))
4732
4733(define-public python-nanobind
4734 (package
4735 (name "python-nanobind")
4736 (version "2.10.2")
4737 (source
4738 (origin
4739 (method url-fetch)
4740 (uri (pypi-uri "nanobind" version))
4741 (sha256
4742 (base32 "0sscrair34s1nj7vvybakirpgjsg9l6qic4wsvpas7vdrq89jl08"))))
4743 (build-system pyproject-build-system)
4744 (arguments
4745 (list
4746 ;; tests: 466 passed, 27 skipped
4747 #:phases
4748 #~(modify-phases %standard-phases
4749 (add-before 'build 'configure-cmake
4750 (lambda _
4751 (invoke "cmake" "-S" "." "-B" "build" "-DNB_TEST_STABLE_ABI=ON")))
4752 (add-after 'configure-cmake 'build-c++
4753 (lambda _
4754 (invoke "cmake" "--build" "build" "-j" "2")))
4755 (add-before 'check 'pre-check
4756 (lambda _ (chdir "build"))))))
4757 (native-inputs
4758 (list cmake-minimal
4759 python-numpy
4760 python-pathspec
4761 python-pytest
4762 python-scikit-build-core
4763 python-scipy))
4764 (inputs
4765 (list eigen))
4766 (home-page "https://github.com/wjakob/nanobind/")
4767 (synopsis "Tiny and efficient C++/Python bindings")
4768 (description "Nanobind is a small binding library that exposes C++ types
4769in Python and vice versa. It is reminiscent of @code{Boost.Python} and
4770@code{pybind11} and uses near-identical syntax. In contrast to these existing
4771tools, @code{nanobind} is more efficient: bindings compile in a shorter amount
4772of time, produce smaller binaries, and have better runtime performance.")
4773 (license license:bsd-3)))
4774
4775(define-public python-nr-date
4776 (package
4777 (name "python-nr-date")
4778 (version "2.1.0")
4779 (source
4780 (origin
4781 (method url-fetch)
4782 (uri (pypi-uri "nr_date" version))
4783 (sha256
4784 (base32 "1rnjyykjp41mqz6h1vx18jblq97gi5m5x7dgasyaihnd7fhswhq6"))))
4785 (build-system pyproject-build-system)
4786 (arguments (list #:tests? #false)) ;there are none
4787 (native-inputs (list python-poetry-core))
4788 (home-page "https://github.com/NiklasRosenstein/python-nr.date")
4789 (synopsis "Fast, regex-based date parsing library in plain Python")
4790 (description "This package provides a fast, regex-based date parsing
4791library in pure Python.")
4792 (license license:expat)))
4793
4794(define-public python-nr-stream
4795 (package
4796 (name "python-nr-stream")
4797 (version "1.1.5")
4798 (source
4799 (origin
4800 (method url-fetch)
4801 (uri (pypi-uri "nr_stream" version))
4802 (sha256
4803 (base32 "0rag4vbjnalkyfcarx6yipn11ih2hmc3pfldava4c6n6pz31c0pb"))))
4804 (build-system pyproject-build-system)
4805 (arguments (list #:tests? #false)) ;there are none
4806 (native-inputs (list python-poetry-core))
4807 (home-page "https://github.com/NiklasRosenstein/python-nr.stream")
4808 (synopsis "Stream and Optional classes for Python")
4809 (description "This package provides a @code{Stream} and @code{Optional}
4810class.")
4811 (license license:expat)))
4812
4813(define-public python-nr-util
4814 (package
4815 (name "python-nr-util")
4816 (version "0.8.12")
4817 (source
4818 (origin
4819 (method url-fetch)
4820 (uri (pypi-uri "nr.util" version))
4821 (sha256
4822 (base32 "1x0l4811dskwrk83l2xzdcldx2iazlrx5wxkg41jz7fr6ch9qm54"))))
4823 (build-system pyproject-build-system)
4824 (arguments
4825 (list
4826 #:tests? #false ;there are none
4827 #:phases
4828 #~(modify-phases %standard-phases
4829 (add-after 'unpack 'patch-build-system
4830 (lambda _
4831 (substitute* "pyproject.toml"
4832 (("^config =.*") "config = []\n"))))
4833 (add-after 'install 'fix-name
4834 (lambda* (#:key inputs outputs #:allow-other-keys)
4835 (let* ((sitedir (site-packages inputs outputs))
4836 (dist-info
4837 (string-append sitedir "/nr_util-" #$version ".dist-info")))
4838 (substitute* (string-append dist-info "/METADATA")
4839 (("Name: nr-util")
4840 "Name: nr.util"))
4841 (substitute* (string-append dist-info "/RECORD")
4842 (("nr_util") "nr.util"))
4843 (rename-file dist-info
4844 (string-append sitedir
4845 "/nr.util-"
4846 #$version ".dist-info"))))))))
4847 (propagated-inputs (list python-deprecated python-typing-extensions))
4848 (native-inputs (list python-poetry-core))
4849 (home-page "https://github.com/NiklasRosenstein/python-nr.util")
4850 (synopsis "General purpose Python utility library")
4851 (description "This package provides a general purpose Python utility
4852library.")
4853 (license license:expat)))
4854
4855(define-public python-slicerator
4856 (package
4857 (name "python-slicerator")
4858 (version "1.1.0")
4859 (source
4860 (origin
4861 (method url-fetch)
4862 (uri (pypi-uri "slicerator" version))
4863 (sha256
4864 (base32 "0ik0bmh18zgffd9kx53254jp3yyih6zcmd8kfb080xnqbizhl0a4"))))
4865 (build-system pyproject-build-system)
4866 (native-inputs
4867 (list python-numpy
4868 python-pytest
4869 python-setuptools))
4870 (home-page "https://github.com/soft-matter/slicerator")
4871 (synopsis "Lazy-loading, fancy-sliceable iterable")
4872 (description
4873 "This package provides a lazy-loading, fancy-sliceable iterable. Think
4874of it like a generator that is \"reusable\" and has a length.")
4875 (license license:bsd-3)))
4876
4877(define-public python-pytelegrambotapi
4878 (package
4879 (name "python-pytelegrambotapi")
4880 (version "4.22.0")
4881 (source
4882 (origin
4883 (method git-fetch)
4884 (uri (git-reference
4885 (url "https://github.com/eternnoir/pyTelegramBotAPI")
4886 (commit version)))
4887 (file-name (git-file-name name version))
4888 (sha256
4889 (base32 "0mic9wk6xg7p2ca7b03fc19l86yc9bkciq7kp8l9xvzzzmg4rzw4"))))
4890 (build-system pyproject-build-system)
4891 (arguments
4892 (list
4893 #:phases
4894 #~(modify-phases %standard-phases
4895 (replace 'check
4896 (lambda* (#:key tests? #:allow-other-keys)
4897 (when tests?
4898 (with-directory-excursion "tests"
4899 (invoke "py.test"))))))))
4900 (propagated-inputs
4901 (list python-requests))
4902 (native-inputs
4903 (list python-hatchling python-pytest))
4904 (home-page "https://github.com/eternnoir/pyTelegramBotAPI")
4905 (synopsis "Python Telegram bot api")
4906 (description "This package provides a simple, but extensible Python
4907implementation for the Telegram Bot API.")
4908 (license license:gpl2)))
4909
4910(define-public python-pytoolconfig
4911 (package
4912 (name "python-pytoolconfig")
4913 (version "1.3.1")
4914 (source
4915 (origin
4916 (method url-fetch)
4917 (uri (pypi-uri "pytoolconfig" version))
4918 (sha256
4919 (base32 "1bnvg9yiwp2fn0lvzhp1dd2mvrymxvjnasmbdap3i0hhdwdbvrji"))))
4920 (build-system pyproject-build-system)
4921 (arguments
4922 (list
4923 #:test-flags
4924 ;; Requires Sphinx.
4925 #~(list "--ignore=tests/test_documentation.py")))
4926 (native-inputs
4927 (list python-pdm-backend
4928 python-pytest))
4929 (propagated-inputs
4930 (list python-tomli
4931 python-packaging
4932 python-platformdirs))
4933 (home-page "https://pypi.org/project/pytoolconfig/")
4934 (synopsis "Python tool configuration")
4935 (description "The goal of this project is to manage configuration for
4936Python tools, such as rope and add support for a @file{pyproject.toml}
4937configuration file.")
4938 (license license:lgpl3+)))
4939
4940(define-public python-pytooling
4941 (package
4942 (name "python-pytooling")
4943 (version "8.15.0")
4944 (source
4945 (origin
4946 (method git-fetch)
4947 (uri (git-reference
4948 (url "https://github.com/pyTooling/pyTooling/")
4949 (commit (string-append "v" version))))
4950 (file-name (git-file-name name version))
4951 (sha256
4952 (base32 "07h2hj00vs6svjn6qgjf7k914l0ng0zz7d9h9agjfzya33qn06yp"))))
4953 (build-system pyproject-build-system)
4954 (arguments
4955 (list
4956 ;; Tests do not support linux-i686 system: Exception: Unknown
4957 ;; architecture 'linux-i686' for a native Linux.
4958 #:tests? (not (or (%current-target-system)
4959 (target-x86-32?)))
4960 #:test-flags
4961 #~(list
4962 "tests/unit"
4963 ;; These tests try to access the network.
4964 "--deselect=tests/unit/Dependency/Python.py::PyPI::test_SphinxReports"
4965 "--deselect=tests/unit/Dependency/Python.py::PyPI::test_pyTooling"
4966 "--deselect=tests/unit/Dependency/Python.py::PyPI::test_pyVersioning")
4967 #:phases
4968 #~(modify-phases %standard-phases
4969 (add-after 'unpack 'patch-git-bin-for-tests
4970 (lambda* (#:key inputs #:allow-other-keys)
4971 (substitute* (list "tests/unit/CLIAbstraction/Executable.py"
4972 "tests/unit/CLIAbstraction/Program.py")
4973 (("/usr/bin")
4974 (dirname (search-input-file inputs "/bin/git")))))))))
4975 (native-inputs
4976 (list git-minimal/pinned
4977 python-aiohttp
4978 python-colorama
4979 python-pytest
4980 python-requests
4981 python-ruamel.yaml
4982 python-setuptools))
4983 (home-page "https://pytooling.github.io/pyTooling/")
4984 (synopsis "Miscellaneous Python tools")
4985 (description
4986 "pyTooling is a collection of (abstract) data models, lacking classes,
4987decorators, a new performance boosting meta-class, and enhanced exceptions.
4988It also provides lots of helper functions---e.g., to ease the handling of
4989package descriptions or to unify multiple existing APIs into a single API.")
4990 (license license:asl2.0)))
4991
4992(define-public python-colorlog
4993 (package
4994 (name "python-colorlog")
4995 (version "6.9.0")
4996 (source
4997 (origin
4998 (method url-fetch)
4999 (uri (pypi-uri "colorlog" version))
5000 (sha256
5001 (base32 "1hka1kf6p53hppv05xsa5byr4gasfaaq7r2g3x7gb51vp6hm9fmz"))))
5002 (build-system pyproject-build-system)
5003 (native-inputs
5004 (list python-pytest
5005 python-setuptools))
5006 (home-page "https://github.com/borntyping/python-colorlog")
5007 (synopsis "Log formatting with colors for python")
5008 (description "The @code{colorlog.ColoredFormatter} is a formatter for use
5009with Python's logging module that outputs records using terminal colors.")
5010 (license license:expat)))
5011
5012(define-public python-pyprind
5013 (package
5014 (name "python-pyprind")
5015 (version "2.11.3")
5016 (source
5017 (origin
5018 (method url-fetch)
5019 (uri (pypi-uri "PyPrind" version))
5020 (sha256
5021 (base32 "1gscnlvj37m421ch3akm3kddxqkrgbg5zrpwy2ky1j59w6vclzg3"))))
5022 (build-system pyproject-build-system)
5023 (native-inputs (list python-pytest python-setuptools))
5024 (propagated-inputs (list python-psutil))
5025 (home-page "https://github.com/rasbt/pyprind")
5026 (synopsis "Python Progress Bar and Percent Indicator Utility")
5027 (description
5028 "The PyPrind (Python Progress Indicator) module provides a progress bar
5029and a percentage indicator object that let you track the progress of a loop
5030structure or other iterative computation.")
5031 (license license:bsd-3)))
5032
5033(define-public python-gh-md-to-html
5034 (package
5035 (name "python-gh-md-to-html")
5036 (version "1.21.2")
5037 (source
5038 (origin
5039 (method url-fetch)
5040 (uri (pypi-uri "gh_md_to_html" version))
5041 (sha256
5042 (base32 "1cnaqnckpcrpc4b8ba18s5ds05w1yfiszcp7ql7pmx0jnrj25qax"))))
5043 (build-system pyproject-build-system)
5044 (arguments
5045 (list
5046 #:tests? #false ;there are none
5047 #:phases
5048 #~(modify-phases %standard-phases
5049 (add-after 'unpack 'relax-shellescape-requirement
5050 (lambda _
5051 (substitute* "src/__init__.py"
5052 (("import shellescape")
5053 "import shlex")
5054 (("shellescape\\.quote")
5055 "shlex.quote"))
5056 (substitute* "setup.py"
5057 (("\"shellescape\",")
5058 "")))))))
5059 (propagated-inputs
5060 (list python-beautifulsoup4
5061 python-emoji-for-gh-md-to-html
5062 python-pillow
5063 python-requests
5064 python-webcolors))
5065 (native-inputs (list python-setuptools))
5066 (home-page "https://github.com/phseiff/github-flavored-markdown-to-html/")
5067 (synopsis "Github-flavored Markdown")
5068 (description
5069 "This package provides a feature-rich Github-flavored Markdown to HTML
5070Python library and command line interface.")
5071 (license license:expat)))
5072
5073(define-public python-gfloat
5074 (package
5075 (name "python-gfloat")
5076 (version "0.5.2")
5077 (source
5078 (origin
5079 (method url-fetch)
5080 (uri (pypi-uri "gfloat" version))
5081 (sha256
5082 (base32 "143424fqap9bxxybj8l48a00kqqh7vih67ycy7cmkd38kb31zcai"))))
5083 (build-system pyproject-build-system)
5084 (arguments
5085 (list
5086 #:test-flags
5087 #~(list
5088 "--ignore=test/test_array_api.py" ;requires array_api_strict
5089 "--ignore=test/test_jax.py" ;requires python-jax
5090 "--ignore=test/test_microxcaling.py" ;requires torchao
5091 ;; Jupyter.
5092 "--ignore-glob=docs/source/*.ipynb")))
5093 (propagated-inputs
5094 (list python-array-api-compat python-more-itertools python-numpy))
5095 (native-inputs (list python-nbval
5096 python-ml-dtypes
5097 python-pytest
5098 python-pytorch
5099 python-setuptools
5100 openssl))
5101 (home-page "https://github.com/graphcore-research/gfloat")
5102 (synopsis "Generic floating point handling in Python")
5103 (description
5104 "This package provides an implementation of generic floating point encode
5105and decode logic in Python. It handles various current and proposed floating
5106point types:
5107
5108@itemize
5109@item IEEE 754: Binary16, Binary32
5110@item OCP Float8: E5M2, E4M3
5111@item IEEE WG P3109
5112@item OCP MX Formats: E2M1, M2M3, E3M2, E8M0, INT8, and the MX block formats.
5113@end itemize")
5114 (license license:expat)))
5115
5116(define-public python-glymur
5117 (package
5118 (name "python-glymur")
5119 (version "0.14.3")
5120 (source
5121 (origin
5122 (method git-fetch) ; no tests data in PyPi package
5123 (uri (git-reference
5124 (url "https://github.com/quintusdias/glymur")
5125 (commit (string-append "v" version))))
5126 (file-name (git-file-name name version))
5127 (sha256
5128 (base32 "0266gj8a2p8jkbgb34lgk8dwin7ib2g38vdh04b2p6yhqx8w3xg8"))))
5129 (build-system pyproject-build-system)
5130 (arguments
5131 (list
5132 #:test-flags
5133 #~(list "--numprocesses" (number->string (parallel-job-count))
5134 ;; Failing test due to inability of ctypes.util.find_library()
5135 ;; to determine library path, which is patched above.
5136 "--ignore=tests/test_config.py")
5137 #:phases
5138 #~(modify-phases %standard-phases
5139 (add-after 'unpack 'patch-library-locations
5140 (lambda* (#:key inputs #:allow-other-keys)
5141 ;; XXX: It's a workaround for Python inability to find the
5142 ;; .so libraries with ctypes.util.find_library()
5143 (substitute* '("glymur/config.py")
5144 (("path = find_library\\(libname\\)")
5145 (string-append
5146 "if libname == \"openjp2\":\n"
5147 " path = \""
5148 (search-input-file inputs "/lib/libopenjp2.so") "\"\n"
5149 " elif libname == \"tiff\":\n"
5150 " path = \""
5151 (search-input-file inputs "/lib/libtiff.so") "\"\n"
5152 " elif libname == \"c\":\n"
5153 " path = \""
5154 (search-input-file inputs "/lib/libc.so.6") "\"\n"))))))))
5155 (native-inputs
5156 (list python-pytest
5157 python-pytest-xdist
5158 python-scikit-image
5159 python-setuptools))
5160 (inputs
5161 (list openjpeg ; glymur/lib/openjp2.py
5162 libtiff)) ; glymur/lib/tiff.py
5163 (propagated-inputs
5164 (list python-lxml
5165 python-numpy
5166 python-pillow ))
5167 (home-page "https://github.com/quintusdias/glymur")
5168 (synopsis "Python interface to OpenJPEG and LibTIFF")
5169 (description
5170 "This package provides Python interface to the OpenJPEG library which
5171allows one to read and write JPEG 2000 files")
5172 (license license:expat)))
5173
5174(define-public python-gphoto2
5175 (package
5176 (name "python-gphoto2")
5177 (version "2.6.1")
5178 (source
5179 (origin
5180 (method git-fetch) ; no tests in PyPI
5181 (uri (git-reference
5182 (url "https://github.com/jim-easterbrook/python-gphoto2")
5183 (commit (string-append "v" version))))
5184 (file-name (git-file-name name version))
5185 (sha256
5186 (base32 "08zwznl3f8j329db747jl2zrpqj58ml39in5gl2gqghw82ssi3gk"))))
5187 (build-system pyproject-build-system)
5188 (native-inputs
5189 (list pkg-config python-pytest python-setuptools python-wheel))
5190 (inputs
5191 (list libgphoto2))
5192 (home-page "https://github.com/jim-easterbrook/python-gphoto2")
5193 (synopsis "Python interface to libgphoto2")
5194 (description "@code{python-gphoto2} is a comprehensive Python interface
5195(or binding) to @code{libgphoto2}. It is built using @code{SWIG} to
5196automatically generate the interface code.")
5197 (license license:lgpl3+)))
5198
5199(define-public python-colour
5200 (package
5201 (name "python-colour")
5202 (version "0.1.5")
5203 (source
5204 (origin
5205 (method git-fetch)
5206 (uri (git-reference
5207 (url "https://github.com/vaab/colour")
5208 (commit version)))
5209 (file-name (git-file-name name version))
5210 (sha256
5211 (base32 "01k2n3zp6j0bws78vdy7i9d6m4lz3bm8z7d7lv1czks1d4aamnr2"))
5212 (patches (search-patches "python-colour-remove-d2to1.patch"))))
5213 (build-system pyproject-build-system)
5214 (arguments
5215 (list
5216 #:tests? #f ; No tests.
5217 #:phases
5218 #~(modify-phases %standard-phases
5219 (add-after 'unpack 'set-version
5220 (lambda _
5221 (substitute* "autogen.sh"
5222 (("if ! \"\\$git\".*")
5223 "if false ; then\n")
5224 (("depends git grep")
5225 "depends grep")
5226 (("version=\\$\\(\"\\$git\" describe --tags\\)")
5227 (format #f "version=~s" #$version))))))))
5228 (native-inputs (list python-setuptools))
5229 (home-page "https://github.com/vaab/colour")
5230 (synopsis "Convert and manipulate various color representations")
5231 (description
5232 "This package provides a pythonic way to manipulate color representations
5233(HSL, RVB,web, X11, ...).")
5234 (license license:expat)))
5235
5236(define-public python-rapidfuzz
5237 (package
5238 (name "python-rapidfuzz")
5239 (version "3.14.3")
5240 (source
5241 (origin
5242 (method git-fetch)
5243 (uri (git-reference
5244 (url "https://github.com/rapidfuzz/RapidFuzz")
5245 (commit (string-append "v" version))))
5246 (file-name (git-file-name name version))
5247 (sha256
5248 (base32 "1vnm1yx12am0ffbh0fj4nd8l1h0m299hdsw6kcp0pmgnl1jxxr8c"))))
5249 (build-system pyproject-build-system)
5250 (native-inputs
5251 (list cmake-minimal
5252 python-cython
5253 python-numpy
5254 python-pandas
5255 python-pytest
5256 python-scikit-build-core
5257 rapidfuzz-cpp
5258 taskflow))
5259 (home-page "https://github.com/rapidfuzz/RapidFuzz")
5260 (synopsis "Rapid fuzzy string matching")
5261 (description
5262 "RapidFuzz is a fast string matching library for Python and
5263C++, which is using the string similarity calculations from FuzzyWuzzy.")
5264 (license license:expat)))
5265
5266(define-public python-easygui
5267 (package
5268 (name "python-easygui")
5269 (version "0.98.1")
5270 (source
5271 (origin
5272 (method git-fetch)
5273 (uri (git-reference
5274 (url "https://github.com/robertlugg/easygui")
5275 (commit version)))
5276 (file-name (git-file-name name version))
5277 (sha256
5278 (base32 "1vwd0dvldl993sp7b24h5yn269vykq7mmp9khdssqryfchfbajx6"))))
5279 (build-system pyproject-build-system)
5280 (arguments
5281 ;; XXX: There seem to be no tests upstream, although the package itself
5282 ;; seems to provide a lot of demo elements.
5283 (list #:tests? #f))
5284 (native-inputs (list python-pytest python-setuptools))
5285 (propagated-inputs (list `(,python "tk")))
5286 (home-page "https://github.com/robertlugg/easygui")
5287 (synopsis "GUI programming module for Python")
5288 (description
5289 "EasyGUI is a module for easy GUI programming in Python. EasyGUI is
5290different from other GUI generators in that EasyGUI is NOT event-driven.
5291Instead, all GUI interactions are invoked by simple function calls.")
5292 (license license:bsd-3)))
5293
5294(define-public python-echo
5295 (package
5296 (name "python-echo")
5297 (version "0.12.1")
5298 (source
5299 (origin
5300 (method url-fetch)
5301 (uri (pypi-uri "echo" version))
5302 (sha256
5303 (base32 "038jfhgnakccn4gz7w07yf0cspyz0h81nmgp3cmiavlacac1kvqp"))))
5304 (build-system pyproject-build-system)
5305 (arguments
5306 (list
5307 #:phases
5308 #~(modify-phases %standard-phases
5309 (add-before 'check 'start-xorg-server
5310 (lambda _
5311 ;; The test suite requires a running X server.
5312 (system "Xvfb :99 -screen 0 1024x768x24 &")
5313 (setenv "DISPLAY" ":99.0"))))))
5314 (propagated-inputs
5315 (list python-numpy
5316 python-qtpy
5317 python-pyqt-6))
5318 (native-inputs
5319 (list python-pytest
5320 python-setuptools
5321 python-setuptools-scm
5322 xorg-server-for-tests))
5323 (home-page "https://github.com/glue-viz/echo")
5324 (synopsis "Callback Properties in Python")
5325 (description
5326 "Echo is a small library for attaching callback functions to property
5327state changes.")
5328 (license license:expat)))
5329
5330(define-public python-pymd4c
5331 (package
5332 (name "python-pymd4c")
5333 (version "1.3.0")
5334 (source
5335 (origin
5336 (method git-fetch)
5337 (uri (git-reference
5338 (url "https://github.com/dominickpastore/pymd4c")
5339 (commit (string-append "v" version))))
5340 (file-name (git-file-name name version))
5341 (sha256
5342 (base32 "1pv8k2nfxnlwgmx13rl5vq9v64s564skpk0qnw41c2rhn13rxl4f"))))
5343 (build-system pyproject-build-system)
5344 (arguments (list #:test-flags #~(list "test")))
5345 (inputs (list md4c))
5346 (native-inputs
5347 (list pkg-config python-pkgconfig python-pytest python-setuptools))
5348 (home-page "https://github.com/dominickpastore/pymd4c")
5349 (synopsis "Python bindings for MD4C")
5350 (description
5351 "PyMD4C provides Python bindings for MD4c, a C Markdown parser, compliant
5352to CommonMark.")
5353 (license license:expat)))
5354
5355(define-public python-pymediainfo
5356 (package
5357 (name "python-pymediainfo")
5358 (version "4.1")
5359 (source
5360 (origin
5361 (method url-fetch)
5362 (uri (pypi-uri "pymediainfo" version))
5363 (sha256
5364 (base32 "0mhpxs7vlqx8w75z93dy7nnvx89kwfdjkla03l19an15rlyqyspd"))))
5365 (build-system pyproject-build-system)
5366 (arguments
5367 (list
5368 ;; The only failing test requires internet access.
5369 #:test-flags
5370 #~(list "-k" "not test_parse_url")
5371 #:phases
5372 #~(modify-phases %standard-phases
5373 (add-after 'unpack 'patch-libmediainfo
5374 (lambda* (#:key inputs #:allow-other-keys)
5375 (substitute* "pymediainfo/__init__.py"
5376 (("libmediainfo.so.0")
5377 (search-input-file inputs "/lib/libmediainfo.so.0"))))))))
5378 (native-inputs (list python-pytest python-setuptools))
5379 (inputs (list libmediainfo))
5380 (home-page "https://github.com/sbraz/pymediainfo")
5381 (synopsis "Python wrapper for the mediainfo library")
5382 (description
5383 "This package provides a Python wrapper for the mediainfo library to
5384access the technical and tag data for video and audio files.")
5385 (license license:expat)))
5386
5387(define-public python-psutil
5388 (package
5389 (name "python-psutil")
5390 (version "7.2.2")
5391 (source
5392 (origin
5393 (method git-fetch)
5394 (uri (git-reference
5395 (url "https://github.com/giampaolo/psutil")
5396 (commit (string-append "release-" version))))
5397 (file-name (git-file-name name version))
5398 (sha256
5399 (base32 "1p5j3v78x795dd4xilmnvsswl09pkc81g9ax66akjdr0hkdnyl56"))))
5400 (build-system pyproject-build-system)
5401 (arguments
5402 (list
5403 ;; tests: X86_64-linux 414 passed, 278 skipped
5404 ;; i686-linux 410 passed, 278 skipped
5405 #:test-flags
5406 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
5407 "--dist" "loadgroup"
5408 #$@(map (lambda (ls) (string-append "--deselect=tests/"
5409 (string-join ls "::")))
5410 ;; assert None is not None
5411 '(("test_linux.py" "TestRootFsDeviceFinder"
5412 "test_comparisons")
5413 ;; FileNotFoundError: [Errno 2] No such file or
5414 ;; directory: '/sys/class/net/lo/mtu'
5415 ("test_linux.py" "TestSystemNetIfStats" "test_mtu")
5416 ;; AssertionError: assert '/dev/root' != '/dev/root'
5417 ("test_linux.py" "TestRootFsDeviceFinder"
5418 "test_disk_partitions_mocked")
5419 ;; psutil.AccessDenied: (pid=426)
5420 ("test_process.py" "TestProcess" "test_weird_environ")
5421 ;; assert []
5422 ("test_system.py" "TestMiscAPIs" "test_users")
5423 ;; ModuleNotFoundError: No module named '_common'
5424 ("test_scripts.py" "TestSetupScript"
5425 "test_invocation")
5426 ;; AssertionError: assert ''
5427 ("test_scripts.py" "TestExampleScripts" "test_who")
5428 ;; AssertionError: no disks on this system? assert
5429 ;; None is not None
5430 ("test_system.py" "TestDiskAPIs"
5431 "test_disk_io_counters")
5432 ;; psutil.NoSuchProcess: process no longer exists
5433 ;; (pid=247))
5434 ("test_process_all.py" "TestFetchAllProcesses"
5435 "test_all")
5436 ;; ModuleNotFoundError: No module named 'pypinfo'
5437 ("test_scripts.py" "TestInternalScripts"
5438 "test_import_all")
5439 ;; FileNotFoundError: [Errno 2] No such file or
5440 ;; directory: '/sys/class/power_supply'
5441 ("test_misc.py" "TestMisc" "test_serialization")))
5442 #$@(if (target-32bit?)
5443 (map (lambda (ls) (string-append "--deselect=tests/"
5444 (string-join ls "::")))
5445 ;; assert 12884901915 < 500 where 12884901915 =
5446 ;; abs((2596570605 - 15481472520))
5447 '(("test_linux.py" "TestSystemCPUStats"
5448 "test_interrupts")
5449 ;; OSError: [Errno 22] Invalid argument
5450 ("test_process.py" "TestProcess"
5451 "test_zombie_process")))
5452 '()))
5453 #:phases
5454 #~(modify-phases %standard-phases
5455 (add-before 'check 'pre-check
5456 (lambda _
5457 (delete-file-recursively "psutil")
5458 (substitute* "tests/test_linux.py"
5459 (("\"(free|vmstat)\"" _ cmd)
5460 (format #f "~s" (which cmd))))
5461 (setenv "PYTHONWARNINGS" "always")
5462 (setenv "PYTHONUNBUFFERED" "1")
5463 (setenv "PSUTIL_DEBUG" "1")
5464 (setenv "PSUTIL_TESTING" "1"))))))
5465 (native-inputs
5466 (list procps
5467 python-packaging
5468 python-psleak
5469 python-pyperf
5470 python-pytest
5471 python-pytest-instafail
5472 python-pytest-xdist
5473 python-setuptools))
5474 (home-page "https://github.com/giampaolo/psutil")
5475 (synopsis "Library for retrieving information on running processes")
5476 (description
5477 "@code{psutil} (Python system and process utilities) is a library for
5478retrieving information on running processes and system utilization (CPU,
5479memory, disks, network) in Python. It is useful mainly for system monitoring,
5480profiling and limiting process resources and management of running processes.
5481It implements many functionalities offered by command line tools such as: ps,
5482top, lsof, netstat, ifconfig, who, df, kill, free, nice, ionice, iostat,
5483iotop, uptime, pidof, tty, taskset, pmap.")
5484 (license license:bsd-3)))
5485
5486(define-public python-psutil-bootstrap
5487 (hidden-package
5488 (package/inherit python-psutil
5489 (name "python-psutil-bootstrap")
5490 (arguments
5491 (list #:tests? #f))
5492 (propagated-inputs '())
5493 (native-inputs
5494 (list python-setuptools)))))
5495
5496(define-public python-scapy
5497 (package
5498 (name "python-scapy")
5499 (version "2.6.1")
5500 (source (origin
5501 (method url-fetch)
5502 (uri (pypi-uri "scapy" version))
5503 (sha256
5504 (base32
5505 "1ig6qv1kpk7z9n8xf41y5fzywfv42xzd61bf79f3x19w73idf03n"))))
5506 (arguments
5507 '(#:tests? #f)) ; There is a test directory, but apparently no
5508 ; automatic testing framework.
5509 ;; The package has more optional dependencies such as ipython and
5510 ;; matplotlib. If functionality is missing, these should be added.
5511 ;; See
5512 ;; https://scapy.readthedocs.io/en/latest/installation.html#optional-dependencies
5513 (build-system pyproject-build-system)
5514 (native-inputs (list python-setuptools python-wheel))
5515 (home-page "https://scapy.net")
5516 (synopsis "Python network packet crafting library")
5517 (description
5518 "Scapy is a Python library and executable for interactively
5519manipulating network packets. It can forge or decode packets of a number
5520of protocols, send them on the wire, capture them, store or read them
5521using pcap files, match requests and replies, and so on.
5522It can handle tasks such as scanning, tracerouting, probing, unit tests,
5523attacks or network discovery.")
5524 (license license:gpl2)))
5525
5526(define-public python-icmplib
5527 (package
5528 (name "python-icmplib")
5529 (version "3.0.4")
5530 (source
5531 (origin
5532 (method git-fetch)
5533 (uri (git-reference
5534 (url "https://github.com/ValentinBELYN/icmplib")
5535 (commit (string-append "v" version))))
5536 (file-name (git-file-name name version))
5537 (sha256
5538 (base32 "04h877ryg22vsgvq35dqwpf0b1v8hvfl2gc857zxqzig4ld5qw1y"))))
5539 (build-system pyproject-build-system)
5540 (arguments (list #:tests? #f)) ; No tests.
5541 (native-inputs (list python-setuptools))
5542 (home-page "https://github.com/ValentinBELYN/icmplib")
5543 (synopsis
5544 "Python implementation of the Internet Control Message Protocol (ICMP)")
5545 (description
5546 "@code{icmplib} is a supporting library for both IPv4 and IPv6 networks.
5547ICMP is typically used for diagnostic or control purposes - well known from
5548utilities such as ping(1).")
5549 (license license:lgpl3)))
5550
5551(define-public python-iron-core
5552 (let ((commit "5a5f3011da09769a812c6a1c44781ef852abc19b")
5553 (revision "0"))
5554 (package
5555 (name "python-iron-core")
5556 (version (git-version "1.2.1" revision commit))
5557 (source
5558 (origin
5559 (method git-fetch)
5560 (uri (git-reference
5561 (url "https://www.github.com/iron-io/iron_core_python")
5562 (commit commit)))
5563 (file-name (git-file-name name version))
5564 (sha256
5565 (base32 "030ibimgqvc6hywh7g3k7qn147ckagi0wbdiqcpdf1c85xqrj5zq"))))
5566 (build-system pyproject-build-system)
5567 (arguments
5568 (list
5569 ;; XXX: Tests are run, but they seem too old/not updated.
5570 #:tests? #f
5571 #:test-backend #~'unittest))
5572 (propagated-inputs (list python-dateutil python-requests))
5573 (native-inputs (list python-setuptools))
5574 (home-page "https://www.github.com/iron-io/iron_core_python")
5575 (synopsis "Universal classes and methods for Iron.io API wrappers")
5576 (description
5577 "This package provides universal classes and methods for the Iron.io
5578API wrappers to build on.")
5579 (license license:bsd-2))))
5580
5581(define-public python-iron-mq
5582 (let ((commit "e6ff76ac0068c3184d9003e3163b94ffc839dbe8")
5583 (revision "0"))
5584 (package
5585 (name "python-iron-mq")
5586 (version (git-version "0.9" revision commit))
5587 (source
5588 (origin
5589 (method git-fetch)
5590 (uri (git-reference
5591 (url "https://github.com/iron-io/iron_mq_python")
5592 (commit commit)))
5593 (file-name (git-file-name name version))
5594 (sha256
5595 (base32 "0bb8gpzb3jr2r6i367jspwcxrz5ygdf40a67nl9aj5n79hg1aq8x"))))
5596 (build-system pyproject-build-system)
5597 (arguments
5598 (list
5599 ;; XXX: Tests are broken and require network access.
5600 #:tests? #f
5601 #:test-backend #~'unittest))
5602 (propagated-inputs (list python-iron-core))
5603 (native-inputs (list python-setuptools))
5604 (home-page "https://github.com/iron-io/iron_mq_python")
5605 (synopsis "Client library for IronMQ, a message queue in the cloud")
5606 (description
5607 "This package provides Python language bindings for IronMQ. IronMQ is an
5608elastic message queue for managing data and event flow within cloud
5609applications and between systems.")
5610 (license license:bsd-2))))
5611
5612(define-public python-rasterio
5613 (package
5614 (name "python-rasterio")
5615 (version "1.3.7")
5616 (source (origin
5617 (method url-fetch)
5618 (uri (pypi-uri "rasterio" version))
5619 (sha256
5620 (base32
5621 "012341c1rlcdr9rkg97lbhxrwzn4sr2xah4zjfnqy2r1227wpzdb"))))
5622 (properties
5623 '((updater-ignored-native-inputs . ("gdal" "python-cython"))))
5624 (build-system pyproject-build-system)
5625 (arguments
5626 (list
5627 #:tests? #false ;test data not present
5628 #:phases
5629 '(modify-phases %standard-phases
5630 (add-before 'check 'build-extensions
5631 (lambda _
5632 ;; Cython extensions have to be built before running the tests.
5633 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
5634 (propagated-inputs (list python-affine
5635 python-attrs
5636 python-certifi
5637 python-click
5638 python-click-plugins
5639 python-cligj
5640 python-numpy
5641 python-setuptools ; For pkg_resources.
5642 python-snuggs))
5643 (native-inputs (list gdal
5644 python-boto3
5645 python-cython
5646 python-hypothesis
5647 python-packaging
5648 python-pytest
5649 python-shapely
5650 python-wheel))
5651 (home-page "https://github.com/rasterio/rasterio")
5652 (synopsis "Fast and direct raster I/O for use with Numpy and SciPy")
5653 (description "This package implements fast and direct raster I/O for use
5654with Numpy and SciPy.")
5655 (license license:bsd-3)))
5656
5657(define-public python-rich-tables
5658 (package
5659 (name "python-rich-tables")
5660 (version "0.8.0")
5661 (source
5662 (origin
5663 (method git-fetch) ; no tests data in PyPi package
5664 (uri (git-reference
5665 (url "https://github.com/snejus/rich-tables")
5666 (commit version)))
5667 (file-name (git-file-name name version))
5668 (sha256
5669 (base32 "1gkwgxcjnghn0alqw53kgb4ixf047dnb49kc0af3blvcwnmfmb5f"))))
5670 (build-system pyproject-build-system)
5671 (arguments
5672 (list
5673 #:test-flags
5674 ;; TypeError: can't subtract offset-naive and offset-aware datetimes
5675 #~(list "--deselect=tests/test_outputs.py::test_outputs[tests/json/album.json]")))
5676 (native-inputs
5677 (list python-freezegun
5678 python-poetry-core
5679 python-pytest))
5680 (propagated-inputs
5681 (list python-funcy
5682 python-humanize
5683 python-multimethod
5684 python-platformdirs
5685 python-rgbxy
5686 python-rich
5687 python-sqlparse))
5688 (home-page "https://github.com/snejus/rich-tables")
5689 (synopsis "Ready-made rich tables for various purposes")
5690 (description
5691 "This package implements rich tables for various purposes, it's JSON
5692human-prettifier based on the @code{rich} Python library.")
5693 (license license:expat)))
5694
5695(define-public python-rich-toolkit
5696 (package
5697 (name "python-rich-toolkit")
5698 (version "0.12.0")
5699 (source
5700 (origin
5701 (method url-fetch)
5702 (uri (pypi-uri "rich_toolkit" version))
5703 (sha256
5704 (base32 "0h3cda068xc0v8jqcp7fyrb6d4xlhcjlxm5bfygk04408500pjzs"))))
5705 (build-system pyproject-build-system)
5706 (propagated-inputs (list python-click python-rich python-typing-extensions))
5707 (native-inputs (list python-hatchling python-inline-snapshot python-pytest))
5708 (home-page "https://pypi.org/project/rich-toolkit/")
5709 (synopsis "Rich toolkit for building command-line applications")
5710 (description "This package provides the Rich toolkit for building
5711command-line applications.")
5712 (license license:expat)))
5713
5714(define-public python-shapely
5715 (package
5716 (name "python-shapely")
5717 (version "2.1.1")
5718 (source
5719 (origin
5720 (method url-fetch)
5721 (uri (pypi-uri "shapely" version))
5722 (sha256
5723 (base32 "0wi71vyjyb04lbw6kkl9vcsmn7n28j8002288m19dziggyb221jh"))))
5724 (build-system pyproject-build-system)
5725 (arguments
5726 (list
5727 #:phases
5728 '(modify-phases %standard-phases
5729 (add-before 'check 'build-extensions
5730 (lambda _
5731 ;; Cython extensions have to be built before running the tests.
5732 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
5733 (native-inputs
5734 (list python-cython python-matplotlib python-pytest python-setuptools python-wheel))
5735 (inputs
5736 (list geos))
5737 (propagated-inputs
5738 (list python-numpy))
5739 (home-page "https://github.com/shapely/shapely")
5740 (synopsis "Library for the manipulation and analysis of geometric objects")
5741 (description "Shapely is a Python package for manipulation and analysis of
5742planar geometric objects. It is based on the @code{GEOS} library.")
5743 (license license:bsd-3)))
5744
5745(define-public python-shortuuid
5746 (package
5747 (name "python-shortuuid")
5748 (version "1.0.13")
5749 (source
5750 (origin
5751 (method url-fetch)
5752 (uri (pypi-uri "shortuuid" version))
5753 (sha256
5754 (base32
5755 "0wjygiwk07irgqmr29bv7rvq9pc71ff3jinzn620a9h6yq3wzf9v"))))
5756 (build-system pyproject-build-system)
5757 (native-inputs
5758 (list python-poetry-core python-pytest))
5759 (home-page "https://github.com/skorokithakis/shortuuid")
5760 (synopsis "Generator library for concise, unambiguous and URL-safe UUIDs")
5761 (description
5762 "@code{shortuuid} is a Python library for generating concise, unambiguous
5763and URL-safe UUIDs. UUIDs are generated using the built-in Python @code{uuid}
5764module and then similar looking characters are removed.")
5765 (license license:bsd-3)))
5766
5767(define-public python-logwrap
5768 (package
5769 (name "python-logwrap")
5770 (version "11.1.1")
5771 (source
5772 (origin
5773 (method git-fetch) ; no tests in PyPI release
5774 (uri (git-reference
5775 (url "https://github.com/python-useful-helpers/logwrap")
5776 (commit version)))
5777 (file-name (git-file-name name version))
5778 (sha256
5779 (base32 "07m4c87pavpdak1lx4bvdz43y2wwzm6fc54x947cssgwqz8mw3zp"))))
5780 (build-system pyproject-build-system)
5781 (native-inputs (list python-pytest
5782 python-setuptools
5783 python-setuptools-scm
5784 python-wheel))
5785 (home-page "https://github.com/python-useful-helpers/logwrap")
5786 (synopsis "Decorator for logging function arguments")
5787 (description "This package provides a decorator to log function arguments
5788and function call return values in a human-readable way.")
5789 (license license:asl2.0)))
5790
5791(define-public python-babel
5792 (package
5793 (name "python-babel")
5794 (version "2.16.0")
5795 (source
5796 (origin
5797 (method url-fetch)
5798 (uri (pypi-uri "babel" version))
5799 (sha256
5800 (base32 "05p3k0i5h8v4vqsg36s94kwl4nhgfmgwdq1x7wbzw1b6l965bwyi"))))
5801 (build-system pyproject-build-system)
5802 (native-inputs
5803 (list python-freezegun
5804 python-pytest
5805 python-setuptools
5806 tzdata-for-tests))
5807 (propagated-inputs
5808 (list python-pytz))
5809 (home-page "https://babel.pocoo.org/")
5810 (synopsis
5811 "Tools for internationalizing Python applications")
5812 (description
5813 "Babel is composed of two major parts:
5814- tools to build and work with gettext message catalogs
5815- a Python interface to the CLDR (Common Locale Data Repository), providing
5816access to various locale display names, localized number and date formatting,
5817etc.")
5818 (license license:bsd-3)))
5819
5820(define-public python-bidict
5821 (package
5822 (name "python-bidict")
5823 (version "0.23.1")
5824 (source
5825 (origin
5826 (method git-fetch) ; no tests in PyPI.
5827 (uri (git-reference
5828 (url "https://github.com/jab/bidict")
5829 (commit (string-append "v" version))))
5830 (file-name (git-file-name name version))
5831 (sha256
5832 (base32 "1qsbxjjsrks3icyq19afr5y47zdrfb0cvaadpprgcszq2ilihkaq"))))
5833 (build-system pyproject-build-system)
5834 (native-inputs
5835 (list python-pytest
5836 python-pytest-benchmark
5837 python-pytest-xdist
5838 python-setuptools
5839 python-sortedcollections
5840 python-wheel))
5841 (home-page "https://bidict.readthedocs.io")
5842 (synopsis "Bidirectional mapping library")
5843 (description "The @code{bidict} library provides several data structures
5844for working with bidirectional mappings in Python.")
5845 (license license:mpl2.0)))
5846
5847(define-public python-bip39
5848 (package
5849 (name "python-bip39")
5850 (version "0.0.2")
5851 (source
5852 (origin
5853 (method url-fetch)
5854 (uri (pypi-uri "bip39" version))
5855 (sha256
5856 (base32 "18m7d3gi7vj2zi0bl1z7m0nhcj6i8j9vj4vil276siagnpkv64ry"))))
5857 (build-system pyproject-build-system)
5858 (native-inputs (list python-pytest python-setuptools))
5859 (home-page "https://github.com/de-centralized-systems/python-bip39/")
5860 (synopsis "Self-contained and simple BIP39 implementation in Python")
5861 (description
5862 "This package provides a self-contained and simple BIP39
5863implementation written in Python. It includes a @code{bip39.py} executable.
5864
5865BIP39 is a standardized mapping between binary data (the @emph{entropy}),
5866and a list of words that are easier to remember for humans (the
5867@emph{mnemonic}).")
5868 (license license:expat)))
5869
5870(define-public python-bitarray
5871 (package
5872 (name "python-bitarray")
5873 (version "3.4.3")
5874 (source (origin
5875 (method url-fetch)
5876 (uri (pypi-uri "bitarray" version))
5877 (sha256
5878 (base32
5879 "1w32bybj7qx99pkwyhb4g9c1y5mp89kc838iq30swrkb12zv5pyx"))))
5880 (build-system pyproject-build-system)
5881 (arguments
5882 (list #:phases
5883 #~(modify-phases %standard-phases
5884 (replace 'check
5885 (lambda* (#:key tests? #:allow-other-keys)
5886 (when tests?
5887 ;; Step out of the source directory to avoid interference.
5888 (with-directory-excursion "/tmp"
5889 (invoke "python" "-c"
5890 "import bitarray; bitarray.test()"))))))))
5891 (native-inputs (list python-setuptools python-wheel))
5892 (home-page "https://github.com/ilanschnell/bitarray")
5893 (synopsis "Efficient arrays of booleans")
5894 (description "This package provides an object type which efficiently
5895represents an array of booleans. Bitarrays are sequence types and behave very
5896much like usual lists. Eight bits are represented by one byte in a contiguous
5897block of memory. The user can select between two representations:
5898little-endian and big-endian. All of the functionality is implemented in C.
5899Methods for accessing the machine representation are provided. This can be
5900useful when bit level access to binary files is required, such as portable
5901bitmap image files. Also, when dealing with compressed data which uses
5902variable bit length encoding, you may find this module useful.")
5903 (license license:psfl)))
5904
5905(define-public python-bitarray-2
5906 (package
5907 (inherit python-bitarray)
5908 (version "2.8.1")
5909 (source (origin
5910 (method url-fetch)
5911 (uri (pypi-uri "bitarray" version))
5912 (sha256
5913 (base32
5914 "1wy80bmhg33bpzn28g1n7s8r8f4drj7pcl4m2qb5sql8bbryx376"))))))
5915
5916(define-public python-boolean.py
5917 (package
5918 (name "python-boolean.py")
5919 (version "5.0")
5920 (source
5921 (origin
5922 (method url-fetch)
5923 (uri (pypi-uri "boolean_py" version))
5924 (sha256
5925 (base32 "15cd64x2m1cbcnjasw0m2977ab1n0mam8j96schkfxbrs2xc9jv0"))))
5926 (build-system pyproject-build-system)
5927 (native-inputs (list python-pytest python-setuptools python-wheel))
5928 (home-page "https://github.com/bastikr/boolean.py")
5929 (synopsis "Boolean algebra in one Python module")
5930 (description
5931 "This is a small Python library that implements boolean algebra.
5932It defines two base elements, @code{TRUE} and @code{FALSE}, and a
5933@code{Symbol} class that can take on one of these two values. Calculations
5934are done only in terms of @code{AND}, @code{OR}, and @code{NOT}---other
5935compositions like @code{XOR} and @code{NAND} are emulated on top of them.
5936Expressions are constructed from parsed strings or directly in Python.")
5937 (license license:bsd-2)))
5938
5939(define-public python-h5netcdf
5940 (package
5941 (name "python-h5netcdf")
5942 (version "1.3.0")
5943 (source
5944 (origin
5945 (method url-fetch)
5946 (uri (pypi-uri "h5netcdf" version))
5947 (sha256
5948 (base32 "1kw3cf01kziwxmb84x0cy6vbpsmqjm0k1dm34i6b4d7bv8kw0wd1"))))
5949 (build-system pyproject-build-system)
5950 (native-inputs
5951 (list python-netcdf4
5952 python-pytest
5953 python-setuptools
5954 python-setuptools-scm
5955 python-wheel))
5956 (propagated-inputs
5957 (list python-h5py python-packaging))
5958 (home-page "https://h5netcdf.org")
5959 (synopsis "Python interface for the netCDF4 file-format based on h5py")
5960 (description "This package provides a Python interface for the netCDF4
5961file-format that reads and writes local or remote HDF5 files directly via
5962@url{h5py, https://www.h5py.org/} or @url{h5pyd,
5963https://github.com/HDFGroup/h5pyd}, without relying on the Unidata netCDF
5964library.")
5965 (license license:bsd-3)))
5966
5967(define-public python-h5py
5968 (package
5969 (name "python-h5py")
5970 (version "3.15.1")
5971 (source
5972 (origin
5973 (method url-fetch)
5974 (uri (pypi-uri "h5py" version))
5975 (sha256
5976 (base32 "0sbbw9100f2763czngbpg1jxisp5r5pkpa2swm6mcws4bka3wvn8"))))
5977 (build-system pyproject-build-system)
5978 (arguments
5979 (list
5980 ;; tests: 800 passed, 18 skipped, 4 deselected, 12 warnings
5981 #:test-flags
5982 ;; Tests requiring the build with MPI.
5983 #~(list "-k" (string-append "not test_mpio"
5984 " and not test_mpio_append"
5985 " and not test_mpi_atomic"
5986 " and not test_close_multiple_mpio_driver"))
5987 #:phases
5988 #~(modify-phases %standard-phases
5989 (add-after 'unpack 'fix-hdf5-paths
5990 (lambda _
5991 (setenv "HDF5_DIR" #$(this-package-input "hdf5"))))
5992 (replace 'check
5993 (lambda* (#:key tests? test-flags #:allow-other-keys)
5994 (when tests?
5995 (setenv "H5PY_TEST_CHECK_FILTERS" "1")
5996 (with-directory-excursion #$output
5997 (apply invoke "pytest" "-vv" test-flags))))))))
5998 (native-inputs
5999 (list pkg-config
6000 python-cython
6001 python-pkgconfig
6002 python-pytest
6003 python-setuptools))
6004 (inputs
6005 (list hdf5))
6006 (propagated-inputs
6007 (list python-numpy))
6008 (home-page "https://www.h5py.org/")
6009 (synopsis "Read and write HDF5 files from Python")
6010 (description
6011 "The h5py package provides both a high- and low-level interface to the
6012HDF5 library from Python. The low-level interface is intended to be a
6013complete wrapping of the HDF5 API, while the high-level component supports
6014access to HDF5 files, datasets and groups using established Python and NumPy
6015concepts.")
6016 (license license:bsd-3)))
6017
6018(define-public python-hdf5storage
6019 ;; XXX: Use the latest commit containing compatibility with Pytest and Python
6020 ;; 3.11, see: <https://github.com/frejanordsiek/hdf5storage/issues/135>.
6021 ;;
6022 ;; This package probably is sun setting, consider to remove when stops
6023 ;; building, see: <https://github.com/frejanordsiek/hdf5storage/issues/136>.
6024 (let ((commit "7ee2a96de134b44beaa79c3a11c559f9ac87c5a6")
6025 (revision "0"))
6026 (package
6027 (name "python-hdf5storage")
6028 (version (git-version "0.1.19" revision commit))
6029 (source
6030 (origin
6031 (method git-fetch)
6032 (uri (git-reference
6033 (url "https://github.com/frejanordsiek/hdf5storage")
6034 (commit commit)))
6035 (file-name (git-file-name name version))
6036 (sha256
6037 (base32 "0xq0rg8vwk35yc3jvv2fyf7bl189viq0fywch53g57hxrahv5k02"))))
6038 (build-system pyproject-build-system)
6039 (arguments
6040 ;; Started failing with the move to [email protected], due to modules changes.
6041 (list
6042 #:test-flags
6043 #~(list "--ignore=tests/test_marshallers_requiring_modules.py")))
6044 (native-inputs
6045 (list python-pytest
6046 python-setuptools))
6047 (propagated-inputs
6048 (list python-h5py
6049 python-numpy-1))
6050 (home-page "https://github.com/frejanordsiek/hdf5storage")
6051 (synopsis "Read and write Python data types from and to HDF5 files")
6052 (description
6053 "This Python package provides high-level utilities to read and write a
6054variety of Python types from and to @acronym{HDF5, Hierarchical Data Format}
6055formatted files. This package also provides support for MATLAB MAT v7.3
6056formatted files, which are HDF5 files with a different extension and some
6057extra metadata. Because HDF5 and MAT files might need to be read from
6058untrusted sources, pickling is avoided in this package.")
6059 (license license:bsd-2))))
6060
6061(define-public python-prctl
6062 (package
6063 (name "python-prctl")
6064 (version "1.8.1")
6065 (source (origin
6066 (method url-fetch)
6067 (uri (pypi-uri "python-prctl" version))
6068 (sha256
6069 (base32
6070 "1kk7gv582w72spnz6agr0pz0hlpgchp3l7zxzzjarwfllwjrmjml"))))
6071 (build-system pyproject-build-system)
6072 (arguments
6073 (list #:test-backend ''custom
6074 #:test-flags ''("test_prctl.py")
6075 #:phases
6076 #~(modify-phases %standard-phases
6077 (add-after 'unpack 'patch-tests
6078 (lambda _
6079 (substitute* "test_prctl.py"
6080 ;; actual suffix used in cpython build output dir name
6081 (("sys.version\\[0:3\\]") "sys.implementation.cache_tag")
6082 ;; test_no_new_privs assumes existence of /bin/ping, but
6083 ;; can never run anyway due to it requiring setuid ping.
6084 ;; just short circuit it instead.
6085 (("os.stat\\('/bin/ping'\\)\\.st_mode") "0")))))))
6086 (inputs (list libcap))
6087 (native-inputs (list python-setuptools))
6088 (supported-systems (filter target-linux? %supported-systems))
6089 (home-page "https://pythonhosted.org/python-prctl")
6090 (synopsis "Linux capabilities library")
6091 (description "This package provides a Python library for controlling Linux
6092capabilities and attributes, similar to the prctl syscall.")
6093 (license license:gpl3+)))
6094
6095(define-public python-pyhimitsu
6096 (package
6097 (name "python-pyhimitsu")
6098 (version "0.0.9")
6099 (source (origin
6100 (method url-fetch)
6101 (uri (pypi-uri "py_himitsu" version))
6102 (sha256
6103 (base32
6104 "1kljxhjvfy945zij8fif3s6xzgcyslxz99mv460iy0anzj433pj5"))))
6105 (build-system pyproject-build-system)
6106 (arguments
6107 (list
6108 #:phases
6109 #~(modify-phases %standard-phases
6110 (replace 'check
6111 (lambda _
6112 ;; (setenv "PYTHONPATH" (getenv "GUIX_PYTHONPATH"))
6113 (invoke "make" "check"))))))
6114 (native-inputs (list python-hatchling))
6115 (propagated-inputs (list python-pyxdg))
6116 (home-page "https://git.sr.ht/~apreiml/py-himitsu")
6117 (synopsis "Himitsu client protocol implementation in Python")
6118 (description "This package provides a library for writing Himitsu client
6119programs in Python.")
6120 (license license:expat)))
6121
6122(define-public python-hjson
6123 ;; Using commit from master branch as the PyPI version does not contain
6124 ;; the hjson/tests/ directory.
6125 (let ((revision "0")
6126 (commit "1687b811fcbbc54b5ac71cfbaa99f805e406fbcb"))
6127 (package
6128 (name "python-hjson")
6129 (version (git-version "3.1.0" revision commit))
6130 (source (origin
6131 (method git-fetch)
6132 (uri (git-reference
6133 (url "https://github.com/hjson/hjson-py")
6134 (commit commit)))
6135 (file-name (git-file-name name version))
6136 (sha256
6137 (base32
6138 "1qfqnhvfx5mm7bdajjnnagmvns1zxyksjzh3k5la2ag6a8bp5gki"))
6139 (modules '((guix build utils)))
6140 ;; collections.OrderedDict.__repr__ changed in Python 3.12,
6141 ;; see also <https://github.com/hjson/hjson-py/issues/40>.
6142 (snippet #~(substitute* "hjson/__init__.py"
6143 (("\\[\\('foo', 'a'\\), \\('bar', 1\\)\\]")
6144 "{'foo': 'a', 'bar': 1}")))))
6145 (build-system pyproject-build-system)
6146 (native-inputs (list python-setuptools python-wheel))
6147 (home-page "https://github.com/hjson/hjson-py")
6148 (synopsis "Python package to parse HJSON documents")
6149 (description "This package provides a Python library and a command-line
6150interface utility to parse @url{https://hjson.github.io/, HJSON}) documents.")
6151 (license license:expat))))
6152
6153(define-public python-hnswlib
6154 (package
6155 (name "python-hnswlib")
6156 (version "0.8.0")
6157 (source
6158 (origin
6159 (method git-fetch)
6160 (uri (git-reference
6161 (url "https://github.com/nmslib/hnswlib")
6162 (commit (string-append "v" version))))
6163 (file-name (git-file-name name version))
6164 (sha256
6165 (base32 "0l5ry8c1qkck8w5acdl4k3acs9qfxiq0lc7f50x8vz53imgh1afl"))))
6166 (build-system pyproject-build-system)
6167 (arguments
6168 (list
6169 #:phases
6170 #~(modify-phases %standard-phases
6171 (add-after 'unpack 'disable-native-optimization
6172 (lambda _
6173 (substitute* "setup.py"
6174 ((", '-march=native'")
6175 "")))))))
6176 (native-inputs
6177 (list pybind11-2
6178 python-pytest
6179 python-setuptools))
6180 (propagated-inputs
6181 (list python-numpy))
6182 (home-page "https://github.com/nmslib/hnswlib")
6183 (synopsis "Fast approximate nearest neighbor search")
6184 (description "Hnswlib is a header-only C++ implementation of fast
6185approximate nearest neighbor search with Python bindings.")
6186 (license license:asl2.0)))
6187
6188(define-public python-pylatex
6189 (package
6190 (name "python-pylatex")
6191 (version "1.4.2")
6192 (source
6193 (origin
6194 (method git-fetch)
6195 (uri (git-reference
6196 (url "https://github.com/JelteF/PyLaTeX")
6197 (commit (string-append "v" version))))
6198 (file-name (git-file-name name version))
6199 (sha256
6200 (base32 "1daciv5dx9nhiai8bz75bwfvnfv40dq118lfnhjw8kpvr0m7hrm6"))))
6201 (build-system pyproject-build-system)
6202 (arguments
6203 (list #:phases
6204 #~(modify-phases %standard-phases
6205 ;; some tests attempt to create directories
6206 (add-before 'check 'set-home-directory
6207 (lambda _
6208 (setenv "HOME" "/tmp"))))))
6209 (propagated-inputs (list python-ordered-set))
6210 (native-inputs (list python-matplotlib
6211 python-pytest
6212 python-quantities
6213 python-setuptools
6214 (texlive-local-tree
6215 (list texlive-lastpage
6216 texlive-latexmk
6217 texlive-parskip))))
6218 (home-page "https://github.com/JelteF/PyLaTeX")
6219 (synopsis "Library for creating LaTeX files and snippets")
6220 (description
6221 "This package provides a Python library for creating LaTeX files and
6222snippets.")
6223 (license license:expat)))
6224
6225(define-public python-pylatexenc
6226 (package
6227 (name "python-pylatexenc")
6228 (version "2.10")
6229 (source
6230 (origin
6231 (method url-fetch)
6232 (uri (pypi-uri "pylatexenc" version))
6233 (sha256
6234 (base32 "1ls09z47b5md71gkxcj7fd87ynpvv2walgp2w6z31p26xf2gvn1x"))))
6235 (build-system pyproject-build-system)
6236 (native-inputs (list python-pytest python-setuptools python-wheel))
6237 (home-page "https://github.com/phfaist/pylatexenc")
6238 (synopsis "LaTeX parser for Unicode/LaTeX conversion")
6239 (description
6240 "@code{python-pylatexenc} is a LaTeX parser providing LaTeX-to-Unicode and
6241Unicode-to-LaTeX conversion.")
6242 (license license:expat)))
6243
6244(define-public python-lsp-black
6245 (package
6246 (name "python-lsp-black")
6247 (version "2.0.0")
6248 (source
6249 (origin
6250 (method git-fetch)
6251 (uri (git-reference
6252 (url "https://github.com/python-lsp/python-lsp-black")
6253 (commit (string-append "v" version))))
6254 (file-name (git-file-name name version))
6255 (sha256
6256 (base32 "0ilh6nx15kzrp29nkrpx03vx6dw3n7wq65qwv7bg7kcnyiwacplx"))))
6257 (build-system pyproject-build-system)
6258 (arguments
6259 ;; The python version is too old for these tests to pass properly.
6260 (list #:test-flags
6261 `'("-k" ,(string-append
6262 "not test_pylsp_format_document_syntax_error"
6263 " and not test_pylsp_format_range_syntax_error"
6264 " and not test_load_config_defaults"
6265 " and not test_load_config_with_skip_options"))))
6266 (propagated-inputs
6267 (list python-black python-lsp-server python-tomli))
6268 (native-inputs
6269 (list python-pytest python-setuptools python-wheel))
6270 (home-page "https://github.com/python-lsp/python-lsp-black")
6271 (synopsis "Black plugin for the Python LSP Server")
6272 (description "This package provides a plugin with support for the
6273@code{python-black} formatter for the Python LSP Server.")
6274 (license license:expat)))
6275
6276(define-public python-pylsp-mypy
6277 (package
6278 (name "python-pylsp-mypy")
6279 (version "0.7.1")
6280 (source
6281 (origin
6282 ;; "The newest version on PyPI is indeed not published on GitHub."
6283 ;; See <https://github.com/python-lsp/pylsp-mypy/issues/113>.
6284 (method url-fetch)
6285 (uri (pypi-uri "pylsp_mypy" version))
6286 (sha256
6287 (base32 "0rmp8bi599g76nmrraiagln9alz9r9ly760kkxbh4vw1yyssjra4"))))
6288 (build-system pyproject-build-system)
6289 (native-inputs (list python-pytest python-setuptools))
6290 (propagated-inputs (list python-mypy python-lsp-server))
6291 (home-page "https://github.com/python-lsp/pylsp-mypy")
6292 (synopsis "Mypy linter for the Python LSP Server")
6293 (description
6294 "Mypy linter integration for use with @code{python-lsp-server}.")
6295 (license license:expat)))
6296
6297(define-public python-sh
6298 (package
6299 (name "python-sh")
6300 (version "2.2.2")
6301 (source
6302 (origin
6303 (method url-fetch)
6304 (uri (pypi-uri "sh" version))
6305 (sha256
6306 (base32
6307 "0nxnkvmrl6vlan6lsvjymmxpr0gf8k0gnwr1632lwa0sqjkjfck5"))))
6308 (build-system pyproject-build-system)
6309 (arguments
6310 (list
6311 #:test-flags
6312 #~(list "-k" (string-join
6313 ;; These tests are shaky.
6314 (list "not test_bad_sig_raise_exception"
6315 "test_doesnt_execute_directories"
6316 "test_environment"
6317 "test_ok_code_ignores_bad_sig_exception"
6318 "test_unicode_path")
6319 " and not ")
6320 "tests")
6321 #:phases
6322 #~(modify-phases %standard-phases
6323 (add-before 'check 'pre-check
6324 (lambda _
6325 (setenv "HOME" "/tmp"))))))
6326 (native-inputs
6327 (list python-poetry-core python-pytest))
6328 (home-page "https://github.com/amoffat/sh")
6329 (synopsis "Python subprocess replacement")
6330 (description "This package provides a replacement for Python's
6331@code{subprocess} feature.")
6332 (license license:expat)))
6333
6334;; Old version just for python-dotenv-0.13.0 for docker-compose; remove once
6335;; that is updated.
6336(define-public python-sh-1
6337 (package
6338 (inherit python-sh)
6339 (version "1.14.2")
6340 (source
6341 (origin
6342 (method url-fetch)
6343 (uri (pypi-uri "sh" version))
6344 (sha256
6345 (base32
6346 "03gyss1rhj4in7pgysg4q0hxp3230whinlpy1532ljs99lrx0ywx"))))
6347 (arguments
6348 '(#:phases
6349 (modify-phases %standard-phases
6350 (replace 'check
6351 (lambda _
6352 ;; XXX: A Python 2 test fails when HOME=/homeless-shelter.
6353 (setenv "HOME" "/tmp")
6354 (invoke "python" "sh.py" "test"))))))
6355 (native-inputs
6356 (list python-setuptools))))
6357
6358(define-public python-cftime
6359 (package
6360 (name "python-cftime")
6361 (version "1.6.5")
6362 (source
6363 (origin
6364 (method url-fetch)
6365 (uri (pypi-uri "cftime" version))
6366 (sha256
6367 (base32 "07p8s5a0xacn404x6l0i04q1gz2h0h9m5azbhdvbhgxlp7bgw9c2"))))
6368 (build-system pyproject-build-system)
6369 (propagated-inputs
6370 (list python-numpy))
6371 (native-inputs
6372 (list python-cython
6373 python-pytest
6374 python-setuptools
6375 python-wheel))
6376 (home-page "https://unidata.github.io/cftime/")
6377 (synopsis "Library for time handling")
6378 (description
6379 "This package provides time-handling functionality that used to be part
6380of the netcdf4 package before.")
6381 (license license:expat)))
6382
6383(define-public python-netcdf4
6384 (package
6385 (name "python-netcdf4")
6386 (version "1.7.2")
6387 (source
6388 (origin
6389 (method git-fetch)
6390 (uri (git-reference
6391 (url "https://github.com/Unidata/netcdf4-python")
6392 (commit (string-append "v" version "rel"))))
6393 (file-name (git-file-name name version))
6394 (sha256
6395 (base32 "1bq0dkgq795z00j5z4xi1dqqw0chaj5j80hg5nci1piyr2ic41v9"))))
6396 (build-system pyproject-build-system)
6397 (arguments
6398 (list
6399 ;; tests: Ran 113 tests; skipped=7
6400 #:phases
6401 #~(modify-phases %standard-phases
6402 (add-before 'build 'set-configure-flags
6403 (lambda _
6404 (setenv "CFLAGS" (string-join
6405 (list "-g -O2"
6406 "-Wno-error=incompatible-pointer-types"
6407 "-Wno-error=implicit-function-declaration"
6408 "-Wno-error=int-conversion")
6409 " "))
6410 (setenv "HDF5_DIR" #$(this-package-input "hdf5"))
6411 (setenv "JPEG_DIR" #$(this-package-input "libjpeg-turbo"))
6412 (setenv "NETCDF4_DIR" #$(this-package-input "netcdf"))
6413 (setenv "USE_NCCONFIG" "0")))
6414 (replace 'check
6415 (lambda* (#:key tests? #:allow-other-keys)
6416 (when tests?
6417 (with-directory-excursion "test"
6418 (setenv "NO_NET" "1")
6419 (setenv "NO_CDL" "1")
6420 (invoke "python" "run_all.py"))))))))
6421 (native-inputs
6422 (list python-cython
6423 python-packaging
6424 python-pytest
6425 python-setuptools
6426 python-setuptools-scm
6427 python-typing-extensions))
6428 (inputs
6429 (list netcdf
6430 hdf5
6431 zlib))
6432 (propagated-inputs
6433 (list python-certifi
6434 python-cftime
6435 python-numpy))
6436 (home-page "https://github.com/Unidata/netcdf4-python")
6437 (synopsis "Python/numpy interface to the netCDF library")
6438 (description "Netcdf4-python is a Python interface to the netCDF C
6439library. netCDF version 4 has many features not found in earlier
6440versions of the library and is implemented on top of HDF5. This module
6441can read and write files in both the new netCDF 4 and the old netCDF 3
6442format, and can create files that are readable by HDF5 clients. The
6443API is modelled after @code{Scientific.IO.NetCDF}, and should be familiar
6444to users of that module.")
6445 ;; The software is mainly ISC, but includes some files covered
6446 ;; by the Expat license.
6447 (license (list license:isc license:expat))))
6448
6449(define-public python-ncclient
6450 (package
6451 (name "python-ncclient")
6452 (version "0.6.19")
6453 (source
6454 (origin
6455 (method git-fetch) ;no tests in PyPI release
6456 (uri (git-reference
6457 (url "https://github.com/ncclient/ncclient")
6458 (commit (string-append "v" version))))
6459 (file-name (git-file-name name version))
6460 (sha256
6461 (base32
6462 "0nmyj59k9zbdfhm7qhrq9gd4x6vhjdf18q1kwfgb2gwcb3b8nd2h"))))
6463 (build-system pyproject-build-system)
6464 (native-inputs
6465 (list python-pytest
6466 python-setuptools
6467 python-wheel))
6468 (propagated-inputs
6469 (list python-lxml
6470 python-paramiko))
6471 (home-page "https://github.com/ncclient/ncclient")
6472 (synopsis "Python library for NETCONF clients")
6473 (description "@code{ncclient} is a Python library that facilitates
6474client-side scripting and application development around the NETCONF
6475protocol.")
6476 (license license:asl2.0)))
6477
6478(define-public python-ncls
6479 (package
6480 (name "python-ncls")
6481 (version "0.0.68")
6482 (source (origin
6483 (method url-fetch)
6484 (uri (pypi-uri "ncls" version))
6485 (sha256
6486 (base32
6487 "14xsnzr34xa4rwfcdjry9aqjs8i03s9fzy6jgrwj3fr3n6msbal1"))))
6488 (build-system pyproject-build-system)
6489 (arguments
6490 ;; Those tests fail with warnings (not errors) for the Numpy update.
6491 ;; Remove it at next python-team iteration.
6492 (list #:test-flags ''("--ignore=examples/test_all_overlaps_both.py"
6493 "--ignore=examples/test_find_overlap_list.py")))
6494 (native-inputs (list python-cython
6495 python-pandas
6496 python-pytest
6497 python-setuptools
6498 python-wheel))
6499 (propagated-inputs (list python-numpy))
6500 (home-page "https://github.com/endrebak/ncls")
6501 (synopsis "Nested containment list data structure")
6502 (description
6503 "This package provides a wrapper for the nested containment list data
6504structure. It is a static interval-tree that is fast for both construction
6505and lookups.")
6506 (license license:bsd-3)))
6507
6508(define-public python-license-expression
6509 (package
6510 (name "python-license-expression")
6511 (version "30.1.0")
6512 (source
6513 (origin
6514 (method url-fetch)
6515 (uri (pypi-uri "license-expression" version))
6516 (sha256
6517 (base32 "0lvshl2fhwa568d3y3vmx45hdp8gk5w9yl3b2q5d66r5vqn1sfwl"))))
6518 (build-system pyproject-build-system)
6519 (native-inputs
6520 (list python-setuptools-scm python-pytest python-setuptools python-wheel))
6521 (propagated-inputs
6522 (list python-boolean.py))
6523 (home-page "https://github.com/nexB/license-expression")
6524 (synopsis "Apply boolean logic to license expressions")
6525 (description
6526 "This Python module defines a tiny language to evaluate and compare
6527license expressions using boolean logic. Logical combinations of licenses can
6528be tested for equality, containment, and equivalence. They can be normalised
6529and simplified. It supports SPDX license expressions as well as other naming
6530conventions and aliases in the same expression.")
6531 (license license:gpl2+)))
6532
6533(define-public python-limits
6534 (package
6535 (name "python-limits")
6536 (version "5.8.0")
6537 (source
6538 (origin
6539 (method git-fetch)
6540 (uri (git-reference
6541 (url "https://github.com/alisaifee/limits")
6542 (commit version)))
6543 (file-name (git-file-name name version))
6544 (sha256
6545 (base32 "1b1p6vpdwkzf89jl03xm56f3jp4dhkz89r63gx51b89ph1lcpi85"))))
6546 (build-system pyproject-build-system)
6547 (arguments
6548 (list
6549 ;; tests: 155 passed, 620 deselected
6550 #:test-flags
6551 #~(list
6552 ;; The test suite spawns storages in Docker.
6553 "-k" (simple-format #f "not (~a)"
6554 (string-join
6555 '("lazy_dependency" ;importing redis
6556 "memcache"
6557 "mongo"
6558 "redis"
6559 "valkey")
6560 " or "))
6561 "--ignore=tests/benchmarks")
6562 #:phases
6563 #~(modify-phases %standard-phases
6564 (add-before 'check 'adjust-tests
6565 (lambda _
6566 (substitute* "pytest.ini"
6567 ((".*--cov=.*") "")
6568 ((".*-K.*") ""))
6569 (substitute* (find-files "tests" "\\.py$")
6570 (("import pymemcache.*") "")
6571 (("import pymongo.*") "")
6572 (("import redis.*") "")
6573 (("import valkey.*") "")
6574 ;; Lazy fixtures are only used for storages.
6575 (("from pytest_lazy_fixtures import lf.*") "")
6576 (("lf\\((.+)\\)" all fixture) fixture))
6577 (substitute* "tests/test_storage.py"
6578 (("\\<redis\\>\\..*\\(.*\\)") "")))))))
6579 (propagated-inputs (list python-deprecated python-packaging))
6580 (native-inputs
6581 (list python-flaky
6582 python-hatch-vcs
6583 python-hatchling
6584 python-pytest
6585 python-pytest-asyncio))
6586 (home-page "https://limits.readthedocs.io/")
6587 (synopsis "Rate limiting utilities")
6588 (description
6589 "This package provides a Python library to perform rate limiting with
6590commonly used storage backends.")
6591 (license license:expat)))
6592
6593(define-public python-fb-re2
6594 (package
6595 (name "python-fb-re2")
6596 (version "1.0.7")
6597 (source
6598 (origin
6599 (method git-fetch)
6600 (uri (git-reference
6601 (url "https://github.com/facebook/pyre2")
6602 (commit (string-append "v" version))))
6603 (file-name (git-file-name name version))
6604 (sha256
6605 (base32
6606 "0snprxdnh3m45r3b0az4v0l28h90ycmfbybzla6xg1qviwv9w1ak"))))
6607 (build-system pyproject-build-system)
6608 (arguments
6609 (list
6610 #:phases
6611 #~(modify-phases %standard-phases
6612 (add-after 'unpack 'fix-tests
6613 (lambda _
6614 (substitute* "tests/test_match.py"
6615 (("assertRaisesRegexp")
6616 "assertRaisesRegex")))))))
6617 (native-inputs
6618 (list python-pytest python-setuptools))
6619 (inputs
6620 (list re2))
6621 (home-page "https://github.com/facebook/pyre2")
6622 (synopsis "Python wrapper for RE2")
6623 (description "This package provides a Python extension that wraps Google's
6624RE2 regular expression library. It implements many of the features of
6625Python's built-in @code{re} module with compatible interfaces.")
6626 (license license:bsd-3)))
6627
6628(define-public python-filelock
6629 ;; Try to update simultaneously with the bootstrap version in
6630 ;; (gnu packages python-build).
6631 (package
6632 (name "python-filelock")
6633 (version "3.16.1")
6634 (source
6635 (origin
6636 (method url-fetch)
6637 (uri (pypi-uri "filelock" version))
6638 (sha256
6639 (base32
6640 "0d8ljvmsfgriiqf5dqii91gfcpj7cpjrh8fnsvifaiyvspygnjf2"))))
6641 (build-system pyproject-build-system)
6642 (arguments
6643 (list
6644 ;; Break cycle with virtualenv.
6645 #:test-flags #~(list "--ignore=tests/test_virtualenv.py")))
6646 (native-inputs
6647 (list python-hatch-vcs
6648 python-hatchling
6649 python-pytest
6650 python-pytest-asyncio
6651 python-pytest-mock
6652 python-setuptools-scm))
6653 (home-page "https://github.com/tox-dev/py-filelock")
6654 (synopsis "Platform independent file lock")
6655 (description "@code{filelock} contains a single module implementing
6656a platform independent file lock in Python, which provides a simple way of
6657inter-process communication.")
6658 (license license:unlicense)))
6659
6660(define-public python-filelock-next
6661 (package
6662 (inherit python-filelock)
6663 (name "python-filelock")
6664 (version "3.20.0")
6665 (source
6666 (origin
6667 (method url-fetch)
6668 (uri (pypi-uri "filelock" version))
6669 (sha256
6670 (base32 "1x0k9hrk8gr91hfb6ss6cwlq4p0pvi40nsg6skhl5gn69qxr87ki"))))
6671 (native-inputs
6672 (list python-hatch-vcs
6673 python-hatchling
6674 python-pytest
6675 python-pytest-asyncio
6676 python-pytest-mock
6677 python-pytest-timeout))))
6678
6679(define-public python-seedir
6680 (package
6681 (name "python-seedir")
6682 (version "0.5.0")
6683 (source
6684 (origin
6685 (method url-fetch)
6686 (uri (pypi-uri "seedir" version))
6687 (sha256
6688 (base32 "1ibgzji9ijm37vgwmg37s2hsqmpqd793z4q41w816x5m6nahzy76"))))
6689 (build-system pyproject-build-system)
6690 (propagated-inputs (list python-natsort))
6691 (native-inputs (list python-pytest python-setuptools python-wheel))
6692 (home-page "https://github.com/earnestt1234/seedir")
6693 (synopsis
6694 "Package for creating, editing, and reading folder tree diagrams.")
6695 (description
6696 "This is a package for creating, editing, and reading folder tree
6697diagrams.")
6698 (license license:expat)))
6699
6700(define-public python-semantic-version
6701 (package
6702 (name "python-semantic-version")
6703 (version "2.10.0")
6704 (source
6705 (origin
6706 (method url-fetch)
6707 (uri (pypi-uri "semantic_version" version))
6708 (sha256
6709 (base32 "0704smz9k6hdd6i5xh0xf0sk47kannjb77abilvvp34r6v9vdaxx"))))
6710 (build-system pyproject-build-system)
6711 (arguments (list #:test-backend #~'nose2))
6712 (native-inputs
6713 (list python-nose2
6714 python-setuptools))
6715 (home-page "https://github.com/rbarrois/python-semanticversion")
6716 (synopsis "Semantic versioning module for Python")
6717 (description
6718 "The @code{semantic_version} class is a small library for handling
6719@uref{https://semver.org/, semantic versioning} (@dfn{SemVer}) in Python.
6720
6721It can compare versions, generate a new version that represents a bump in one
6722of the version levels, and check whether any given string is a proper semantic
6723version identifier.")
6724 (license license:bsd-3)))
6725
6726(define-public python-serpent
6727 (package
6728 (name "python-serpent")
6729 (version "1.41")
6730 (source
6731 (origin
6732 (method git-fetch)
6733 (uri (git-reference
6734 (url "https://github.com/irmen/Serpent")
6735 (commit (string-append "serpent-" version))))
6736 (file-name (git-file-name name version))
6737 (sha256
6738 (base32 "081bm13pdxp3rxis24j2mjka06fzi4kap51wmnf21q69fsikbza8"))))
6739 (build-system pyproject-build-system)
6740 (arguments (list #:test-backend #~'unittest
6741 #:test-flags #~(list "discover" "-s" "tests")))
6742 (native-inputs
6743 (list python-attrs python-pytz python-setuptools))
6744 (home-page "https://github.com/irmen/Serpent")
6745 (synopsis "Serializer for literal Python expressions")
6746 (description
6747 "Serpent provides @code{ast.literal_eval()}-compatible object tree
6748serialization. It serializes an object tree into bytes (an utf-8 encoded
6749string) that can be decoded and then passed as-is to @code{ast.literal_eval()}
6750to rebuild the original object tree.
6751
6752Because only safe literals are encoded, it is safe to send serpent data to
6753other machines, such as over the network.")
6754 (license license:expat)))
6755
6756(define-public python-setuptools-declarative-requirements
6757 (package
6758 (name "python-setuptools-declarative-requirements")
6759 (version "1.3.0")
6760 (source
6761 (origin
6762 (method url-fetch)
6763 (uri (pypi-uri "setuptools-declarative-requirements" version))
6764 (sha256
6765 (base32 "1xwqp37ii9kql49agmkipawjbndwxg6y8sxax1wc4l6kkaxvk9ap"))))
6766 (build-system pyproject-build-system)
6767 (arguments
6768 (list #:tests? #f)) ;require dated inputs
6769 (native-inputs
6770 (list python-setuptools-scm))
6771 (propagated-inputs
6772 (list python-setuptools))
6773 (home-page "https://github.com/s0undt3ch/setuptools-declarative-requirements")
6774 (synopsis "File support for setuptools declarative setup.cfg")
6775 (description
6776 "This package provides file support for setuptools declarative
6777@code{setup.cfg}.")
6778 (license license:asl2.0)))
6779
6780(define-public python-humanfriendly
6781 (package
6782 (name "python-humanfriendly")
6783 (version "10.0")
6784 (source
6785 (origin
6786 (method git-fetch)
6787 (uri (git-reference
6788 (url "https://github.com/xolox/python-humanfriendly")
6789 (commit version)))
6790 (file-name (git-file-name name version))
6791 (sha256
6792 (base32 "07di334y2xbyl9bd2c9q55sm0llmvz80a4p7frlkvq2w6l2d47bv"))))
6793 (build-system pyproject-build-system)
6794 (arguments
6795 (list
6796 ;XXX: Tests depend on coloredlogs, which in turn depends on humanfriendly.
6797 #:tests? #f))
6798 (native-inputs (list python-setuptools))
6799 (home-page "https://humanfriendly.readthedocs.io")
6800 (synopsis "Human-friendly input and output in Python")
6801 (description
6802 "The functions and classes in @code{humanfriendly} can be used to make
6803text interfaces more user-friendly. It includes tools to parse and format
6804numbers, file sizes, and timespans, timers for long-running operations, menus
6805to allow the user to choose from a list of options, and terminal interaction
6806helpers.")
6807 (license license:expat)))
6808
6809(define-public python-calver
6810 (package
6811 (name "python-calver")
6812 (version "2022.06.26")
6813 (source
6814 (origin
6815 (method git-fetch)
6816 (uri (git-reference
6817 (url "https://github.com/di/calver")
6818 (commit version)))
6819 (file-name (git-file-name name version))
6820 (sha256
6821 (base32 "14l9kv9igcmp5k6d2ahnx6z4dn6zy5kykz95hkh0rkqswn8x79b1"))))
6822 (build-system pyproject-build-system)
6823 (native-inputs
6824 (list python-pretend
6825 python-pytest
6826 python-setuptools
6827 python-wheel))
6828 (home-page "https://github.com/di/calver")
6829 (synopsis "Setuptools extension for CalVer package versions")
6830 (description
6831 "The calver package is a setuptools extension for automatically defining
6832your Python package version as a calendar version.")
6833 (license license:asl2.0)))
6834
6835(define-public python-can
6836 (package
6837 (name "python-can")
6838 (version "4.6.1")
6839 (source
6840 (origin
6841 (method git-fetch)
6842 (uri (git-reference
6843 (url "https://github.com/hardbyte/python-can")
6844 (commit (string-append "v" version))))
6845 (file-name (git-file-name name version))
6846 (sha256
6847 (base32 "0i89hzc9n1h8i63wa333ahh5j1xqxq9v4ymcx7mcsg6ygji5wllr"))))
6848 (build-system pyproject-build-system)
6849 (arguments
6850 (list
6851 #:test-flags
6852 #~(list
6853 ;; TODO: Check if it could be packed:
6854 ;; https://github.com/projectgus/python-canalystii
6855 ;;
6856 ;; Disable tests which require specific CAN drivers we have no
6857 ;; package for in Guix.
6858 "--ignore=test/test_interface_canalystii.py"
6859 ;; These tests fail with "OSError: [Errno 19] No such device".
6860 "-k" "not BasicTestUdpMulticastBusIPv")
6861 #:phases
6862 #~(modify-phases %standard-phases
6863 (add-after 'unpack 'relax-requirements
6864 (lambda _
6865 (substitute* "pyproject.toml"
6866 (("\"wrapt~=.*\"")
6867 "\"wrapt\"")))))))
6868 (propagated-inputs (list python-packaging python-wrapt))
6869 (native-inputs
6870 (list ;; python-canalystii ; Not packed yet
6871 python-hypothesis
6872 python-mock
6873 python-parameterized
6874 python-pyserial
6875 python-pytest
6876 python-pytest-timeout
6877 python-setuptools
6878 python-setuptools-scm))
6879 (home-page "https://github.com/hardbyte/python-can")
6880 (synopsis "Controller Area Network (CAN) interface module for Python")
6881 (description
6882 "This package defines the @code{can} module, which provides controller
6883area network (CAN) support for Python developers; providing common
6884abstractions to different hardware devices, and a suite of utilities for
6885sending and receiving messages on a CAN bus.")
6886 (license license:lgpl3+)))
6887
6888(define-public python-canmatrix
6889 (package
6890 (name "python-canmatrix")
6891 (version "1.2")
6892 (source
6893 (origin
6894 (method git-fetch) ; no tests data in PyPi package
6895 (uri (git-reference
6896 (url "https://github.com/ebroecker/canmatrix")
6897 (commit version)))
6898 (file-name (git-file-name name version))
6899 (sha256
6900 (base32 "05l0hi279y1dc8ifm2223lpn7z9dx2h7kk599bkymvasb2qa1xrx"))))
6901 (build-system pyproject-build-system)
6902 (native-inputs
6903 (list python-pytest
6904 python-pytest-timeout
6905 python-setuptools
6906 python-wheel))
6907 (propagated-inputs
6908 (list python-attrs
6909 python-canopen
6910 python-click
6911 ;; python-ldfparser
6912 python-lxml
6913 python-openpyxl
6914 python-pyyaml
6915 python-xlrd
6916 python-xlwt))
6917 (home-page "https://github.com/ebroecker/canmatrix")
6918 (synopsis "@acronym{CAN, Controller Area Network} matrices in Python")
6919 (description
6920 "This package implements a @acronym{CAN, Controller Area Network} matrix
6921object in Python which describes the CAN-communication and its needed objects
6922such as board units, frames, signals, and values. It also includes two
6923command-line tools (@command{canconvert} and @command{cancompare}) for
6924converting and comparing CAN databases.")
6925 (license license:bsd-2)))
6926
6927(define-public python-canopen
6928 (package
6929 (name "python-canopen")
6930 (version "2.4.1")
6931 (source
6932 (origin
6933 (method git-fetch)
6934 (uri (git-reference
6935 (url "https://github.com/canopen-python/canopen")
6936 (commit (string-append "v" version))))
6937 (file-name (git-file-name name version))
6938 (sha256
6939 (base32 "0vw6si83m4329p0k0q4b54gn1pindfzkmx6wxqy03bixd94bxw5y"))))
6940 (build-system pyproject-build-system)
6941 (native-inputs (list python-pytest python-setuptools))
6942 (propagated-inputs (list python-can))
6943 (home-page "https://github.com/canopen-python/canopen")
6944 (synopsis "CANopen stack implementation")
6945 (description
6946 "This package provides a Python implementation of the
6947@uref{https://www.can-cia.org/canopen/,CANopen standard} for
6948@acronym{CANs, controller-area networks}. The aim of the project is to
6949support the most common parts of the CiA 301 standard in a simple
6950Pythonic interface. It is mainly targeted for testing and automation
6951tasks rather than a standard compliant master implementation.")
6952 (license license:expat)))
6953
6954(define-public python-diskcache
6955 (package
6956 (name "python-diskcache")
6957 ;; 5.6.3 (2023-08-31), the latest commit has some comparability with
6958 ;; Django fixing failing tests.
6959 (properties '((commit . "ebfa37cd99d7ef716ec452ad8af4b4276a8e2233")
6960 (revision . "0")))
6961 (version (git-version "5.6.3"
6962 (assoc-ref properties 'revision)
6963 (assoc-ref properties 'commit)))
6964 (source
6965 (origin
6966 (method git-fetch)
6967 (uri (git-reference
6968 (url "https://github.com/grantjenks/python-diskcache")
6969 (commit (assoc-ref properties 'commit))))
6970 (file-name (git-file-name name version))
6971 (sha256
6972 (base32 "0i669n76hi8c4p6fl9hkm40gpi817bn27kxnfhcrsd60ynfgbrbc"))))
6973 (build-system pyproject-build-system)
6974 (arguments
6975 (list
6976 #:phases
6977 #~(modify-phases %standard-phases
6978 (add-after 'unpack 'fix-pytest-config
6979 (lambda _
6980 ;; Prevent full threads utilization.
6981 (substitute* "tox.ini"
6982 (("-n auto") "")))))))
6983 (native-inputs
6984 (list python-django
6985 python-pytest
6986 python-setuptools))
6987 (home-page "https://www.grantjenks.com/docs/diskcache/")
6988 (synopsis "Disk and file backed cache library")
6989 (description "DiskCache is a disk and file backed persistent cache.")
6990 (license license:asl2.0)))
6991
6992(define-public python-optparse-pretty
6993 (package
6994 (name "python-optparse-pretty")
6995 (version "0.1.1")
6996 (source
6997 (origin
6998 (method url-fetch)
6999 (uri (pypi-uri "optparse-pretty" version))
7000 (sha256
7001 (base32 "1920wbh2b7a8qn7zx2iiqbcdaax335l81a73x9pp8h11yzs2jdmh"))))
7002 (build-system pyproject-build-system)
7003 (arguments (list #:tests? #false)) ;There are none
7004 (native-inputs (list python-setuptools python-wheel))
7005 (home-page "https://github.com/gvalkov/optparse-pretty")
7006 (synopsis "Compact help formatter for optparse")
7007 (description
7008 "This module provides two help formatters for optparse. They provide
7009terser and more customizable option formatting in comparison to the default
7010help formatter.")
7011 (license license:bsd-3)))
7012
7013(define-public python-orjson
7014 (package
7015 (name "python-orjson")
7016 (version "3.9.7")
7017 (source (origin
7018 (method url-fetch)
7019 (uri (pypi-uri "orjson" version))
7020 (sha256
7021 (base32
7022 "0hh1j7akxgx1nvsnwx1p4f4h4pkgr7v9aqr99l2pwbwfyyc93qw5"))))
7023 (build-system cargo-build-system)
7024 (arguments
7025 (list
7026 #:imported-modules `(,@%cargo-build-system-modules
7027 ,@%pyproject-build-system-modules)
7028 #:modules '((guix build cargo-build-system)
7029 ((guix build pyproject-build-system) #:prefix py:)
7030 (guix build utils))
7031 #:phases
7032 #~(modify-phases %standard-phases
7033 (add-after 'build 'build-python-module
7034 (assoc-ref py:%standard-phases 'build))
7035 (add-after 'build-python-module 'install-python-module
7036 (assoc-ref py:%standard-phases 'install)))
7037 #:install-source? #false))
7038 (inputs
7039 (cons maturin (cargo-inputs 'python-orjson)))
7040 (native-inputs
7041 (list python-wrapper))
7042 (home-page "https://github.com/ijl/orjson")
7043 (synopsis "Python JSON library supporting dataclasses, datetimes, and numpy")
7044 (description "Orjson is a fast, correct JSON library for Python. It
7045benchmarks as the fastest Python library for JSON and is more correct than the
7046standard @code{json} library or other third-party libraries. It serializes
7047dataclass, datetime, numpy, and UUID instances natively.")
7048 ;; Either of these licenses
7049 (license (list license:asl2.0 license:expat))))
7050
7051(define-public python-overrides
7052 (package
7053 (name "python-overrides")
7054 (version "7.7.0")
7055 (source
7056 (origin
7057 (method url-fetch)
7058 (uri (pypi-uri "overrides" version))
7059 (sha256
7060 (base32 "02l2j5pnsxn0q5i63is5g6i3q06ri83nf7lv55swr61vv6iqy5am"))))
7061 (build-system pyproject-build-system)
7062 (native-inputs (list python-pytest python-setuptools python-wheel))
7063 (home-page "https://github.com/mkorpela/overrides")
7064 (synopsis "Decorator to detect mismatch when overriding a method")
7065 (description
7066 "This package provides a decorator to automatically detect mismatch when
7067overriding a method.")
7068 (license license:asl2.0)))
7069
7070(define-public python-argparse-addons
7071 (package
7072 (name "python-argparse-addons")
7073 (version "0.12.0")
7074 (source
7075 (origin
7076 (method url-fetch)
7077 (uri (pypi-uri "argparse_addons" version))
7078 (sha256
7079 (base32 "1bv0nh8147bhjrjdr0m2fnmhxnl6bdni68wd61v7x206szfa08k3"))))
7080 (build-system pyproject-build-system)
7081 (native-inputs
7082 (list python-pytest python-setuptools))
7083 (home-page "https://github.com/eerimoq/argparse_addons")
7084 (synopsis "Extensions for Python's @code{argparse} library")
7085 (description "This Python library provides additional types and actions
7086for the standard @code{argparse} library.")
7087 (license license:expat)))
7088
7089(define-public python-bitstruct
7090 (package
7091 (name "python-bitstruct")
7092 (version "8.21.0")
7093 (source
7094 (origin
7095 (method url-fetch)
7096 (uri (pypi-uri "bitstruct" version))
7097 (sha256
7098 (base32 "1b2836hjc2bvnbjngfk9n0995zm3lz65apq7irlgijj5iabf82zz"))))
7099 (build-system pyproject-build-system)
7100 (native-inputs
7101 (list python-pytest
7102 python-setuptools
7103 python-wheel))
7104 (home-page "https://github.com/eerimoq/bitstruct")
7105 (synopsis "Python values to and C bit field structs converter")
7106 (description
7107 "This module performs conversions between Python values and C bit field
7108structs represented as Python byte strings. It is intended to have a similar
7109interface as the @code{struct} module from Python, but working on bits instead
7110of primitive data types like @code{char}, @code{int}, etc.")
7111 (license license:expat)))
7112
7113(define-public python-cantools
7114 (package
7115 (name "python-cantools")
7116 (version "40.5.0")
7117 (source
7118 (origin
7119 (method git-fetch)
7120 (uri (git-reference
7121 (url "https://github.com/eerimoq/cantools")
7122 (commit version)))
7123 (file-name (git-file-name name version))
7124 (sha256
7125 (base32 "0ldqdsvkvy7vmplyiqcfqqwbh8v88ha98hgdrnlm09g4qbylh5d4"))))
7126 (build-system pyproject-build-system)
7127 (native-inputs
7128 (list python-freezegun
7129 python-parameterized
7130 python-pytest
7131 python-setuptools
7132 python-setuptools-scm))
7133 (propagated-inputs
7134 (list python-argparse-addons
7135 python-bitstruct
7136 python-can
7137 python-crccheck
7138 python-diskcache
7139 python-matplotlib
7140 python-textparser))
7141 (home-page "https://github.com/eerimoq/cantools")
7142 (synopsis "Tools for the Controller Area Network (CAN) bus protocol")
7143 (description
7144 "This package includes Controller Area Network (CAN) related tools that
7145can be used to:
7146@itemize
7147@item parse DBC, KCD, SYM, ARXML 4 and CDD files
7148@item encode and decode CAN messages
7149@item multiplex simple and extended signals
7150@item diagnose DID encoding and decoding
7151@item dump the CAN decoder output
7152@item test CAN nodes
7153@item generate C source code
7154@item monitor the CAN bus
7155@end itemize")
7156 (license license:expat)))
7157
7158(define-public python-capturer
7159 (package
7160 (name "python-capturer")
7161 (version "3.0")
7162 (source
7163 (origin
7164 (method git-fetch)
7165 (uri (git-reference
7166 (url "https://github.com/xolox/python-capturer")
7167 (commit version)))
7168 (file-name (git-file-name name version))
7169 (sha256
7170 (base32 "0fwrxa049gzin5dck7fvwhdp1856jrn0d7mcjcjsd7ndqvhgvjj1"))))
7171 (build-system pyproject-build-system)
7172 (native-inputs (list python-pytest python-setuptools))
7173 (propagated-inputs (list python-humanfriendly))
7174 (home-page "https://capturer.readthedocs.io")
7175 (synopsis "Capture stdout and stderr streams of the current process")
7176 (description
7177 "The capturer package makes it easy to capture the stdout and stderr
7178streams of the current process and subprocesses. Output can be relayed
7179to the terminal in real time but is also available to the Python program
7180for additional processing.")
7181 (license license:expat)))
7182
7183(define-public python-fastprogress
7184 (package
7185 (name "python-fastprogress")
7186 (version "1.0.3")
7187 (source (origin
7188 (method git-fetch)
7189 (uri (git-reference
7190 (url "https://github.com/fastai/fastprogress")
7191 (commit version)))
7192 (file-name (git-file-name name version))
7193 (sha256
7194 (base32
7195 "01h8f786wgmmd3fj98wk1n5id67nsp19gs8bbgims04aciwhvj21"))))
7196 (build-system pyproject-build-system)
7197 (arguments
7198 (list #:tests? #f ;there are no tests
7199 #:phases #~(modify-phases %standard-phases
7200 ;; XXX: Fails with: "In procedure utime: No such file
7201 ;; or directory".
7202 (delete 'ensure-no-mtimes-pre-1980))))
7203 (native-inputs (list python-setuptools python-wheel))
7204 (home-page "https://github.com/fastai/fastprogress")
7205 (synopsis "Progress bar for Jupyter Notebook and console")
7206 (description
7207 "Fastprogress is a progress bar for Jupyter Notebook and console.")
7208 (license license:asl2.0)))
7209
7210(define-public python-coloredlogs
7211 (package
7212 (name "python-coloredlogs")
7213 (version "15.0.1")
7214 (source
7215 (origin
7216 (method git-fetch)
7217 (uri (git-reference
7218 (url "https://github.com/xolox/python-coloredlogs")
7219 (commit version)))
7220 (file-name (git-file-name name version))
7221 (sha256
7222 (base32 "1c83h3cvd2qww2m9myxrnqh0lr9fllx8zfb26f64lcvwd3cli1sf"))))
7223 (build-system pyproject-build-system)
7224 (arguments
7225 (list
7226 #:test-flags
7227 #~(list "-k"
7228 (string-join
7229 (list "not test_auto_install" ; Unclear why this fails.
7230 ;; XXX: Require a "script" executable.
7231 "test_cli_conversion"
7232 "test_empty_conversion"
7233 "test_output_interception")
7234 " and not "))))
7235 (native-inputs (list python-pytest python-setuptools python-verboselogs))
7236 (propagated-inputs (list python-capturer))
7237 (home-page "https://coloredlogs.readthedocs.io")
7238 (synopsis "Colored stream handler for Python's logging module")
7239 (description
7240 "The @code{coloredlogs} package enables colored terminal output for
7241Python's logging module. The @code{ColoredFormatter} class inherits from
7242@code{logging.Formatter} and uses ANSI escape sequences to render your logging
7243messages in color.")
7244 (license license:expat)))
7245
7246(define-public python-editorconfig
7247 (package
7248 (name "python-editorconfig")
7249 (version "0.17.1")
7250 (source
7251 (origin
7252 (method git-fetch)
7253 (uri (git-reference
7254 (url "https://github.com/editorconfig/editorconfig-core-py")
7255 (commit (string-append "v" version))
7256 (recursive? #t)))
7257 (file-name (git-file-name name version))
7258 (sha256
7259 (base32 "107lh5pds1iwgb2q1da2k7g5vs6w0rk84679k6yi8a01agc1c0fz"))))
7260 (build-system pyproject-build-system)
7261 (arguments
7262 (list
7263 #:phases
7264 #~(modify-phases %standard-phases
7265 (replace 'check
7266 (lambda _
7267 (setenv "PYTHONPATH" (getenv "GUIX_PYTHONPATH"))
7268 (invoke "cmake" ".")
7269 (invoke "ctest" "."))))))
7270 (native-inputs (list cmake python-setuptools python-wheel))
7271 (home-page "https://editorconfig.org/")
7272 (synopsis "EditorConfig bindings for python")
7273 (description "The EditorConfig project consists of a file format for
7274defining coding styles and a collection of text editor plugins that enable
7275editors to read the file format and adhere to defined styles. EditorConfig
7276files are easily readable and they work nicely with version control systems.")
7277 ;; "fnmatch.py" and "ini.py" are licensed under psfl, the rest is bsd-2.
7278 (license (list license:bsd-2 license:psfl))))
7279
7280(define-public dosage
7281 (package
7282 (name "dosage")
7283 (version "3.2")
7284 (source
7285 (origin
7286 (method url-fetch)
7287 (uri (pypi-uri "dosage" version))
7288 (sha256
7289 (base32
7290 "0hi5rl17rj9gay7yw7ikrkyp5qhyw5bzp4ig1sj6ahzclsia8y1h"))))
7291 (build-system pyproject-build-system)
7292 (arguments
7293 ;; It requires additional modules for integration tests.
7294 (list #:test-flags #~(list "--ignore=tests/modules/")))
7295 (native-inputs
7296 (list python-pytest
7297 python-responses
7298 python-setuptools
7299 python-setuptools-scm))
7300 (inputs
7301 (list python-imagesize
7302 python-importlib-resources
7303 python-lxml
7304 python-platformdirs
7305 python-requests
7306 python-rich))
7307 (home-page "https://github.com/webcomics/dosage")
7308 (synopsis "Comic strip downloader and archiver")
7309 (description
7310 "Dosage is designed to keep a local copy of specific webcomics and other
7311picture-based content such as Picture of the Day sites. With the
7312@command{dosage} command-line script you can get the latest strip of a
7313webcomic, catch-up to the last strip downloaded, or download a strip for a
7314particular date or index, if possible.")
7315 (license license:expat)))
7316
7317(define-public python-etcd3
7318 (package
7319 (name "python-etcd3")
7320 (version "0.12.0")
7321 (source
7322 (origin
7323 (method git-fetch)
7324 (uri (git-reference
7325 (url "https://github.com/kragniz/python-etcd3")
7326 (commit (string-append "v" version))))
7327 (file-name (git-file-name name version))
7328 (sha256
7329 (base32 "06hw0kcl77v8px5w2hfnf2l9gjnjrspjb49kx3jqa382z7wzdkk0"))))
7330 (build-system pyproject-build-system)
7331 (arguments
7332 (list
7333 ;; XXX: Tests require the etcd package.
7334 #:tests? #f
7335 #:test-backend #~'custom
7336 #:test-flags ; Taken from tox.ini.
7337 #~(list "pifpaf" "-e" "python" "run" "etcd" "--cluster" "--" "pytest")))
7338 (propagated-inputs (list python-grpcio python-protobuf python-tenacity))
7339 (native-inputs (list python-mock python-pifpaf python-pytest python-setuptools))
7340 (home-page "https://github.com/kragniz/python-etcd3")
7341 (synopsis "Python client for the etcd3 API")
7342 (description
7343 "This package provide a Python client for the @code{etcd3} API.")
7344 (license license:asl2.0)))
7345
7346(define-public python-et-xmlfile
7347 (package
7348 (name "python-et-xmlfile")
7349 (version "2.0.0")
7350 (source
7351 (origin
7352 ;; Use a checkout because the PyPI archive does not contain tests.
7353 (method hg-fetch)
7354 (uri (hg-reference
7355 (url "https://foss.heptapod.net/openpyxl/et_xmlfile")
7356 (changeset version)))
7357 (file-name (string-append name "-" version "-checkout"))
7358 (sha256
7359 (base32 "03pmmg6k2ajd83zhki8f0c1ndi7pq23bj9hm6f8hhd07maqksf5w"))))
7360 (build-system pyproject-build-system)
7361 (native-inputs
7362 (list python-pytest
7363 python-lxml
7364 python-setuptools))
7365 (home-page "https://bitbucket.org/openpyxl/et_xmlfile")
7366 (synopsis "Low memory implementation of @code{lxml.xmlfile}")
7367 (description "This Python library is based upon the @code{xmlfile} module
7368from @code{lxml}. It aims to provide a low memory, compatible implementation
7369of @code{xmlfile}.")
7370 (license license:expat)))
7371
7372(define-public python-omero-py
7373 (let ((omero-blitz-version "5.8.2"))
7374 (package
7375 (name "python-omero-py")
7376 (version "5.20.0")
7377 (source
7378 (origin
7379 (method git-fetch)
7380 (uri (git-reference
7381 (url "https://github.com/ome/omero-py")
7382 (commit (string-append "v" version))))
7383 (file-name (git-file-name name version))
7384 (sha256
7385 (base32 "02zsw1p35n6lkqh410qpgw7c4467dkbg0hxly3gjqrwdh349j47g"))))
7386 (build-system pyproject-build-system)
7387 (arguments
7388 (list
7389 #:test-flags
7390 #~(list
7391 "-m" "not broken" "-rf" "test" "-s"
7392 ;; TestImport tries to download Java things; TestSessions
7393 ;; and TestBuildQuery require networking.
7394 "-k" "not TestImport and not TestSessions and not TestBuildQuery")
7395 #:modules '((guix build pyproject-build-system)
7396 (guix build utils)
7397 (ice-9 match)
7398 (srfi srfi-1)
7399 (srfi srfi-26))
7400 #:phases
7401 #~(modify-phases %standard-phases
7402 (add-after 'unpack 'find-artifacts
7403 (lambda* (#:key inputs #:allow-other-keys)
7404 (let ((zip-file
7405 (match inputs
7406 (((labels . files) ...)
7407 (find (cut string-suffix?
7408 (string-append "omero-blitz-"
7409 #$omero-blitz-version
7410 "-python.zip")
7411 <>)
7412 files)))))
7413 (setenv "ZIP_FILE"
7414 (or zip-file (error "failed to find artifact file"))))))
7415 ;; Some tests need this, such as TestTempFileManager
7416 (add-after 'build 'set-HOME
7417 (lambda _ (setenv "HOME" "/tmp")))
7418 ;; The sanity check mistakes omero_model_TypeAnnotationI.py for a
7419 ;; module to load.
7420 (delete 'sanity-check)
7421 ;; The argument parser is picky and interprets the "-real" part as
7422 ;; the first argument.
7423 (add-after 'wrap 'rename-executable
7424 (lambda _
7425 (with-directory-excursion (string-append #$output "/bin")
7426 (rename-file ".omero-real" ".omero")
7427 (substitute* "omero"
7428 (("bin/.omero-real") "bin/.omero"))))))))
7429 (propagated-inputs
7430 (list python-appdirs
7431 python-future
7432 python-numpy
7433 python-pillow
7434 python-pyyaml
7435 python-requests
7436 python-tables
7437 python-zeroc-ice-3.6))
7438 (native-inputs
7439 (list python-portalocker
7440 python-pytest
7441 python-pytest-mock
7442 python-pytest-rerunfailures
7443 python-pytest-xdist
7444 python-setuptools
7445 python-wheel
7446 unzip
7447 (origin
7448 (method url-fetch)
7449 (uri (format #f "\
7450https://artifacts.openmicroscopy.org/artifactory/ome.releases/org/\
7451openmicroscopy/omero-blitz/~a/omero-blitz-~a-python.zip"
7452 omero-blitz-version
7453 omero-blitz-version))
7454 (sha256
7455 (base32 "1nb17xmx6n7i5vkcw661iq42yfgc3i0gmhz3x8iwcrhp8pajzm3l")))))
7456 (home-page "https://github.com/ome/omero-py")
7457 (synopsis "Python bindings to the OMERO.blitz server")
7458 (description "This package provides Python bindings to the OMERO.blitz
7459server.")
7460 (license license:gpl2))))
7461
7462(define-public python-openpyxl
7463 (package
7464 (name "python-openpyxl")
7465 (version "3.1.5")
7466 (source
7467 (origin
7468 ;; We use the upstream repository, as the tests are not included in the
7469 ;; PyPI releases.
7470 (method hg-fetch)
7471 (uri (hg-reference
7472 (url "https://foss.heptapod.net/openpyxl/openpyxl")
7473 (changeset version)))
7474 (file-name (string-append name "-" version "-checkout"))
7475 (sha256
7476 (base32 "17z6rrvv3q1axy9r13c2hln2pazfn9n5bhkzrbjcjakgbfjl6mss"))))
7477 (build-system pyproject-build-system)
7478 (arguments
7479 (list
7480 ;; XXX: The workbook writer doesn't respect SOURCE_DATE_EPOCH
7481 ;; https://foss.heptapod.net/openpyxl/openpyxl/-/issues/2268
7482 ;; It makes a few tests fail.
7483 #:test-flags
7484 #~(list "--ignore=openpyxl/worksheet/tests/test_read_only.py"
7485 "-k" (string-join
7486 (list "not test_unsupport_drawing"
7487 "test_broken_sheet_ref"
7488 "test_no_default_style"
7489 "test_ctor"
7490 "test_force_dimension"
7491 "test_get_max_cell"
7492 "test_read_hyperlinks_read_only"
7493 "test_read_with_missing_cells"
7494 "test_read_empty_rows")
7495 " and not "))))
7496 (native-inputs
7497 (list python-lxml-4.9
7498 python-pillow
7499 python-pytest
7500 python-setuptools))
7501 (propagated-inputs
7502 (list python-et-xmlfile))
7503 (home-page "https://openpyxl.readthedocs.io")
7504 (synopsis "Python library to read/write Excel 2010 XLSX/XLSM files")
7505 (description
7506 "This Python library allows reading and writing to the Excel XLSX, XLSM,
7507XLTX and XLTM file formats that are defined by the Office Open XML (OOXML)
7508standard.")
7509 (license license:expat)))
7510
7511(define-public python-sinfo
7512 (package
7513 (name "python-sinfo")
7514 (version "1.0.1")
7515 (source
7516 (origin
7517 (method git-fetch)
7518 (uri (git-reference
7519 (url "https://gitlab.com/joelostblom/session_info")
7520 (commit (string-append "v" version))))
7521 (file-name (git-file-name name version))
7522 (sha256
7523 (base32 "14rdr235gn1f9lcp1wnvxhjkbqy6jxs0k8qfkh074gfzhp6kh4w5"))))
7524 (build-system pyproject-build-system)
7525 (arguments
7526 (list #:tests? #f)) ; no tests in PyPI or Git
7527 (native-inputs
7528 (list python-setuptools))
7529 (propagated-inputs
7530 (list python-stdlib-list))
7531 (home-page "https://gitlab.com/joelostblom/session_info")
7532 (synopsis "Output module version information loaded in a Python session")
7533 (description "This package outputs version information for modules loaded
7534in the current session, Python, and the OS.")
7535 (license license:bsd-3)))
7536
7537(define-public python-schedule
7538 (package
7539 (name "python-schedule")
7540 (version "1.2.2")
7541 (source
7542 (origin
7543 (method url-fetch)
7544 (uri (pypi-uri "schedule" version))
7545 (sha256
7546 (base32
7547 "1dzhwpnpbvv90z6lavx4z7whh1a2y47cq69zgxibknazzrsrrzhm"))))
7548 (build-system pyproject-build-system)
7549 (native-inputs
7550 (list python-pytest python-setuptools python-wheel))
7551 (home-page "https://github.com/dbader/schedule")
7552 (synopsis "Schedule periodic function calls in Python")
7553 (description
7554 "Schedule is an in-process scheduler for periodic jobs that uses the
7555builder pattern for configuration. Schedule lets you run Python functions (or
7556any other callable) periodically at pre-determined intervals using a simple,
7557human-friendly syntax.")
7558 (license license:expat)))
7559
7560;; XXX: This project is unmaintained since 2020, see:
7561;; <https://github.com/scour-project/scour/issues/321>.
7562;;
7563;; The only user is Inkscape, see:
7564;; <https://gitlab.com/inkscape/inkscape-docs/documentation/-/issues/43>.
7565(define-public python-scour
7566 (package
7567 (name "python-scour")
7568 (version "0.38.2")
7569 (source
7570 (origin
7571 (method git-fetch)
7572 (uri
7573 (git-reference
7574 (url "https://gitlab.com/inkscape/extras/scour")
7575 (commit
7576 (string-append "v" version))))
7577 (file-name (git-file-name name version))
7578 (sha256
7579 (base32 "0mmfvx4wqp8gkpv0kbih89zfs9njvmd3v4dxfqii62xddpxq0f1k"))))
7580 (build-system pyproject-build-system)
7581 (arguments
7582 (list #:test-backend #~'custom
7583 #:test-flags #~(list "test_scour.py")))
7584 (native-inputs
7585 (list python-setuptools))
7586 (propagated-inputs
7587 (list python-six))
7588 (home-page "https://gitlab.com/inkscape/extras/scour")
7589 (synopsis "Scour is an SVG optimizer/cleaner written in Python")
7590 (description
7591 "The goal of Scour is to output a file that renders identically at a
7592fraction of the size by removing a lot of redundant information created by
7593most SVG editors. Optimization options are typically lossless but can be
7594tweaked for more aggressive cleaning.")
7595 (license license:asl2.0)))
7596
7597(define-public python-mechanize
7598 (package
7599 (name "python-mechanize")
7600 (version "0.4.10")
7601 (source
7602 (origin
7603 (method url-fetch)
7604 (uri (pypi-uri "mechanize" version))
7605 (sha256
7606 (base32 "1pvxjnhqi6iq7nnjksnfvyzxcibbwfjc9fzp22v0msp7kdzr9shx"))))
7607 (build-system pyproject-build-system)
7608 (arguments
7609 ;; XXX: Unclear why tests are failing.
7610 (list #:tests? #f
7611 #:phases
7612 #~(modify-phases %standard-phases
7613 (add-before 'check 'configure-tests
7614 (lambda _
7615 (setenv "GUIX_PYTHONPATH"
7616 (string-append (getcwd) "/test-tools:"
7617 (getenv "GUIX_PYTHONPATH"))))))))
7618 (native-inputs
7619 (list python-html5-parser
7620 python-html5lib
7621 python-lxml
7622 python-service-identity
7623 python-setuptools
7624 python-six
7625 python-twisted
7626 python-wheel))
7627 (propagated-inputs
7628 (list python-html5lib))
7629 (home-page "https://github.com/python-mechanize/mechanize")
7630 (synopsis
7631 "Stateful programmatic web browsing in Python")
7632 (description
7633 "Mechanize implements stateful programmatic web browsing in Python,
7634after Andy Lester’s Perl module WWW::Mechanize.")
7635 (license license:bsd-3)))
7636
7637(define-public python-mediapy
7638 (package
7639 (name "python-mediapy")
7640 (version "1.2.2")
7641 (source
7642 (origin
7643 (method git-fetch)
7644 (uri (git-reference
7645 (url "https://github.com/google/mediapy")
7646 (commit (string-append "v" version))))
7647 (file-name (git-file-name name version))
7648 (sha256
7649 (base32 "08dj0h7xkpaj552pzjln1chshxsfxbwhv29p2npsmscy907s322l"))))
7650 (build-system pyproject-build-system)
7651 (arguments
7652 (list
7653 #:phases
7654 '(modify-phases %standard-phases
7655 (add-after 'unpack 'fix-references
7656 (lambda _
7657 (substitute* "mediapy_test.py"
7658 (("'/bin/bash")
7659 (string-append "'" (which "bash")))))))))
7660 (inputs (list ffmpeg-5))
7661 (propagated-inputs (list python-absl-py
7662 python-ipython
7663 python-matplotlib
7664 python-numpy
7665 python-pillow))
7666 (native-inputs
7667 (list python-flit-core
7668 python-pytest
7669 python-pytest-xdist))
7670 (home-page "https://github.com/google/mediapy")
7671 (synopsis "Read/write/show images and videos in an IPython notebook")
7672 (description "This Python library makes it easy to display images and
7673videos in a notebook.")
7674 (license license:asl2.0)))
7675
7676(define-public python-simpleaudio
7677 (package
7678 (name "python-simpleaudio")
7679 (version "1.0.4")
7680 (source
7681 (origin
7682 (method git-fetch)
7683 (uri (git-reference
7684 (url "https://github.com/hamiltron/py-simple-audio")
7685 (commit version)))
7686 (file-name (git-file-name name version))
7687 (sha256
7688 (base32 "12nypzb1m14yip4zrbzin5jc5awyp1d5md5y40g5anj4phb4hx1i"))))
7689 (build-system pyproject-build-system)
7690 (arguments
7691 (list
7692 #:test-backend #~'unittest
7693 #:phases
7694 #~(modify-phases %standard-phases
7695 (add-before 'check 'fix-test-run
7696 (lambda _
7697 (delete-file-recursively "simpleaudio"))))))
7698 (native-inputs (list python-setuptools))
7699 (inputs (list alsa-lib))
7700 (home-page "https://github.com/hamiltron/py-simple-audio")
7701 (synopsis "Simple, asynchronous audio playback for Python 3")
7702 (description
7703 "The @code{simplaudio} package provides cross-platform, dependency-free
7704audio playback capability for Python 3 on OSX, Windows, and Linux.")
7705 (license license:expat))) ; MIT license
7706
7707(define-public python-jsonalias
7708 (package
7709 (name "python-jsonalias")
7710 (version "0.1.2")
7711 (source (origin
7712 (method url-fetch)
7713 (uri (pypi-uri "jsonalias" version))
7714 (sha256
7715 (base32
7716 "0k5c2132hbd9wxnj8w05vvpi286l3g3ksw350m85rd0k9958g5z3"))))
7717 (build-system pyproject-build-system)
7718 (arguments
7719 (list #:tests? #f)) ; no tests in PyPI or Git
7720 (native-inputs
7721 (list python-poetry-core))
7722 (home-page "https://github.com/kevinheavey/jsonalias/")
7723 (synopsis "JSON type alias for Python")
7724 (description
7725 "This package provides a microlibrary that defines a JSON type alias for
7726Python.")
7727 (license license:expat)))
7728
7729(define-public python-jsonargparse
7730 (package
7731 (name "python-jsonargparse")
7732 (version "4.49.0")
7733 (source
7734 (origin
7735 (method git-fetch)
7736 (uri (git-reference
7737 (url "https://github.com/omni-us/jsonargparse/")
7738 (commit (string-append "v" version))))
7739 (file-name (git-file-name name version))
7740 (sha256
7741 (base32 "15s7bdgjk3dpmr9202v4nr9826z8zq7vp77nvg4iwwq9nrm8brnn"))))
7742 (build-system pyproject-build-system)
7743 (propagated-inputs
7744 (list python-pyyaml))
7745 (native-inputs
7746 (list python-attrs
7747 python-pydantic
7748 python-pytest
7749 python-pytest-subtests
7750 python-requests
7751 python-responses
7752 python-setuptools
7753 python-types-pyyaml
7754 python-types-requests))
7755 (home-page "https://github.com/omni-us/jsonargparse/")
7756 (synopsis "Implement minimal boilerplate CLIs derived from type hints")
7757 (description
7758 "This package lets you implement minimal boilerplate CLIs derived from
7759type hints and parse from command line, config files and environment
7760variables.")
7761 (license license:expat)))
7762
7763(define-public python-pymarshal
7764 (package
7765 (name "python-pymarshal")
7766 (version "2.2.3")
7767 (source (origin
7768 (method url-fetch)
7769 (uri (pypi-uri "pymarshal" version))
7770 (sha256
7771 (base32
7772 "1lhb7yim60pvclbd440zd4n50xs1d2rvmnrhhvib3hyv0dxil5j3"))))
7773 (build-system pyproject-build-system)
7774 (arguments
7775 ;; Test fails with this error:
7776 ;; "CovReportWarning: Failed to generate report: No data to report."
7777 (list #:tests? #f))
7778 (native-inputs
7779 (list python-pytest python-setuptools python-wheel))
7780 (propagated-inputs (list python-bson python-pyyaml))
7781 (home-page "https://gitlab.com/d3v-t00lz/pymarshal")
7782 (synopsis "Pythonic implementation of Golang struct (un)marshalling")
7783 (description "PyMarshal replicates the feature of (un)marshalling structs
7784in Golang.")
7785 (license license:bsd-2)))
7786
7787(define-public python-simplejson
7788 (package
7789 (name "python-simplejson")
7790 (version "3.20.1")
7791 (source
7792 (origin
7793 (method url-fetch)
7794 (uri (pypi-uri "simplejson" version))
7795 (sha256
7796 (base32
7797 "0z838dqnh5c81ib6cvfqfhd82ax2apzclzgz8b0j87sgxjs3jhg6"))))
7798 (build-system pyproject-build-system)
7799 (native-inputs
7800 (list python-pytest python-setuptools))
7801 (home-page "https://simplejson.readthedocs.io/en/latest")
7802 (synopsis
7803 "Json library for Python")
7804 (description
7805 "JSON (JavaScript Object Notation) is a subset of JavaScript
7806syntax (ECMA-262 3rd edition) used as a lightweight data interchange
7807format.
7808
7809Simplejson exposes an API familiar to users of the standard library marshal
7810and pickle modules. It is the externally maintained version of the json
7811library contained in Python 2.6, but maintains compatibility with Python 2.5
7812and (currently) has significant performance advantages, even without using
7813the optional C extension for speedups. Simplejson is also supported on
7814Python 3.3+.")
7815 (license license:x11)))
7816
7817(define-public python-simple-rlp
7818 (package
7819 (name "python-simple-rlp")
7820 (version "0.1.3")
7821 (source
7822 (origin
7823 (method git-fetch)
7824 (uri (git-reference
7825 (url "https://github.com/SamuelHaidu/simple-rlp")
7826 ;; Upstream doesn't tag the git repo.
7827 (commit "342ea269d84da1ddc4a7630cdebc90159261391c")))
7828 (file-name (git-file-name name version))
7829 (sha256
7830 (base32
7831 "1nv92sphpkyrncak4qgj50qmgkmj4ycl2szbnv9c7ihgl5df4div"))))
7832 (build-system pyproject-build-system)
7833 (native-inputs
7834 (list
7835 python-pytest
7836 python-setuptools))
7837 (home-page "https://github.com/SamuelHaidu/simple-rlp")
7838 (synopsis
7839 "Python implementation of RLP (Recursive Length Prefix) encoding")
7840 (description
7841 "@code{simple-rlp} is a python implementation of RLP (Recursive Length \
7842Prefix) - Encode and decode data structures.")
7843 (license license:expat)))
7844
7845(define-public python-pyicu
7846 (package
7847 (name "python-pyicu")
7848 (version "2.15.2")
7849 (source
7850 (origin
7851 (method url-fetch)
7852 (uri (pypi-uri "pyicu" version))
7853 (sha256
7854 (base32 "13srrv5lczr0s74hx2kffwdhfg6flpvi2qpj75lfqz7ivzp7f7jn"))))
7855 (build-system pyproject-build-system)
7856 (native-inputs
7857 (list pkg-config
7858 python-pytest
7859 python-setuptools
7860 python-six))
7861 (inputs
7862 (list icu4c))
7863 (home-page "https://gitlab.pyicu.org/main/pyicu")
7864 (synopsis "Python extension wrapping the ICU C++ API")
7865 (description
7866 "PyICU is a python extension wrapping the ICU C++ API.")
7867 (license license:x11)))
7868
7869(define-public python-dogtail
7870 (package
7871 (name "python-dogtail")
7872 (version "0.9.11")
7873 (source
7874 (origin
7875 (method url-fetch)
7876 (uri (string-append
7877 "https://gitlab.com/dogtail/dogtail/-/raw/released/" "dogtail-"
7878 version ".tar.gz"))
7879 (sha256
7880 (base32 "0sr38z7b2n12bvfd4xw4b5dnnhkn5zl3h0ymmnnzavcihfqia6l0"))))
7881 (build-system pyproject-build-system)
7882 (arguments
7883 (list
7884 #:tests? #f ;TODO Launching dbus for the tests fails
7885 #:phases
7886 #~(modify-phases %standard-phases
7887 (replace 'check
7888 (lambda* (#:key tests? #:allow-other-keys)
7889 (when tests?
7890 (system "Xvfb :1 &")
7891 (setenv "DISPLAY" ":1")
7892 (invoke "dbus-run-session" "--"
7893 "nosetests" "-v" "tests/")))))))
7894 (propagated-inputs (list python-pygobject python-pycairo python-pyatspi))
7895 (native-inputs
7896 (list python-pynose
7897 gtk+
7898 xorg-server-for-tests
7899 dbus
7900 gsettings-desktop-schemas
7901 gobject-introspection
7902 python-setuptools))
7903 (home-page "https://gitlab.com/dogtail/dogtail/")
7904 (synopsis "GUI test tool and automation framework written in Python")
7905 (description
7906 "Dogtail is a GUI test tool and automation framework written in Python.
7907It uses Accessibility (a11y) technologies to communicate with desktop
7908applications. dogtail scripts are written in Python and executed like any
7909other Python program.")
7910 (license license:gpl2+)))
7911
7912(define-public python-doxyqml
7913 (package
7914 (name "python-doxyqml")
7915 (version "0.5.3")
7916 (source (origin
7917 (method url-fetch)
7918 (uri (pypi-uri "doxyqml" version))
7919 (sha256
7920 (base32
7921 "0skrs5i5pvpzvihgxw766zi1c9bbp33aisdldxgj470mlchvdgyy"))))
7922 (build-system pyproject-build-system)
7923 (arguments
7924 (list #:test-backend #~'custom
7925 #:test-flags #~(list "tests/functional/tests.py")))
7926 (native-inputs
7927 (list python-setuptools))
7928 (home-page "https://agateau.com/projects/doxyqml")
7929 (synopsis "Doxygen input filter for QML files")
7930 (description
7931 "This package provides a Doxygen input filter for QML files.")
7932 (license license:bsd-3)))
7933
7934(define-public python-doxypypy
7935 (package
7936 (name "python-doxypypy")
7937 (version "0.8.8.7")
7938 (source (origin
7939 (method url-fetch)
7940 (uri (pypi-uri "doxypypy" version))
7941 (sha256
7942 (base32
7943 "17nh5jjbxrg6ag0gymh8jsp75qnxwgv8fqbj4jlphywj0sxwh6k7"))))
7944 (build-system pyproject-build-system)
7945 (arguments
7946 (list
7947 #:test-flags
7948 #~(list "-k" (string-join
7949 ;; Test files are not in UTF-8 format and attmet to
7950 ;; substitute shebang fails, while tests fail with error:
7951 ;; AssertionError: "#!/bin/env python\n# UTF-32-LE Python
7952 ;; File w[387 chars]g.')" !=
7953 ;; "#!/gnu/store/y5vz9h983i8cg01cxz0zdywz715fxxs[449
7954 ;; chars]g.')"
7955 (list "not test_utf16be_bom"
7956 "test_utf16le_bom"
7957 "test_utf32be_bom"
7958 "test_utf32le_bom"
7959 "test_utf8_bom")
7960 " and not "))
7961 #:phases
7962 #~(modify-phases %standard-phases
7963 ;; compile-bytecode phases fails with error: SyntaxError: source
7964 ;; code string cannot contain null bytes.
7965 (add-after 'unpack 'fix-setup.py
7966 (lambda _
7967 (substitute* "setup.py"
7968 (("packages=.*") "packages=['doxypypy'],\n")))))))
7969 (native-inputs
7970 (list python-pytest
7971 python-setuptools
7972 python-wheel))
7973 (propagated-inputs
7974 (list python-chardet))
7975 (home-page "https://github.com/Feneric/doxypypy")
7976 (synopsis "Doxygen filter for Python")
7977 (description
7978 "This package provides a Doxygen filter for Python.")
7979 (license license:gpl2+)))
7980
7981(define-public python-empy
7982 (package
7983 (name "python-empy")
7984 (version "3.3.4")
7985 (source
7986 (origin
7987 (method url-fetch)
7988 (uri (string-append "http://www.alcyone.com/software/empy/empy-"
7989 version ".tar.gz"))
7990 (sha256
7991 (base32 "1cgikljjcqxgz168prpvb0bnirbdxf9wmgj0vlzzhzzwf4a229li"))))
7992 (build-system pyproject-build-system)
7993 (arguments
7994 (list
7995 #:phases
7996 #~(modify-phases %standard-phases
7997 (replace 'check
7998 (lambda* (#:key tests? #:allow-other-keys)
7999 (when tests?
8000 (invoke "./test.sh")))))))
8001 (native-inputs (list python-setuptools))
8002 (home-page "http://www.alcyone.com/software/empy/")
8003 (synopsis "Templating system for Python")
8004 (description
8005 "EmPy is a system for embedding Python expressions and statements in
8006template text; it takes an EmPy source file, processes it, and produces
8007output. This is accomplished via expansions, which are special signals to the
8008EmPy system and are set off by a special prefix (by default the at sign, @@).
8009EmPy can expand arbitrary Python expressions and statements in this way, as
8010well as a variety of special forms. Textual data not explicitly delimited in
8011this way is sent unaffected to the output, allowing Python to be used in
8012effect as a markup language. Also supported are callbacks via hooks,
8013recording and playback via diversions, and dynamic, chainable filters. The
8014system is highly configurable via command line options and embedded
8015commands.")
8016 (license license:lgpl2.1+)))
8017
8018(define-public python-palettable
8019 (package
8020 (name "python-palettable")
8021 (version "3.3.3")
8022 (source (origin
8023 (method url-fetch)
8024 (uri (pypi-uri "palettable" version))
8025 (sha256
8026 (base32
8027 "1a4h0jpsr3wjciqg9a5kslxv65d3qqgmqgkpai4cl77wlpcxfk89"))))
8028 (build-system pyproject-build-system)
8029 (native-inputs (list python-pytest python-setuptools python-wheel))
8030 (home-page "https://jiffyclub.github.io/palettable/")
8031 (synopsis "Color palettes for Python")
8032 (description "Palettable (formerly brewer2mpl) is a library of color
8033palettes for Python. It’s written in pure Python with no dependencies, but it
8034can supply color maps for matplotlib. You can use Palettable to customize
8035matplotlib plots or supply colors for a web application.")
8036 (license license:expat)))
8037
8038(define-public python-parse-type
8039 (package
8040 (name "python-parse-type")
8041 ;; 0.6.6 (2025-08-11), the latest changes provide support for Python
8042 ;; 3.12+; move back to git tag when released.
8043 (properties '((commit . "5c4126ae3973b5c0a4107cd8b29f2b74993be330")
8044 (revision . "0")))
8045 (version (git-version "0.6.6"
8046 (assoc-ref properties 'revision)
8047 (assoc-ref properties 'commit)))
8048 (source
8049 (origin
8050 (method git-fetch)
8051 (uri (git-reference
8052 (url "https://github.com/jenisys/parse_type")
8053 (commit (assoc-ref properties 'commit))))
8054 (file-name (git-file-name name version))
8055 (sha256
8056 (base32 "0gcpyzd3lj7bp9k6m515gwkjwabnhkb15vrx6bf8ba8nyv30v571"))))
8057 (build-system pyproject-build-system)
8058 (arguments
8059 (list
8060 ;; tests: 332 passed, 2 skipped
8061 #:phases
8062 #~(modify-phases %standard-phases
8063 (add-after 'unpack 'fix-pytest-config
8064 ;; To bypass options: --metadata, --html and --junit-xml.
8065 (lambda _
8066 (delete-file "pytest.ini"))))))
8067 (native-inputs
8068 (list python-pytest
8069 python-setuptools
8070 python-setuptools-scm))
8071 (propagated-inputs
8072 (list python-six ;hard dependency
8073 python-parse))
8074 (home-page "https://github.com/jenisys/parse_type")
8075 (synopsis "Extended parse module")
8076 (description "Parse_type extends the python parse module.")
8077 (license license:expat)))
8078
8079(define-public python-parse
8080 (package
8081 (name "python-parse")
8082 (version "1.20.2")
8083 (source
8084 (origin
8085 (method git-fetch)
8086 (uri (git-reference
8087 (url "https://github.com/r1chardj0n3s/parse")
8088 (commit version)))
8089 (file-name (git-file-name name version))
8090 (sha256
8091 (base32 "0s3dgafh1mz8g32gwk5vp0azdq168yjhbg5liivapgkwyq9zgwcb"))))
8092 (build-system pyproject-build-system)
8093 (native-inputs (list python-pytest python-setuptools))
8094 (home-page "https://github.com/r1chardj0n3s/parse")
8095 (synopsis "Parse strings")
8096 (description
8097 "Parse strings using a specification based on the Python @code{format()}
8098syntax.")
8099 (license license:x11)))
8100
8101(define-public python-parsley
8102 (package
8103 (name "python-parsley")
8104 (version "1.3")
8105 (source
8106 (origin
8107 (method git-fetch)
8108 (uri (git-reference
8109 (url "https://github.com/pyga/parsley")
8110 (commit version)))
8111 (file-name (git-file-name name version))
8112 (sha256
8113 (base32 "0550rw65ygqzbjc8a66hs355pzbx727kbn20dssdb6ls846gw2qs"))
8114 (patches
8115 (list
8116 (origin
8117 (method url-fetch)
8118 (uri
8119 (string-append "https://github.com/pyga/parsley/commit/"
8120 "f0ad2f6c0c7ce15336f6a3adc3708f4a5a9757c6.patch"))
8121 (sha256
8122 (base32
8123 "0q90vg9pi4vs4kqxa1dzck16iqrszcw36c3im8p514p7zj439fca")))))))
8124 (build-system pyproject-build-system)
8125 (arguments
8126 (list
8127 #:test-flags #~(list "ometa/test" "terml/test")))
8128 (native-inputs
8129 (list python-pytest
8130 python-setuptools
8131 python-twisted))
8132 (home-page "https://launchpad.net/parsley")
8133 (synopsis "Parsing and pattern matching Python library")
8134 (description
8135 "Parsley is a parsing library using PEG algorithm, so each expression in
8136the grammar rules works like a Python expression. In particular, alternatives
8137are evaluated in order, unlike table-driven parsers such as yacc, bison or PLY.
8138Parsley is an implementation of OMeta, an object-oriented pattern-matching
8139language.")
8140 (license license:expat)))
8141
8142(define-public python-petl
8143 (package
8144 (name "python-petl")
8145 (version "1.7.16")
8146 (source
8147 (origin
8148 (method url-fetch)
8149 (uri (pypi-uri "petl" version))
8150 (sha256
8151 (base32 "0ll7xcc9yrvrz9p9im6m8p69cwrqwmqx91px43hlbnjrv1jflbww"))))
8152 (build-system pyproject-build-system)
8153 (native-inputs (list python-setuptools python-setuptools-scm python-wheel
8154 python-pytest))
8155 (home-page "https://github.com/petl-developers/petl")
8156 (synopsis "Framework for writing @acronym{ETL, Extract Transform Load} data
8157processing pipelines.")
8158 (description
8159 "This package provides a library for extracting, transforming and loading
8160tables of data. It can read from and write to databases or files in multiple
8161formats, including:
8162@itemize @bullet
8163@item python objects
8164@item delimited files
8165@item pickle files
8166@item text/XML/JSON/HTML files
8167@item python I/O streams
8168@item Excel XLS/XLSX files
8169@item HDF5 files
8170@end itemize")
8171 (license license:expat)))
8172
8173(define-public python-polib
8174 (package
8175 (name "python-polib")
8176 (version "1.2.0")
8177 (source
8178 (origin
8179 (method git-fetch)
8180 (uri (git-reference
8181 (url "https://github.com/izimobil/polib/")
8182 (commit version)))
8183 (file-name (git-file-name name version))
8184 (sha256
8185 (base32 "12n2skqj2qydcjp1r2ppzjcfc0fx4l23061x8bfqxx5pdvhnfpyb"))))
8186 (build-system pyproject-build-system)
8187 (arguments
8188 (list #:test-backend #~'custom
8189 #:test-flags #~(list "tests/tests.py")))
8190 (native-inputs (list python-setuptools))
8191 (home-page "https://github.com/izimobil/polib/")
8192 (synopsis "Manipulate, create and modify gettext files")
8193 (description
8194 "Polib can manipulate any gettext format (po, pot and mo) files. It can
8195be used to create po files from scratch or to modify existing ones.")
8196 (license license:expat)))
8197
8198(define-public python-polling2
8199 (package
8200 (name "python-polling2")
8201 (version "0.5.0")
8202 (source
8203 (origin
8204 (method git-fetch)
8205 (uri (git-reference
8206 (url "https://github.com/ddmee/polling2")
8207 (commit (string-append "v" version))))
8208 (file-name (git-file-name name version))
8209 (sha256
8210 (base32 "17q5nw9wab9p092r2bvmnk5nrzlwg5by6wf5wkbxnsz100nww7la"))))
8211 (build-system pyproject-build-system)
8212 (arguments
8213 ;; XXX: Additional , in string comparison.
8214 (list #:test-flags #~(list "-k" "not test_log_error_set_at_debug_level")))
8215 (native-inputs (list python-mock python-pytest python-setuptools))
8216 (home-page "https://github.com/ddmee/polling2")
8217 (synopsis "Polling utility with many configurable options")
8218 (description "Polling2 is a utility used to wait for a function to return
8219a certain expected condition.")
8220 (license license:expat)))
8221
8222(define-public python-daft
8223 (package
8224 (name "python-daft")
8225 (version "0.1.2")
8226 (source (origin
8227 (method url-fetch)
8228 (uri (pypi-uri "daft" version))
8229 (sha256
8230 (base32
8231 "1r8jsfavd624q2q61f863lk6has6mv5csswh39saafd5khwf0xry"))))
8232 (build-system pyproject-build-system)
8233 (arguments
8234 (list
8235 #:test-flags
8236 '(list "-k"
8237 (string-append
8238 ;; The following tests compare matplotlib output with
8239 ;; previously generated images. They fail due to minor
8240 ;; differences in where matplotlib places labels.
8241 "not test_bca[png]"
8242 " and not test_classic[png]"
8243 " and not test_deconvolution[png]"
8244 " and not test_exoplanets[png]"
8245 " and not test_fixed[png]"
8246 " and not test_gaia[png]"
8247 " and not test_galex[png]"
8248 " and not test_huey_p_newton[png]"
8249 " and not test_logo[png]"
8250 " and not test_no_circles[png]"
8251 " and not test_no_gray[png]"
8252 " and not test_recursive[png]"
8253 " and not test_thick_lines[png]"
8254 " and not test_weaklensing[png]"
8255 " and not test_wordy[png]"))))
8256 (native-inputs
8257 (list python-pytest
8258 python-setuptools
8259 python-wheel))
8260 (propagated-inputs (list python-matplotlib python-numpy))
8261 (home-page "https://docs.daft-pgm.org/")
8262 (synopsis "PGM rendering library")
8263 (description "Daft is a Python package that uses matplotlib to
8264render pixel-perfect probabilistic graphical models for publication in
8265a journal or on the internet. With a short Python script and an
8266intuitive model-building syntax you can design directed (Bayesian
8267Networks, directed acyclic graphs) and undirected (Markov random fields)
8268models and save them in any formats that matplotlib supports (including
8269PDF, PNG, EPS and SVG).")
8270 (license license:expat)))
8271
8272(define-public python-portalocker
8273 (package
8274 (name "python-portalocker")
8275 (version "2.7.0")
8276 (source (origin
8277 (method url-fetch)
8278 (uri (pypi-uri "portalocker" version))
8279 (sha256
8280 (base32
8281 "0lawjm736vs86wlnxc3qqh37l11z0yx81xq3dmrw33m86kaq2bh3"))))
8282 (build-system pyproject-build-system)
8283 (native-inputs (list python-pytest
8284 python-pytest-timeout
8285 python-redis
8286 python-setuptools
8287 python-wheel))
8288 (home-page "https://github.com/WoLpH/portalocker")
8289 (synopsis "Python library for file locking")
8290 (description "Portalocker is a library to provide an easy API to file
8291locking..")
8292 (license license:bsd-3)))
8293
8294(define-public python-poyo
8295 (package
8296 (name "python-poyo")
8297 (version "0.5.0")
8298 (source
8299 (origin
8300 (method url-fetch)
8301 (uri (pypi-uri "poyo" version))
8302 (sha256
8303 (base32
8304 "1pflivs6j22frz0v3dqxnvc8yb8fb52g11lqr88z0i8cg2m5csg2"))))
8305 (build-system pyproject-build-system)
8306 (native-inputs
8307 (list python-pytest python-setuptools))
8308 (home-page "https://github.com/hackebrot/poyo")
8309 (synopsis "Lightweight YAML Parser for Python")
8310 (description
8311 "This package provides a lightweight YAML Parser for Python. It supports
8312only a chosen subset of the YAML format that is required to parse cookiecutter
8313user configuration files. It does not have support for serializing into YAML
8314and is not compatible with JSON.")
8315 (license license:expat)))
8316
8317(define-public python-expandvars
8318 (package
8319 (name "python-expandvars")
8320 (version "1.1.2")
8321 (source
8322 (origin
8323 (method url-fetch)
8324 (uri (pypi-uri "expandvars" version))
8325 (sha256
8326 (base32 "1mviiwv5vgglswxrcdd1z978masjgwkd2pcidcsrmaannyvj4n3c"))))
8327 (build-system pyproject-build-system)
8328 (arguments (list #:test-flags #~(list "-o" "addopts=''")))
8329 (native-inputs
8330 (list python-hatchling python-pytest))
8331 (home-page "https://pypi.org/project/expandvars/")
8332 (synopsis "Expand system variables Unix style")
8333 (description "This module is inspired by GNU bash's variable expansion
8334features. It can be used as an alternative to Python's
8335@code{os.path.expandvars} function. A good use case is reading config files
8336with the flexibility of reading values from environment variables using
8337advanced features like returning a default value if some variable is not
8338defined.")
8339 (license license:expat)))
8340
8341(define-public python-expiringdict
8342 (package
8343 (name "python-expiringdict")
8344 (version "1.2.2")
8345 (source
8346 (origin
8347 (method git-fetch)
8348 (uri (git-reference
8349 (url "https://github.com/mailgun/expiringdict")
8350 (commit (string-append "v" version))))
8351 (file-name (git-file-name name version))
8352 (sha256
8353 (base32 "0hkzh62cmsm8i6sh9pcn4bh3ilq0bzdrvw6gz949swraf944j65x"))))
8354 (build-system pyproject-build-system)
8355 (arguments
8356 ;; Started failing with [email protected], but it's only repr not functionality
8357 ;; so we should be fine.
8358 (list #:test-flags #~'("-v" "-e" "test_repr")))
8359 (native-inputs
8360 (list python-dill python-mock python-pynose python-setuptools))
8361 (home-page "https://github.com/mailgun/expiringdict")
8362 (synopsis "Dictionary with auto-expiring values for caching purposes")
8363 (description
8364 "This Python library provides an ordered dictionary
8365with a maximum capacity and auto-expiring values for caching purposes.
8366Expiration happens on any access, object is locked during cleanup
8367from expired values.")
8368 (license license:asl2.0)))
8369
8370(define-public python-extension-helpers
8371 (package
8372 (name "python-extension-helpers")
8373 (version "1.4.0")
8374 (source
8375 (origin
8376 (method git-fetch) ; no tests in the PyPI tarball
8377 (uri (git-reference
8378 (url "https://github.com/astropy/extension-helpers")
8379 (commit (string-append "v" version))))
8380 (file-name (git-file-name name version))
8381 (sha256
8382 (base32 "0ljvfv9p7jay4j31awx1h714xhyn5hbfgyhn4nm71xrkz9la113j"))))
8383 (build-system pyproject-build-system)
8384 (arguments
8385 (list
8386 #:test-flags
8387 #~(list "--pyargs" "extension_helpers"
8388 "-k" (string-join
8389 ;; XXX: Tests try to check various compilation options and
8390 ;; fail with some incomparability or trying to download
8391 ;; missing modules.
8392 (list "not test_only_pyproject"
8393 "test_no_setup_py"
8394 "test_limited_api")
8395 " and not "))))
8396 (native-inputs
8397 (list python-pytest
8398 python-setuptools-scm))
8399 (propagated-inputs
8400 (list python-setuptools))
8401 (home-page "https://extension-helpers.readthedocs.io")
8402 (synopsis "Astropy ecosystem utilities for building and installing packages")
8403 (description
8404 "The extension-helpers package includes convenience helpers to assist
8405with building Python packages with compiled C/Cython extensions. It is
8406developed by the Astropy project but is intended to be general and usable by
8407any Python package.")
8408 (license license:bsd-3)))
8409
8410(define-public python-milc
8411 (package
8412 (name "python-milc")
8413 (version "1.9.1")
8414 (source
8415 (origin
8416 (method git-fetch) ;no tests in PyPI archive
8417 (uri (git-reference
8418 (url "https://github.com/clueboard/milc")
8419 (commit version)))
8420 (file-name (git-file-name name version))
8421 (sha256
8422 (base32 "0ms9ks0xn1ikd48352bifnbfahfnw3gh4qs1ckmmwbpiq2czca3g"))))
8423 (build-system pyproject-build-system)
8424 (native-inputs
8425 (list python-pytest
8426 python-semver
8427 python-setuptools))
8428 (propagated-inputs
8429 (list python-argcomplete
8430 python-colorama
8431 python-halo
8432 python-platformdirs
8433 python-spinners
8434 python-types-colorama))
8435 (home-page "https://github.com/clueboard/milc")
8436 (synopsis "Python library for command line interface programs")
8437 (description "MILC is a Python library for developing command line
8438interface programs. This library provides features to parse arguments,
8439automatic tab-completion, color support, logging to @code{std}, etc.")
8440 (license license:expat)))
8441
8442(define-public python-extract-dtb
8443 (package
8444 (name "python-extract-dtb")
8445 (version "1.2.3")
8446 (source
8447 (origin
8448 (method git-fetch)
8449 (uri (git-reference
8450 (url "https://github.com/PabloCastellano/extract-dtb/")
8451 (commit version)))
8452 (file-name (git-file-name name version))
8453 (sha256
8454 (base32
8455 "1kkfy8sh6bhh1w5lczaw1nym278q5xp5pxjaahwrl3zfddhdm655"))))
8456 (build-system pyproject-build-system)
8457 (arguments
8458 (list #:tests? #f)) ;no tests
8459 (native-inputs
8460 (list python-setuptools))
8461 (home-page "https://github.com/PabloCastellano/extract-dtb/")
8462 (synopsis "Extract device tree blobs (DTB) from kernel images")
8463 (description
8464 "This package provides a tool to split a kernel image with appended
8465@acronym{DTB, Device Tree Blobs} into separated kernel and DTB files.")
8466 (license license:gpl3+)))
8467
8468(define-public python-mimeparse
8469 (package
8470 (name "python-mimeparse")
8471 (version "2.0.0")
8472 (source
8473 (origin
8474 (method url-fetch)
8475 (uri (pypi-uri "python_mimeparse" version))
8476 (sha256
8477 (base32 "00xk5jir6dm4r3qm8dg8vh8lhq00f35zaryn3gina958gb7rv6jv"))))
8478 (build-system pyproject-build-system)
8479 (native-inputs
8480 (list python-pytest
8481 python-setuptools))
8482 (home-page "https://github.com/falconry/python-mimeparse")
8483 (synopsis "Python library for parsing MIME types")
8484 (description
8485 "Mimeparse provides basic functions for parsing MIME type names and
8486matching them against a list of media-ranges.")
8487 (license license:expat)))
8488
8489(define-public python-miniboa
8490 (package
8491 (name "python-miniboa")
8492 (version "1.0.9")
8493 (source
8494 (origin
8495 (method git-fetch) ;no tests in PyPI archive
8496 (uri (git-reference
8497 (url "https://github.com/shmup/miniboa")
8498 (commit (string-append "v" version))))
8499 (file-name (git-file-name name version))
8500 (sha256
8501 (base32 "05xa44x61bia2pxjdncz6rj10js8hgp2a9hf56avbfk7g58n3v5y"))))
8502 (build-system pyproject-build-system)
8503 (native-inputs
8504 (list python-pytest
8505 python-setuptools
8506 python-wheel))
8507 (home-page "https://github.com/shmup/miniboa")
8508 (synopsis "Simple, single-threaded Telnet server")
8509 (description
8510 "Miniboa is a simple, asynchronous, single-threaded, poll-based Telnet
8511server.")
8512 (license license:asl2.0)))
8513
8514(define-public python-mir-eval
8515 (package
8516 (name "python-mir-eval")
8517 (version "0.8.2")
8518 (source (origin
8519 (method git-fetch)
8520 (uri (git-reference
8521 (url "https://github.com/mir-evaluation/mir_eval")
8522 (commit version)))
8523 (file-name (git-file-name name version))
8524 (sha256
8525 (base32
8526 "0mna57q2r0cjsvgz67v6bay1c6a33wl33yna9s083wfqhjmf9bqf"))))
8527 (build-system pyproject-build-system)
8528 (arguments
8529 (list
8530 #:phases
8531 #~(modify-phases %standard-phases
8532 (add-before 'check 'cd-tests
8533 (lambda _
8534 ;; Move to 'tests' directory because tests read data files from
8535 ;; a relative path.
8536 (chdir "tests"))))))
8537 (propagated-inputs (list python-decorator python-numpy python-scipy))
8538 (native-inputs (list python-matplotlib
8539 python-pytest
8540 python-pytest-mpl
8541 python-setuptools
8542 python-wheel))
8543 (home-page "https://github.com/mir-evaluation/mir_eval")
8544 (synopsis "Common metrics for common audio/music processing tasks")
8545 (description "This is a Python library for computing common heuristic
8546accuracy scores for various music/audio information retrieval/signal
8547processing tasks.")
8548 (license license:expat)))
8549
8550(define-public python-mizani
8551 (package
8552 (name "python-mizani")
8553 (version "0.13.1")
8554 (source (origin
8555 (method git-fetch)
8556 (uri (git-reference
8557 (url "https://github.com/has2k1/mizani")
8558 (commit (string-append "v" version))))
8559 (file-name (git-file-name name version))
8560 (sha256
8561 (base32
8562 "0ij0fk4w0jyyj44ij3i2j1nfa0d7dk783w9r25cpwjkpn690xqfx"))))
8563 (build-system pyproject-build-system)
8564 (propagated-inputs
8565 (list python-matplotlib python-numpy python-pandas python-scipy))
8566 (native-inputs
8567 (list python-setuptools
8568 python-setuptools-scm
8569 python-pytest
8570 python-wheel
8571 tzdata))
8572 (home-page "https://github.com/has2k1/mizani")
8573 (synopsis "Create data visualizations in Python")
8574 (description
8575 "Mizani is a Python package for creating data visualizations. It
8576provides functions and tools to help with the creation of visually appealing
8577and informative visualizations, including scales, transformations and color
8578palettes.")
8579 (license license:bsd-3)))
8580
8581(define-public python-miniupnpc
8582 (package
8583 (name "python-miniupnpc")
8584 (version "2.3.3")
8585 (source
8586 (origin
8587 (method git-fetch)
8588 (uri
8589 (git-reference
8590 ;; The project tags miniupnpd_ as well but with a different version,
8591 ;; where updater may select a wrong version.
8592 (url "https://github.com/miniupnp/miniupnp")
8593 (commit
8594 (string-append
8595 "miniupnpc_" (string-replace-substring version "." "_")))))
8596 (file-name
8597 (git-file-name name version))
8598 (sha256
8599 (base32 "0ysvx21iaq7f505fpnk3280rwnckr0aih0j5j3v82nv99a2rqigh"))))
8600 (build-system pyproject-build-system)
8601 (arguments
8602 (list
8603 #:phases
8604 #~(modify-phases %standard-phases
8605 (add-after 'unpack 'subdir
8606 (lambda* (#:key inputs #:allow-other-keys)
8607 (chdir "miniupnpc")
8608 (setenv "CC" #$(cc-for-target))
8609 (substitute* "Makefile"
8610 (("/bin/sh") (search-input-file inputs "/bin/sh")))))
8611 (add-before 'subdir 'remove-kernel-version
8612 ;; Avoid embedding the running kernel version for reproducible builds
8613 (lambda _
8614 (substitute*
8615 "miniupnpc/updateminiupnpcstrings.sh"
8616 (("^OS_VERSION=`uname -r`") "OS_VERSION=Guix"))))
8617 (replace 'check
8618 (lambda* (#:key tests? #:allow-other-keys)
8619 (when tests?
8620 (invoke "make" "check")))))))
8621 (native-inputs
8622 (list python-setuptools
8623 python-wheel))
8624 (inputs (list python)) ;we are building a Python extension
8625 (synopsis "UPnP client for Python")
8626 (description "Miniupnpc is a client library for Python programs to set up
8627port forwards using @acronym{UPnP, Universal Plug and Play}.")
8628 (home-page "http://miniupnp.free.fr")
8629 (license license:bsd-3)))
8630
8631;; NOTE: As taken from upstram: "this library is in maintenance mode and
8632;; should not be used in new code."
8633(define-public python-py
8634 (package
8635 (name "python-py")
8636 (version "1.11.0")
8637 (source
8638 (origin
8639 (method url-fetch)
8640 (uri (pypi-uri "py" version))
8641 (sha256
8642 (base32
8643 "06c7m7sfcn7587xd4s2bng8m6q1gsfd3j93afhplfjq74r0mrisi"))))
8644 (build-system pyproject-build-system)
8645 (arguments
8646 '(#:tests? #f)) ;cycle with python-pytest
8647 (native-inputs
8648 (list python-setuptools
8649 python-setuptools-scm
8650 python-wheel))
8651 (home-page "https://github.com/pytest-dev/py")
8652 (synopsis "Python library for parsing, I/O, introspection, and logging")
8653 (description
8654 "Py is a Python library for file name parsing, .ini file parsing, I/O,
8655code introspection, and logging.")
8656 (license license:expat)))
8657
8658(define-public python-pyrsistent
8659 (package
8660 (name "python-pyrsistent")
8661 (version "0.20.0")
8662 (home-page "https://github.com/tobgu/pyrsistent")
8663 (source (origin
8664 (method url-fetch)
8665 (uri (pypi-uri "pyrsistent" version))
8666 (sha256
8667 (base32
8668 "1935ybwdxszmzlzshwkc7m7swm1js46ls246j1knqndbca7zfj2c"))))
8669 (build-system pyproject-build-system)
8670 (native-inputs
8671 (list python-pytest python-setuptools python-wheel))
8672 (synopsis "Persistent data structures for Python")
8673 (description
8674 "Pyrsistent is a number of persistent collections (by some referred to as
8675functional data structures). Persistent in the sense that they are immutable.
8676
8677All methods on a data structure that would normally mutate it instead return a
8678new copy of the structure containing the requested updates. The original
8679structure is left untouched.")
8680 (license license:expat)))
8681
8682(define-public python-exif-read
8683 (package
8684 (name "python-exif-read")
8685 (version "3.3.2")
8686 (source
8687 (origin
8688 (method git-fetch) ;PyPI doesn't contain the test images
8689 (uri (git-reference
8690 (url "https://github.com/ianare/exif-py")
8691 (commit version)))
8692 (file-name (git-file-name name version))
8693 (sha256
8694 (base32 "0igvqhalrllidyccy7rlqbhx277rv7mf6bf0w6xjr0dj2dk3jw76"))))
8695 (build-system pyproject-build-system)
8696 (native-inputs (list python-pytest python-setuptools python-wheel))
8697 (home-page "https://github.com/ianare/exif-py")
8698 (synopsis "Python library to extract EXIF data from image files")
8699 (description
8700 "ExifRead is a Python library to extract EXIF data from tiff and jpeg
8701files.")
8702 (license license:bsd-3)))
8703
8704(define-public python-pyld
8705 (package
8706 (name "python-pyld")
8707 (version "2.0.4")
8708 (source
8709 (origin
8710 (method git-fetch)
8711 (uri (git-reference
8712 (url "https://github.com/digitalbazaar/pyld")
8713 ;; Not all tags have the 'v' prefix.
8714 (commit (string-append "v" version))))
8715 (file-name (git-file-name name version))
8716 (sha256
8717 (base32 "12lb4vk7m5y5943fm4r8hixdvlxh6qm21pbv7aalsbpfw8cc18sw"))))
8718 (build-system pyproject-build-system)
8719 (arguments
8720 ;; TODO: Commit history shows next version (>2.0.4) will have pytest tests.
8721 (list #:tests? #f))
8722 (native-inputs
8723 (list python-lxml
8724 python-setuptools))
8725 (propagated-inputs
8726 (list python-aiohttp
8727 python-cachetools
8728 python-frozendict
8729 python-requests))
8730 (home-page "https://github.com/digitalbazaar/pyld")
8731 (synopsis "Python implementation of the JSON-LD specification")
8732 (description "PyLD is an implementation of the JSON-LD specification.")
8733 (license license:bsd-3)))
8734
8735(define-public python-cli-helpers
8736 (package
8737 (name "python-cli-helpers")
8738 (version "2.7.0")
8739 (source
8740 (origin
8741 (method url-fetch)
8742 (uri (pypi-uri "cli_helpers" version))
8743 (sha256
8744 (base32 "1h4b0ka9nh9qidl6s1ard1ixh9c3d0ai5ph3013grhpbvc81glb2"))))
8745 (build-system pyproject-build-system)
8746 (native-inputs
8747 (list python-pytest
8748 python-setuptools))
8749 (propagated-inputs
8750 (list python-configobj
8751 python-tabulate))
8752 (home-page "https://github.com/dbcli/cli_helpers")
8753 (synopsis "Helpers for building command-line apps")
8754 (description
8755 "CLI Helpers is a Python package that makes it easy to perform common
8756tasks when building command-line apps. It's a helper library for command-line
8757interfaces.")
8758 (license license:bsd-3)))
8759
8760(define-public python-click
8761 (package
8762 (name "python-click")
8763 (version "8.3.1")
8764 (source
8765 (origin
8766 (method git-fetch)
8767 (uri (git-reference
8768 (url "https://github.com/pallets/click")
8769 (commit version)))
8770 (file-name (git-file-name name version))
8771 (sha256
8772 (base32 "041w6s8w11za2jlws7sxvrcfmi0bvr354nq74wyb66gsk908idii"))))
8773 (build-system pyproject-build-system)
8774 (native-inputs
8775 (list less
8776 python-flit-core
8777 python-pytest))
8778 (home-page "https://palletsprojects.com/p/click/")
8779 (synopsis "Command line library for Python")
8780 (description
8781 "Click is a Python package for creating command line interfaces in a
8782composable way with as little code as necessary. Its name stands for
8783\"Command Line Interface Creation Kit\". It's highly configurable but comes
8784with sensible defaults out of the box.")
8785 (license license:bsd-3)))
8786
8787(define-public python-click-7
8788 (package (inherit python-click)
8789 (name "python-click")
8790 (version "7.1.2")
8791 (source
8792 (origin
8793 (method url-fetch)
8794 (uri (pypi-uri "click" version))
8795 (sha256
8796 (base32 "06kbzd6sjfkqan3miwj9wqyddfxc2b6hi7p5s4dvqjb3gif2bdfj"))))
8797 (arguments (list #:tests? #f)) ;no tests in PyPI
8798 (native-inputs
8799 (list python-setuptools))))
8800
8801(define-public python-click-8.1
8802 (package
8803 (inherit python-click)
8804 (name "python-click")
8805 (version "8.1.7")
8806 (source
8807 (origin
8808 (method git-fetch)
8809 (uri (git-reference
8810 (url "https://github.com/pallets/click")
8811 (commit version)))
8812 (file-name (git-file-name name version))
8813 (sha256
8814 (base32 "132frw2g4i3s7kv325ah85wav5h92fv3n00wknhcgr5h3hlqi2pi"))))
8815 (native-inputs
8816 (list less
8817 python-pytest
8818 python-setuptools))))
8819
8820(define-public python-click-aliases
8821 (package
8822 (name "python-click-aliases")
8823 (version "1.0.6")
8824 (source
8825 (origin
8826 (method git-fetch)
8827 (uri (git-reference
8828 (url "https://github.com/click-contrib/click-aliases")
8829 (commit (string-append "v" version))))
8830 (file-name (git-file-name name version))
8831 (sha256
8832 (base32 "0jl45vl73x6hrqgj9n3jhga19v0c923v5kv3vdmb2wwn936jyxcw"))))
8833 (build-system pyproject-build-system)
8834 (native-inputs
8835 (list python-pytest
8836 python-poetry-core))
8837 (propagated-inputs
8838 (list python-click))
8839 (home-page "https://github.com/click-contrib/click-aliases")
8840 (synopsis "Enable aliases for Click")
8841 (description
8842 "This package helps to add (mutiple) aliases to a click group or command.")
8843 (license license:expat)))
8844
8845(define-public python-click-option-group
8846 (package
8847 (name "python-click-option-group")
8848 (version "0.5.9")
8849 (source
8850 (origin
8851 (method git-fetch)
8852 (uri (git-reference
8853 (url "https://github.com/click-contrib/click-option-group")
8854 (commit (string-append "v" version))))
8855 (file-name (git-file-name name version))
8856 (sha256
8857 (base32 "1y9sprpgdmi4ww7hv04ciy0n6kacr4s8001zmf8781wr8vrxfb01"))))
8858 (build-system pyproject-build-system)
8859 (native-inputs
8860 (list python-hatch-vcs
8861 python-hatchling
8862 python-pytest))
8863 (propagated-inputs
8864 (list python-click))
8865 (home-page "https://click-option-group.readthedocs.io/")
8866 (synopsis "Option groups missing in Click")
8867 (description
8868 "Click is a package for creating powerful and beautiful command line
8869interfaces (CLI) in Python, but it has no the functionality for creating option
8870groups. The aim of this package is to provide group options with extensible
8871functionality using canonical and clean API (Click-like API as far as
8872possible).")
8873 (license license:bsd-3)))
8874
8875(define-public python-clickgen
8876 (package
8877 (name "python-clickgen")
8878 (version "2.2.5")
8879 (source (origin
8880 (method git-fetch)
8881 (uri (git-reference
8882 (url "https://github.com/ful1e5/clickgen")
8883 (commit (string-append "v" version))))
8884 (file-name (git-file-name name version))
8885 (sha256
8886 (base32
8887 "0gdbkdw9b52wbb0bbhs09bdfyfq979kvlv5sg5p70y3jal9j8lf8"))))
8888 (build-system pyproject-build-system)
8889 (arguments
8890 (list
8891 #:test-flags
8892 ;; XXX: See: <https://github.com/ful1e5/clickgen/issues/65>.
8893 '(list "-k" "not test_clickgen_raises")))
8894 (native-inputs
8895 (list python-pytest
8896 python-setuptools))
8897 (propagated-inputs
8898 (list python-attrs
8899 python-numpy
8900 python-pillow
8901 python-pyyaml
8902 python-toml))
8903 (home-page "https://github.com/ful1e5/clickgen")
8904 (synopsis "The hassle-free cursor building toolbox")
8905 (description
8906 "Clickgen is an API for building X11 and Windows cursors from .png files.
8907clickgen is using @code{anicursorgen} and @code{xcursorgen} under the hood.")
8908 (license license:expat)))
8909
8910(define-public python-clickhouse-connect
8911 (package
8912 (name "python-clickhouse-connect")
8913 (version "0.6.1")
8914 (source (origin
8915 (method git-fetch)
8916 (uri (git-reference
8917 (url "https://github.com/ClickHouse/clickhouse-connect")
8918 (commit (string-append "v" version))))
8919 (file-name (git-file-name name version))
8920 (sha256
8921 (base32
8922 "1s0lk7xdq8f351cmpbp6jidqi5zdazrdba7w7fxph0w8sd74amry"))))
8923 (build-system pyproject-build-system)
8924 (arguments
8925 (list
8926 #:test-flags
8927 ;; All these tests require docker-compose
8928 '(list "--ignore-glob=tests/integration_tests/*")
8929 #:phases
8930 '(modify-phases %standard-phases
8931 (add-after 'unpack 'patch-pyproject
8932 (lambda _
8933 ;; Our version of pytest is confused by this field.
8934 (substitute* "pyproject.toml"
8935 (("^env_files.*") ""))))
8936 (add-before 'check 'build-extensions
8937 (lambda _
8938 ;; Cython extensions have to be built before running the tests.
8939 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
8940 (propagated-inputs
8941 (list python-arrow
8942 python-certifi
8943 python-lz4
8944 python-numpy
8945 python-orjson
8946 python-pandas
8947 python-pytz
8948 python-setuptools ; For pkg_resources.
8949 python-sqlalchemy
8950 python-urllib3
8951 python-zstandard))
8952 (native-inputs
8953 (list python-cython
8954 python-pytest
8955 python-wheel))
8956 (home-page "https://github.com/ClickHouse/clickhouse-connect")
8957 (synopsis
8958 "ClickHouse database core driver for Python, Pandas, and Superset")
8959 (description
8960 "This package provides a high performance core database driver for
8961connecting ClickHouse to Python, Pandas, and Superset.")
8962 (license license:asl2.0)))
8963
8964(define-public python-cligj
8965 (package
8966 (name "python-cligj")
8967 (version "0.7.2")
8968 (source
8969 (origin
8970 (method url-fetch)
8971 (uri (pypi-uri "cligj" version))
8972 (sha256
8973 (base32
8974 "09vbkik6kyn6yrqzl2r74vaybjk8kjykvi975hy3fsrm4gb17g54"))))
8975 (build-system pyproject-build-system)
8976 (native-inputs
8977 (list python-pytest
8978 python-setuptools))
8979 (propagated-inputs
8980 (list python-click))
8981 (home-page "https://github.com/mapbox/cligj")
8982 (synopsis "Click params for command line interfaces to GeoJSON")
8983 (description
8984 "cligj is for Python developers who create command line interfaces
8985for geospatial data. cligj allows you to quickly build consistent,
8986well-tested and interoperable CLIs for handling GeoJSON.")
8987 (license license:bsd-3)))
8988
8989(define-public python-cloup
8990 (package
8991 (name "python-cloup")
8992 (version "3.0.8")
8993 (source (origin
8994 (method url-fetch)
8995 (uri (pypi-uri "cloup" version))
8996 (sha256
8997 (base32
8998 "1jryxdmvrxicfqdf5pqnzjbnwikg4r865gga9zvxv5jif850h77r"))))
8999 (build-system pyproject-build-system)
9000 (propagated-inputs (list python-click))
9001 (native-inputs (list python-pytest python-setuptools python-setuptools-scm))
9002 (home-page "https://github.com/janLuke/cloup")
9003 (synopsis "Extension library for python-click")
9004 (description
9005 "Cloup enriches Click with several features that make it more expressive
9006and configurable such as option groups, constraints, subcommand aliases,
9007subcommands sections and a themeable HelpFormatter.")
9008 (license license:bsd-3)))
9009
9010(define-public python-jsondiff
9011 (package
9012 (name "python-jsondiff")
9013 (version "2.2.1")
9014 (source
9015 (origin
9016 (method url-fetch)
9017 (uri (pypi-uri "jsondiff" version))
9018 (sha256
9019 (base32
9020 "1zpp8l2ii9ic1sk6kdcqxk0v5q9pgdmdhg1h4vg8dfl6i8n1d3b5"))))
9021 (build-system pyproject-build-system)
9022 (arguments
9023 (list
9024 #:phases
9025 #~(modify-phases %standard-phases
9026 (add-before 'build 'set-version
9027 (lambda _
9028 (substitute* "pyproject.toml"
9029 (("^version_file.*") "")
9030 (("dynamic = \\[\"version\"\\]")
9031 (string-append "version = \"" #$version "\""))))))))
9032 (propagated-inputs (list python-pyyaml))
9033 (native-inputs
9034 (list python-hypothesis
9035 python-pytest
9036 python-setuptools
9037 python-setuptools-scm
9038 python-wheel))
9039 (home-page "https://github.com/fzumstein/jsondiff")
9040 (synopsis "Compare JSON and JSON-like structures in Python")
9041 (description "@code{jsondiff} is a Python library which lets you compare,
9042diff, and patch JSON and JSON-like structures in Python.")
9043 (license license:expat)))
9044
9045(define-public python-ddlparse
9046 (package
9047 (name "python-ddlparse")
9048 (version "1.10.0")
9049 (source
9050 (origin
9051 (method url-fetch)
9052 (uri (pypi-uri "ddlparse" version))
9053 (sha256
9054 (base32 "1nh8m6rxslwk05daxshxmgk41qfp18yynydba49b13l4m8dnh634"))))
9055 (build-system pyproject-build-system)
9056 (native-inputs
9057 (list python-pytest python-setuptools))
9058 (propagated-inputs (list python-pyparsing))
9059 (home-page "https://github.com/shinichi-takii/ddlparse")
9060 (synopsis "Parses and converts DDL to BigQuery JSON schema")
9061 (description "This package provides @code{ddlparse}, a Python library to parse
9062and convert DDL to BigQuery JSON schema.")
9063 (license license:bsd-3)))
9064
9065(define-public python-jsonschema
9066 (package
9067 (name "python-jsonschema")
9068 (version "4.23.0")
9069 (source
9070 (origin
9071 (method url-fetch)
9072 (uri (pypi-uri "jsonschema" version))
9073 (sha256
9074 (base32 "1i3b4sckkc3v8vckqa11xbrj695qzrzsfzrkclra6lb3ybz9f56p"))))
9075 (build-system pyproject-build-system)
9076 (arguments
9077 (list
9078 #:phases
9079 #~(modify-phases %standard-phases
9080 (add-before 'check 'pre-check
9081 (lambda _
9082 (setenv "JSON_SCHEMA_TEST_SUITE" "json"))))))
9083 (native-inputs
9084 (list python-hatchling
9085 python-hatch-fancy-pypi-readme
9086 python-hatch-vcs
9087 ;; For <tests/test_cli.py::TestCLIIntegration::test_license>.
9088 python-pip
9089 python-pytest))
9090 (propagated-inputs
9091 (list python-attrs
9092 python-fqdn
9093 python-idna
9094 python-importlib-resources
9095 python-isoduration
9096 python-jsonpointer
9097 python-jsonschema-specifications
9098 python-rfc3339-validator
9099 python-rfc3986-validator
9100 python-referencing-bootstrap
9101 python-rpds-py
9102 python-uri-template
9103 python-webcolors))
9104 (home-page "https://github.com/Julian/jsonschema")
9105 (synopsis "Implementation of JSON Schema for Python")
9106 (description
9107 "Jsonschema is an implementation of JSON Schema for Python.")
9108 (license license:expat)))
9109
9110;; For docker-compose 1.29.2, remove when its updated to the latest 2.x
9111;; version.
9112(define-public python-jsonschema-3
9113 (package
9114 (inherit python-jsonschema)
9115 (version "3.2.0")
9116 (source (origin
9117 (method url-fetch)
9118 (uri (pypi-uri "jsonschema" version))
9119 (sha256
9120 (base32
9121 "0ykr61yiiizgvm3bzipa3l73rvj49wmrybbfwhvpgk3pscl5pa68"))))
9122 (arguments
9123 (substitute-keyword-arguments arguments
9124 ((#:tests? _ #t) #f)))
9125 (propagated-inputs
9126 (list python-attrs
9127 python-pyrsistent
9128 python-typing-extensions))
9129 (native-inputs
9130 (list python-setuptools-scm python-twisted
9131 python-setuptools python-wheel))))
9132
9133(define-public python-jsonschema-path
9134 (package
9135 (name "python-jsonschema-path")
9136 (version "0.3.2")
9137 (source
9138 (origin
9139 (method url-fetch)
9140 (uri (pypi-uri "jsonschema_path" version))
9141 (sha256
9142 (base32 "129rb8y2bj2wwps8vs3z1qav006k7wz2myx5j6dnxqs1yfmsn3ad"))))
9143 (build-system pyproject-build-system)
9144 (arguments
9145 (list
9146 #:tests? #false ;there are none
9147 #:phases
9148 '(modify-phases %standard-phases
9149 (add-after 'unpack 'relax-requirements
9150 (lambda _
9151 (substitute* "pyproject.toml"
9152 (("referencing = \">=0.28.0,<0.32.0\"")
9153 "referencing = \">=0.28.0\"")))))))
9154 (propagated-inputs (list python-pathable python-pyyaml python-referencing
9155 python-requests))
9156 (native-inputs (list python-poetry-core))
9157 (home-page "https://github.com/p1c2u/jsonschema-path")
9158 (synopsis "JSONSchema Spec with object-oriented paths")
9159 (description "This package implements object-oriented JSONSchema. It lets
9160you traverse a schema like paths and access a schema on demand with separate
9161dereferencing accessor layer.")
9162 (license license:asl2.0)))
9163
9164(define-public python-jsonschema-objects
9165 (package
9166 (name "python-jsonschema-objects")
9167 (version "0.5.7")
9168 (source
9169 (origin
9170 (method git-fetch)
9171 (uri (git-reference
9172 (url "https://github.com/cwacek/python-jsonschema-objects/")
9173 (commit version)))
9174 (file-name (git-file-name name version))
9175 (sha256
9176 (base32 "0p3m0fbj25brhfma4bl47xjq6x4ay14yx284qwrki96dwd6v46xd"))))
9177 (build-system pyproject-build-system)
9178 (native-inputs
9179 (list python-pytest
9180 python-pytest-mock
9181 python-setuptools))
9182 (propagated-inputs
9183 (list python-inflection
9184 python-jsonschema
9185 python-markdown))
9186 (home-page "http://python-jsonschema-objects.readthedocs.org/")
9187 (synopsis "Automatic Python binding generation from JSON schemas")
9188 (description
9189 "This package provides an automatic class-based binding to JSON
9190Schemas for use in python.")
9191 (license license:expat)))
9192
9193(define-public python-jsonschema-specifications
9194 (package
9195 (name "python-jsonschema-specifications")
9196 (version "2024.10.1")
9197 (source
9198 (origin
9199 (method url-fetch)
9200 (uri (pypi-uri "jsonschema_specifications" version))
9201 (sha256
9202 (base32 "0wp2g90jsaa48g1v0n6m43ywhh9cj1ig19q25lay334m74vbhf0g"))))
9203 (build-system pyproject-build-system)
9204 (native-inputs
9205 (list python-hatch-vcs
9206 python-hatchling
9207 python-pytest))
9208 (propagated-inputs
9209 (list python-importlib-resources
9210 python-referencing-bootstrap))
9211 (home-page "https://github.com/python-jsonschema/jsonschema-specifications")
9212 (synopsis
9213 "JSON Schema meta-schemas and vocabularies, exposed as a Registry")
9214 (description
9215 "This package provides JSON support files from the JSON Schema
9216Specifications (metaschemas, vocabularies, etc.), packaged for runtime access
9217from Python as a referencing-based Schema Registry.")
9218 (license license:expat)))
9219
9220(define-public python-schema
9221 (package
9222 (name "python-schema")
9223 (version "0.7.8")
9224 (source
9225 (origin
9226 (method git-fetch)
9227 (uri (git-reference
9228 (url "https://github.com/keleshev/schema")
9229 (commit (string-append "v" version))))
9230 (file-name (git-file-name name version))
9231 (sha256
9232 (base32 "149smlvj0jlvpsw39lw84c29prg76k1gr6iazl9fqydaqiaw52c5"))))
9233 (build-system pyproject-build-system)
9234 (native-inputs
9235 (list python-pytest python-setuptools))
9236 (home-page "https://github.com/keleshev/schema")
9237 (synopsis "Simple data validation library")
9238 (description
9239 "@code{python-schema} is a library for validating Python data
9240structures, such as those obtained from config-files, forms, external
9241services or command-line parsing, converted from JSON/YAML (or
9242something else) to Python data-types.")
9243 (license license:psfl)))
9244
9245(define-public python-kitchen
9246 (package
9247 (name "python-kitchen")
9248 (version "1.2.6")
9249 (source
9250 (origin
9251 (method git-fetch)
9252 (uri (git-reference
9253 (url "https://github.com/fedora-infra/kitchen")
9254 (commit version)))
9255 (file-name (git-file-name name version))
9256 (sha256
9257 (base32 "1wf2m4yx5467vxg4scgzihb0q9q3k7fasgxanhrnxpp1a5l8l93n"))))
9258 (build-system pyproject-build-system)
9259 (arguments
9260 (list
9261 #:test-flags
9262 #~(list "kitchen3"
9263 ;; XXX: Unclear why these tests fail.
9264 "-e" "test_invalid_fallback_no_raise"
9265 "-e" "test_internal_generate_combining_table"
9266 "-e" "test_lgettext"
9267 "-e" "test_lngettext"
9268 "-e" "test_easy_gettext_setup_non_unicode")
9269 #:phases
9270 #~(modify-phases %standard-phases
9271 (add-before 'check 'delete-broken-test-files
9272 (lambda _
9273 (delete-file "kitchen3/tests/test__all__.py")
9274 (delete-file "kitchen3/tests/test_deprecation_py3.py"))))))
9275 (native-inputs (list python-pynose python-setuptools))
9276 (home-page "https://github.com/fedora-infra/kitchen")
9277 (synopsis "Python API for snippets")
9278 (description
9279 "@code{kitchen} module provides a python API for all sorts of little
9280useful snippets of code that everybody ends up writing for their projects but
9281never seem big enough to build an independent release. Use kitchen and stop
9282cutting and pasting that code over and over.")
9283 (license (list license:lgpl2.1+
9284 ;; subprocess.py, test_subprocess.py,
9285 ;; kitchen/pycompat25/defaultdict.py:
9286 license:psfl))))
9287
9288(define-public python-roman
9289 (package
9290 (name "python-roman")
9291 (version "5.2")
9292 (source
9293 (origin
9294 (method git-fetch)
9295 (uri (git-reference
9296 (url "https://github.com/zopefoundation/roman")
9297 (commit version)))
9298 (file-name (git-file-name name version))
9299 (sha256
9300 (base32
9301 "0zvg6pmv0yxm0b96dx104jzlxnsi3wy4swbj1lmc3mym5nahgp36"))))
9302 (build-system pyproject-build-system)
9303 (arguments
9304 (list
9305 #:test-backend #~'unittest
9306 #:test-flags #~(list "discover" "-s" "src")))
9307 (native-inputs (list python-setuptools))
9308 (home-page "https://github.com/zopefoundation/roman")
9309 (synopsis "Integer to Roman numerals converter")
9310 (description
9311 "This package provides a small helper library to convert Arabic Numbers
9312to Roman Numerals.")
9313 (license license:zpl2.1)))
9314
9315(define-public python-rollbar
9316 (package
9317 (name "python-rollbar")
9318 (version "1.3.0")
9319 (source (origin
9320 (method url-fetch)
9321 (uri (pypi-uri "rollbar" version))
9322 (sha256
9323 (base32
9324 "0ydksca7glb7g026f4f8nsvpyj8qpgv74642hjj4zk4vqgm0552i"))))
9325 (build-system pyproject-build-system)
9326 (native-inputs (list python-httpx
9327 python-pytest
9328 python-setuptools
9329 python-webob
9330 python-wheel))
9331 (inputs (list python-requests))
9332 (home-page "https://github.com/rollbar/pyrollbar")
9333 (synopsis "Notifier for exceptions, errors, and log messages to Rollbar")
9334 (description
9335 "Python SDK for reporting exceptions, errors, and log messages
9336to @url{https://rollbar.com/, Rollbar}.
9337
9338Capabilities include:
9339
9340@itemize @bullet
9341@item Sending messages and exceptions with arbitrary context
9342@item Getting back aggregates
9343@item Debugging production issues
9344@end itemize")
9345 (license license:expat)))
9346
9347(define-public python-pyjwt
9348 (package
9349 (name "python-pyjwt")
9350 (version "2.10.1")
9351 (source
9352 (origin
9353 (method url-fetch)
9354 (uri (pypi-uri "pyjwt" version))
9355 (sha256
9356 (base32 "0lqr73wnrnxflbh8wr768hxp493qayhdis86mwy26280n8p7gi9w"))))
9357 (build-system pyproject-build-system)
9358 (arguments
9359 (list
9360 ;; tests: 286 passed, 4 skipped, 1 deselected
9361 ;;
9362 ;; jwt.exceptions.PyJWKClientConnectionError: Fail to fetch data from
9363 ;; the url, err: "<urlopen error [Errno -3] Temporary failure in name
9364 ;; resolution>"
9365 #:test-flags #~(list "-k" "not test_get_jwt_set_sslcontext_default")))
9366 (native-inputs
9367 (list python-pytest
9368 python-setuptools))
9369 (propagated-inputs
9370 (if (supported-package? python-cryptography)
9371 (list python-cryptography)
9372 '()))
9373 (home-page "https://github.com/progrium/pyjwt")
9374 (synopsis "JSON Web Token implementation in Python")
9375 (description
9376 "PyJWT is a JSON Web Token implementation written in Python.")
9377 (license license:expat)))
9378
9379(define-public python-pymsgbox
9380 (let ((commit "944b7cdc67058d005ce5fd011c66f2d87d25aba0")
9381 (revision "1"))
9382 (package
9383 (name "python-pymsgbox")
9384 (version (git-version "1.0.6" revision commit))
9385 (source
9386 (origin
9387 (method git-fetch)
9388 (uri (git-reference
9389 (url "https://github.com/asweigart/PyMsgBox")
9390 (commit commit)))
9391 (file-name (git-file-name name version))
9392 (sha256
9393 (base32 "1bhipfvnc06l8hiadk302v74yin38nwz1r47njliwk8kz103yl3g"))))
9394 (build-system pyproject-build-system)
9395 (arguments
9396 ;; Circular dependency to run tests:
9397 ;; Tests need pyautogui, which depends on pymsgbox.
9398 '(#:tests? #f))
9399 (native-inputs (list python-setuptools python-wheel))
9400 (home-page "https://github.com/asweigart/PyMsgBox")
9401 (synopsis "Python module for JavaScript-like message boxes")
9402 (description
9403 "PyMsgBox is a simple, cross-platform, pure Python module for
9404JavaScript-like message boxes. Types of dialog boxes include:
9405@enumerate
9406@item alert
9407@item confirm
9408@item prompt
9409@item password
9410@end enumerate
9411")
9412 (license license:bsd-3))))
9413
9414(define-public python-pympler
9415 (let ((commit "6d595e0ac72d0a6ed2fb4aa77ae5f89189667721")
9416 (revision "0"))
9417 (package
9418 (name "python-pympler")
9419 (version (git-version "1.1" revision commit))
9420 (source
9421 (origin
9422 (method git-fetch)
9423 (uri (git-reference
9424 (url "https://github.com/pympler/pympler")
9425 (commit commit)))
9426 (file-name (git-file-name name version))
9427 (sha256
9428 (base32 "0clr767p1ky6ckvisq8iv6alcaya2hhvyk3z57wbs765brag4pdh"))))
9429 (build-system pyproject-build-system)
9430 (arguments
9431 (list
9432 #:tests? #f ;FIXME: tests timeout.
9433 #:test-flags
9434 #~(list
9435 ;; This test fails with error: 'function (test.muppy.test_summary.func)'
9436 ;; != 'function (muppy.test_summary.func)'.
9437 ;; See <https://github.com/pympler/pympler/issues/134>.
9438 "--deselect=test/muppy/test_summary.py::SummaryTest::test_repr_function"
9439 ;; This test times out.
9440 "--deselect=test/gui/test_web.py::WebGuiTest::test_traceback")))
9441 (native-inputs
9442 (list python-pytest python-setuptools))
9443 (home-page "https://pythonhosted.org/Pympler/")
9444 (synopsis "Measure, monitor and analyze memory behavior")
9445 (description
9446 "Pympler is a development tool to measure, monitor and analyze
9447the memory behavior of Python objects in a running Python application.
9448
9449By pympling a Python application, detailed insight in the size and the
9450lifetime of Python objects can be obtained. Undesirable or unexpected
9451runtime behavior like memory bloat and other @samp{pymples} can easily
9452be identified.
9453
9454A web profiling frontend exposes process statistics, garbage
9455visualisation and class tracker statistics.")
9456 (license license:asl2.0))))
9457
9458(define-public python-itsdangerous
9459 (package
9460 (name "python-itsdangerous")
9461 (version "2.2.0")
9462 (source
9463 (origin
9464 (method url-fetch)
9465 (uri (pypi-uri "itsdangerous" version))
9466 (sha256
9467 (base32 "0wv1bwzbfvpsh4ng5gn4d4mjwvjwpg7w0jgiz8zsbvm1gl5hq1g0"))))
9468 (build-system pyproject-build-system)
9469 (native-inputs
9470 (list python-flit-core
9471 python-freezegun
9472 python-pytest))
9473 (home-page "https://palletsprojects.com/p/itsdangerous/")
9474 (synopsis "Python library for passing data to/from untrusted environments")
9475 (description
9476 "Itsdangerous provides various helpers to pass trusted data to untrusted
9477environments and back.")
9478 (license license:bsd-3)))
9479
9480;; WARNING: This package is a dependency of mesa.
9481(define-public python-pyyaml
9482 (package
9483 (name "python-pyyaml")
9484 (version "6.0.2")
9485 (source
9486 (origin
9487 (method url-fetch)
9488 (uri (pypi-uri "PyYAML" version))
9489 (sha256
9490 (base32 "0gmwggzm0j0iprx074g5hah91y2f68sfhhldq0f8crddj7ndk16m"))))
9491 (build-system pyproject-build-system)
9492 (native-inputs
9493 (list python-cython
9494 python-pytest
9495 python-setuptools
9496 python-wheel))
9497 (inputs
9498 (list libyaml))
9499 (home-page "https://pyyaml.org")
9500 (synopsis "YAML parser and emitter for Python")
9501 (description
9502 "PyYAML is a YAML parser and emitter for Python. PyYAML features a
9503complete YAML 1.1 parser, Unicode support, pickle support, capable extension
9504API, and sensible error messages. PyYAML supports standard YAML tags and
9505provides Python-specific tags that represent an arbitrary Python object.")
9506 (license license:expat)))
9507
9508(define-public python-crossenv
9509 (package
9510 (name "python-crossenv")
9511 (version "1.6.1")
9512 (source
9513 (origin
9514 (method git-fetch)
9515 (uri (git-reference
9516 (url "https://github.com/benfogle/crossenv")
9517 (commit (string-append "v" version))))
9518 (file-name (git-file-name name version))
9519 (sha256
9520 (base32 "15mj5kfb30jj0m1jj8qz19zdf53380j14hzj2rx13ilnr1d7j6rn"))))
9521 (build-system pyproject-build-system)
9522 (arguments
9523 (list
9524 ;; XXX: Running test require setting environment variables for
9525 ;; architectures.
9526 #:tests? #f))
9527 (native-inputs (list python-hatchling))
9528 (home-page "https://github.com/benfogle/crossenv")
9529 (synopsis "Cross-compiling virtualenv for Python")
9530 (description
9531 "This package is a tool for cross-compiling extension modules. It
9532creates a special virtual environment such that @command{pip} or
9533@file{setup.py} will cross compile packages for you, usually with no further
9534work on your part.")
9535 (license license:expat)))
9536
9537(define-public python-linkify-it-py
9538 (package
9539 (name "python-linkify-it-py")
9540 (version "2.0.0")
9541 (source (origin
9542 (method git-fetch) ;for tests
9543 (uri (git-reference
9544 (url "https://github.com/tsutsu3/linkify-it-py")
9545 (commit (string-append "v" version))))
9546 (file-name (git-file-name name version))
9547 (sha256
9548 (base32
9549 "0fg0a1lc8xbb62y9krxcp708ll58dxcwm8i7rrwpkd5sh2229f6x"))))
9550 (build-system pyproject-build-system)
9551 (propagated-inputs (list python-uc-micro-py))
9552 (native-inputs (list python-pytest python-setuptools python-wheel))
9553 (home-page "https://github.com/tsutsu3/linkify-it-py")
9554 (synopsis "Links recognition library with full Unicode support")
9555 (description "This is Python port of
9556@url{https://github.com/markdown-it/linkify-it, linkify-it}, which is a links
9557recognition library with full Unicode support. It has features like:
9558@itemize
9559@item Full unicode support, with @i{astral} characters
9560@item International domains support
9561@item Allows rules extension and custom normalizers.
9562@end itemize")
9563 (license license:expat)))
9564
9565(define-public python-makefun
9566 (package
9567 (name "python-makefun")
9568 ;; Released version fails tests in Python 3.12 due to asyncio
9569 (properties '((commit . "bacb3e1a6edc36e5f8dda3fbdad5dacdda1675eb")
9570 (revision . "0")))
9571 (version (git-version "1.16.0"
9572 (assoc-ref properties 'revision)
9573 (assoc-ref properties 'commit)))
9574 (source
9575 (origin
9576 (method git-fetch)
9577 (uri (git-reference
9578 (url "https://github.com/smarie/python-makefun")
9579 (commit (assoc-ref properties 'commit))))
9580 (file-name (git-file-name name version))
9581 (sha256
9582 (base32
9583 "10xw93r9lxqfgaapnf07pywmy58mw8z7fgcaw7ym66cn71gjxw4d"))))
9584 (build-system pyproject-build-system)
9585 (native-inputs
9586 (list python-pytest
9587 python-pytest-asyncio
9588 python-setuptools
9589 python-setuptools-scm))
9590 (home-page "https://github.com/smarie/python-makefun")
9591 (synopsis "Library to dynamically create python functions")
9592 (description "@code{makefun} helps create functions dynamically with a
9593given signature. It was largely inspired by @code{python-decorator} and
9594@code{functools}.")
9595 (license license:bsd-3)))
9596
9597(define-public python-markdown-it-py
9598 (package
9599 (name "python-markdown-it-py")
9600 (version "4.0.0")
9601 (source
9602 (origin
9603 (method git-fetch)
9604 (uri (git-reference
9605 (url "https://github.com/executablebooks/markdown-it-py")
9606 (commit (string-append "v" version))))
9607 (file-name (git-file-name name version))
9608 (sha256
9609 (base32 "1ayx5pjm1wa1g6v0b9c013xn6g6055b1ng41iqr3rnxdr1q7sqpp"))))
9610 (build-system pyproject-build-system)
9611 (arguments (list #:test-flags #~(list "--benchmark-disable")))
9612 (native-inputs
9613 (list python-flit-core
9614 python-pytest
9615 python-pytest-benchmark
9616 python-pytest-regressions
9617 python-requests))
9618 (propagated-inputs
9619 (list python-commonmark
9620 python-linkify-it-py
9621 python-markdown
9622 python-mdurl
9623 python-mistletoe
9624 python-mistune
9625 python-panflute
9626 python-pyyaml))
9627 (home-page "https://github.com/executablebooks/markdown-it-py")
9628 (synopsis "Python port of markdown-it")
9629 (description
9630 "This is a Python port of @code{markdown-it}, and some of its associated
9631plugins. The driving design philosophy of the port has been to change as
9632little of the fundamental code structure (file names, function name, etc) as
9633possible.")
9634 (license license:expat)))
9635
9636(define-public python-markupsafe
9637 (package
9638 (name "python-markupsafe")
9639 (version "3.0.3")
9640 (source
9641 (origin
9642 (method url-fetch)
9643 (uri (pypi-uri "markupsafe" version))
9644 (sha256
9645 (base32 "160npsg7jh6mbiwy23xm9aqcxgcn0wl33hgx42rmfr2biy09a9kj"))))
9646 (build-system pyproject-build-system)
9647 ;; tests: 79 passed, 1 skipped
9648 (native-inputs
9649 (list python-pytest
9650 python-setuptools))
9651 (home-page "https://markupsafe.palletsprojects.com")
9652 (synopsis "XML/HTML/XHTML markup safe string implementation for Python")
9653 (description
9654 "Markupsafe provides an XML/HTML/XHTML markup safe string implementation
9655for Python.")
9656 (license license:bsd-3)))
9657
9658(define-public python-jinja2
9659 (package
9660 (name "python-jinja2")
9661 (version "3.1.2")
9662 (source
9663 (origin
9664 (method url-fetch)
9665 (uri (pypi-uri "Jinja2" version))
9666 (sha256
9667 (base32 "0lp86yadzf8dph67f6g3yxmvnhrzzi863z58jmsrx2j059q1ld9i"))))
9668 (build-system pyproject-build-system)
9669 (native-inputs (list python-pytest python-setuptools python-wheel))
9670 (propagated-inputs (list python-markupsafe))
9671 (home-page "https://jinja.palletsprojects.com/")
9672 (synopsis "Python template engine")
9673 (description
9674 "Jinja2 is a small but fast and easy to use stand-alone template engine
9675written in pure Python.")
9676 (license license:bsd-3)))
9677
9678(define-public python-jinja2-fragments
9679 (package
9680 (name "python-jinja2-fragments")
9681 (version "1.11.0")
9682 (source
9683 (origin
9684 (method git-fetch)
9685 (uri (git-reference
9686 (url "https://github.com/sponsfreixes/jinja2-fragments")
9687 (commit version)))
9688 (file-name (git-file-name name version))
9689 (sha256
9690 (base32 "14qr0ppllq296c1y2i5ly8l4y97q8msin5khlpli3akgrzsnvmkl"))
9691 (patches
9692 ;; Remove test setup code related to `litestar` and `sanic`
9693 (search-patches "python-jinja2-fragments-modify-conftest-py.patch"))))
9694 (build-system pyproject-build-system)
9695 (arguments
9696 (list
9697 #:test-flags
9698 #~(list "--ignore=tests/test_litestar.py"
9699 "--ignore=tests/test_sanic.py")))
9700 (native-inputs
9701 (list python-fastapi
9702 python-flask
9703 python-pytest
9704 python-pytest-asyncio
9705 python-quart
9706 python-setuptools))
9707 (propagated-inputs
9708 (list python-jinja2))
9709 (home-page "https://github.com/sponsfreixes/jinja2-fragments")
9710 (synopsis "Jinja2 extension for template fragments")
9711 (description
9712 "Render Jinja2 template block as HTML page fragments on Python web
9713frameworks.")
9714 (license license:expat)))
9715
9716(define-public python-pypugjs
9717 (package
9718 (name "python-pypugjs")
9719 (version "5.12.0")
9720 (source
9721 (origin
9722 (method git-fetch)
9723 (uri (git-reference
9724 (url "https://github.com/kakulukia/pypugjs")
9725 (commit (string-append "v" version))))
9726 (file-name (git-file-name name version))
9727 (sha256
9728 (base32 "008wxvh2p08i8mlgak8hz3z057m06m4ydrca2ickl2m593476xi4"))))
9729 (build-system pyproject-build-system)
9730 (native-inputs (list python-django
9731 python-jinja2
9732 python-flask
9733 python-mako
9734 python-poetry-core
9735 python-pytest
9736 python-tornado))
9737 (propagated-inputs (list python-charset-normalizer python-six))
9738 (home-page "https://github.com/kakulukia/pypugjs")
9739 (synopsis "Convert Pug source files into different template languages")
9740 (description
9741 "PyPugJS is a high-performance port of PugJS for Python, that converts
9742any @file{.pug} source into different template languages: Django, Jinja2,
9743Mako, and Tornado.")
9744 (license license:expat))) ;; MIT
9745
9746(define-public python-pysrt
9747 (package
9748 (name "python-pysrt")
9749 (version "1.1.2")
9750 (source
9751 (origin
9752 (method git-fetch)
9753 (uri (git-reference
9754 (url "https://github.com/byroot/pysrt")
9755 (commit (string-append "v" version))))
9756 (file-name (git-file-name name version))
9757 (sha256
9758 (base32 "1f5hxyzlh5mdvvi52qapys9qcinffr6ghgivb6k4jxa92cbs3mfg"))))
9759 (build-system pyproject-build-system)
9760 (arguments
9761 (list
9762 #:test-backend #~'unittest
9763 #:phases
9764 #~(modify-phases %standard-phases
9765 (add-after 'unpack 'fix-python-incompatibilities
9766 (lambda _
9767 (substitute* (find-files "tests" "\\.py$")
9768 (("assertEquals") "assertEqual")))))))
9769 (propagated-inputs (list python-chardet))
9770 (native-inputs (list python-setuptools))
9771 (home-page "https://github.com/byroot/pysrt")
9772 (synopsis "SubRip Text subtitle parser and writer")
9773 (description
9774 "This package provides a Python library to edit or create
9775SubRip Text files, and additionally a command-line program @command{srt}
9776to shift, split or rescale them.")
9777 (license license:gpl3+)))
9778
9779(define-public python-pystache
9780 (package
9781 (name "python-pystache")
9782 (version "0.6.8")
9783 (source (origin
9784 (method url-fetch)
9785 (uri (pypi-uri "pystache" version))
9786 (sha256
9787 (base32
9788 "0b67fmq0wmfkgcr7qqc44vvpvh8zkdk0rh87kccds9jdda7521rp"))))
9789 (build-system pyproject-build-system)
9790 (native-inputs (list python-pytest python-setuptools python-wheel))
9791 (home-page "http://defunkt.io/pystache/")
9792 (synopsis "Python logic-less template engine")
9793 (description
9794 "Pystache is a Python implementation of the framework agnostic,
9795logic-free templating system Mustache.")
9796 (license license:expat)))
9797
9798(define-public python-pystack
9799 (package
9800 (name "python-pystack")
9801 (version "1.5.1")
9802 (source
9803 (origin
9804 (method git-fetch)
9805 (uri (git-reference
9806 (url "https://github.com/bloomberg/pystack")
9807 (commit (string-append "v" version))))
9808 (file-name (git-file-name name version))
9809 (sha256
9810 (base32 "0b9fvk0k09d7h6jv4nix9z8b980pcpi1kxnr9hlfhhgv70n7jz88"))))
9811 (build-system pyproject-build-system)
9812 (arguments
9813 (list
9814 ;; Integration tests need ptrace and gcore (gdb).
9815 #:test-flags #~(list "tests/unit")))
9816 (native-inputs
9817 (list python-cython
9818 python-pkgconfig
9819 python-pytest
9820 python-setuptools))
9821 (inputs
9822 (list elfutils))
9823 (home-page "https://github.com/bloomberg/pystack")
9824 (synopsis "Python stack trace analyzer for core dumps and live processes")
9825 (description
9826 "PyStack analyzes stack frames of running Python processes or Python core
9827dumps. It can inspect what a process is doing or what it was doing when it
9828crashed, without modifying any memory or executing code in the target process.")
9829 (license license:asl2.0)))
9830
9831(define-public python-pystitcher
9832 (package
9833 (name "python-pystitcher")
9834 (properties '((commit . "d8150be85d53335f7077491ab4d73fad772ef1c9")
9835 (revision . "0")
9836 (upstream-version . "1.0.5")))
9837 (version (git-version (assoc-ref properties 'upstream-version)
9838 (assoc-ref properties 'revision)
9839 (assoc-ref properties 'commit)))
9840 (source
9841 (origin
9842 (method git-fetch)
9843 (uri (git-reference
9844 (url "https://github.com/captn3m0/pystitcher")
9845 (commit (assoc-ref properties 'commit))))
9846 (file-name (git-file-name name version))
9847 (sha256
9848 (base32 "02q03smvfz6x8v45s6qcgh1r2plpcam7ra24ikgqlmq005w7nhv3"))))
9849 (build-system pyproject-build-system)
9850 (native-inputs (list python-hatchling python-hatch-vcs python-pytest))
9851 (inputs (list python-html5lib
9852 python-markdown
9853 python-pypdf
9854 python-validators))
9855 (home-page "https://github.com/captn3m0/pystitcher")
9856 (synopsis "Declaratively stitch together a PDF file from multiple sources")
9857 (description
9858 "This package stitches your PDF files together, generating customizable
9859bookmarks using a declarative input in the form of a markdown file.")
9860 (license license:expat)))
9861
9862(define-public python-joblib
9863 (package
9864 (name "python-joblib")
9865 (version "1.5.2")
9866 (source
9867 (origin
9868 (method url-fetch)
9869 (uri (pypi-uri "joblib" version))
9870 (sha256
9871 (base32 "0mbvch9pzadf0vrm666381ic0ryy5zsv5abxak506bsb0lwmraiz"))))
9872 (build-system pyproject-build-system)
9873 (arguments
9874 (list
9875 #:test-flags
9876 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
9877 ;; Disabled to avoid having to depend on ipython/jupyter.
9878 "-k" "not test_parallel_call_cached_function_defined_in_jupyter")))
9879 (native-inputs
9880 (list python-pytest
9881 python-pytest-asyncio
9882 python-pytest-xdist
9883 python-setuptools
9884 python-wheel))
9885 (home-page "https://joblib.readthedocs.io/")
9886 (synopsis "Using Python functions as pipeline jobs")
9887 (description
9888 "Joblib is a set of tools to provide lightweight pipelining in Python.
9889In particular, joblib offers: transparent disk-caching of the output values
9890and lazy re-evaluation (memoize pattern), easy simple parallel computing
9891logging and tracing of the execution.")
9892 (license license:bsd-3)))
9893
9894(define-public python-daemon
9895 (package
9896 (name "python-daemon")
9897 (version "3.1.2")
9898 (source
9899 (origin
9900 (method git-fetch)
9901 (uri (git-reference
9902 (url "https://pagure.io/python-daemon")
9903 (commit (string-append "release/" version))))
9904 (file-name (git-file-name name version))
9905 (sha256
9906 (base32 "0rfchh68pxg68s02idc0qcm2s9yn587hv0b83r4isy5ccb3g60y4"))
9907 (patches
9908 (search-patches "python-daemon-relax-lockfile.patch"))))
9909 (build-system pyproject-build-system)
9910 (arguments
9911 (list
9912 #:phases
9913 #~(modify-phases %standard-phases
9914 (add-after 'unpack 'discard-dynamic-metadata
9915 (lambda _
9916 (substitute* "pyproject.toml"
9917 (("^dynamic = " all)
9918 (format #f "version = ~s~%~a" #$version all))
9919 (("\"(description|readme|version|maintainers)\",")
9920 ""))
9921 (for-each delete-file
9922 '("setup.py"
9923 "test/test_util_metadata.py"
9924 "test/test_setup.py")))))))
9925 (propagated-inputs (list python-filelock))
9926 (native-inputs (list python-testscenarios python-setuptools))
9927 (home-page "https://pagure.io/python-daemon/")
9928 (synopsis "Python library for making a Unix daemon process")
9929 (description
9930 "Python-daemon is a library that assists a Python program to turn itself
9931into a well-behaved Unix daemon process, as specified in PEP 3143.
9932
9933This library provides a @code{DaemonContext} class that manages the following
9934important tasks for becoming a daemon process:
9935@enumerate
9936@item Detach the process into its own process group.
9937@item Set process environment appropriate for running inside a chroot.
9938@item Renounce suid and sgid privileges.
9939@item Close all open file descriptors.
9940@item Change the working directory, uid, gid, and umask.
9941@item Set appropriate signal handlers.
9942@item Open new file descriptors for stdin, stdout, and stderr.
9943@item Manage a specified PID lock file.
9944@item Register cleanup functions for at-exit processing.
9945@end enumerate")
9946 ;; Only setup.py is gpl3+, everything else is apache 2.0 licensed.
9947 (license (list license:asl2.0 license:gpl3+))))
9948
9949(define-public python-annotated-types
9950 (package
9951 (name "python-annotated-types")
9952 (version "0.7.0")
9953 (source
9954 (origin
9955 (method url-fetch)
9956 (uri (pypi-uri "annotated_types" version))
9957 (sha256
9958 (base32 "12ff8j1l0hrmfa8dfa1pyaka5a8sbyq8b76bzj6bq21sll4prw5g"))))
9959 (build-system pyproject-build-system)
9960 (native-inputs
9961 (list python-hatchling
9962 python-pytest))
9963 (propagated-inputs (list python-typing-extensions))
9964 (home-page "https://github.com/annotated-types/annotated-types")
9965 (synopsis "Reusable constraint types to use with typing.Annotated")
9966 (description "This package provides metadata objects which can be used to
9967represent common constraints such as upper and lower bounds on scalar values and
9968collection sizes, a Predicate marker for runtime checks, and descriptions of how
9969we intend these metadata to be interpreted. In some cases, we also note
9970alternative representations which do not require this package.")
9971 (license license:expat)))
9972
9973(define-public python-anytree
9974 (package
9975 (name "python-anytree")
9976 (version "2.13.0")
9977 (source
9978 (origin
9979 (method git-fetch) ; no tests data in PyPi package
9980 (uri (git-reference
9981 (url "https://github.com/c0fec0de/anytree")
9982 (commit version)))
9983 (file-name (git-file-name name version))
9984 (sha256
9985 (base32 "0xp13r0jrz1kdmi9h10bmgqzc7wjil3ghf6gqsi9m0lsqlj5hlwh"))))
9986 (build-system pyproject-build-system)
9987 (arguments
9988 (list
9989 #:phases
9990 #~(modify-phases %standard-phases
9991 (add-before 'check 'pre-check
9992 (lambda _
9993 ;; Tests need to write to that direcroty.
9994 (mkdir-p "tests/dotexport/"))))))
9995 (native-inputs
9996 (list graphviz ;for 'dot'
9997 python-pdm-backend
9998 python-pytest
9999 python-pyyaml
10000 python-test2ref))
10001 (home-page "https://github.com/c0fec0de/anytree")
10002 (synopsis "Lightweight tree data library")
10003 (description
10004 "@code{anytree} is a simple, lightweight, and extensible tree data
10005structure for Python.")
10006 (license license:asl2.0)))
10007
10008(define-public kalamine
10009 (package
10010 (name "kalamine")
10011 (version "0.38")
10012 (source
10013 (origin
10014 (method url-fetch)
10015 (uri (pypi-uri "kalamine" version))
10016 (sha256
10017 (base32 "0dj0v4in6jngh7f5ypvxyadjsilbiwxj3rx6yxxmh5zab6dxzyhz"))))
10018 (build-system pyproject-build-system)
10019 (arguments
10020 (list
10021 #:phases
10022 #~(modify-phases %standard-phases
10023 (add-before 'check 'make-test-layouts
10024 (lambda _
10025 (apply invoke
10026 (cons* "python" "-m" "kalamine.cli" "build"
10027 (find-files "layouts" "\\.toml")))
10028 (invoke "python" "-m" "kalamine.cli" "new" "test.toml"))))))
10029 (propagated-inputs
10030 (list python-click
10031 python-livereload
10032 python-lxml
10033 python-progress
10034 python-pyyaml
10035 python-tomli))
10036 ;; TODO: Add python-pytest-ruff to native-inputs once it has been
10037 ;; packaged.
10038 (native-inputs
10039 (list python-hatchling python-pytest))
10040 (home-page "https://github.com/OneDeadKey/kalamine")
10041 (synopsis "Keyboard layout maker")
10042 (description
10043 "Kalamine provides a CLI to create advanced keyboard layout from a
10044textual portable description. It also supports layout emulation via web
10045browser.")
10046 (license license:expat)))
10047
10048(define-public python-dm-tree
10049 (package
10050 (name "python-dm-tree")
10051 (version "0.1.9")
10052 (source
10053 (origin
10054 (method url-fetch)
10055 (uri (pypi-uri "dm_tree" version))
10056 (sha256
10057 (base32 "0arlspn0122igcz5sq6lqrw6zkdhqqkgr0xkwkas599m74yxpix4"))))
10058 (build-system pyproject-build-system)
10059 (arguments
10060 (list #:tests? #f
10061 #:phases
10062 ;; TODO: Build against shared libraries with USE_SYSTEM_ABSEIL=true
10063 ;; and USE_SYSTEM_PYBIND11=true.
10064 #~(modify-phases %standard-phases
10065 (add-before 'build 'build-shared-lib
10066 (lambda _
10067 (let* ((pybind11 #$(this-package-input "pybind11"))
10068 (python #$(this-package-input "python"))
10069 (version (python-version python))
10070 (abseil-cpp #$(this-package-input "abseil-cpp")))
10071 ;; Delete default cmake build.
10072 (substitute* "setup.py"
10073 (("ext_modules.*") "")
10074 (("cmdclass.*") ""))
10075 ;; Actual build phase.
10076 (mkdir-p "build/temp/tree/")
10077 (invoke
10078 "gcc" "-pthread" "-Wno-unused-result" "-Wsign-compare"
10079 "-DNDEBUG" "-g" "-fwrapv" "-O3" "-Wall"
10080 "-fno-semantic-interposition" "-fPIC"
10081 "-I" (string-append pybind11
10082 "/lib/python" version
10083 "/site-packages/pybind11/include")
10084 "-I" (string-append python "/include/python"
10085 version)
10086 "-I" (string-append abseil-cpp "/include")
10087 "-c" "tree/tree.cc"
10088 "-o" "build/temp/tree/tree.o"
10089 "-fvisibility=hidden" "-g0")
10090 (mkdir-p "build/lib/tree")
10091 (invoke
10092 "g++" "-pthread" "-shared"
10093 (string-append "-Wl," "-rpath=" python "/lib")
10094 "-fno-semantic-interposition"
10095 "build/temp/tree/tree.o"
10096 "-L" (string-append python "/lib")
10097 (string-append abseil-cpp "/lib/libabsl_int128.a")
10098 (string-append abseil-cpp "/lib/libabsl_raw_hash_set.a")
10099 (string-append abseil-cpp "/lib/libabsl_raw_logging_internal.a")
10100 (string-append abseil-cpp "/lib/libabsl_strings.a")
10101 (string-append abseil-cpp "/lib/libabsl_strings_internal.a")
10102 (string-append abseil-cpp "/lib/libabsl_throw_delegate.a")
10103 "-o" "build/lib/tree/_tree.so")))))))
10104 ;; We link the static abseil libraries here to avoid problems in
10105 ;; downstream libraries using potentially different variants of
10106 ;; abseil-cpp. This is also what's done in the upstream CMake build.
10107 (native-inputs
10108 (list python-setuptools))
10109 (inputs
10110 (list pybind11-2
10111 static-abseil-cpp
10112 python))
10113 (propagated-inputs
10114 (list python-absl-py
10115 python-attrs
10116 python-numpy
10117 python-wrapt))
10118 (home-page "https://github.com/deepmind/tree")
10119 (synopsis "Work with nested data structures in Python")
10120 (description "Tree is a python library for working with nested data
10121structures. In a way, @code{tree} generalizes the builtin @code{map} function
10122which only supports flat sequences, and allows you to apply a function to each
10123leaf preserving the overall structure.")
10124 (license license:asl2.0)))
10125
10126(define-public python-pyment
10127 (package
10128 (name "python-pyment")
10129 (version "0.3.4")
10130 (source
10131 (origin
10132 (method git-fetch)
10133 (uri
10134 (git-reference
10135 (url "https://github.com/dadadel/pyment")
10136 (commit (string-append "v" version))))
10137 (file-name (git-file-name name version))
10138 (sha256
10139 (base32 "0gbx9wmqsxdx85v5sg79lv2zxmy16j5dwi8bip07i1nyvzc5gvn0"))))
10140 (build-system pyproject-build-system)
10141 (native-inputs (list python-pytest python-setuptools))
10142 (home-page "https://github.com/dadadel/pyment/")
10143 (synopsis "Convert Python docstrings automatically")
10144 (description "Pyment is a command line tool and library that can be
10145used to convert between several docstring styles.")
10146 (license license:gpl3+)))
10147
10148(define-public python-docstring-parser
10149 (package
10150 (name "python-docstring-parser")
10151 (version "0.15")
10152 (source (origin
10153 (method url-fetch)
10154 (uri (pypi-uri "docstring_parser" version))
10155 (sha256
10156 (base32
10157 "10pnbg2q0ic1h6pwbyhhqd075fv67sq07k3gjncmi1mix29w1pa8"))))
10158 (build-system pyproject-build-system)
10159 (native-inputs (list python-poetry-core python-pytest))
10160 (home-page "https://github.com/rr-/docstring_parser")
10161 (synopsis "Parse Python docstrings in reST, Google and Numpydoc format")
10162 (description "This package lets you parse Python docstrings in reST,
10163Google and Numpydoc format.")
10164 (license license:expat)))
10165
10166(define-public python-docutils
10167 (package
10168 (name "python-docutils")
10169 (version "0.21.2")
10170 (source
10171 (origin
10172 (method url-fetch)
10173 (uri (pypi-uri "docutils" version))
10174 (sha256
10175 (base32 "0vwqzbmzdvwx23myx4cg8s8mdkrqnfxpa9yi7jm2s66z5rrihsrs"))))
10176 (build-system pyproject-build-system)
10177 (arguments
10178 (list
10179 #:test-backend #~'custom
10180 #:test-flags #~(list "test/alltests.py")
10181 #:phases
10182 (if (target-hurd?)
10183 #~(modify-phases %standard-phases
10184 (add-before 'check 'fix-errno
10185 (lambda _
10186 ;; Some tests check for an exact error message
10187 ;; Expecting ENOENT == 2.
10188 (substitute* (find-files "test" "\\.py$")
10189 (("\\[Errno 2\\]") (format #f "[Errno ~a]" ENOENT))))))
10190 #~%standard-phases)))
10191 (native-inputs
10192 (list python-flit-core))
10193 (home-page "https://docutils.sourceforge.net/")
10194 (synopsis "Python Documentation Utilities")
10195 (description
10196 "Docutils is a modular system for processing documentation into useful
10197formats, such as HTML, XML, and LaTeX. It uses @dfn{reStructuredText}, an
10198easy to use markup language, for input.
10199
10200This package provides tools for converting @file{.rst} files to other formats
10201via commands such as @command{rst2man}, as well as supporting Python code.")
10202 ;; Most of the source code is public domain, but some source files are
10203 ;; licensed under the PFSL, BSD 2-clause, and GPLv3+ licenses.
10204 (license (list license:public-domain license:psfl license:bsd-2 license:gpl3+))))
10205
10206(define-public python-docutils-0.19
10207 (hidden-package
10208 (package
10209 (inherit python-docutils)
10210 (version "0.19")
10211 (source (origin
10212 (method url-fetch)
10213 (uri (pypi-uri "docutils" version))
10214 (sha256
10215 (base32
10216 "1rprvir116g5rz2bgzkzgyn6mv0z8582rz7bgxbpy2y3adkmm69k"))))
10217 (native-inputs
10218 (list python-setuptools python-wheel)))))
10219
10220(define-public python-docx
10221 (package
10222 (name "python-docx")
10223 (version "1.2.0")
10224 (source (origin
10225 (method url-fetch)
10226 (uri (pypi-uri "python_docx" version))
10227 (sha256
10228 (base32
10229 "1ki0cbw3hbiz51ww3fi3vi770lk5r0c62889r819r756v2vxgjbv"))))
10230 (build-system pyproject-build-system)
10231 (native-inputs
10232 (list behave
10233 python-pyparsing
10234 python-pytest
10235 python-setuptools
10236 python-wheel))
10237 (propagated-inputs
10238 (list python-lxml python-typing-extensions))
10239 (home-page "https://github.com/python-openxml/python-docx/")
10240 (synopsis "Python library to create and modify Microsoft Word documents")
10241 (description "This Python library can be used to create and update
10242Microsoft Word (.docx) documents.")
10243 (license license:expat)))
10244
10245(define-public python-repoze-lru
10246 (package
10247 (name "python-repoze-lru")
10248 (version "0.7")
10249 (source
10250 (origin
10251 (method url-fetch)
10252 (uri (pypi-uri "repoze.lru" version))
10253 (sha256
10254 (base32 "0xzz1aw2smy8hdszrq8yhnklx6w1r1mf55061kalw3iq35gafa84"))))
10255 (build-system pyproject-build-system)
10256 (arguments
10257 (list
10258 #:test-backend #~'unittest
10259 #:test-flags #~(list "discover" "repoze")))
10260 (native-inputs
10261 (list python-setuptools))
10262 (home-page "https://www.repoze.org")
10263 (synopsis "Tiny LRU cache implementation and decorator")
10264 (description
10265 "This package provides a tiny LRU cache implementation and decorator.")
10266 (license license:bsd-4)))
10267
10268(define-public python-reretry
10269 (package
10270 (name "python-reretry")
10271 (version "0.11.8")
10272 (source
10273 (origin
10274 (method git-fetch)
10275 (uri (git-reference
10276 (url "https://github.com/leshchenko1979/reretry")
10277 (commit version)))
10278 (file-name (git-file-name name version))
10279 (sha256
10280 (base32 "15c6275mcrkrq3zs0gyx06gr3xsg9ldrpyknfy4mbypgwjy6fp38"))))
10281 (build-system pyproject-build-system)
10282 (native-inputs
10283 (list python-pytest python-pytest-asyncio python-setuptools))
10284 (home-page "https://github.com/leshchenko1979/reretry")
10285 (synopsis "Functional decorator for retrying on exceptions")
10286 (description
10287 "This package is a fork from the retry package, but with some of added
10288community-sourced features. It provides an easy to use, but functional
10289decorator for retrying on exceptions.")
10290 (license license:asl2.0)))
10291
10292(define-public python-restructuredtext-lint
10293 (package
10294 (name "python-restructuredtext-lint")
10295 (version "1.4.0")
10296 (source
10297 (origin
10298 (method git-fetch)
10299 (uri (git-reference
10300 (url "https://github.com/twolfson/restructuredtext-lint")
10301 (commit version)))
10302 (file-name (git-file-name name version))
10303 (sha256
10304 (base32 "19ncbmnq2rnkqxhc9wf0q9whji34iyfv1pz6z61vnv4qhhdrn33v"))))
10305 (build-system pyproject-build-system)
10306 (arguments (list #:test-backend #~'unittest))
10307 (propagated-inputs (list python-docutils))
10308 (native-inputs (list python-setuptools))
10309 (home-page "https://github.com/twolfson/restructuredtext-lint")
10310 (synopsis "Linter")
10311 (description
10312 "This package provides a linter for the reStructuredText format.")
10313 (license license:unlicense)))
10314
10315(define-public python-click-repl
10316 (package
10317 (name "python-click-repl")
10318 ;; To support Python 3.12, see:
10319 ;; <https://github.com/click-contrib/click-repl/issues/128>.
10320 (properties '((commit . "b84191aec21b407b3cb3374ff1ab000887d38f29")
10321 (revision . "1")))
10322 (version (git-version "0.3.0"
10323 (assoc-ref properties 'revision)
10324 (assoc-ref properties 'commit)))
10325 (source
10326 (origin
10327 (method git-fetch)
10328 (uri (git-reference
10329 (url "https://github.com/click-contrib/click-repl")
10330 (commit (assoc-ref properties 'commit))))
10331 (file-name (git-file-name name version))
10332 (sha256
10333 (base32 "0kg1qbg69gym4vf8cqhzixqww1f80fpndv5dvi289c3swnhzlyz5"))))
10334 (build-system pyproject-build-system)
10335 (native-inputs
10336 (list python-pytest
10337 python-setuptools))
10338 (propagated-inputs
10339 (list python-click
10340 python-prompt-toolkit))
10341 (home-page "https://github.com/click-contrib/click-repl")
10342 (synopsis "REPL plugin for Click")
10343 (description "This package provides a REPL plugin for Click.")
10344 (license license:expat)))
10345
10346(define-public python-pygdbmi
10347 (package
10348 (name "python-pygdbmi")
10349 (version "0.11.0.0")
10350 (source
10351 (origin
10352 (method url-fetch)
10353 (uri (pypi-uri "pygdbmi" version))
10354 (sha256
10355 (base32 "1c0z4snkjiyl1iq4m1k6liwg0b4pdv2as4bfyvcm0mpjzki6na3s"))))
10356 (build-system pyproject-build-system)
10357 (arguments (list #:tests? #f)) ;no tests in PyPI archive
10358 (native-inputs (list python-setuptools python-wheel))
10359 (home-page "https://github.com/cs01/pygdbmi")
10360 (synopsis "Parse gdb machine interface output with Python")
10361 (description "This package provides a parse gdb machine interface output
10362with Python.")
10363 (license license:expat)))
10364
10365(define-public python-pygtrie
10366 (package
10367 (name "python-pygtrie")
10368 (version "2.5.0")
10369 (source
10370 (origin
10371 (method git-fetch)
10372 (uri (git-reference
10373 (url "https://github.com/mina86/pygtrie")
10374 (commit (string-append "v" version))))
10375 (file-name (git-file-name name version))
10376 (sha256
10377 (base32 "00m4h2faslm242hsp98d21n6jmc8h616m69p2n6ga2rz37jqmh45"))))
10378 (build-system pyproject-build-system)
10379 (arguments
10380 (list
10381 #:test-backend #~'unittest
10382 #:phases
10383 #~(modify-phases %standard-phases
10384 (add-after 'unpack 'set-version
10385 (lambda _
10386 (delete-file "version.py")
10387 (substitute* "setup.py"
10388 (("import version")
10389 "")
10390 (("version\\.get_version\\(\\)")
10391 (format #f "~s" #$version))))))))
10392 (native-inputs (list python-setuptools))
10393 (home-page "https://github.com/mina86/pygtrie")
10394 (synopsis "Pure Python trie data structure implementation")
10395 (description
10396 "This package provides a pure Python trie data structure implementation.")
10397 (license license:asl2.0)))
10398
10399(define-public python-bump2version
10400 (package
10401 (name "python-bump2version")
10402 (properties '((commit . "1044c085ba7d32d73c9cd7ca4561a7ec624c6b19")
10403 (revision . "1")))
10404 (version (git-version "1.0.1"
10405 (assoc-ref properties 'revision)
10406 (assoc-ref properties 'commit)))
10407 (source
10408 (origin
10409 (method git-fetch)
10410 (uri (git-reference
10411 (url "https://github.com/c4urself/bump2version")
10412 (commit (assoc-ref properties 'commit))))
10413 (file-name (git-file-name name version))
10414 (sha256
10415 (base32 "1m5c5rdz9723irwdl46mg7si5syddlzna0ldkz2ps6dphkmqsv7j"))))
10416 (build-system pyproject-build-system)
10417 (arguments
10418 ;; XXX: Single flaky failing test.
10419 (list #:test-flags #~(list "-k" "not test_usage_string")))
10420 (native-inputs (list python-pytest python-setuptools python-testfixtures))
10421 (home-page "https://github.com/c4urself/bump2version")
10422 (synopsis "Version-bump your software with a single command!")
10423 (description
10424 "This package provides a small command line tool to simplify releasing
10425software by updating all version strings in your source code by the correct
10426increment. It also creates commits and tags.")
10427 (license license:expat)))
10428
10429(define-public python-deprecated
10430 (package
10431 (name "python-deprecated")
10432 (version "1.3.1")
10433 (source
10434 (origin
10435 (method git-fetch)
10436 (uri (git-reference
10437 (url "https://github.com/tantale/deprecated")
10438 (commit (string-append "v" version))))
10439 (file-name (git-file-name name version))
10440 (sha256
10441 (base32 "07rppvppxwnlf4pgaci5nd1sqfv1i0jxabm76axsbcaf2rlpsq6n"))))
10442 (build-system pyproject-build-system)
10443 (native-inputs
10444 (list python-pytest
10445 python-setuptools))
10446 (propagated-inputs
10447 (list python-wrapt))
10448 (home-page "https://github.com/tantale/deprecated")
10449 (synopsis "Python decorator to deprecate classes, functions or methods")
10450 (description
10451 "The @code{deprecated} decorator provides a convenient way to deprecate
10452to deprecate classes, functions or methods.")
10453 (license license:expat)))
10454
10455(define-public python-pygithub
10456 (package
10457 (name "python-pygithub")
10458 (version "2.8.1")
10459 (source
10460 (origin
10461 (method git-fetch)
10462 (uri (git-reference
10463 (url "https://github.com/PyGithub/PyGithub")
10464 (commit (string-append "v" version))))
10465 (file-name (git-file-name name version))
10466 (sha256
10467 (base32 "0c5qp69qfkfcp8lfmfh0a2rcb1azsrlrc525qd8blnkrmz2mmayz"))))
10468 (build-system pyproject-build-system)
10469 (propagated-inputs
10470 (list python-pyjwt
10471 python-pynacl
10472 python-requests
10473 python-typing-extensions
10474 python-urllib3))
10475 (native-inputs
10476 (list python-responses
10477 python-pytest
10478 python-setuptools
10479 python-setuptools-scm))
10480 (home-page "https://pygithub.readthedocs.io/en/latest/")
10481 (synopsis "Python library for the GitHub API")
10482 (description "This library allows managing GitHub resources such as
10483repositories, user profiles, and organizations in your Python applications,
10484using version 3 of the GitHub application programming interface (API).")
10485 (license license:lgpl3+)))
10486
10487(define-public python-rellu
10488 (package
10489 (name "python-rellu")
10490 (version "0.7")
10491 (source
10492 (origin
10493 (method git-fetch)
10494 (uri (git-reference
10495 (url "https://github.com/robotframework/rellu")
10496 (commit (string-append "v" version))))
10497 (file-name (git-file-name name version))
10498 (sha256
10499 (base32 "1vbzkn4yfmc3dypgkw47fyd6n26ib7na1azrgjrvwc0vdf0qjyrw"))))
10500 (build-system pyproject-build-system)
10501 (native-inputs (list python-pytest python-setuptools))
10502 (propagated-inputs (list python-invoke python-pygithub))
10503 (home-page "https://github.com/robotframework/rellu")
10504 (synopsis "Utilities to create PyPI releases")
10505 (description
10506 "This collection of utilities contains tooling and templates to assist in
10507creating releases on GitHub and publishing them on PyPI. It is designed to be
10508used by Robot Framework and tools and libraries in its ecosystem, but can
10509naturally be used also by other projects.")
10510 (license license:asl2.0)))
10511
10512(define-public python-robotframework
10513 (package
10514 (name "python-robotframework")
10515 (version "7.3.2")
10516 (source
10517 (origin
10518 (method git-fetch) ; no tests in the PyPI archive
10519 (uri (git-reference
10520 (url "https://github.com/robotframework/robotframework")
10521 (commit (string-append "v" version))))
10522 (file-name (git-file-name name version))
10523 (sha256
10524 (base32 "0azis3dj7lfiwrr5gr1gr78z5m05vvl8n20rw3bz93s05z94h5i7"))))
10525 (outputs '("out" "doc"))
10526 (build-system pyproject-build-system)
10527 (arguments
10528 (list
10529 #:modules '((guix build pyproject-build-system)
10530 (guix build utils)
10531 (ice-9 ftw)
10532 (ice-9 match)
10533 (srfi srfi-26))
10534 #:phases
10535 #~(modify-phases %standard-phases
10536 (add-before 'build 'build-and-install-doc
10537 (lambda* (#:key outputs #:allow-other-keys)
10538 (let ((doc (string-append #$output:doc
10539 "/share/doc/robotframework")))
10540 (invoke "invoke" "library-docs" "all")
10541 (invoke "doc/userguide/ug2html.py" "dist") ;user guide
10542 (mkdir-p doc)
10543 (with-directory-excursion "dist"
10544 (define user-guide-dir
10545 (match (scandir "." (cut string-prefix?
10546 "robotframework-userguide-" <>))
10547 ((dir) dir)
10548 (_ (error "could not find the user guide directory"))))
10549 (copy-recursively user-guide-dir doc)))))
10550 (replace 'check
10551 (lambda* (#:key tests? #:allow-other-keys)
10552 (when tests?
10553 ;; TODO: Some acceptance failed and took near 30min to
10554 ;; complete: 6765 tests, 6745 passed, 20 failed; find out how
10555 ;; to skip failing ones.
10556 (format #t "Running unit tests...~%")
10557 (invoke "utest/run.py")))))))
10558 (native-inputs
10559 (list python-docutils
10560 python-invoke
10561 python-jsonschema
10562 python-pygments
10563 python-rellu
10564 python-typing-extensions
10565 python-setuptools
10566 `(,python "tk") ;used when building the HTML doc
10567 python-wheel))
10568 (home-page "https://robotframework.org")
10569 (synopsis "Generic automation framework")
10570 (description "Robot Framework is a generic automation framework for
10571acceptance testing, acceptance test driven development (ATDD), and robotic
10572process automation (RPA).")
10573 (license license:asl2.0)))
10574
10575(define-public python-robotframework-datadriver
10576 (package
10577 (name "python-robotframework-datadriver")
10578 (version "1.11.2")
10579 (source
10580 (origin
10581 (method git-fetch) ; no tests in PyPI release
10582 (uri (git-reference
10583 (url "https://github.com/Snooz82/robotframework-datadriver")
10584 (commit version)))
10585 (file-name (git-file-name name version))
10586 (sha256
10587 (base32 "0fq6ykbnypirw1wrgigsfzg8lv8g7j9gs46v0n814ycw8906n43x"))))
10588 (build-system pyproject-build-system)
10589 (arguments
10590 (list
10591 #:phases
10592 #~(modify-phases %standard-phases
10593 (add-before 'check 'skip-problematic-tests
10594 (lambda _
10595 (for-each delete-file-recursively
10596 (list
10597 ;; The test file 'tab-csv-file-name.tsv' contains
10598 ;; special characters for which there is no locale
10599 ;; in the build environment, causing one test to
10600 ;; fail.
10601 "atest/TestCases/csv_reader_config"
10602 ;; Error in file on line 6: Non-existing setting
10603 ;; 'Test Tags'.
10604 "atest/TestCases/DataTypes/Types_in_dicts.robot"))))
10605 (replace 'check
10606 (lambda* (#:key tests? #:allow-other-keys)
10607 (when tests?
10608 (with-directory-excursion "atest"
10609 (invoke "sh" "run_atest.sh"))))))))
10610 (native-inputs
10611 (list python-docutils
10612 python-robotframework-stacktrace
10613 python-setuptools
10614 python-xlrd))
10615 (propagated-inputs
10616 (list python-openpyxl
10617 python-pandas
10618 python-pygments
10619 python-robotframework))
10620 (home-page "https://github.com/Snooz82/robotframework-datadriver")
10621 (synopsis "Data-driven test extension for Robot Framework")
10622 (description "DataDriver is a data-driven extension for Robot Framework.
10623DataDriver uses the Listener Interface of Robot Framework to create new test
10624cases based on a data file that contains the test data. DataDriver supports
10625data files in the CSV, XLS or XLSX formats.")
10626 (license license:asl2.0)))
10627
10628(define-public python-robotframework-pabot
10629 (package
10630 (name "python-robotframework-pabot")
10631 (version "4.2.0")
10632 (source
10633 (origin
10634 ;; There are no tests in the PyPI archive.
10635 (method git-fetch)
10636 (uri (git-reference
10637 (url "https://github.com/mkorpela/pabot")
10638 (commit version)))
10639 (file-name (git-file-name name version))
10640 (sha256
10641 (base32
10642 "1q4vxrmkximyxk735d7payypx4w3qqdlldmg34frlnbkxrf40pxc"))))
10643 (build-system pyproject-build-system)
10644 (arguments
10645 (list
10646 #:test-flags
10647 #~(list "-k" (string-join
10648 ;; XXX: Maybe it's a bad idea to skip these tests which
10649 ;; failing assertions highlight incomparability issues.
10650 ;;
10651 ;; 93 passed, 23 deselected, 11 warnings
10652 (list "not test_argumentfile_outputs"
10653 "test_dependency_ok"
10654 "test_longnames_in_tests"
10655 "test_multiple_dependencies_ok"
10656 "test_orders"
10657 "test_pabotprerunmodifier"
10658 "test_pabotprerunmodifier_with_prerunmodifier"
10659 "test_pabotprerunmodifier_with_testlevelsplit"
10660 "test_pabotprerunmodifier_with_testlevelsplit_and_"
10661 "test_parallel_execution"
10662 "test_parallel_execution_with_testlevelsplit"
10663 "test_pre_run_with_new_name"
10664 "test_pre_run_with_new_tag"
10665 "test_run_dir_2_then_dir_3"
10666 "test_run_dir_3_then_dir_2"
10667 "test_run_root_then_suite_4_then_dir_1_then_dir_4"
10668 "test_sleep_test_cases_and_group"
10669 "test_stdout_should_display_passed_test"
10670 "test_stdout_should_display_passed_test"
10671 "test_stdout_should_display_passed_test_and_not_"
10672 "test_testlevelsplit_output_task_order"
10673 "test_too_big_testname"
10674 "test_two_orders")
10675 " and not "))
10676 #:phases
10677 #~(modify-phases %standard-phases
10678 (add-after 'unpack 'relax-requirements
10679 (lambda _
10680 (substitute* "setup.cfg"
10681 ;; natsort>=8.2.0
10682 ((">=8.2.0") "")))))))
10683 (native-inputs
10684 (list python-pytest
10685 python-setuptools
10686 python-wheel))
10687 (propagated-inputs
10688 (list python-natsort
10689 python-robotframework
10690 python-robotframework-stacktrace))
10691 (home-page "https://pabot.org")
10692 (synopsis "Parallel test runner for Robot Framework")
10693 (description "Pabot is a parallel executor for Robot Framework tests.")
10694 (license license:asl2.0)))
10695
10696(define-public python-robotframework-stacktrace
10697 (package
10698 (name "python-robotframework-stacktrace")
10699 (version "0.4.1")
10700 (source
10701 (origin
10702 (method git-fetch)
10703 (uri (git-reference
10704 (url "https://github.com/MarketSquare/robotframework-stacktrace")
10705 (commit version)))
10706 (file-name (git-file-name name version))
10707 (sha256
10708 (base32 "1nkzcgc1xwbx8d5qq47aj23qa7dn1ml033bjwrgqh55x3miphlcq"))))
10709 (build-system pyproject-build-system)
10710 (arguments
10711 ;; XXX: The test suite fails (see:
10712 ;; https://github.com/MarketSquare/robotframework-stacktrace/issues/4).
10713 (list
10714 #:tests? #f
10715 #:phases
10716 #~(modify-phases %standard-phases
10717 (add-after 'unpack 'set-version
10718 (lambda _
10719 (substitute* "setup.py"
10720 (("VERSION =.*")
10721 (string-append "VERSION = '" #$version "'"))))))))
10722 (native-inputs (list python-setuptools))
10723 (propagated-inputs (list python-robotframework))
10724 (home-page "https://github.com/MarketSquare/robotframework-stacktrace")
10725 (synopsis "Robot Framework listener to print a stack trace on error")
10726 (description "StackTrace is a Robot Framework listener that prints a stack
10727trace directly to the terminal to ease debugging.")
10728 (license license:asl2.0)))
10729
10730(define-public python-robotframework-sshlibrary
10731 (package
10732 (name "python-robotframework-sshlibrary")
10733 (version "3.8.0")
10734 ;; There are no tests in the PyPI archive.
10735 (source
10736 (origin
10737 (method git-fetch)
10738 (uri (git-reference
10739 (url "https://github.com/robotframework/SSHLibrary")
10740 (commit (string-append "v" version))))
10741 (file-name (git-file-name name version))
10742 (sha256
10743 (base32 "1fn72hw7xacjjpl4dd6wynh2x63i9rk8iqhj3v640db21qpcnbkw"))
10744 (patches (search-patches
10745 "python-robotframework-sshlibrary-rf5-compat.patch"))))
10746 (build-system pyproject-build-system)
10747 (arguments
10748 (list
10749 #:phases
10750 #~(modify-phases %standard-phases
10751 (add-after 'unpack 'fix-python-incompatibilities
10752 (lambda _
10753 (substitute* (find-files "utest" "\\.py$")
10754 (("assertEquals") "assertEqual"))))
10755 (add-before 'build 'build-and-install-doc
10756 (lambda _
10757 (let ((doc (string-append #$output:doc
10758 "/share/doc/robotframework-sshlibrary")))
10759 (invoke "chmod" "-R" "+w" "docs")
10760 (invoke "invoke" "kw-docs" "project-docs")
10761 (mkdir-p doc)
10762 (for-each delete-file
10763 (find-files "docs" "\\.rst"))
10764 (copy-recursively "docs" doc))))
10765 (replace 'check
10766 (lambda* (#:key tests? #:allow-other-keys)
10767 (when tests?
10768 ;; Some tests require an SSH server; we remove them.
10769 (delete-file "utest/test_client_api.py")
10770 (delete-file "utest/test_scp.py")
10771 (invoke "python" "utest/run.py")))))))
10772 (propagated-inputs
10773 (list python-robotframework python-paramiko python-scp))
10774 (native-inputs
10775 (list openssh
10776 which
10777 ;; To generate the documentation
10778 python-docutils
10779 python-invoke
10780 python-pygments
10781 python-rellu
10782 python-setuptools))
10783 (outputs '("out" "doc"))
10784 (home-page "https://github.com/robotframework/SSHLibrary")
10785 (synopsis "Robot Framework library for SSH and SFTP")
10786 (description
10787 "SSHLibrary is a Robot Framework library providing support for SSH and
10788SFTP. It has the following main usages:
10789@itemize @bullet
10790@item Executing commands on the remote machine, either blocking or non-blocking.
10791@item Writing and reading in an interactive shell.
10792@item Transferring files and directories over SFTP.
10793@item Ensuring that files and directories exist on the remote machine.
10794@end itemize")
10795 (license license:asl2.0)))
10796
10797(define-public python-robotframework-pythonlibcore
10798 (package
10799 (name "python-robotframework-pythonlibcore")
10800 (version "4.4.1")
10801 (source
10802 (origin
10803 (method git-fetch) ;no tests in pypi archive
10804 (uri (git-reference
10805 (url "https://github.com/robotframework/PythonLibCore")
10806 (commit (string-append "v" version))))
10807 (file-name (git-file-name name version))
10808 (sha256
10809 (base32 "0hjayjq5wrgajs56nf85y5wqh76jbjfbsz40bam315l3kzmj45g5"))))
10810 (build-system pyproject-build-system)
10811 (arguments
10812 (list
10813 #:test-backend #~'custom
10814 #:test-flags #~(list "utest/run.py")))
10815 (native-inputs
10816 (list python-approvaltests
10817 python-pytest
10818 python-pytest-cov ; This package has a custom way to run tests.
10819 python-pytest-mockito
10820 python-robotframework
10821 python-setuptools))
10822 (home-page "https://github.com/robotframework/PythonLibCore")
10823 (synopsis "Robot Framework Python library tools")
10824 (description
10825 "PythonLibCore provides tools for creating larger test libraries for
10826Robot Framework using Python. The Robot Framework hybrid and dynamic library
10827APIs give more flexibility for library than the static library API, but they
10828also set requirements for libraries which need to be implemented in the
10829library side. PythonLibCore eases the problem by providing a simpler
10830interface and by handling all the requirements towards the Robot Framework
10831library APIs.")
10832 (license license:asl2.0)))
10833
10834(define-public python-robotframework-seleniumlibrary
10835 (package
10836 (name "python-robotframework-seleniumlibrary")
10837 (version "6.8.0")
10838 (source
10839 (origin
10840 (method git-fetch)
10841 (uri (git-reference
10842 (url "https://github.com/robotframework/SeleniumLibrary")
10843 (commit (string-append "v" version))))
10844 (file-name (git-file-name name version))
10845 (sha256
10846 (base32 "093kcmwvh72n22sj1psx4dyjj87xrzz2622ygpkavrhmd9r2a9jg"))))
10847 (build-system pyproject-build-system)
10848 (arguments
10849 (list
10850 #:test-flags
10851 #~(list "--ignore=utest/test/keywords/test_firefox_profile_parsing.py"
10852 "-k" (string-join
10853 (list "not test_create_firefox_with_options"
10854 "test_create_headless_firefox_with_options"
10855 "test_create_driver_firefox")
10856 " and not "))))
10857 (native-inputs
10858 (list python-approvaltests
10859 python-pytest
10860 python-pytest-mockito
10861 python-setuptools))
10862 (propagated-inputs
10863 (list python-click
10864 python-robotframework
10865 python-robotframework-pythonlibcore
10866 python-selenium))
10867 (home-page "https://github.com/robotframework/SeleniumLibrary")
10868 (synopsis "Web testing library for Robot Framework")
10869 (description "SeleniumLibrary is a web testing library for Robot Framework
10870that utilizes the Selenium tool internally.")
10871 (license license:asl2.0)))
10872
10873(define-public python-robotframework-seleniumscreenshots
10874 (package
10875 (name "python-robotframework-seleniumscreenshots")
10876 (version "0.9.5")
10877 (source
10878 (origin
10879 (method git-fetch)
10880 (uri (git-reference
10881 (url
10882 "https://github.com/MarketSquare/robotframework-seleniumscreenshots")
10883 (commit version)))
10884 (file-name (git-file-name name version))
10885 (sha256
10886 (base32 "1gal4ifibk2bj1qgppcs6vmjgjvz47nq4d4gqvyd70vpyf9iw342"))))
10887 (build-system pyproject-build-system)
10888 (arguments
10889 ;; XXX: The tests require a relatively complicated setup configured in
10890 ;; their CI with Nix (!).
10891 `(#:tests? #f))
10892 (native-inputs (list python-setuptools))
10893 (propagated-inputs
10894 (list python-robotframework python-robotframework-seleniumlibrary))
10895 (home-page
10896 "https://github.com/MarketSquare/robotframework-seleniumscreenshots")
10897 (synopsis
10898 "Robot Framework library for annotating and cropping screenshots")
10899 (description
10900 "The SeleniumScreenshots library for Robot Framework provides keywords
10901for annotating and cropping screenshots taken with SeleniumLibrary. It is
10902useful for scripting automatically updated screenshots for documentation or
10903for visual regression testing purposes.")
10904 (license license:bsd-3)))
10905
10906(define-public python-rstr
10907 (package
10908 (name "python-rstr")
10909 (version "3.2.2")
10910 (source
10911 (origin
10912 (method git-fetch)
10913 (uri (git-reference
10914 (url "https://github.com/leapfrogonline/rstr")
10915 (commit version)))
10916 (file-name (git-file-name name version))
10917 (sha256
10918 (base32 "1z9d660jnv72jn8qzpa9hddpv5f953js8i75hfhkcw68vmdfndnr"))))
10919 (build-system pyproject-build-system)
10920 (native-inputs (list python-pytest
10921 python-setuptools
10922 python-setuptools-scm
10923 python-wheel))
10924 (home-page "https://github.com/leapfrogonline/rstr")
10925 (synopsis "Generate random strings in Python")
10926 (description "This package provides a python module for generating
10927random strings of various types. It could be useful for fuzz testing,
10928generating dummy data, or other applications. It has no dependencies
10929outside the standard library.")
10930 (license license:bsd-3)))
10931
10932(define-public python-scp
10933 (package
10934 (name "python-scp")
10935 (version "0.15.0")
10936 (source
10937 (origin
10938 (method git-fetch)
10939 (uri (git-reference
10940 (url "https://github.com/jbardin/scp.py")
10941 (commit (string-append "v" version))))
10942 (file-name (git-file-name name version))
10943 (sha256
10944 (base32 "03mdkiwfxvi1xfsw9qjdjf0jgljs991jn29lia9fka68x1ngwnw9"))))
10945 (build-system pyproject-build-system)
10946 (arguments (list #:tests? #f)) ;tests require an SSH server
10947 (native-inputs (list python-setuptools))
10948 (propagated-inputs (list python-paramiko))
10949 (home-page "https://github.com/jbardin/scp.py")
10950 (synopsis "SCP protocol module for Python and Paramiko")
10951 (description
10952 "The scp module extends the Paramiko library to send and receive files
10953via the SCP1 protocol, as implemented by the OpenSSH @command{scp} program.")
10954 (license license:gpl2+)))
10955
10956(define-public python-rst-linker
10957 (package
10958 (name "python-rst-linker")
10959 (version "2.6.0")
10960 (source
10961 (origin
10962 (method git-fetch)
10963 (uri (git-reference
10964 (url "https://github.com/jaraco/rst.linker")
10965 (commit (string-append "v" version))))
10966 (file-name (git-file-name name version))
10967 (sha256
10968 (base32 "1pcnhib881p0vgm0s8jj6inzzs98raz70sc2z6m6wlgrj9ivv5jj"))))
10969 (build-system pyproject-build-system)
10970 (propagated-inputs (list python-jaraco-context))
10971 (native-inputs
10972 (list python-path
10973 python-jaraco-vcs
10974 python-pytest
10975 python-pytest-subprocess
10976 python-setuptools-scm
10977 python-setuptools))
10978 (home-page "https://github.com/jaraco/rst.linker")
10979 (synopsis "Sphinx plugin to add links and timestamps")
10980 (description
10981 "rst.linker automatically replaces text by a reStructuredText external
10982reference or timestamps. It's primary purpose is to augment the changelog,
10983but it can be used for other documents, too.")
10984 (license license:expat)))
10985
10986(define-public python-feedgenerator
10987 (package
10988 (name "python-feedgenerator")
10989 (version "2.1.0")
10990 (source
10991 (origin
10992 (method url-fetch)
10993 (uri (pypi-uri "feedgenerator" version))
10994 (sha256
10995 (base32
10996 "179bshnb0ssx7pspzbyaqvhi5w3c3hb15cingh4py8px50zz4xgh"))))
10997 (build-system pyproject-build-system)
10998 (native-inputs
10999 (list python-pytest python-setuptools python-wheel))
11000 (propagated-inputs
11001 (list python-pytz))
11002 (home-page "https://github.com/getpelican/feedgenerator")
11003 (synopsis
11004 "Standalone version of Django's Atom/RSS feed generator")
11005 (description
11006 "Feedgenerator-py3k is a standalone version of Django's feedgenerator,
11007which can produce feeds in RSS 2.0, RSS 0.91, and Atom formats.")
11008 (license license:bsd-3)))
11009
11010(define-public python-lsp-jsonrpc
11011 (package
11012 (name "python-lsp-jsonrpc")
11013 (version "1.1.2")
11014 (source
11015 (origin
11016 (method url-fetch)
11017 (uri (pypi-uri "python-lsp-jsonrpc" version))
11018 (sha256
11019 (base32
11020 "04n95h0cqnsrdyh1gv0abh2i5ynyrq2wfqpppx9djp7mxr9y9226"))))
11021 (build-system pyproject-build-system)
11022 (native-inputs
11023 (list python-pyflakes
11024 python-pytest
11025 python-setuptools
11026 python-setuptools-scm
11027 python-wheel))
11028 (propagated-inputs
11029 (list python-ujson))
11030 (home-page "https://github.com/python-lsp/python-lsp-jsonrpc")
11031 (synopsis "JSON RPC 2.0 server library")
11032 (description
11033 "This package provides a JSON RPC 2.0 server library for Python.")
11034 (license license:expat)))
11035
11036(define-public python-pydantic
11037 (package
11038 (name "python-pydantic")
11039 (version "2.12.5")
11040 (source
11041 (origin
11042 (method git-fetch)
11043 (uri (git-reference
11044 (url "https://github.com/samuelcolvin/pydantic")
11045 (commit (string-append "v" version))))
11046 (file-name (git-file-name name version))
11047 (sha256
11048 (base32 "0h1dwnd16smyknv7fzskv8akp96pw18mrd3l8a3nbhs1afslnd7m"))))
11049 (build-system pyproject-build-system)
11050 (arguments
11051 (list
11052 ;; tests: 5428 passed, 1091 skipped, 24 xfailed
11053 #:test-flags
11054 #~(list "--parallel-threads" (number->string (parallel-job-count)))))
11055 (native-inputs
11056 (list tzdata-for-tests
11057 python-dirty-equals-bootstrap
11058 python-faker
11059 python-hatch-fancy-pypi-readme
11060 python-hatchling
11061 python-jsonschema
11062 python-pytest
11063 python-pytest-benchmark
11064 python-pytest-examples
11065 python-pytest-mock
11066 python-pytest-run-parallel
11067 python-pytz))
11068 (propagated-inputs
11069 (list python-annotated-types
11070 python-pydantic-core ;it's hard == requirement, keep it in sync
11071 python-typing-extensions
11072 python-typing-inspection))
11073 (home-page "https://github.com/samuelcolvin/pydantic")
11074 (synopsis "Python data validation and settings management")
11075 (description
11076 "Pydantic enforces type hints at runtime, and provides user friendly
11077errors when data is invalid.")
11078 (license license:expat)))
11079
11080;; It may be removed after 2026-01-05.
11081(define-deprecated/public-alias python-pydantic-2 python-pydantic)
11082
11083(define-public python-pydantic-core
11084 (package
11085 (name "python-pydantic-core")
11086 (version "2.41.5")
11087 (source
11088 (origin
11089 (method url-fetch)
11090 (uri (pypi-uri "pydantic_core" version))
11091 (sha256
11092 (base32 "0vj72r481py6r5mlna185g3ppw1jri964q77spzp7lval4gabnh8"))))
11093 (build-system pyproject-build-system)
11094 (arguments
11095 (list
11096 #:imported-modules `(,@%cargo-build-system-modules
11097 ,@%pyproject-build-system-modules)
11098 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
11099 (guix build pyproject-build-system)
11100 (guix build utils))
11101 ;; tests: 5318 passed, 123 skipped, 10 xfailed
11102 #:test-flags
11103 #~(list "--ignore=tests/benchmarks"
11104 ;; XXX: It cycles, bootstrap variant needs to be introduced:
11105 ;; python-pydantic-core -> python-pydantic ->
11106 ;; python-inline-snapshot -> python-pydantic-core
11107 "--ignore=tests/test_docstrings.py"
11108 "--ignore=tests/test_hypothesis.py"
11109 "--ignore=tests/validators/test_allow_partial.py"
11110 "--ignore=tests/validators/test_frozenset.py"
11111 "--ignore=tests/validators/test_list.py"
11112 "--ignore=tests/validators/test_set.py")
11113 #:phases
11114 #~(modify-phases %standard-phases
11115 (add-after 'unpack 'prepare-cargo-build-system
11116 (lambda args
11117 (for-each (lambda (phase)
11118 (format #t "Running cargo phase: ~a~%" phase)
11119 (apply (assoc-ref cargo:%standard-phases phase)
11120 #:cargo-target #$(cargo-triplet)
11121 args))
11122 '(unpack-rust-crates
11123 configure
11124 check-for-pregenerated-files
11125 patch-cargo-checksums)))))))
11126 (native-inputs
11127 (append
11128 (list maturin
11129 python-dirty-equals-bootstrap
11130 python-pytest
11131 python-pytest-benchmark ;TODO: disable in pyproject.toml
11132 python-pytest-mock
11133 python-pytest-timeout
11134 python-typing-inspection
11135 python-tzdata
11136 rust
11137 `(,rust "cargo"))
11138 (or (and=> (%current-target-system)
11139 (compose list make-rust-sysroot))
11140 '())))
11141 (inputs
11142 (cargo-inputs 'python-pydantic-core))
11143 (propagated-inputs
11144 (list python-typing-extensions))
11145 (home-page "https://github.com/pydantic/pydantic-core")
11146 (synopsis "Core validation logic for pydantic")
11147 (description "This package provides the core functionality for pydantic
11148validation and serialization.")
11149 (license license:expat)))
11150
11151(define-public python-pydantic-cli
11152 (package
11153 (name "python-pydantic-cli")
11154 (version "9.1.0")
11155 (source
11156 (origin
11157 (method git-fetch) ;for tests
11158 (uri (git-reference
11159 (url "https://github.com/mpkocher/pydantic-cli")
11160 (commit (string-append "v" version))))
11161 (file-name (git-file-name name version))
11162 (sha256
11163 (base32
11164 "1rfffz4kasjihys8qgnvjb8cwm0dycsdj7qnggi9372b9q1ng4zg"))))
11165 (build-system pyproject-build-system)
11166 (propagated-inputs
11167 (list python-pydantic))
11168 (native-inputs
11169 (list python-hatchling python-pytest))
11170 (home-page "https://github.com/mpkocher/pydantic-cli")
11171 (synopsis "Turn Pydantic defined data models into CLI tools")
11172 (description
11173 "@code{python-pydantic} enables specifying @acronym{CLI, Command Line
11174Interfaces} via data models provided in the JSON format.")
11175 (license license:expat)))
11176
11177(define-public python-pydantic-extra-types
11178 (package
11179 (name "python-pydantic-extra-types")
11180 (version "2.10.6")
11181 (source
11182 (origin
11183 (method git-fetch)
11184 (uri (git-reference
11185 (url "https://github.com/pydantic/pydantic-extra-types")
11186 (commit (string-append "v" version))))
11187 (file-name (git-file-name name version))
11188 (sha256
11189 (base32 "0n3w6zm7wdj0xb2c4kjkysfxhcr5pzbgcpcw158pzdsxz6svnrl3"))))
11190 (build-system pyproject-build-system)
11191 (arguments
11192 (list
11193 ;; tests: 13079 passed, 1 deselected
11194 #:test-flags
11195 ;; See: <https://github.com/pydantic/pydantic-extra-types/issues/345>.
11196 #~(list "--ignore=tests/test_s3.py"
11197 "--deselect=tests/test_coordinate.py::test_json_schema"
11198 ;; XXX: The most of the tests fail, pendulum is optional package
11199 ;; and needs to be =>3 where we have 2.1.2, updating to 3+
11200 ;; requires Rust.
11201 "--ignore=tests/test_pendulum_dt.py"
11202 "--ignore=tests/test_json_schema.py")
11203 #:phases
11204 #~(modify-phases %standard-phases
11205 (add-before 'check 'pre-check
11206 (lambda* (#:key inputs #:allow-other-keys)
11207 (setenv "TZ" "UTC")
11208 (setenv "TZDIR" (search-input-directory inputs
11209 "share/zoneinfo")))))))
11210 (native-inputs
11211 (list python-pytest
11212 python-hatchling
11213 tzdata-for-tests))
11214 (propagated-inputs
11215 (list python-pydantic
11216 python-typing-extensions
11217 ;; [optional]
11218 python-cron-converter
11219 ;; python-pendulum
11220 python-phonenumbers
11221 python-pycountry
11222 python-pymongo
11223 python-pytz
11224 python-semver
11225 python-tzdata
11226 python-ulid))
11227 (home-page "https://github.com/pydantic/pydantic-extra-types")
11228 (synopsis "Extra Pydantic types")
11229 (description "This package provides sxtra types for Pydantic.")
11230 (license license:expat)))
11231
11232(define-public python-pydantic-settings
11233 (package
11234 (name "python-pydantic-settings")
11235 (version "2.12.0")
11236 (source
11237 (origin
11238 (method url-fetch)
11239 (uri (pypi-uri "pydantic_settings" version))
11240 (sha256
11241 (base32 "1l6gmw6v1nlm3cid92c5xw6ljw9fbwmjk2y0w5l2lg0yjppkhm80"))))
11242 (build-system pyproject-build-system)
11243 (arguments
11244 (list
11245 ;; tests: 399 passed, 27 skipped
11246 #:test-flags
11247 ;; XXX: Ignore tests requiring python-ruff.
11248 #~(list "--ignore=tests/test_docs.py")
11249 #:phases
11250 #~(modify-phases %standard-phases
11251 (add-before 'check 'set-home
11252 (lambda _
11253 ;; FileNotFoundError: [Errno 2] No such file or directory:
11254 ;; '/homeless-shelter/
11255 (setenv "HOME" "/tmp"))))))
11256 (native-inputs
11257 (list python-hatchling
11258 python-pytest
11259 python-pytest-examples
11260 python-pytest-mock))
11261 (propagated-inputs
11262 (list python-dotenv
11263 python-pydantic
11264 python-typing-inspection
11265 ;; [optional]
11266 python-pyyaml
11267 python-tomli))
11268 (home-page "https://docs.pydantic.dev/latest/usage/pydantic_settings/")
11269 (synopsis "Settings management using Pydantic")
11270 (description
11271 "Pydantic Settings provides optional Pydantic features for loading a
11272settings or config class from environment variables or secrets files.")
11273 (license license:expat)))
11274
11275(define-public python-pydoc-markdown
11276 (package
11277 (name "python-pydoc-markdown")
11278 (version "4.8.2")
11279 (source
11280 (origin
11281 (method url-fetch)
11282 (uri (pypi-uri "pydoc_markdown" version))
11283 (sha256
11284 (base32 "02vzlrd18r8wi0b64vq2gnbhaadysg9rnbylf9sf2v9q65z94v7v"))))
11285 (build-system pyproject-build-system)
11286 (arguments
11287 (list
11288 #:tests? #false ;there are none
11289 #:phases
11290 '(modify-phases %standard-phases
11291 ;; This is probably not a good idea, but it wants a rather old
11292 ;; version of docstring-parser.
11293 (add-after 'unpack 'relax-requirements
11294 (lambda _
11295 (substitute* "pyproject.toml"
11296 (("docstring-parser = .*")
11297 "docstring-parser = \"^0\"\n")))))))
11298 (propagated-inputs (list python-click
11299 python-databind-core
11300 python-databind-json
11301 python-docspec
11302 python-docspec-python
11303 python-docstring-parser
11304 python-jinja2
11305 python-nr-util
11306 python-pyyaml
11307 python-requests
11308 python-tomli
11309 python-tomli-w
11310 python-watchdog
11311 python-yapf))
11312 (native-inputs (list python-poetry-core))
11313 (home-page "https://pypi.org/project/pydoc-markdown/")
11314 (synopsis "Create Python API documentation in Markdown format")
11315 (description "Pydoc-Markdown is a tool to create Python API documentation
11316in Markdown format. Instead of executing your Python code like so many other
11317documentation tools, it parses it using docspec instead.")
11318 (license license:expat)))
11319
11320;; XXX: The project is deprecated upstream, still in use by some packages,
11321;; consider to remove when nothing depends on it.
11322(define-public python-pydocstyle
11323 (package
11324 (name "python-pydocstyle")
11325 (version "6.3.0")
11326 (source
11327 (origin
11328 (method git-fetch) ;no tests in PyPI archive
11329 (uri (git-reference
11330 (url "https://github.com/PyCQA/pydocstyle")
11331 (commit version)))
11332 (file-name (git-file-name name version))
11333 (sha256
11334 (base32 "1aabvnxmy939y5b7jpnygpnkgbi4id9j461v7bwzxwdmdffnnd1j"))
11335 (patches (search-patches
11336 "python-pydocstyle-add-support-for-pep701.patch"))))
11337 (build-system pyproject-build-system)
11338 (arguments
11339 (list
11340 ;; It tries to install with pip.
11341 #:test-flags #~(list "--ignore=src/tests/test_integration.py")
11342 #:phases
11343 #~(modify-phases %standard-phases
11344 (add-after 'unpack 'set-version
11345 (lambda _
11346 (substitute* "pyproject.toml"
11347 (("0.0.0-dev") #$version)))))))
11348 (native-inputs
11349 (list python-poetry-core
11350 python-pytest
11351 python-tomli))
11352 (propagated-inputs
11353 (list python-six
11354 python-snowballstemmer))
11355 (home-page "https://github.com/PyCQA/pydocstyle/")
11356 (synopsis "Python docstring style checker")
11357 (description
11358 "This package provides a style checker for the Python Language
11359Server (PLS).")
11360 (license license:expat)))
11361
11362(define-public python-lsp-server
11363 (package
11364 (name "python-lsp-server")
11365 (version "1.14.0")
11366 (source
11367 (origin
11368 (method git-fetch)
11369 (uri (git-reference
11370 (url "https://github.com/python-lsp/python-lsp-server")
11371 (commit (string-append "v" version))))
11372 (file-name (git-file-name name version))
11373 (sha256
11374 (base32 "1dyp49x844c4mja0qg01nilsbi09w7526izsk3pi5zpylmhmvbk2"))
11375 (patches
11376 (search-patches "python-lsp-server-python-3.13-compatibility.patch"))))
11377 (build-system pyproject-build-system)
11378 (arguments
11379 (list
11380 #:test-flags
11381 '(list "--ignore-glob" "**/test_autopep8_format.py" ;avoid autopep8 dep
11382 "-k"
11383 (string-append
11384 "not test_concurrent_ws_requests " ; flaky
11385 "and not test_pyqt_completion " ; avoid pyqt5
11386 "and not test_pandas_completion")) ; avoid pandas
11387 #:phases
11388 #~(modify-phases %standard-phases
11389 (add-before 'check 'set-HOME
11390 (lambda _ (setenv "HOME" "/tmp"))))))
11391 (propagated-inputs
11392 (list python-black
11393 python-docstring-to-markdown
11394 python-flake8
11395 python-jedi
11396 python-lsp-jsonrpc
11397 python-mccabe
11398 python-pluggy
11399 python-pycodestyle
11400 python-pydocstyle
11401 python-pyflakes
11402 python-pylint
11403 python-rope
11404 python-ujson
11405 python-whatthepatch
11406 python-yapf))
11407 (native-inputs
11408 (list python-flaky
11409 python-matplotlib
11410 python-pytest
11411 python-setuptools
11412 python-setuptools-scm
11413 python-websockets))
11414 (home-page "https://github.com/python-lsp/python-lsp-server")
11415 (synopsis "Python implementation of the Language Server Protocol")
11416 (description
11417 "The Python Language Server @command{pylsp} is an implementation of the
11418Python 3 language specification for the Language Server Protocol (LSP).
11419This tool is used in text editing environments to provide a complete
11420and integrated feature-set for programming Python effectively.")
11421 (license license:expat)))
11422
11423(define-public python-black
11424 (package
11425 (name "python-black")
11426 (version "26.3.1")
11427 (source
11428 (origin
11429 (method git-fetch)
11430 (uri (git-reference
11431 (url "https://github.com/psf/black")
11432 (commit version)))
11433 (file-name (git-file-name name version))
11434 (sha256
11435 (base32 "1m2vxwajavhpg34zkwyg4qyhf0lfsbphm9lvqkikal1lr1cymknz"))))
11436 (build-system pyproject-build-system)
11437 (arguments
11438 (list
11439 ;; tests: 232 passed, 3 skipped, 4 subtests
11440 #:test-flags
11441 #~(list "--numprocesses" (number->string (min (parallel-job-count) 8))
11442 ;; Diffs are not equal.
11443 "--deselect=tests/test_format.py::test_simple_format")
11444 #:phases
11445 #~(modify-phases %standard-phases
11446 (add-after 'patch-source-shebangs 'use-absolute-file-names
11447 (lambda* (#:key inputs #:allow-other-keys)
11448 (substitute* (find-files "tests" "\\.py$")
11449 (("#!/usr/bin/env python3")
11450 (string-append
11451 "#!" (search-input-file inputs "/bin/python3")))))))))
11452 (propagated-inputs
11453 (list python-aiohttp
11454 python-click
11455 python-mypy-extensions
11456 python-packaging
11457 python-pathspec
11458 python-platformdirs
11459 python-pytokens))
11460 (native-inputs
11461 (list python-pytest
11462 python-pytest-xdist
11463 python-hatch-fancy-pypi-readme
11464 python-hatch-vcs
11465 python-hatchling))
11466 (home-page "https://github.com/psf/black")
11467 (synopsis "The uncompromising code formatter")
11468 (description "Black is the uncompromising Python code formatter.")
11469 (license license:expat)))
11470
11471(define-public python-black-macchiato
11472 (package
11473 (name "python-black-macchiato")
11474 (version "1.3.0")
11475 (source
11476 (origin
11477 (method git-fetch)
11478 (uri (git-reference
11479 (url "https://github.com/wbolster/black-macchiato")
11480 (commit version)))
11481 (file-name (git-file-name name version))
11482 (sha256
11483 (base32 "0lc9w50nlbmlzj44krk7kxcia202fhybbnwfh77xixlc7vb4rayl"))))
11484 (build-system pyproject-build-system)
11485 (arguments
11486 (list
11487 #:phases
11488 #~(modify-phases %standard-phases
11489 (add-after 'unpack 'ignore-failing-tests
11490 (lambda _
11491 (substitute* "test_macchiato.py"
11492 (("\\(.*\\n'\\)," all)
11493 (string-append "# " all))))))))
11494 (native-inputs (list python-pytest python-setuptools))
11495 (propagated-inputs (list python-black))
11496 (home-page "https://github.com/wbolster/black-macchiato")
11497 (synopsis "Partial @code{python-black} formatting")
11498 (description
11499 "This package is built on top the @code{python-black} code formatter to
11500enable formatting of partial files.")
11501 (license license:bsd-3)))
11502
11503(define-public python-blinker
11504 (package
11505 (name "python-blinker")
11506 (version "1.9.0")
11507 (source
11508 (origin
11509 (method url-fetch)
11510 (uri (pypi-uri "blinker" version))
11511 (sha256
11512 (base32
11513 "1gs5aigi8v8k4cymm06gdgaylv5yps6yk5n8gigf9v5blxjj5kml"))))
11514 (build-system pyproject-build-system)
11515 (native-inputs
11516 (list python-flit-core
11517 python-pytest
11518 python-pytest-asyncio))
11519 (home-page "https://pythonhosted.org/blinker/")
11520 (synopsis "Fast, simple object-to-object and broadcast signaling")
11521 (description
11522 "Blinker provides a fast dispatching system that allows any number of
11523interested parties to subscribe to events, or \"signals\".")
11524 (license license:expat)))
11525
11526(define-public pelican
11527 (package
11528 (name "pelican")
11529 (version "4.11.0")
11530 (source
11531 (origin
11532 (method url-fetch)
11533 (uri (pypi-uri "pelican" version))
11534 (sha256
11535 (base32 "1n4b8y4vvycxhwmi3z5i96bh0d2rg1mk1hdc6cbkk3c1gd4380mr"))))
11536 (build-system pyproject-build-system)
11537 (arguments
11538 (list
11539 #:test-flags #~(list "-k" (string-append
11540 ;; These tests failed with AssertionError.
11541 "not test_typogrify_ignore_filters"
11542 " and not test_typogrify_ignore_tags"
11543 " and not test_error_on_warning"))))
11544 (native-inputs
11545 (list python-anyio
11546 python-beautifulsoup4
11547 python-lxml
11548 python-pdm-backend
11549 python-pytest
11550 python-smartypants
11551 python-typogrify))
11552 (inputs
11553 (list python-blinker
11554 python-dateutil
11555 ;; Ignoring `guix lint` warning as python-docutils is used to support
11556 ;; reStructuredText processing at runtime.
11557 python-docutils
11558 python-feedgenerator
11559 python-jinja2
11560 python-ordered-set
11561 python-pygments
11562 python-rich
11563 python-tzdata
11564 python-unidecode
11565 python-watchfiles))
11566 (home-page "https://blog.getpelican.com/")
11567 (synopsis "Python-based static site publishing system")
11568 (description
11569 "Pelican is a tool to generate a static blog from reStructuredText,
11570Markdown input files, and more. Pelican uses Jinja2 for templating
11571and is very extensible.")
11572 (license license:agpl3+)))
11573
11574(define-public python-cykhash
11575 (package
11576 (name "python-cykhash")
11577 (version "2.0.1")
11578 (source
11579 (origin
11580 (method url-fetch)
11581 (uri (pypi-uri "cykhash" version))
11582 (sha256
11583 (base32 "1xwpxff4whfvkwvcyhzhdcj5zzq89vvdjmnqy664s4a9yp4lnydl"))))
11584 (build-system pyproject-build-system)
11585 (arguments
11586 (list #:tests? #f)) ;no tests in PyPI, 2.0.1 is not tagged in git
11587 (native-inputs
11588 (list python-cython
11589 python-setuptools))
11590 (home-page "https://github.com/realead/cykhash")
11591 (synopsis "Khash-sets and maps")
11592 (description
11593 "This package is a Cython wrapper for khash-sets/maps. It brings
11594functionality of
11595@url{https://github.com/attractivechaos/klib/blob/master/khash.h, khash} to
11596Python and Cython and can be used seamlessly in numpy or pandas. Numpy's
11597world is lacking the concept of a (hash-)set. This shortcoming is fixed and
11598efficient (memory- and speedwise compared to pandas) @code{unique} and
11599@code{isin} are implemented. Python-set/dict have a big memory-footprint.
11600For some datatypes the overhead can be reduced by using khash by factor 4-8.")
11601 (license license:expat)))
11602
11603(define-public python-cython
11604 ;; TODO: Move to python-build.
11605 (package
11606 (name "python-cython")
11607 (version "3.1.7")
11608 (source
11609 (origin
11610 (method url-fetch)
11611 (uri (pypi-uri "cython" version))
11612 (sha256
11613 (base32 "0gaslzb3virk4v6yh5a7dp6ka1lm267v994g8r25lck1702vjy3g"))))
11614 (build-system pyproject-build-system)
11615 (arguments
11616 (list
11617 #:test-backend #~'custom
11618 #:test-flags
11619 #~(list "runtests.py"
11620 "-vv"
11621 "-j" (number->string (parallel-job-count))
11622 "-x" (string-join
11623 (list "annotate_html"
11624 "Debugger"
11625 ;; It introduces cycle.
11626 "numpy_test"
11627 ;; It fails with AssertionError: Failed doctest test
11628 ;; for complex_numbers_cpp.double_abs.
11629 "complex_numbers_cpp"
11630 ;; This test fails when running on 24 cores.
11631 "cpp_stl_conversion"
11632 #$@(if (target-32bit?)
11633 ;; XXX: On 32-bit architectures, running the
11634 ;; parallel tests fails on many-core systems.
11635 ;; See: <https://github.com/cython/cython/issues/2807>.
11636 '("run.parallel"
11637 ;; Test cpp_stl_any.cast_test fails.
11638 ;; See: <https://github.com/cython/cython/issues/5928>.
11639 "cpp_stl_any")
11640 '())
11641 #$@(if (system-hurd?)
11642 '("test_class_ref"
11643 "test_compiler_directives"
11644 "test_lang_version")
11645 '()))
11646 "|"))
11647 #:phases
11648 #~(modify-phases %standard-phases
11649 (add-before 'check 'pre-check
11650 (lambda* (#:key tests? test-flags #:allow-other-keys)
11651 ;; Disable compiler optimizations to greatly reduce the running
11652 ;; time of the test suite.
11653 (setenv "CFLAGS" "-O0")
11654 ;; Some tests require access to "$HOME/.cython".
11655 (setenv "HOME" "/tmp"))))))
11656 (native-inputs
11657 (list libxcrypt
11658 python-setuptools
11659 python-wheel))
11660 ;; we need the full python package and not just the python-wrapper
11661 ;; because we need libpython3.3m.so
11662 (inputs
11663 (list python))
11664 (home-page "https://cython.org/")
11665 (synopsis "C extensions for Python")
11666 (description "Cython is an optimising static compiler for both the Python
11667programming language and the extended Cython programming language. It makes
11668writing C extensions for Python as easy as Python itself.")
11669 (license license:asl2.0)))
11670
11671(define-public python-cython-0
11672 (package
11673 (inherit python-cython)
11674 ;; It's the latest version of 0.29. See
11675 ;; <https://github.com/cython/cython/blob/0.29.37/CHANGES.rst>.
11676 (version "0.29.37")
11677 (source
11678 (origin
11679 (method url-fetch)
11680 (uri (pypi-uri "Cython" version))
11681 (sha256
11682 (base32 "1ysca2r23h12ai9wrym4ci0nvgwm3lfijrpj9xfyxbclvnkd84zq"))))
11683 (arguments
11684 (list
11685 ;; XXX: Tests are broken with [email protected], but dependent packages
11686 ;; build, so keep it until unnecessary.
11687 #:tests? #f
11688 #:test-backend #~'custom
11689 #:test-flags
11690 #~(list "runtests.py"
11691 "-vv"
11692 "-j" (number->string (parallel-job-count))
11693 ;; XXX: On 32-bit architectures, running the parallel tests
11694 ;; fails on many-core systems, see
11695 ;; <https://github.com/cython/cython/issues/2807>.
11696 #$@(if (target-32bit?)
11697 #~("-x" "run.parallel")
11698 #~())
11699 #$@(if (system-hurd?)
11700 #~("-x" "test_class_ref"
11701 "-x" "test_compiler_directives"
11702 "-x" "test_lang_version")
11703 #~())
11704 ;; This test fails when running on 24 cores.
11705 "-x" "cpp_stl_conversion")
11706 #:phases
11707 #~(modify-phases %standard-phases
11708 (add-after 'unpack 'fix-pyximport-python-3.12
11709 (lambda _
11710 (let ((importlib-util-load-dynamic "\
11711import importlib.util
11712from importlib.machinery import ExtensionFileLoader
11713
11714def load_dynamic(name, path):
11715 loader = ExtensionFileLoader(name, path)
11716 spec = importlib.util.spec_from_file_location(name, loader=loader)
11717 module = importlib.util.module_from_spec(spec)
11718 spec.loader.exec_module(module)
11719 return module
11720"))
11721 (substitute* "pyximport/pyximport.py"
11722 (("^import imp")
11723 importlib-util-load-dynamic)
11724 (("imp\\.load_dynamic")
11725 "load_dynamic")))))
11726 (add-before 'check 'pre-check
11727 ;; some tests require access to "$HOME/.cython"
11728 (lambda _
11729 (setenv "HOME" "/tmp")
11730 ;; Disable compiler optimizations to greatly reduce the running
11731 ;; time of the test suite.
11732 (setenv "CFLAGS" "-O0"))))))))
11733
11734(define-public python-cython-next
11735 (package
11736 (inherit python-cython)
11737 (version "3.2.2")
11738 (source
11739 (origin
11740 (method url-fetch)
11741 (uri (pypi-uri "cython" version))
11742 (sha256
11743 (base32 "0d0n0yyicr7icd4f5kn1wwbjqyad6j4m640xlqlk3ixchgad7bf3"))))))
11744
11745;; NOTE: when upgrading numpy please make sure that python-numba,
11746;; python-pandas and python-scipy still build, as these three packages are
11747;; often used together.
11748(define-public python-numpy
11749 (package
11750 (name "python-numpy")
11751 (version "2.3.1")
11752 (source
11753 (origin
11754 (method url-fetch)
11755 (uri (string-append
11756 "https://github.com/numpy/numpy/releases/download/v"
11757 version "/numpy-" version ".tar.gz"))
11758 (sha256
11759 (base32 "0aqx8hsw54wfp7iv0h0ljlpsygvmrmi3rjic6rsa6v92lhhaxj8y"))))
11760 (build-system pyproject-build-system)
11761 (arguments
11762 (list
11763 ;; tests: 47513 passed, 1740 skipped, 33 xfailed, 5 xpassed, 341 warnings
11764 #:modules '((guix build utils)
11765 (guix build pyproject-build-system)
11766 (ice-9 format))
11767 #:test-flags
11768 #~(list "-m" "not slow"
11769 "--numprocesses" (number->string (min 8 (parallel-job-count)))
11770 ;; See: <https://github.com/numpy/numpy/issues/27531>,
11771 ;; <https://github.com/numpy/numpy/issues/17685>,
11772 ;; <https://github.com/numpy/numpy/issues/17635>.
11773 "-k" "not test_api_importable")
11774 #:phases
11775 #~(modify-phases %standard-phases
11776 (add-after 'unpack 'fix-executable-paths
11777 (lambda _
11778 (substitute* "numpy/distutils/exec_command.py"
11779 (("'/bin/sh'")
11780 (format #f "~s" (which "bash"))))
11781 (substitute* "numpy/meson.build"
11782 ;; Relay on python from the PATH instead of full reference
11783 ;; stored in built wheel.
11784 (("'py.full_path\\(\\)'") "'python'"))))
11785 ;; This isn't architecture specific.
11786 ;; TODO: Remove this conditional and apply for all builds.
11787 #$@(if (target-ppc64le?)
11788 #~((add-after 'unpack 'patch-bin-true
11789 (lambda* (#:key inputs #:allow-other-keys)
11790 (substitute* "numpy/_core/tests/test_cpu_features.py"
11791 (("/bin/true")
11792 (search-input-file inputs "bin/true"))))))
11793 #~())
11794 (add-before 'build 'parallelize-build
11795 (lambda _
11796 (setenv "OMP_NUM_THREAD"
11797 (number->string (parallel-job-count)))
11798 (setenv "NPY_NUM_BUILD_JOBS"
11799 (number->string (parallel-job-count)))))
11800 ;; XXX: It fails with an issue "'fenv_t' has not been declared..."
11801 ;; when the gfortran header is used. Remove gfortran from
11802 ;; CPLUS_INCLUDE_PATH as a workaround. Taken from
11803 ;; <https://issues.guix.gnu.org/73439#45>.
11804 (add-after 'set-paths 'hide-gfortran
11805 (lambda* (#:key inputs #:allow-other-keys)
11806 (let ((gfortran (assoc-ref inputs "gfortran")))
11807 (setenv "CPLUS_INCLUDE_PATH"
11808 (string-join
11809 (delete (string-append gfortran "/include/c++")
11810 (string-split (getenv "CPLUS_INCLUDE_PATH") #\:))
11811 ":")))))
11812 (add-before 'build 'configure-blas
11813 (lambda* (#:key inputs #:allow-other-keys)
11814 (call-with-output-file "site.cfg"
11815 (lambda (port)
11816 (format port
11817 "[openblas]
11818libraries = openblas
11819library_dirs = ~a/lib
11820include_dirs = ~:*~a/include~%" #$(this-package-input "openblas"))))))
11821 (replace 'check
11822 (lambda* (#:key tests? test-flags #:allow-other-keys)
11823 (when tests?
11824 (with-directory-excursion #$output
11825 (apply invoke "pytest" test-flags)))))
11826 ;; The executables provided by this package ('f2py' and 'numpy-config')
11827 ;; only depend on Python. By customizing the wrap phase we can ensure
11828 ;; that we don't add all Python packages listed in native-inputs to
11829 ;; the closure. This significantly reduces the overall closure size.
11830 ;;
11831 ;; See also <https://bugs.gnu.org/25235>.
11832 (replace 'wrap
11833 (lambda* (#:key inputs outputs #:allow-other-keys)
11834 (for-each
11835 (lambda (program)
11836 (wrap-program program
11837 `("GUIX_PYTHONPATH" ":" suffix
11838 ,(list (site-packages inputs outputs)))))
11839 (find-files (in-vicinity #$output "/bin"))))))))
11840 (native-inputs
11841 (list gfortran
11842 python-hypothesis
11843 python-meson
11844 python-pytest
11845 python-pytest-xdist
11846 python-setuptools
11847 python-typing-extensions))
11848 (home-page "https://numpy.org")
11849 (synopsis "Fundamental package for scientific computing with Python")
11850 (description "NumPy is the fundamental package for scientific computing
11851with Python. It contains among other things: a powerful N-dimensional array
11852object, sophisticated (broadcasting) functions, tools for integrating C/C++
11853and Fortran code, useful linear algebra, Fourier transform, and random number
11854capabilities.")
11855 (properties
11856 '((upstream-name . "numpy")))
11857 (license license:bsd-3)))
11858
11859(define-public python-numpy-1
11860 (package
11861 (inherit python-numpy)
11862 (name "python-numpy")
11863 ;; XXX: Starting from v1.26.0 the project includes a vendored-meson which
11864 ;; is needed for SIMD and BLAS/LAPACK features that are not yet available
11865 ;; in upstream Meson.
11866 ;;
11867 ;; See:
11868 ;; - URL <https://raw.githubusercontent.com/numpy/numpy>
11869 ;; - commit :: 2f3549c9d7c5048621568e431c86bc7530742723
11870 ;; - file <doc/source/building/understanding_meson.rst>
11871 (version "1.26.4") ;; This is the last planned release in the 1.26.x series.
11872 (source
11873 (origin
11874 (method url-fetch)
11875 (uri (string-append
11876 "https://github.com/numpy/numpy/releases/download/v"
11877 version "/numpy-" version ".tar.gz"))
11878 (sha256
11879 (base32
11880 "0410j6jfz1yzm5s0v0yrc1j0q6ih4322357and7arr0jxnlsn0ia"))
11881 (patches (search-patches "python-numpy-gcc-14.patch"))))
11882 (arguments
11883 (list
11884 ;; tests: 35652 passed, 2403 skipped, 32 xfailed, 2 xpassed
11885 #:modules '((guix build utils)
11886 (guix build pyproject-build-system)
11887 (ice-9 format))
11888 #:phases
11889 #~(modify-phases %standard-phases
11890 (add-after 'unpack 'delete-test-files
11891 (lambda _
11892 ;; These tests depend on older setuptools, see:
11893 ;; <https://github.com/numpy/numpy/issues/27531>.
11894 ;;
11895 ;; E ModuleNotFoundError: No module named
11896 ;; 'distutils.msvccompiler'
11897 (delete-file "numpy/distutils/tests/test_mingw32ccompiler.py")
11898 (delete-file "numpy/distutils/tests/test_system_info.py")))
11899 ;; XXX: It fails with an issue "'fenv_t' has not been declared..."
11900 ;; when the gfortran header is used. Remove gfortran from
11901 ;; CPLUS_INCLUDE_PATH as a workaround. Taken from
11902 ;; <https://issues.guix.gnu.org/73439#45>.
11903 (add-after 'set-paths 'hide-gfortran
11904 (lambda* (#:key inputs #:allow-other-keys)
11905 (let ((gfortran (assoc-ref inputs "gfortran")))
11906 (setenv "CPLUS_INCLUDE_PATH"
11907 (string-join
11908 (delete (string-append gfortran "/include/c++")
11909 (string-split (getenv "CPLUS_INCLUDE_PATH") #\:))
11910 ":")))))
11911 (add-before 'build 'relax-gcc-14-strictness
11912 (lambda _
11913 (setenv "CFLAGS"
11914 "-g -O2 -Wno-error=implicit-function-declaration")))
11915 (add-before 'build 'parallelize-build
11916 (lambda _
11917 (setenv "NPY_NUM_BUILD_JOBS"
11918 (number->string (parallel-job-count)))))
11919 (add-before 'build 'configure-blas
11920 (lambda* (#:key inputs #:allow-other-keys)
11921 (call-with-output-file "site.cfg"
11922 (lambda (port)
11923 (format port
11924 "\
11925[openblas]
11926libraries = openblas
11927library_dirs = ~a/lib
11928include_dirs = ~:*~a/include~%"
11929 (dirname (dirname
11930 (search-input-file
11931 inputs "include/openblas_config.h"))))))))
11932 (add-before 'build 'fix-executable-paths
11933 (lambda* (#:key inputs #:allow-other-keys)
11934 ;; Make /gnu/store/...-bash-.../bin/sh the default shell,
11935 ;; instead of /bin/sh.
11936 (substitute* "numpy/distutils/exec_command.py"
11937 (("'/bin/sh'")
11938 (format #f "~s" (search-input-file inputs "bin/bash"))))
11939 ;; Don't try to call '/bin/true' specifically.
11940 (substitute* "numpy/core/tests/test_cpu_features.py"
11941 (("/bin/true") (search-input-file inputs "bin/true")))))
11942 (replace 'check
11943 (lambda* (#:key tests? outputs inputs #:allow-other-keys)
11944 (when tests?
11945 (invoke "./runtests.py" "-vv" "--no-build" "--mode=fast"
11946 "-j" (number->string (parallel-job-count))
11947 ;; Contrary to scipy, the runtests.py script of numpy
11948 ;; does *not* automatically provide -n when -j is used
11949 ;; (see: https://github.com/numpy/numpy/issues/21359).
11950 "--" "-n" (number->string (parallel-job-count))
11951 ;; Disable Pytest Warnings, they are resolved in the
11952 ;; latest 1.x.x: pytest.PytestRemovedIn9Warning: Marks
11953 ;; applied to fixtures have no effect,
11954 ;; DeprecationWarning.
11955 "-p" "no:warnings"
11956 "-k" (string-append
11957 ;; These tests may fail on 32-bit systems (see:
11958 ;; https://github.com/numpy/numpy/issues/18387).
11959 "not test_float_remainder_overflow "
11960 "and not test_pareto "
11961 ;; The 'test_rint_big_int' test fails on older
11962 ;; x86_64 CPUs such as the Core 2 Duo (see:
11963 ;; https://github.com/numpy/numpy/issues/22170).
11964 "and not test_rint_big_int "
11965 ;; They fail to detect compiler.
11966 "and not test_compile1 "
11967 "and not test_compile2 "
11968 ;; Due to disabled warnings
11969 "and not test_getattr_warning "
11970 "and not test_integer_signs "
11971 "and not test_implicit_cast_float_to_int_fails "
11972 "and not test_integer_signs "
11973 ;; The huge_array test is too large for 32-bit (see:
11974 ;; https://bugs.gentoo.org/843599 and
11975 ;; https://bugs.gentoo.org/846548).
11976 ;; TestKind.test_all is a Fortran type failure
11977 ;; that may be toolchain or environment related.
11978 #$@(if (or (target-x86?) (target-arm32?))
11979 `(" and not test_identityless_reduction_huge_array"
11980 " and not (TestKind and test_all)")
11981 '())
11982 ;; This test fails with a Fortran failure (16
11983 ;; expected but got -1), due to the fact that it
11984 ;; requires a 64-bit system.
11985 #$@(if (or (target-x86-32?) (target-arm32?))
11986 `(" and not test_int")
11987 '())
11988 ;; These tests fail when building from aarch64-linux.
11989 #$@(if (target-arm32?)
11990 `(" and not test_features"
11991 " and not test_unary_spurious_fpexception")
11992 '())
11993 ;; These tests seem to fail on machines without
11994 ;; an FPU is still under investigation upstream.
11995 ;; https://github.com/numpy/numpy/issues/20635
11996 #$@(if (target-riscv64?)
11997 `(" and not test_fp_noncontiguous")
11998 '())
11999 ;; They also fail with gcc-14
12000 " and not test_float"
12001 " and not test_fpclass"
12002
12003 ;; These tests fail with gcc-14
12004 " and not test_context_locality"
12005 " and not test_cosh"
12006 " and not test_default_policy_singleton"
12007 " and not test_exp_exceptions"
12008 " and not test_half_fpe"
12009 " and not test_owner_is_base"
12010 " and not test_policy_propagation"
12011 " and not test_set_policy"
12012 " and not test_sinh"
12013 " and not test_square_values"
12014 " and not test_sum"
12015 " and not test_switch_owner"
12016 " and not test_thread_locality"
12017
12018 ;; These tests depend on older setuptools, see:
12019 ;; <https://github.com/numpy/numpy/issues/27531>.
12020 " and not test_api_importable"
12021 " and not test_all_modules_are_expected_2")))))
12022 ;; See comment for custom python-numpy wrap phase above.
12023 (replace 'wrap
12024 (lambda* (#:key inputs outputs #:allow-other-keys)
12025 (for-each
12026 (lambda (program)
12027 (wrap-program program
12028 `("GUIX_PYTHONPATH" ":" suffix
12029 ,(list (site-packages inputs outputs)))))
12030 (find-files (in-vicinity #$output "/bin"))))))))
12031 (native-inputs
12032 (list python-hypothesis
12033 python-meson
12034 python-pytest
12035 python-pytest-xdist
12036 python-setuptools
12037 python-typing-extensions
12038 ;; XXX: Avoid to: 'fenv_t' has not been declared in '::' 58 | using ::fenv_t;
12039 ;; See <https://github.com/numpy/numpy/issues/21075#issuecomment-1047976197>,
12040 ;; <https://github.com/numpy/numpy/issues/24318>.
12041 gcc ;fevn.h c[++] include must precede fortran's
12042 gfortran))
12043 (inputs (list bash openblas))))
12044
12045(define-deprecated/public-alias python-numpy-2 python-numpy)
12046
12047(define-public python-numpysane
12048 (package
12049 (name "python-numpysane")
12050 (version "0.42")
12051 (source
12052 (origin
12053 (method git-fetch)
12054 (uri (git-reference
12055 (url "https://github.com/dkogan/numpysane.git")
12056 (commit (string-append "v" version))))
12057 (file-name (git-file-name name version))
12058 (sha256
12059 (base32 "0s38fm88bmq08j5qxfka1wyjs2r9s9arzd1c3c4ixa8k3pisnihr"))))
12060 (build-system pyproject-build-system)
12061 (arguments
12062 (list
12063 #:phases
12064 #~(modify-phases %standard-phases
12065 (add-after 'unpack 'patch
12066 (lambda* (#:key inputs outputs #:allow-other-keys)
12067 (let* ((numpy (assoc-ref inputs "python-numpy"))
12068 (site (site-packages inputs `(("out" . ,numpy)))))
12069 (substitute* "Makefile.common.header"
12070 ;; numpy 2.0 has this--but we don't use numpy 2.0.
12071 (("pkg-config --cflags-only-I numpy")
12072 (format #f "echo -I~a/numpy/core/include" site))))))
12073 (replace 'check
12074 (lambda _
12075 (setenv "CC"
12076 #$(cc-for-target))
12077 (invoke "make" "check"))))))
12078 (propagated-inputs (list python-numpy-1))
12079 (native-inputs (list perl pkg-config python-setuptools))
12080 (home-page "https://github.com/dkogan/numpysane")
12081 (synopsis "More-reasonable core functionality for numpy")
12082 (description
12083 "This package provides more-reasonable core functionality for numpy.
12084
12085A lot of numpysane functionality is inspired by PDL (Perl Data Language).
12086
12087numpysane has:
12088@itemize
12089@item easier broadcasting
12090@item nicer array manipulation
12091@item array concatenation
12092@item manipulation of dimensions
12093@item broadcast-aware inner product
12094@item broadcast-aware outer product
12095@item broadcast-aware 2-norm
12096@item broadcast-aware matrix multiplication
12097@end itemize
12098")
12099 (license license:lgpl2.0+)))
12100
12101(define-public python-numpy-documentation
12102 (package
12103 (inherit python-numpy)
12104 (name "python-numpy-documentation")
12105 (arguments
12106 (list
12107 #:tests? #f ;we're only generating the documentation
12108 #:phases
12109 #~(modify-phases %standard-phases
12110 (add-after 'unpack 'avoid-external-deps
12111 (lambda _
12112 ;; XXX: Avoid search-button to avoid sphinx error
12113 ;; TemplateNotFound('search-button.html')
12114 (substitute* "doc/source/conf.py"
12115 (("\"search-button\",") ""))
12116 ;; XXX: Avoid theme-switcher to avoid sphinx error
12117 ;; TemplateNotFound('theme-switcher.html')
12118 (substitute* "doc/source/conf.py"
12119 (("\"theme-switcher\",") ""))
12120 ;; XXX: Avoid version-switcher because it depends on the value
12121 ;; of external https://numpy.org/doc/_static/versions.json
12122 (substitute* "doc/source/conf.py"
12123 (("\"version-switcher\",") ""))))
12124 (add-before 'build 'add-gnu-freefont-to-texmf
12125 (lambda _
12126 ;; XXX: The Sphinx-generated tex output specifies the GNU
12127 ;; FreeFont font to be searched via its extension, which uses
12128 ;; kpathsea instead of fontconfig and fail (see:
12129 ;; https://github.com/sphinx-doc/sphinx/issues/10347). Create a
12130 ;; symlink to GNU FreeFont and add it to the TEXMF tree via
12131 ;; GUIX_TEXMF.
12132 (mkdir-p "texmf-dist/fonts/opentype/public")
12133 (symlink (string-append
12134 #$(this-package-native-input "font-gnu-freefont")
12135 "/share/fonts/opentype")
12136 (string-append
12137 (getcwd) "/"
12138 "texmf-dist/fonts/opentype/public/gnu-freefont"))
12139 (setenv "GUIX_TEXMF" (string-append (getenv "GUIX_TEXMF") ":"
12140 (getcwd) "/texmf-dist"))))
12141 (replace 'build
12142 (lambda _
12143 (chdir "doc")
12144 (let ((sphinxopts (string-append
12145 "SPHINXOPTS=-j"
12146 (number->string (parallel-job-count)))))
12147 ;; Do not treat warnings as errors.
12148 (substitute* "Makefile"
12149 ((" -WT ") " -T "))
12150 (setenv "HOME" "/tmp")
12151 ;; Build the PDF documentation.
12152 (invoke "make" "latex-build" sphinxopts)
12153 ;; FIXME: PDF build fails
12154 ;; (invoke "make" "-C" "build/latex" "all-pdf" sphinxopts)
12155 ;; Build the HTML documentation
12156 (invoke "make" "html" sphinxopts)
12157 ;; Build the Info documentation. The issues worked around
12158 ;; below can be tracked at
12159 ;; https://github.com/numpy/numpy/issues/12278.
12160 (substitute* "source/conf.py"
12161 ;; The root document should be "index", not "contents".
12162 (("\"contents\"") "'index'")
12163 ;; Disable Sphinx extensions that produce broken Texinfo.
12164 ((".*'numpydoc'.*") "")
12165 ((".*'sphinx.ext.autodoc'.*") "")
12166 ((".*'sphinx.ext.autosummary'.*") ""))
12167 (invoke "make" "info" sphinxopts))))
12168 (replace 'install
12169 (lambda _
12170 (let* ((data (string-append #$output "/share"))
12171 (doc (string-append data "/doc/numpy"))
12172 (html (string-append doc "/html"))
12173 (info (string-append data "/info")))
12174 ;; Install the HTML documentation.
12175 (mkdir-p html)
12176 (copy-recursively "build/html" html)
12177 ;; Install the PDF reference and user manuals.
12178 ;; FIXME:
12179 ;; (install-file "build/latex/numpy-ref.pdf" doc)
12180 ;; (install-file "build/latex/numpy-user.pdf" doc)
12181 ;; Install the info manual.
12182 (install-file "build/texinfo/numpy.info" info)
12183 (symlink (string-append html "/_images")
12184 (string-append info "/numpy-figures"))))))))
12185 (native-inputs
12186 (list font-gnu-freefont
12187 perl
12188 python-breathe
12189 python-ipython
12190 python-jupyterlite-sphinx
12191 python-matplotlib
12192 python-numpy
12193 python-numpydoc
12194 python-pandas
12195 python-pydata-sphinx-theme
12196 python-scipy ;used by matplotlib
12197 python-setuptools
12198 python-sphinx
12199 python-sphinx-copybutton
12200 python-sphinx-design
12201 texinfo
12202 (texlive-local-tree
12203 (list texlive-cbfonts
12204 texlive-cm-super
12205 texlive-cmap
12206 texlive-expdlist
12207 texlive-fandol
12208 texlive-greek-fontenc
12209 texlive-latexmk
12210 texlive-polyglossia
12211 texlive-xetex
12212 texlive-xindy))))
12213 (inputs '())
12214 (propagated-inputs '())
12215 (synopsis "Documentation for the @code{python-numpy} package")
12216 (description "This package provides the complete NumPy documentation in
12217the Texinfo, and HTML formats.")))
12218
12219(define-public python-numpy-stl
12220 (package
12221 (name "python-numpy-stl")
12222 (version "3.2.0")
12223 (source
12224 (origin
12225 (method url-fetch)
12226 (uri (pypi-uri "numpy_stl" version))
12227 (sha256
12228 (base32 "0kgxhghl9j5caydb2a9g2n44zvffd94gb6abday0manxkkvw682s"))))
12229 (build-system pyproject-build-system)
12230 (native-inputs
12231 (list python-cython
12232 python-pytest
12233 python-setuptools
12234 python-wheel))
12235 (propagated-inputs
12236 (list python-numpy
12237 python-utils))
12238 (home-page "https://github.com/WoLpH/numpy-stl/")
12239 (synopsis "Read, write and modify binary/ASCII STL files library")
12240 (description
12241 "Library to make reading, writing and modifying both binary and ascii STL
12242files, file format native to the stereolithography CAD software created by 3D
12243Systems, easy.")
12244 (license license:bsd-3)))
12245
12246(define-public python-npx
12247 (package
12248 (name "python-npx")
12249 (version "0.1.6")
12250 (source
12251 (origin
12252 (method git-fetch) ; no source archive in PyPI
12253 (uri (git-reference
12254 (url "https://github.com/sigma-py/npx")
12255 (commit (string-append "v" version))))
12256 (file-name (git-file-name name version))
12257 (sha256
12258 (base32 "0a3rb3ydl13m1r48kdvnbi31566jxm10p36argkz5kjr2ilkrx8v"))))
12259 (build-system pyproject-build-system)
12260 (native-inputs
12261 (list python-networkx
12262 python-pytest
12263 python-setuptools
12264 python-wheel))
12265 (propagated-inputs
12266 (list python-numpy))
12267 (home-page "https://github.com/nschloe/npx")
12268 (synopsis "Extensions for NumPy")
12269 (description "NumPy is a large library used everywhere in scientific
12270computing. That's why breaking backwards-compatibility comes at a
12271significant cost and is almost always avoided, even if the API of some
12272methods is arguably lacking. This package provides drop-in wrappers
12273\"fixing\" those.")
12274 (license license:bsd-3)))
12275
12276(define-public python-munch
12277 (package
12278 (name "python-munch")
12279 (version "4.0.0")
12280 (source
12281 (origin
12282 (method url-fetch)
12283 (uri (pypi-uri "munch" version))
12284 (sha256
12285 (base32
12286 "0d928bdzm0d9s9f058xa72pywps2zjdgvhrp9rm22qqj8r8v2b2l"))))
12287 (build-system pyproject-build-system)
12288 (native-inputs
12289 (list python-astroid
12290 python-pytest
12291 python-setuptools
12292 python-wheel))
12293 (home-page "https://github.com/Infinidat/munch")
12294 (synopsis "Dot-accessible dictionary")
12295 (description "Munch is a dot-accessible dictionary similar to JavaScript
12296objects.")
12297 (license license:expat)))
12298
12299(define-public python-colormath2
12300 (package
12301 (name "python-colormath2")
12302 (version "3.0.3")
12303 (source
12304 (origin
12305 (method git-fetch)
12306 (uri (git-reference
12307 (url "https://github.com/bkmgit/python-colormath2")
12308 (commit version)))
12309 (file-name (git-file-name name version))
12310 (sha256
12311 (base32 "0xxhmmx1mzjggapjmpz8v166lj86xrkq7kak83akcirnq0pz9ihv"))))
12312 (build-system pyproject-build-system)
12313 (propagated-inputs (list python-networkx python-numpy))
12314 (native-inputs (list python-nose2 python-setuptools))
12315 (home-page "https://github.com/bkmgit/python-colormath2")
12316 (synopsis "Color math and conversion library")
12317 (description
12318 "This is a Python library for color math and conversions.")
12319 (license license:bsd-3)))
12320
12321(define-public python-pyspnego
12322 (package
12323 (name "python-pyspnego")
12324 (version "0.8.0")
12325 (source (origin
12326 (method url-fetch)
12327 (uri (pypi-uri "pyspnego" version))
12328 (sha256
12329 (base32
12330 "1ps34laa0kvvp33az173hp5l0hnk8cr0bfqmlgw64ry5cv09qjg0"))))
12331 (build-system pyproject-build-system)
12332 (native-inputs
12333 (list python-pytest python-pytest-mock python-setuptools python-wheel))
12334 (propagated-inputs
12335 (list python-cryptography python-gssapi python-krb5 python-ruamel.yaml))
12336 (home-page "https://github.com/jborean93/pyspnego")
12337 (synopsis "Python SPNEGO library")
12338 (description "The @code{pyspnego} Python library handles Negotiate, NTLM,
12339Kerberos (SPNEGO) and CredSSP authentication. It also includes a packet
12340parser that can be used to decode raw NTLM/SPNEGO/Kerberos tokens into a human
12341readable format.")
12342 (license license:expat)))
12343
12344(define-public python-pygit2
12345 (package
12346 (name "python-pygit2")
12347 (version "1.18.2")
12348 (source
12349 (origin
12350 (method url-fetch)
12351 (uri (pypi-uri "pygit2" version))
12352 (sha256
12353 (base32 "0m8g8s72c0xwwayykpj1hf8c1wldhmg1sj8kgxdp2rf9c837xa7c"))))
12354 (build-system pyproject-build-system)
12355 (propagated-inputs (list python-cffi libgit2))
12356 (native-inputs (list python-pytest python-setuptools python-wheel))
12357 (home-page "https://github.com/libgit2/pygit2")
12358 (synopsis "Python bindings for libgit2")
12359 (description "Pygit2 is a set of Python bindings to the libgit2 shared library.")
12360 ;; GPL2.0 only, with linking exception.
12361 (license license:gpl2)))
12362
12363(define-public python-patiencediff
12364 (package
12365 (name "python-patiencediff")
12366 (version "0.2.15")
12367 (source
12368 (origin
12369 (method url-fetch)
12370 (uri (pypi-uri "patiencediff" version))
12371 (sha256
12372 (base32
12373 "012jjgkkpk563l1mgj2ax4z32h0l558adhr2qa3chfrfsgpi22fh"))))
12374 (build-system pyproject-build-system)
12375 (arguments
12376 (list
12377 #:phases #~(modify-phases %standard-phases
12378 ;; Fails because bin/patiencediff expects two files to diff
12379 (delete 'sanity-check))))
12380 (native-inputs (list python-pytest python-setuptools python-wheel))
12381 (home-page "https://www.breezy-vcs.org/")
12382 (synopsis "Python implementation of the patiencediff algorithm")
12383 (description
12384 "This package contains a Python implementation of the @code{patiencediff}
12385algorithm. Patiencediff provides a good balance of performance, nice output for
12386humans, and implementation simplicity.")
12387 (license license:gpl2+)))
12388
12389(define-public python-merge3
12390 (package
12391 (name "python-merge3")
12392 (version "0.0.16")
12393 (source
12394 (origin
12395 (method git-fetch)
12396 (uri (git-reference
12397 (url "https://github.com/breezy-team/merge3")
12398 (commit (string-append "v" version))))
12399 (file-name (git-file-name name version))
12400 (sha256
12401 (base32 "18z0ya92qlrm1imwi6lws4b0y9a66gknlcpylyb9h6m733bf5slb"))))
12402 (build-system pyproject-build-system)
12403 (arguments (list #:test-backend #~'unittest))
12404 (native-inputs (list python-setuptools))
12405 (home-page "https://github.com/breezy-team/merge3")
12406 (synopsis "Python implementation of 3-way merge")
12407 (description "This Python library implements 3-way merge for text.")
12408 (license license:gpl2+)))
12409
12410(define-public python-fancycompleter
12411 (package
12412 (name "python-fancycompleter")
12413 (version "0.9.1")
12414 (source
12415 (origin
12416 (method git-fetch)
12417 (uri (git-reference
12418 (url "https://github.com/pdbpp/fancycompleter")
12419 (commit version)))
12420 (file-name (git-file-name name version))
12421 (sha256
12422 (base32 "04gbnpm2m86wgigaqf03mphacawg203gdgpljx5xzax3vhm8qnxw"))))
12423 (build-system pyproject-build-system)
12424 (arguments
12425 (list
12426 #:phases
12427 #~(modify-phases %standard-phases
12428 (add-after 'unpack 'fix-setup.py
12429 (lambda _
12430 (substitute* "setup.py"
12431 ((".*setupmeta.*")
12432 "")
12433 (("versioning=.*")
12434 (string-append "version='" #$version "',"))
12435 ((".*pyrepl.*") ; broken on Python 3
12436 "")))))))
12437 (native-inputs (list python-pytest python-setuptools))
12438 (home-page "https://github.com/pdbpp/fancycompleter")
12439 (synopsis "TAB completion library for Python")
12440 (description
12441 "@code{fancycompleter} is a module that adds TAB completion to the
12442interactive prompt. It is an extension of the @code{rlcompleter} module from
12443the standard Python library.")
12444 (license license:bsd-3)))
12445
12446(define-public python-ipdb
12447 (package
12448 (name "python-ipdb")
12449 (version "0.13.13")
12450 (source
12451 (origin
12452 (method git-fetch)
12453 (uri (git-reference
12454 (url "https://github.com/gotcha/ipdb")
12455 (commit version)))
12456 (file-name (git-file-name name version))
12457 (sha256
12458 (base32 "151cw13kgfgv2is7kx10zzwp17kkvzz6658srdhgnzm6d5kjjrxk"))))
12459 (build-system pyproject-build-system)
12460 (arguments (list #:test-backend #~'unittest))
12461 (native-inputs (list python-setuptools))
12462 (propagated-inputs (list python-ipython python-toml python-decorator))
12463 (home-page "https://github.com/gotcha/ipdb")
12464 (synopsis "IPython-enhanced Python debugger (pdb)")
12465 (description
12466 "@code{ipdb} exports functions to access the IPython debugger, which
12467features tab completion, syntax highlighting, better tracebacks and better
12468introspection than Python's standard @command{pdb} debugger, with which it
12469shares the same interface.")
12470 (license license:bsd-3)))
12471
12472(define-public python-ipfsspec
12473 (package
12474 (name "python-ipfsspec")
12475 (version "0.4.0")
12476 (source
12477 (origin
12478 (method url-fetch)
12479 (uri (pypi-uri "ipfsspec" version))
12480 (sha256
12481 (base32 "1y4ad9schc76j2lynm7vpwi4q4jzi9vv843zfpisbp8zqgm0rr7l"))))
12482 (build-system pyproject-build-system)
12483 (arguments
12484 (list
12485 #:test-flags
12486 '(list "-m not local_gw"
12487 ;; Require local gateway
12488 "--ignore=test/test_gateway.py"
12489 ;; Require internet
12490 "--ignore=test/test_async.py"
12491 "--ignore=test/test_ipfs.py")))
12492 (propagated-inputs (list python-aiohttp python-fsspec python-requests))
12493 (native-inputs
12494 (list python-pytest
12495 python-pytest-asyncio
12496 python-setuptools
12497 python-wheel))
12498 (home-page "https://github.com/fsspec/ipfsspec")
12499 (synopsis "Read-only implementation of fsspec for IPFS")
12500 (description "This package provides a read-only implementation of
12501@code{fsspec} for IPFS.")
12502 (license license:expat)))
12503
12504(define-public python-pdftotext
12505 (package
12506 (name "python-pdftotext")
12507 (version "3.0.0")
12508 (source
12509 (origin
12510 (method url-fetch)
12511 (uri (pypi-uri "pdftotext" version))
12512 (sha256
12513 (base32 "1ahs7c0qh3gyafxwrg9p4gcqwcrnc7y57adzm0ama52f2lcjnrf3"))))
12514 (build-system pyproject-build-system)
12515 (native-inputs (list python-pytest python-setuptools python-wheel))
12516 (inputs (list poppler))
12517 (home-page "https://github.com/jalan/pdftotext")
12518 (synopsis "Simple PDF text extraction")
12519 (description "Pdftotext is a Python library of PDF text extraction.")
12520 (license license:expat)))
12521
12522(define-public python-pluginbase
12523 (package
12524 (name "python-pluginbase")
12525 (version "1.0.1")
12526 (source
12527 (origin
12528 (method git-fetch)
12529 (uri (git-reference
12530 (url "https://github.com/mitsuhiko/pluginbase")
12531 (commit (string-append "v" version))))
12532 (file-name (git-file-name name version))
12533 (sha256
12534 (base32 "16c089ka8z4wb4mnx6a3dbvibibgzvawm8zgkp7ppadsgb3lc357"))))
12535 (build-system pyproject-build-system)
12536 (arguments
12537 (list
12538 #:phases
12539 #~(modify-phases %standard-phases
12540 (replace 'check
12541 (lambda* (#:key tests? #:allow-other-keys)
12542 (when tests?
12543 (invoke "make" "test")))))))
12544 (native-inputs (list python-pytest python-setuptools))
12545 (home-page "https://github.com/mitsuhiko/pluginbase")
12546 (synopsis "Simple but flexible plugin system for Python")
12547 (description
12548 "PluginBase is a library useful in the development of flexible plugin
12549systems in Python.")
12550 (license license:bsd-3)))
12551
12552(define-public python-node-semver
12553 (package
12554 (name "python-node-semver")
12555 (version "0.8.1")
12556 (source
12557 (origin
12558 (method git-fetch)
12559 (uri (git-reference
12560 (url "https://github.com/podhmo/python-node-semver")
12561 (commit version)))
12562 (file-name (git-file-name name version))
12563 (sha256
12564 (base32 "0az6v4y8awl3dhgrfyikgz2vc8p1k15qwsq6yb8azp54m1fbh5hs"))))
12565 (build-system pyproject-build-system)
12566 (native-inputs (list python-pytest python-setuptools))
12567 (home-page "https://github.com/podhmo/python-node-semver")
12568 (synopsis "Python port of node-semver")
12569 (description
12570 "This module provides a Python version of node-semver, a semantic version
12571parser for Node.js.")
12572 (license license:expat)))
12573
12574(define-public python-norns
12575 (package
12576 (name "python-norns")
12577 (version "0.1.6")
12578 (source
12579 (origin
12580 (method git-fetch)
12581 (uri (git-reference
12582 (url "https://github.com/simonvh/norns")
12583 (commit version)))
12584 (file-name (git-file-name name version))
12585 (sha256
12586 (base32 "0x488xd2dp1clnzpb3gikx416g0fh1bjs25bwi0jmsvqmd80hmb0"))
12587 (patches
12588 (search-patches "python-norns-nose.patch"))))
12589 (build-system pyproject-build-system)
12590 (propagated-inputs (list python-appdirs python-pynose python-pyyaml))
12591 (native-inputs (list python-setuptools))
12592 (home-page "https://github.com/simonvh/norns")
12593 (synopsis "Simple YAML-based config module")
12594 (description "This package provides a simple YAML-based config module.")
12595 (license license:expat)))
12596
12597(define-public python-patch-ng
12598 (package
12599 (name "python-patch-ng")
12600 (version "1.18.1")
12601 (source
12602 (origin
12603 (method git-fetch)
12604 (uri (git-reference
12605 (url "https://github.com/conan-io/python-patch-ng")
12606 (commit version)))
12607 (file-name (git-file-name name version))
12608 (sha256
12609 (base32 "1kr3h0bkcr02zyfsmwmxfv5b4b9vf3bhsvrlwp6cwrfy3q3qnyq8"))))
12610 (build-system pyproject-build-system)
12611 (arguments
12612 (list
12613 #:test-backend #~'custom
12614 #:test-flags #~(list "tests/run_tests.py" "-v")))
12615 (native-inputs (list python-pytest python-setuptools))
12616 (home-page "https://github.com/conan-io/python-patch-ng")
12617 (synopsis "Python library to parse and apply unified diffs")
12618 (description
12619 "Patch NG (New Generation) is a command and Python library to parse and
12620apply unified diffs. It has features such as:
12621@itemize
12622@item automatic correction of common patch formatting corruption
12623@item patch format detection (SVN, Hg, Git)
12624@item nice diffstat histogram.
12625@end itemize")
12626 (license license:expat)))
12627
12628(define-public python-numpydoc
12629 (package
12630 (name "python-numpydoc")
12631 (version "1.10.0")
12632 (source
12633 (origin
12634 (method url-fetch)
12635 (uri (pypi-uri "numpydoc" version))
12636 (sha256
12637 (base32
12638 "00gsbzpx7s3yq6g5c8k7rlq2hhx2pdraqcbb18k142g3xvv70y9z"))))
12639 (build-system pyproject-build-system)
12640 (arguments
12641 (list
12642 #:test-flags
12643 '(list "numpydoc/tests"
12644 "-k" (string-append
12645 ;; TODO: unclear why these fail.
12646 "not test_MyClass and not test_my_function "
12647 ;; This test compares installed vs source absolute file
12648 ;; names.
12649 "and not test_source_file_name_with_properties"))))
12650 (propagated-inputs (list python-sphinx python-tomli))
12651 (native-inputs
12652 (list python-matplotlib python-pytest python-setuptools))
12653 (home-page "https://pypi.org/project/numpydoc/")
12654 (synopsis "Numpy's Sphinx extensions")
12655 (description "Sphinx extension to support docstrings in Numpy format.")
12656 (license license:bsd-2)))
12657
12658(define-public python-numexpr
12659 (package
12660 (name "python-numexpr")
12661 (version "2.14.1")
12662 (source
12663 (origin
12664 (method url-fetch)
12665 (uri (pypi-uri "numexpr" version))
12666 (sha256
12667 (base32 "12xla8qkza3xjrqb2yc517z460mqnwi82m9i5v1sbdy7hq80pq2b"))))
12668 (build-system pyproject-build-system)
12669 (arguments
12670 (list
12671 ;; tests: 6039 passed, 8 warnings
12672 #:phases
12673 #~(modify-phases %standard-phases
12674 (replace 'check
12675 (lambda* (#:key tests? test-flags #:allow-other-keys)
12676 (when tests?
12677 (with-directory-excursion #$output
12678 (apply invoke "pytest" "-vv" test-flags))))))))
12679 (native-inputs
12680 (list python-pytest
12681 python-setuptools))
12682 (propagated-inputs
12683 (list python-numpy))
12684 (home-page "https://github.com/pydata/numexpr")
12685 (synopsis "Fast numerical expression evaluator for NumPy")
12686 (description
12687 "Numexpr is a fast numerical expression evaluator for NumPy. With it,
12688expressions that operate on arrays are accelerated and use less memory than
12689doing the same calculation in Python. In addition, its multi-threaded
12690capabilities can make use of all your cores, which may accelerate
12691computations, most specially if they are not memory-bounded (e.g. those using
12692transcendental functions).")
12693 (license license:expat)))
12694
12695(define-public python-cycler
12696 (package
12697 (name "python-cycler")
12698 (version "0.12.1")
12699 (source
12700 (origin
12701 (method git-fetch) ;no tests in PyPI archive
12702 (uri (git-reference
12703 (url "https://github.com/matplotlib/cycler")
12704 (commit (string-append "v" version))))
12705 (file-name (git-file-name name version))
12706 (sha256
12707 (base32 "061b8vxd2kp016pnwik9jg6zqng8khzmg0p298wrz65z50yh1gg4"))))
12708 (build-system pyproject-build-system)
12709 (native-inputs
12710 (list python-pytest
12711 python-setuptools))
12712 (home-page "https://matplotlib.org/cycler/")
12713 (synopsis "Composable keyword argument iterator")
12714 (description
12715 "When using @code{matplotlib} and plotting more than one line, it is
12716common to want to be able to want to be able to cycle over one or more artist
12717styles; but the plotting logic can quickly become involved.
12718To address this and enable easy cycling over arbitrary @code{kwargs}, the
12719@code{Cycler} class was developed.")
12720 (license license:bsd-3)))
12721
12722(define-public python-colorspacious
12723 (package
12724 (name "python-colorspacious")
12725 (version "1.1.2")
12726 (source
12727 (origin
12728 (method git-fetch)
12729 (uri (git-reference
12730 (url "https://github.com/njsmith/colorspacious")
12731 (commit (string-append "v" version))))
12732 (file-name (git-file-name name version))
12733 (sha256
12734 (base32 "0x7nkphr6g5ql5fvgss8l56rgiyjgh6fm8zzs73i94ci9wzlm63w"))))
12735 (build-system pyproject-build-system)
12736 (arguments (list #:tests? #f)) ; No tests.
12737 (propagated-inputs (list python-numpy))
12738 (native-inputs (list python-pytest python-setuptools))
12739 (home-page "https://github.com/njsmith/colorspacious")
12740 (synopsis "Python library for colorspace conversions")
12741 (description
12742 "@code{colorspacious} is a Python library that lets you convert between
12743colorspaces like sRGB, XYZ, CIEL*a*b*, CIECAM02, CAM02-UCS, etc.")
12744 (license license:expat)))
12745
12746(define-public python-propcache
12747 (package
12748 (name "python-propcache")
12749 (version "0.2.1")
12750 (source
12751 (origin
12752 (method url-fetch)
12753 (uri (pypi-uri "propcache" version))
12754 (sha256
12755 (base32 "0r4sq2j6s63wziw8fhnrx0lxlg8ch3z2i6a92ivm7jqridrcwxrz"))))
12756 (build-system pyproject-build-system)
12757 (arguments
12758 (list
12759 #:test-flags
12760 #~(list "-o" "addopts=''" ; Avoid -p pytest_cov.
12761 "--ignore=tests/test_benchmarks.py")
12762 #:phases
12763 '(modify-phases %standard-phases
12764 (add-after 'unpack 'patch-build-system
12765 (lambda _
12766 ;; XXX: I don't know how to tell it to build the extensions in
12767 ;; place.
12768 (substitute* "packaging/pep517_backend/_backend.py"
12769 (("build_inplace=False") "build_inplace=True")))))))
12770 (native-inputs
12771 (list python-cython
12772 python-expandvars
12773 python-pytest
12774 python-pytest-xdist
12775 python-setuptools
12776 python-tomli))
12777 (home-page "https://github.com/aio-libs/propcache")
12778 (synopsis "Accelerated property cache")
12779 (description "The module provides a fast implementation of cached
12780properties for Python 3.9+.")
12781 (license license:asl2.0)))
12782
12783(define-public python-proto-matcher
12784 (package
12785 (name "python-proto-matcher")
12786 (version "0.0.3")
12787 (source
12788 (origin
12789 (method git-fetch)
12790 (uri (git-reference
12791 (url "https://github.com/dayfine/proto-matcher")
12792 (commit version)))
12793 (file-name (git-file-name name version))
12794 (sha256
12795 (base32 "1l0dqnicpk4gpfspdlng026sxnkgzy68x416aw7camwq0513mq5l"))))
12796 (build-system pyproject-build-system)
12797 (native-inputs (list python-pytest python-setuptools))
12798 (arguments (list #:tests? #f)) ; The test suite seems broken (missing data).
12799 (propagated-inputs (list python-protobuf python-pyhamcrest))
12800 (home-page "https://github.com/dayfine/proto-matcher")
12801 (synopsis "PyHamcrest test matchers for protocol buffers")
12802 (description
12803 "This package provides the following PyHamcrest test matchers, that
12804enable matching a protocol buffer message:
12805@table @code
12806@item equals_proto
12807Test the argument equals the given protobuf message.
12808@item approximately
12809Test the argument equals the given protobuf message, while comparing any float
12810field using approximation.
12811@item ignoring_field_paths
12812Test the argument equals the given protobuf message, while ignoring those
12813fields specified in the field paths.
12814@item ignoring_repeated_field_ordering
12815Test the argument equals the given protobuf message, ignoring the ordering of
12816any repeated field.
12817@item partially
12818Test the argument partially equals the given protobuf message, i.e. if a field
12819is in the argument but not in the expected message, it's ignored in the
12820comparison.
12821@end table")
12822 (license license:asl2.0)))
12823
12824(define-public python-matplotlib
12825 (package
12826 (name "python-matplotlib")
12827 (version "3.10.8")
12828 (source
12829 (origin
12830 (method git-fetch)
12831 (uri (git-reference
12832 (url "https://github.com/matplotlib/matplotlib")
12833 (commit (string-append "v" version))))
12834 (file-name (git-file-name name version))
12835 (sha256
12836 (base32 "1rlday52hcyrp7xfbdf4z8lzgnxkpfvjxnl9qmq0jvc3ph3n8k5i"))))
12837 (build-system pyproject-build-system)
12838 (arguments
12839 (list
12840 ;; tests: 6584 passed, 1519 skipped, 29 xfailed
12841 #:configure-flags
12842 ''(("setup-args" . #("-DrcParams-backend=TkAgg"
12843 "-Dsystem-freetype=true"
12844 "-Dsystem-qhull=true"))
12845 ("install-args" . "--tags=data,python-runtime,runtime,tests"))
12846 #:test-flags
12847 #~(list "-m" "not network"
12848 "-n" (number->string (parallel-job-count))
12849 ;; Run the installed tests, which is what we want since not
12850 ;; everything gets built in the source directory.
12851 "--pyargs" "matplotlib"
12852 "-k"
12853 (string-join
12854 (list
12855 ;; XXX: Disable all image comparison tests because we're using
12856 ;; a newer version of FreeType than matplotlib expects. This
12857 ;; leads to minor differences throughout the tests.
12858 "not image_comparison"
12859 "check_figures_equal"
12860 "png" ;disables many problematic image tests
12861 "test_figure_legend_outside"
12862 "test_ft2font_get_kerning"
12863 "test_normal_axes"
12864 "test_get_tightbbox_polar"
12865 ;; The invisible line ordering test fails due to a too short
12866 ;; timeout (see:
12867 ;; <https://github.com/matplotlib/matplotlib/issues/30809>).
12868 "test_invisible_Line_rendering"
12869 ;; The determinism check test is not deterministic (see:
12870 ;; <https://github.com/matplotlib/matplotlib/issues/30360>)
12871 "test_determinism_check")
12872 " and not "))
12873 #:phases
12874 #~(modify-phases %standard-phases
12875 (add-after 'unpack 'patch-commands
12876 (lambda _
12877 (substitute* "lib/matplotlib/tests/test_animation.py"
12878 (("/bin/sh") (which "sh")))))
12879 (add-after 'unpack 'patch-dlopen
12880 (lambda* (#:key inputs #:allow-other-keys)
12881 (substitute* "src/_c_internal_utils.cpp"
12882 (("libX11.so.6")
12883 (search-input-file inputs "lib/libX11.so.6")))))
12884 (add-before 'build 'configure-environment
12885 (lambda* (#:key inputs #:allow-other-keys)
12886 ;; Fix rounding errors when using the x87 FPU.
12887 (when (string-prefix? "i686" #$(%current-system))
12888 (setenv "CFLAGS" "-ffloat-store"))))
12889 (add-before 'check 'chdir
12890 (lambda _
12891 ;; Step out of the source directory to avoid interference.
12892 (chdir "/tmp"))))))
12893 (propagated-inputs
12894 (list python-contourpy
12895 python-cycler
12896 python-dateutil
12897 python-fonttools-minimal
12898 python-importlib-resources
12899 python-kiwisolver
12900 python-numpy
12901 python-packaging
12902 python-pillow
12903 python-pyparsing
12904 `(,python "tk")))
12905 (inputs
12906 (list cairo
12907 freetype
12908 glib
12909 libpng
12910 qhull
12911 tcl
12912 tk))
12913 (native-inputs
12914 (list pkg-config
12915 python-meson
12916 pybind11-2
12917 python-pytest
12918 python-pytest-timeout
12919 python-pytest-xdist
12920 python-setuptools
12921 python-setuptools-scm))
12922 (home-page "https://matplotlib.org/")
12923 (synopsis "2D plotting library for Python")
12924 (description
12925 "Matplotlib is a Python 2D plotting library which produces publication
12926quality figures in a variety of hardcopy formats and interactive environments
12927across platforms. Matplotlib can be used in Python scripts, the python and
12928ipython shell, web application servers, and six graphical user interface
12929toolkits.")
12930 (license license:psfl)))
12931
12932(define-public python-matplotlib-documentation
12933 (package
12934 (inherit python-matplotlib)
12935 (name "python-matplotlib-documentation")
12936 (arguments
12937 (list
12938 #:tests? #f ;we're only generating documentation
12939 #:phases
12940 #~(modify-phases %standard-phases
12941 (add-after 'unpack 'avoid-external-deps
12942 (lambda _
12943 ;; XXX: Avoid theme-switcher to avoid sphinx error
12944 ;; TemplateNotFound('theme-switcher.html')
12945 ;; XXX: Avoid version-switcher because it depends on an
12946 ;; external file, and we pack only one version anyway.
12947 (substitute* "doc/conf.py"
12948 (("\
12949\"navbar_end\": \\[\"theme-switcher\", \"version-switcher\", ")
12950 "\"navbar_end\": ["))))
12951 (replace 'build
12952 (lambda _
12953 (setenv "HOME" "/tmp")
12954 (chdir "doc")
12955 (invoke "make" "html" "info"
12956 ;; Don't abort on warnings; build in parallel.
12957 (format #f "SPHINXOPTS=-j~a" (parallel-job-count)))))
12958 (replace 'install
12959 (lambda _
12960 (let* ((data (string-append #$output "/share"))
12961 (doc (string-append data "/doc/matplotlib"))
12962 (info (string-append data "/info"))
12963 (html (string-append doc "/html")))
12964 (mkdir-p html)
12965 (copy-recursively "build/html" html)
12966 (install-file "build/texinfo/matplotlib.info" info)
12967 ;; The "matplotlib-figures" directory contains are a subset of
12968 ;; the images produced for the html target; simply create a
12969 ;; symlink to it, saving about 11 MiB.
12970 (symlink (string-append html "/_images")
12971 (string-append info "/matplotlib-figures"))))))))
12972 ;; Move all propagated inputs to inputs. *-documentation packages are
12973 ;; expected to be installed as standalone leaf packages, and not as
12974 ;; libraries with propagated inputs.
12975 (propagated-inputs '())
12976 (inputs (append
12977 (package-inputs python-matplotlib)
12978 (package-propagated-inputs python-matplotlib)))
12979 (native-inputs
12980 (list ffmpeg ;for matplotlib animation support
12981 graphviz
12982 inkscape/pinned
12983 python-colorspacious
12984 python-ipython
12985 python-ipykernel
12986 python-ipywidgets
12987 python-matplotlib
12988 python-mpl-sphinx-theme
12989 python-numpydoc
12990 python-pyyaml
12991 python-scipy
12992 python-setuptools
12993 ;; XXX: investigate how to build using a newer version of sphinx.
12994 python-sphinx-6
12995 python-sphinx-copybutton
12996 python-sphinx-design
12997 python-sphinx-gallery
12998 python-sphinx-tags
12999 python-sphinxcontrib-svg2pdfconverter
13000 python-sphinxcontrib-video
13001 texinfo
13002 texlive-dvipng-bin
13003 (texlive-local-tree
13004 (list texlive-amsfonts
13005 texlive-amsmath
13006 texlive-babel
13007 texlive-cm-super
13008 texlive-etoolbox
13009 texlive-expdlist
13010 texlive-fontspec
13011 texlive-times
13012 texlive-type1cm
13013 texlive-underscore
13014 texlive-unicode-math))))
13015 (synopsis "Documentation for the @code{python-matplotlib} package")))
13016
13017(define-public python-matplotlib-inline
13018 (package
13019 (name "python-matplotlib-inline")
13020 (version "0.1.7")
13021 (source
13022 (origin
13023 (method url-fetch)
13024 (uri (pypi-uri "matplotlib_inline" version))
13025 (sha256
13026 (base32 "145bl0ppy4cz1fii3pfixd0fi1jfmkcbsq3bw4b3vgk6qqzb48w4"))))
13027 (build-system pyproject-build-system)
13028 (arguments
13029 (list
13030 ;; Tests disabled because of a circular dependency with IPython.
13031 #:tests? #f
13032 #:phases
13033 #~(modify-phases %standard-phases
13034 ;; Disabled because of a circular dependency with IPython.
13035 (delete 'sanity-check))))
13036 (native-inputs
13037 (list python-setuptools))
13038 (propagated-inputs
13039 (list python-matplotlib
13040 python-traitlets))
13041 (home-page "https://github.com/ipython/matplotlib-inline")
13042 (synopsis "Inline Matplotlib backend for Jupyter")
13043 (description
13044 "This package provides a Matplotlib inline back-end for IPython and
13045Jupyter.")
13046 (license license:bsd-3)))
13047
13048(define-public python-matplotlib-venn
13049 (package
13050 (name "python-matplotlib-venn")
13051 (version "1.1.2")
13052 (source
13053 (origin
13054 (method url-fetch)
13055 (uri (pypi-uri "matplotlib-venn" version))
13056 (sha256
13057 (base32 "1qrnxhi2rbz737fm9mprfr8ig7kk2r99cbzkw8nsddcv7sh0favg"))))
13058 (build-system pyproject-build-system)
13059 (native-inputs (list python-pytest
13060 python-setuptools
13061 python-shapely
13062 python-wheel))
13063 (propagated-inputs
13064 (list python-matplotlib python-numpy python-scipy))
13065 (home-page "https://github.com/konstantint/matplotlib-venn")
13066 (synopsis "Plot area-proportional Venn diagrams")
13067 (description
13068 "This package provides tools for plotting area-proportional two- and
13069three-way Venn diagrams in @code{matplotlib}.")
13070 (license license:expat)))
13071
13072(define-public python-matplotx
13073 (package
13074 (name "python-matplotx")
13075 (version "0.3.10")
13076 (source
13077 (origin
13078 (method git-fetch)
13079 (uri (git-reference
13080 (url "https://github.com/nschloe/matplotx")
13081 (commit (string-append "v" version))))
13082 (file-name (git-file-name name version))
13083 (sha256
13084 (base32 "1j301mr7ai2jmbm5mkva0jd99fzxhyq585pqzqfmrf5pil8j4q8i"))))
13085 (build-system pyproject-build-system)
13086 (arguments
13087 (list
13088 #:test-flags
13089 ;; This test fails with ValueError: not enough values to unpack.
13090 #~(list "--deselect" "tests/test_spy.py::test_cli"
13091 ;; XXX: unknown failure
13092 "--deselect" "tests/test_spy.py::test_png")))
13093 (propagated-inputs
13094 (list python-matplotlib
13095 python-numpy
13096 ;; optional dependencies
13097 python-networkx
13098 python-pypng
13099 python-scipy))
13100 (native-inputs (list python-imageio
13101 python-meshzoo
13102 python-pytest
13103 python-scikit-fem
13104 python-setuptools
13105 python-wheel))
13106 (home-page "https://github.com/nschloe/matplotx")
13107 (synopsis "Minimal matplotlib styles")
13108 (description
13109 "This package includes some extensions for Matplotlib to create
13110clean plots with a minimalistic style.")
13111 (license license:expat)))
13112
13113(define-public python-cplot
13114 (package
13115 (name "python-cplot")
13116 (version "0.9.3")
13117 (source
13118 (origin
13119 (method git-fetch) ;for tests
13120 (uri (git-reference
13121 (url "https://github.com/nschloe/cplot")
13122 (commit (string-append "v" version))))
13123 (file-name (git-file-name name version))
13124 (sha256
13125 (base32 "0zk7hpq358sbympmkms7w2wjs7nw8mdfvkvdasblg2nhqayv42qz"))))
13126 (build-system pyproject-build-system)
13127 (native-inputs
13128 (list python-pytest
13129 python-setuptools
13130 python-wheel))
13131 (propagated-inputs
13132 (list python-matplotlib
13133 python-matplotx
13134 python-npx
13135 python-numpy))
13136 (home-page "https://github.com/nschloe/cplot")
13137 (synopsis "Plot complex-valued functions")
13138 (description "@code{cplot} is a Python library for plotting
13139complex-valued functions.")
13140 (license license:gpl3+)))
13141
13142(define-public python-cppheaderparser
13143 (package
13144 (name "python-cppheaderparser")
13145 (version "2.7.4")
13146 (source
13147 (origin
13148 (method url-fetch)
13149 (uri (pypi-uri "CppHeaderParser" version))
13150 (sha256
13151 (base32 "0hncwd9y5ayk8wa6bqhp551mcamcvh84h89ba3labc4mdm0k0arq"))))
13152 (build-system pyproject-build-system)
13153 (arguments
13154 (list
13155 #:tests? #f)) ; no tests
13156 (propagated-inputs (list python-ply))
13157 (native-inputs (list python-setuptools python-wheel))
13158 (home-page "http://senexcanis.com/open-source/cppheaderparser/")
13159 (synopsis
13160 "Parse C++ header files and generate a data structure representing the class")
13161 (description
13162 "CppHeaderParser is a pure python module that will parse C++ header files
13163and generate a data structure representing the class.")
13164 (license license:bsd-3)))
13165
13166(define-public python-cppy
13167 (package
13168 (name "python-cppy")
13169 (version "1.3.1")
13170 (source
13171 (origin
13172 (method url-fetch)
13173 (uri (pypi-uri "cppy" version))
13174 (sha256
13175 (base32 "0s3d7bjgr9af571y7czswjymnymnihwnyf9ml4p28kw725y31dam"))))
13176 (build-system pyproject-build-system)
13177 (native-inputs
13178 (list python-pytest
13179 python-setuptools
13180 python-setuptools-scm
13181 python-wheel))
13182 (home-page "https://github.com/nucleic/cppy")
13183 (synopsis "C++ header library for Python extension modules")
13184 (description "This package is a small C++ header library which makes it
13185easier to write Python extension modules. The primary feature is a
13186@code{PyObject} smart pointer which automatically handles reference counting
13187and provides convenience methods for performing common object operations.")
13188 (license license:bsd-3)))
13189
13190(define-public python-perfplot
13191 (package
13192 (name "python-perfplot")
13193 (version "0.10.2")
13194 (source (origin
13195 (method url-fetch)
13196 (uri (pypi-uri "perfplot" version))
13197 (sha256
13198 (base32
13199 "0hbyv17f9ra6l6albcrqx4rylmfv2m6z4qsnhb4bar256dralvfp"))))
13200 (build-system pyproject-build-system)
13201 (propagated-inputs (list python-matplotlib
13202 python-matplotx
13203 python-numpy-1
13204 python-rich))
13205 (native-inputs (list python-flit-core
13206 python-pytest))
13207 (home-page "https://github.com/nschloe/perfplot")
13208 (synopsis "Performance plots for Python code snippets")
13209 (description "@code{perfplot} extends Python's timeit by testing
13210snippets with input parameters (e.g., the size of an array) and plotting
13211the results.")
13212 (license license:gpl3+)))
13213
13214(define-public python-persist-queue
13215 (package
13216 (name "python-persist-queue")
13217 (version "1.1.0")
13218 (source
13219 (origin
13220 (method git-fetch)
13221 (uri (git-reference
13222 (url "https://github.com/peter-wangxu/persist-queue")
13223 (commit (string-append "v" version))))
13224 (file-name (git-file-name name version))
13225 (sha256
13226 (base32 "02agwksg0idyhbd4q2sn36igi0zv4kfbkn8vixnbv4q0ki75gfzh"))))
13227 (build-system pyproject-build-system)
13228 (native-inputs
13229 (list python-pytest
13230 python-pytest-asyncio
13231 python-setuptools))
13232 (propagated-inputs
13233 (list python-aiofiles
13234 python-aiosqlite
13235 python-cbor2
13236 python-dbutils
13237 python-msgpack))
13238 (home-page "https://github.com/peter-wangxu/persist-queue")
13239 (synopsis "Thread-safe disk based persistent queue in Python")
13240 (description
13241 "This package provides a thread-safe disk (file and sqlite) based
13242persistent queue in Python.")
13243 (license license:bsd-3)))
13244
13245(define-public python-pycodestyle
13246 (package
13247 (name "python-pycodestyle")
13248 (version "2.12.1")
13249 (source
13250 (origin
13251 (method url-fetch)
13252 (uri (pypi-uri "pycodestyle" version))
13253 (sha256
13254 (base32 "089mszv65gwnz4nq8vryxqanlqk3bh3p4maxrnngdr5wighflf38"))))
13255 (build-system pyproject-build-system)
13256 (arguments
13257 (list
13258 #:test-flags #~(list "-m" "pycodestyle" "--statistics" "pycodestyle.py")
13259 #:phases
13260 #~(modify-phases %standard-phases
13261 ;; Taken from Tox config
13262 ;; <https://github.com/PyCQA/pycodestyle/blob/2.11.0/tox.ini#L16>.
13263 (replace 'check
13264 (lambda* (#:key tests? test-flags #:allow-other-keys)
13265 (when tests?
13266 (apply invoke "python" "-v" test-flags)))))))
13267 (native-inputs
13268 (list python-setuptools
13269 python-wheel))
13270 (home-page "https://pycodestyle.readthedocs.io/")
13271 (synopsis "Python style guide checker")
13272 (description "@code{pycodestyle} (formerly pep8) is a tool to check
13273Python code against some of the style conventions in
13274@url{http://www.python.org/dev/peps/pep-0008/,PEP 8}.")
13275 (license license:expat)))
13276
13277(define-public python-pycollada
13278 (package
13279 (name "python-pycollada")
13280 (version "0.9.2")
13281 (source
13282 (origin
13283 (method git-fetch)
13284 (uri (git-reference
13285 (url "https://github.com/pycollada/pycollada")
13286 (commit (string-append "v" version))))
13287 (file-name (git-file-name name version))
13288 (sha256
13289 (base32 "13pj179p9gdiza409n8mdl7cpfasc3mrmk40p1vqplfdshks75dy"))))
13290 (build-system pyproject-build-system)
13291 (native-inputs
13292 (list python-pytest
13293 python-setuptools))
13294 (propagated-inputs
13295 (list python-numpy
13296 python-dateutil))
13297 (home-page "https://pycollada.readthedocs.io")
13298 (synopsis "Reading and writing collada documents library")
13299 (description
13300 "This package implements a functionality for creating, editing and
13301loading @url{https://www.khronos.org/collada/,COLLADA},which is a
13302COLLAborative Design Activity for establishing an interchange file format for
13303interactive 3D applications.
13304
13305The library allows you to load a COLLADA file and interact with it as a python
13306object. In addition, it supports creating a collada python object from
13307scratch, as well as in-place editing.")
13308 (license license:bsd-3)))
13309
13310(define-public python-pyct
13311 (package
13312 (name "python-pyct")
13313 (version "0.5.0")
13314 (source
13315 (origin
13316 (method url-fetch)
13317 (uri (pypi-uri "pyct" version))
13318 (sha256
13319 (base32 "1856dbrcpc0nxxhlfh3dqzz7xxn5sdi600q45hsprqyqrg2lm7yx"))))
13320 (build-system pyproject-build-system)
13321 (arguments
13322 (list
13323 #:test-flags
13324 ;; These tests want to download example data from the internet.
13325 '(list "-k" (string-append
13326 "not test_examples_with_use_test_data"
13327 " and not test_examples_using_test_data_and_force_with_prexisting_content_in_target"
13328 " and not test_fetch_data_using_test_data_with_no_file_in_data_copies_from_stubs"
13329 " and not test_fetch_data_using_test_data_and_force_with_file_in_data_over_writes"))))
13330 (propagated-inputs (list python-param python-pyyaml))
13331 (native-inputs (list python-flake8 python-pytest python-setuptools python-wheel))
13332 (home-page "https://github.com/holoviz-dev/pyct")
13333 (synopsis "Common packaging tasks")
13334 (description
13335 "This Python package provides utilities to run common packaging tasks,
13336e.g. copy examples, fetch data, etc.")
13337 (license license:bsd-3)))
13338
13339(define-public python-multidict
13340 (package
13341 (name "python-multidict")
13342 (version "6.7.0")
13343 (source
13344 (origin
13345 (method git-fetch)
13346 (uri (git-reference
13347 (url "https://github.com/aio-libs/multidict/")
13348 (commit (string-append "v" version))))
13349 (file-name (git-file-name name version))
13350 (sha256
13351 (base32 "1rcd2vi4837ahb6nyi0vxhvvzaa7bpc7zpg0xynbdv8qgif98j1l"))))
13352 (build-system pyproject-build-system)
13353 (arguments
13354 (list
13355 ;; tests: 1395 passed
13356 #:test-flags
13357 #~(list "-o" "addopts=''" ; Avoid -p pytest_cov.
13358 "--ignore-glob=tests/test_*_benchmarks.py")))
13359 (native-inputs
13360 (list python-objgraph
13361 python-psutil
13362 python-pytest
13363 python-setuptools))
13364 (home-page "https://github.com/aio-libs/multidict/")
13365 (synopsis "Multidict implementation")
13366 (description
13367 "Multidict is dict-like collection of key-value pairs where key might be
13368occurred more than once in the container.")
13369 (license license:asl2.0)))
13370
13371(define-public python-orderedmultidict
13372 (package
13373 (name "python-orderedmultidict")
13374 (version "1.0.1")
13375 (source
13376 (origin
13377 (method url-fetch)
13378 (uri (pypi-uri "orderedmultidict" version))
13379 (sha256
13380 (base32 "1bc2v0yflsxjyyjx4q9wqx0j3bvzcw9z87d5pz4iqac7bsxhn1q4"))))
13381 (build-system pyproject-build-system)
13382 (propagated-inputs
13383 (list python-six))
13384 (native-inputs
13385 (list python-pytest
13386 python-setuptools))
13387 (home-page "https://github.com/gruns/orderedmultidict")
13388 (synopsis "Python Ordered Multivalue Dictionary - omdict")
13389 (description "This package contains a library for ordered multivalue
13390dictionaries. A multivalue dictionary is a dictionary that can store
13391multiple values for the same key. An ordered multivalue dictionary is a
13392multivalue dictionary that retains the order of insertions and deletions.")
13393 (license license:unlicense)))
13394
13395(define-public python-autopage
13396 (package
13397 (name "python-autopage")
13398 (version "0.5.1")
13399 (source (origin
13400 (method url-fetch)
13401 (uri (pypi-uri "autopage" version))
13402 (sha256
13403 (base32
13404 "169ixll1ncm2a2pcc86665ikjv2lrzs10p6c1w4yj55p3gk3xgh1"))))
13405 (build-system pyproject-build-system)
13406 (arguments
13407 (list
13408 #:phases
13409 #~(modify-phases %standard-phases
13410 (add-before 'check 'disable-e2e-tests
13411 (lambda _
13412 ;; These tests rely on KeyboardInterrupts which do not
13413 ;; work in the build container.
13414 (delete-file "autopage/tests/test_end_to_end.py"))))))
13415 (native-inputs
13416 (list python-pypa-build
13417 python-setuptools
13418 python-wheel
13419 ;; For tests.
13420 python-fixtures
13421 python-pytest
13422 python-testtools))
13423 (home-page "https://github.com/zaneb/autopage")
13424 (synopsis "Automatic paging for console output")
13425 (description
13426 "Autopage is a Python library to automatically display terminal output
13427from a program in a @dfn{pager} such as @command{less}.")
13428 (license license:asl2.0)))
13429
13430(define-public python-dirty-equals
13431 (package
13432 (name "python-dirty-equals")
13433 (version "0.11.0")
13434 (source
13435 (origin
13436 (method git-fetch)
13437 (uri (git-reference
13438 (url "https://github.com/samuelcolvin/dirty-equals")
13439 (commit (string-append "v" version))))
13440 (file-name (git-file-name name version))
13441 (sha256
13442 (base32 "11nrdzcrc5hg3sbrhrdrmw43nvrx8wpzkl5q0p91pihxnfnrcli4"))))
13443 (build-system pyproject-build-system)
13444 ;; tests: 551 passed, 60 skipped
13445 (native-inputs
13446 (list python-hatchling
13447 python-pydantic
13448 python-pytest
13449 python-pytest-examples
13450 tzdata-for-tests))
13451 (home-page "https://dirty-equals.helpmanual.io/")
13452 (synopsis "Do dirty (but useful) things with equals")
13453 (description
13454 "@code{dirty-equals} is a Python library that (mis)uses the
13455@code{__eq__} method to make code (generally unit tests) more declarative
13456and therefore easier to read and write.")
13457 (license license:expat)))
13458
13459(define-public python-dirty-equals-bootstrap
13460 (hidden-package
13461 (package
13462 (inherit python-dirty-equals)
13463 (name "python-dirty-equals-bootstrap")
13464 (arguments
13465 (list #:tests? #f))
13466 (native-inputs
13467 (list python-hatchling)))))
13468
13469(define-public python-distutils-extra
13470 (package
13471 (name "python-distutils-extra")
13472 (version "2.38")
13473 (source
13474 (origin
13475 (method url-fetch)
13476 (uri (string-append "https://launchpad.net/python-distutils-extra/trunk/"
13477 version "/+download/python-distutils-extra-"
13478 version ".tar.gz"))
13479 (sha256
13480 (base32
13481 "0lx15kcbby9zisx33p2h5hgakgwh2bvh0ibag8z0px4j6ifhs41x"))))
13482 (build-system pyproject-build-system)
13483 (arguments
13484 (list #:tests? #f)) ;tests are outdated and broken
13485 (native-inputs (list python-setuptools python-wheel))
13486 (home-page "https://launchpad.net/python-distutils-extra/")
13487 (synopsis "Enhancements to Python's distutils")
13488 (description
13489 "The python-distutils-extra module enables you to easily integrate
13490gettext support, themed icons, and scrollkeeper-based documentation into
13491Python's distutils.")
13492 (license license:gpl2)))
13493
13494(define-public python-olefile
13495 (package
13496 (name "python-olefile")
13497 (version "0.47")
13498 (source
13499 (origin
13500 (method git-fetch)
13501 (uri (git-reference
13502 (url "https://github.com/decalage2/olefile")
13503 (commit (string-append "v" version))))
13504 (file-name (git-file-name name version))
13505 (sha256
13506 (base32 "1ardfp32jgijha6vk7znvnpwgi710c6gj02lk4drv45xj4mw71hv"))))
13507 (build-system pyproject-build-system)
13508 (native-inputs
13509 (list python-pytest
13510 python-setuptools))
13511 (home-page "https://www.decalage.info/python/olefileio")
13512 (synopsis "Read and write Microsoft OLE2 files")
13513 (description
13514 "@code{olefile} can parse, read and write Microsoft OLE2 files (Structured
13515Storage or Compound Document, Microsoft Office). It is an improved version of
13516the OleFileIO module from PIL, the Python Image Library.")
13517 (license license:bsd-3)))
13518
13519(define-public python-property-cached
13520 (package
13521 (name "python-property-cached")
13522 (version "1.6.4")
13523 (source
13524 (origin
13525 (method url-fetch)
13526 (uri (pypi-uri "property-cached" version ".zip"))
13527 (sha256
13528 (base32 "0wxv5sdx1p7ils36j6j6hfscz8v2vzbq212i8y8r0lrnxpqlx71y"))
13529 (patches
13530 (search-patches "python-property-cached-asyncio-3_11.patch"))))
13531 (build-system pyproject-build-system)
13532 (arguments
13533 (list
13534 ;; AssertionError.
13535 #:test-flags #~(list "-k" "not test_threads_ttl_expiry")))
13536 (native-inputs (list python-freezegun python-pytest unzip
13537 python-setuptools python-wheel))
13538 (home-page "https://github.com/althonos/property-cached/")
13539 (synopsis "Decorator for caching properties in classes")
13540 (description "This package provides a decorator for caching properties in
13541classes. It is forked from @code{cached-property}.")
13542 (license license:bsd-3)))
13543
13544(define-public python-pdf2image
13545 (package
13546 (name "python-pdf2image")
13547 (version "1.17.0")
13548 (source
13549 (origin
13550 (method git-fetch)
13551 (uri (git-reference
13552 (url "https://github.com/Belval/pdf2image")
13553 (commit (string-append "v" version))))
13554 (file-name (git-file-name name version))
13555 (sha256
13556 (base32 "0xd8q939zqa8flfcdhbgyadiwqb8sgnd42cbr6n1l2jl9fnix45v"))))
13557 (build-system pyproject-build-system)
13558 (arguments
13559 (list
13560 ;; The following excluded tests assume hardcoded binary paths to
13561 ;; /usr/bin/pdftoppm and /usr/bin/pdftocairo.
13562 #:test-flags
13563 #~(list "--exclude=^test_use_poppler_path$"
13564 "--exclude=^test_use_poppler_path_with_trailing_slash$")))
13565 (propagated-inputs (list python-pillow))
13566 (inputs (list poppler))
13567 (native-inputs (list python-pynose which python-setuptools))
13568 (home-page "https://github.com/Belval/pdf2image")
13569 (synopsis
13570 "Python wrapper around @command{pdftoppm} and @command{pdftocairo}")
13571 (description
13572 "This package provides a Python API wrapping the @command{pdftoppm} and
13573@command{pdftocairo} command line tools. It can convert @file{PDF} files to a
13574Python list with elements of type @code{PIL.Image} (from the
13575@code{python-pillow} library).")
13576 (license license:expat)))
13577
13578(define-public python-pikepdf
13579 (package
13580 (name "python-pikepdf")
13581 (version "8.15.1")
13582 (source
13583 (origin
13584 (method git-fetch)
13585 (uri (git-reference
13586 (url "https://github.com/pikepdf/pikepdf")
13587 (commit (string-append "v" version))))
13588 (file-name (git-file-name name version))
13589 (sha256
13590 (base32 "0hpnb63xp8yaflah3i1z5azh6mg36rz0liy27km47417w2q72v0c"))))
13591 (build-system pyproject-build-system)
13592 (native-inputs
13593 (list pybind11-2
13594 python-attrs
13595 python-hypothesis
13596 python-setuptools-scm
13597 python-psutil
13598 python-pytest
13599 python-pytest-timeout
13600 python-pytest-xdist
13601 python-dateutil
13602 python-xmp-toolkit
13603 python-tomli
13604 python-setuptools))
13605 (inputs
13606 (list qpdf))
13607 (propagated-inputs
13608 (list python-deprecated python-lxml python-packaging python-pillow))
13609 (home-page "https://github.com/pikepdf/pikepdf")
13610 (synopsis "Read and write PDFs with Python")
13611 (description
13612 "pikepdf is a Python library for reading and writing PDF files.")
13613 (license license:mpl2.0)))
13614
13615(define-public python-pillow
13616 (package
13617 (name "python-pillow")
13618 (version "12.1.1")
13619 (source
13620 (origin
13621 (method git-fetch)
13622 (uri (git-reference
13623 (url "https://github.com/python-pillow/Pillow")
13624 (commit version)))
13625 (file-name (git-file-name name version))
13626 (sha256
13627 (base32 "1g374rklljx0941j6d1gib9pgcq3scmqw9psqaj2c7m8pilqsn9n"))))
13628 (build-system pyproject-build-system)
13629 (arguments
13630 (list
13631 #:phases
13632 #~(modify-phases %standard-phases
13633 (add-after 'unpack 'patch-ldconfig
13634 (lambda _
13635 (substitute* "setup.py"
13636 (("\\['/sbin/ldconfig', '-p'\\]") "['true']"))))
13637 (replace 'check
13638 (lambda* (#:key tests? #:allow-other-keys)
13639 (when tests?
13640 (setenv "HOME" (getcwd))
13641 (invoke "python" "selftest.py" "--installed")
13642 (invoke "python" "-m" "pytest" "-vv")))))))
13643 (native-inputs (list pybind11
13644 python-defusedxml
13645 python-markdown2
13646 python-olefile
13647 python-pytest
13648 python-setuptools
13649 python-trove-classifiers))
13650 (inputs (list freetype
13651 lcms
13652 libjpeg-turbo
13653 libtiff
13654 libwebp
13655 openjpeg
13656 zlib))
13657 (home-page "https://python-pillow.github.io/")
13658 (synopsis "Fork of the Python Imaging Library")
13659 (description
13660 "The Python Imaging Library adds image processing capabilities to your
13661Python interpreter. This library provides extensive file format support, an
13662efficient internal representation, and fairly powerful image processing
13663capabilities. The core image library is designed for fast access to data
13664stored in a few basic pixel formats. It should provide a solid foundation for
13665a general image processing tool.")
13666 (properties `((cpe-name . "pillow")))
13667 (license (license:x11-style
13668 "https://github.com/python-pillow/Pillow/blob/12.1.1/LICENSE"
13669 "MIT-CMU License"))))
13670
13671(define-public python-pillow-avif-plugin
13672 (package
13673 (name "python-pillow-avif-plugin")
13674 (version "1.5.5")
13675 (source
13676 (origin
13677 (method git-fetch)
13678 (uri (git-reference
13679 (url "https://github.com/fdintino/pillow-avif-plugin/")
13680 (commit (string-append "v" version))))
13681 (file-name (git-file-name name version))
13682 (sha256
13683 (base32 "1812liaxcdhzqzrjl9cf2xrnki7zz6f3iq3dvh1w9sgnbbjhfkj6"))))
13684 (build-system pyproject-build-system)
13685 (propagated-inputs (list python-requests))
13686 (native-inputs (list python-packaging
13687 python-pillow
13688 python-pytest
13689 python-setuptools))
13690 (inputs (list libavif))
13691 (home-page "https://github.com/fdintino/pillow-avif-plugin/")
13692 (synopsis "Pillow plugin that adds avif support via libavif")
13693 (description
13694 "This package provides a pillow plugin that adds avif support via
13695libavif.")
13696 (license license:expat)))
13697
13698(define-public python-pillow-heif
13699 (package
13700 (name "python-pillow-heif")
13701 ;; The tagged version 1.3.0 fails tests with libheif version 1.22.2. This
13702 ;; commit is taken from the master branch.
13703 (properties '((commit . "4366788c5eff15cf3d3c66d262224dac27f8efc4")
13704 (revision . "0")))
13705 (version (git-version "1.3.0"
13706 (assoc-ref properties 'revision)
13707 (assoc-ref properties 'commit)))
13708 (source
13709 (origin
13710 (method git-fetch)
13711 (uri (git-reference
13712 (url "https://github.com/bigcat88/pillow_heif")
13713 (commit (assoc-ref properties 'commit))))
13714 (file-name (git-file-name name version))
13715 (sha256
13716 (base32 "1dj35h2q2ng7hhv9nyqs0dd0x66kq0a5sgn1f6mc5d191qb90dy3"))))
13717 (build-system pyproject-build-system)
13718 (inputs (list libheif))
13719 (propagated-inputs (list python-pillow))
13720 (native-inputs (list opencv ; for opencv-python
13721 python-defusedxml
13722 python-numpy
13723 python-packaging
13724 python-pympler
13725 python-pytest
13726 python-setuptools))
13727 (home-page "https://github.com/bigcat88/pillow_heif")
13728 (synopsis "Python interface for libheif library")
13729 (description "This package provides Python bindings for the libheif library
13730and a plugin for Pillow.")
13731 (license license:bsd-3)))
13732
13733(define-public python-pillow-jxl-plugin
13734 (package
13735 (name "python-pillow-jxl-plugin")
13736 (version "1.3.7")
13737 (source
13738 (origin
13739 (method git-fetch)
13740 (uri (git-reference
13741 (url "https://github.com/Isotr0py/pillow-jpegxl-plugin")
13742 (commit (string-append "v" version))))
13743 (file-name (git-file-name name version))
13744 (sha256
13745 (base32 "0bfcypr81c7rxvs2yw992f3dklfbniyysgfrplsa706raa3288pk"))))
13746 (build-system pyproject-build-system)
13747 (arguments
13748 (list
13749 ;; Test requires OpenEXR and pyexiv2 modules, which not are yet available
13750 ;; in Guix.
13751 #:tests? #f
13752 #:imported-modules `(,@%cargo-build-system-modules
13753 ,@%pyproject-build-system-modules)
13754 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
13755 (guix build pyproject-build-system)
13756 (guix build utils))
13757 #:phases
13758 #~(modify-phases %standard-phases
13759 (add-after 'unpack 'prepare-cargo-build-system
13760 (lambda args
13761 (for-each (lambda (phase)
13762 (format #t "Running cargo phase: ~a~%" phase)
13763 (apply (assoc-ref cargo:%standard-phases phase)
13764 #:cargo-target #$(cargo-triplet)
13765 args))
13766 '(unpack-rust-crates
13767 configure
13768 check-for-pregenerated-files
13769 patch-cargo-checksums))))
13770 (add-after 'unpack 'patch-pyproject
13771 (lambda _
13772 ;; maturin failed to parse pyproject.toml.
13773 (substitute* "pyproject.toml"
13774 (("^license-files = .*") "")))))))
13775 (propagated-inputs (list python-brotli
13776 python-packaging
13777 python-pillow))
13778 ;; TODO: Add python-openexr and python-pyexiv2 for tests.
13779 (native-inputs (list maturin
13780 python-numpy
13781 python-pytest
13782 rust
13783 `(,rust "cargo")))
13784 (inputs (cons* libjxl (cargo-inputs 'python-pillow-jxl-plugin)))
13785 (home-page "https://github.com/Isotr0py/pillow-jpegxl-plugin")
13786 (synopsis "Pillow plugin for JPEG-XL using Rust for bindings")
13787 (description "This package provides pillow plugin for JPEG-XL, using Rust
13788for bindings.")
13789 (license license:gpl3+)))
13790
13791(define-public python-jxlpy
13792 (package
13793 (name "python-jxlpy")
13794 (version "0.9.5")
13795 (source
13796 (origin
13797 (method git-fetch)
13798 (uri (git-reference
13799 (url "https://github.com/olokelo/jxlpy")
13800 (commit version)))
13801 (file-name (git-file-name name version))
13802 (sha256
13803 (base32 "1d1jrvpyvp8rix8kfmi962hl73mj0f7mib0xzk04va4kzc9p726s"))))
13804 (build-system pyproject-build-system)
13805 (arguments (list #:tests? #f)) ; no tests, just examples
13806 (inputs (list libjxl))
13807 (propagated-inputs (list python-cython))
13808 (native-inputs (list python-cython python-setuptools))
13809 (home-page "https://github.com/olokelo/jxlpy")
13810 (synopsis "JPEG XL integration in Python")
13811 (description "This package provides Cython-based Python bindings for
13812libjxl, as well as a pillow plugin.")
13813 (license license:expat)))
13814
13815(define-public python-pixelmatch
13816 (package
13817 (name "python-pixelmatch")
13818 (version "0.3.0")
13819 (source
13820 (origin
13821 (method git-fetch)
13822 (uri (git-reference
13823 (url "https://github.com/whtsky/pixelmatch-py")
13824 (commit (string-append "v" version))))
13825 (file-name (git-file-name name version))
13826 (sha256
13827 (base32 "0d4579hh5rwdh9djq5j9lf448x68c1iz80wavxiq7sxpmwm1j23a"))))
13828 (build-system pyproject-build-system)
13829 (arguments
13830 ;; XXX: PIL.UnidentifiedImageError despite images being present.
13831 (list #:tests? #f))
13832 (native-inputs
13833 (list python-poetry-core
13834 python-pillow
13835 python-pytest
13836 python-pytest-benchmark))
13837 (home-page "https://github.com/whtsky/pixelmatch-py")
13838 (synopsis "Pixel-level image comparison library")
13839 (description
13840 "This package provides a pixel-level image comparison library for Python,
13841originally created to compare screenshots in tests. Its features include
13842accurate anti-aliased pixels detection and perceptual color difference
13843metrics.")
13844 (license license:isc)))
13845
13846(define-public python-imagecodecs
13847 (package
13848 (name "python-imagecodecs")
13849 (version "2025.8.2")
13850 (source
13851 (origin
13852 (method url-fetch)
13853 (uri (pypi-uri "imagecodecs" version))
13854 (sha256
13855 (base32 "0v7yglk100fnk0m9m5bnfph2vm1jpnxzrzz2lwk06dqcr6m75wia"))
13856 (modules '((guix build utils)))
13857 (snippet #~(for-each delete-file
13858 ;; Delete pre-generated Cython files.
13859 (find-files "imagecodecs" "_.*\\.c$")))))
13860 (build-system pyproject-build-system)
13861 (arguments
13862 (list
13863 ;; tests: 2023 passed, 7841 skipped, 200 deselected, 1626 xfailed, 4 warnings
13864 #:test-flags
13865 ;; Some of those tests are flaky.
13866 #~(list "-k" "not test_cms_identity_transforms")
13867 #:phases
13868 #~(modify-phases %standard-phases
13869 (add-after 'unpack 'create-configuration
13870 (lambda _
13871 ;; By default everything is enabled. We can selectively disable
13872 ;; extensions (and thus dependencies) by deleting them from the
13873 ;; EXTENSIONS dictionary. This is upstream’s preferred way.
13874 (call-with-output-file "imagecodecs_distributor_setup.py"
13875 (lambda (port)
13876 (format port "\
13877def customize_build(EXTENSIONS, OPTIONS):
13878~{ del EXTENSIONS[~s]~%~}~%"
13879 (list "apng" "lzo" "tiff" ; FIXME Wrong version?
13880 ;; Those rely on unpackaged inputs.
13881 "aec" "avif" "bitshuffle" "brunsli" "deflate"
13882 "jetraw" "jpeg2k" "jpegls" "jpegxl" "jpegxr"
13883 "jpegxs" "lerc" "ljpeg" "lzf" "lzham" "mozjpeg"
13884 "pcodec" "sperr" "sz3" "szip" "ultrahdr" "zfp"
13885 "zlibng" "zopfli"))))))
13886 (add-after 'unpack 'fix-sanity-check
13887 (lambda _
13888 ;; XXX: Don't exit twice. The generated script already does that.
13889 (substitute* "imagecodecs/__main__.py"
13890 (("sys\\.exit\\(main\\(\\)\\)")
13891 ""))))
13892 (add-before 'check 'configure-tests
13893 (lambda _
13894 (setenv "HOME" (getcwd)))))))
13895 (inputs
13896 (list brotli
13897 c-blosc
13898 c-blosc2
13899 giflib
13900 lcms
13901 libheif
13902 libjpeg-turbo
13903 libpng
13904 libtiff
13905 libwebp
13906 lz4
13907 lzfse
13908 snappy
13909 xz
13910 zlib
13911 `(,zstd "lib")))
13912 (propagated-inputs
13913 (list python-numpy python-matplotlib python-tifffile))
13914 (native-inputs
13915 (list python-cython python-pytest python-setuptools))
13916 (home-page "https://www.lfd.uci.edu/~gohlke/")
13917 (synopsis "Image transformation, compression, and decompression codecs")
13918 (description
13919 "Imagecodecs is a Python library that provides block-oriented, in-memory
13920buffer transformation, compression, and decompression functions for use in the
13921tifffile, czifile, and other scientific image input/output modules.")
13922 (license license:bsd-3)))
13923
13924(define-public python-property-manager
13925 (package
13926 (name "python-property-manager")
13927 (version "3.0")
13928 (source
13929 (origin
13930 (method git-fetch)
13931 (uri (git-reference
13932 (url "https://github.com/xolox/python-property-manager")
13933 (commit version)))
13934 (file-name (git-file-name name version))
13935 (sha256
13936 (base32 "1v7hjm7qxpgk92i477fjhpcnjgp072xgr8jrgmbrxfbsv4cvl486"))))
13937 (build-system pyproject-build-system)
13938 (native-inputs (list python-pytest python-setuptools))
13939 (propagated-inputs
13940 (list python-verboselogs
13941 python-humanfriendly
13942 python-coloredlogs))
13943 (home-page "https://github.com/xolox/python-property-manager")
13944 (synopsis "Useful property variants for Python programming")
13945 (description
13946 "The @code{property-manager} package defines several custom property
13947variants for Python programming including required properties,writable
13948properties, cached properties, etc.")
13949 (license license:expat)))
13950
13951(define-public python-executing
13952 (package
13953 (name "python-executing")
13954 (version "2.2.0")
13955 (source
13956 (origin
13957 (method url-fetch)
13958 (uri (pypi-uri "executing" version))
13959 (sha256
13960 (base32 "0mb74ajjfhzscvwxr9qazjs2q7il2fvyicm7s58jbzh8h418q42x"))))
13961 (build-system pyproject-build-system)
13962 (arguments
13963 (list
13964 #:test-flags
13965 ;; Test needs IPython
13966 #~(list "-k" "not test_two_statement_lookups")
13967 #:phases
13968 #~(modify-phases %standard-phases
13969 (add-after 'unpack 'fix-tests
13970 (lambda _
13971 ;; See: <https://github.com/alexmojaki/executing/issues/99>.
13972 (substitute* "pyproject.toml"
13973 (("ignore_missing_imports = true.*")
13974 "ignore_missing_imports = true
13975
13976[tool.pytest.ini_options]
13977python_functions = \"test_\"\n")))))))
13978 (native-inputs
13979 (list python-asttokens
13980 python-littleutils
13981 python-pytest
13982 python-rich
13983 python-setuptools
13984 python-setuptools-scm
13985 python-wheel))
13986 (home-page "https://github.com/alexmojaki/executing")
13987 (synopsis "Get information about what a Python frame is currently doing")
13988 (description "This package lets you get information about what a frame is
13989currently doing, particularly the AST node being executed.")
13990 (license license:expat)))
13991
13992(define-public python-executor
13993 (package
13994 (name "python-executor")
13995 (version "23.2")
13996 (source
13997 (origin
13998 (method git-fetch)
13999 (uri (git-reference
14000 (url "https://github.com/xolox/python-executor")
14001 (commit version)))
14002 (file-name (git-file-name name version))
14003 (sha256
14004 (base32 "1mr0662c5l5zx0wjapcprp8p2xawfd0im3616df5sgv79fqzwfqs"))))
14005 (build-system pyproject-build-system)
14006 (arguments
14007 (list #:tests? #f)) ;TODO: tests require root/sudo
14008 (native-inputs (list python-mock python-pytest python-setuptools))
14009 (propagated-inputs
14010 (list python-six
14011 python-property-manager
14012 python-fasteners
14013 python-virtualenv))
14014 (home-page "https://github.com/xolox/python-executor")
14015 (synopsis "Programmer friendly subprocess wrapper")
14016 (description
14017 "The @code{executor} package is a simple wrapper for Python’s subprocess
14018module that makes it very easy to handle subprocesses on UNIX systems with
14019proper escaping of arguments and error checking currently doing, particularly
14020the AST node being executed.")
14021 (license license:expat)))
14022
14023(define-public python-roifile
14024 (package
14025 (name "python-roifile")
14026 (version "2025.5.10")
14027 (source
14028 (origin
14029 (method url-fetch)
14030 (uri (pypi-uri "roifile" version))
14031 (sha256
14032 (base32 "1kiwylcmxckzrqj3xn5ljcjfyx6y2s8bnqjd5psmkb4mjrwiypcf"))))
14033 (build-system pyproject-build-system)
14034 (arguments (list #:tests? #f)) ; There are none.
14035 (native-inputs (list python-setuptools))
14036 (propagated-inputs (list python-numpy))
14037 (home-page "https://www.lfd.uci.edu/~gohlke/")
14038 (synopsis "Read and write ImageJ ROI format")
14039 (description "Roifile is a Python library to read, write, create, and plot
14040ImageJ ROIs, an undocumented and ImageJ application specific format to store
14041regions of interest, geometric shapes, paths, text, etc for image overlays.")
14042 (license license:bsd-3)))
14043
14044(define-public python-lfdfiles
14045 (package
14046 (name "python-lfdfiles")
14047 (version "2026.4.30")
14048 (source
14049 (origin
14050 (method url-fetch)
14051 (uri (pypi-uri "lfdfiles" version))
14052 (sha256
14053 (base32 "1y4p4n321dp33s7a3almgiirch6kain5liq8g01wrpzw1d4g1rz1"))
14054 (modules '((guix build utils)))
14055 (snippet
14056 ;; Delete pre-generated Cython files.
14057 #~(begin
14058 (for-each delete-file (find-files "lfdfiles" "_.*\\.c$"))
14059 (delete-file "lfdfiles/conftest.py")))))
14060 (build-system pyproject-build-system)
14061 (arguments
14062 ;; XXX: Tests run with pytest, but most fail due to missing test data.
14063 (list #:tests? #f))
14064 (native-inputs (list python-setuptools))
14065 (propagated-inputs (list python-click python-numpy python-tifffile))
14066 (home-page "https://www.lfd.uci.edu/~gohlke/")
14067 (synopsis "Work with LFD data files")
14068 (description
14069 "Lfdfiles is a Python library and console script for reading, writing,
14070converting, and viewing many of the proprietary file formats used to store
14071experimental data and metadata at the Laboratory for Fluorescence Dynamics.")
14072 (license license:bsd-3)))
14073
14074;; ~8Mo of test files.
14075(define python-av-testdata
14076 (file-union
14077 "python-av-testdata"
14078 (cons*
14079 (let ((file "pexels/time-lapse-video-of-night-sky-857195.mp4"))
14080 `(,(string-append "pyav-curated/" file)
14081 ,(origin
14082 (method url-fetch)
14083 (uri (string-append "https://pyav.org/datasets/" file))
14084 (sha256
14085 (base32 "10fjs2gyha88gzv7pv3njv0fimv61ihz39p1556qazm90xbknzgb")))))
14086 (map
14087 (match-lambda
14088 ((file . hash)
14089 (list (string-append "fate-suite/" file)
14090 (origin
14091 (method url-fetch)
14092 (uri (string-append "http://fate.ffmpeg.org/fate-suite/" file))
14093 (sha256 (base32 hash))))))
14094 '(("aac/latm_stereo_to_51.ts" .
14095 "05h8389i944gb7f2y9c7848vqn8xz1mnm602fwala85npj4z8p4m")
14096 ("h264/extradata-reload-multi-stsd.mov" .
14097 "1rwlkl9vxp925vzh13cq5dfr983jxbkng0w6ivaymqqwvi7bvg5m")
14098 ("amv/MTV_high_res_320x240_sample_Penguin_Joke_MTV_from_WMV.amv" .
14099 "1hiifhdmd0ygzny5mplqdxl3dh9g95384ilkr4ccwv5l9y7hrmiv")
14100 ("audio-reference/chorusnoise_2ch_44kHz_s16.wav" .
14101 "06xybcnv7max9mmj6f1fw8rwz2aawhcyx2wgj1gmn1142kk431ra")
14102 ("h264/interlaced_crop.mp4" .
14103 "04bcmwd6scqn63y6p8i5srbjh9jq1sc95q6vy7srwfhzwxl9cma9")
14104 ("hap/HAPQA_NoSnappy_127x1.mov" .
14105 "1kvf8xs5v29sjqk2p07arl2hlp9z7hb1lb4202v4iqiwva1jmiaq")
14106 ("mkv/codec_delay_opus.mkv" .
14107 "0ll3qnmxnkhqxbh6s2a3clbkbhw5bsbfw6mh6kxdsa463iyyka8r")
14108 ("mov/displaymatrix.mov" .
14109 "1d4jp93hdyfhasxhqmx8lliwsa2w1kv2jj1qh6fqs74aqb6kzb82")
14110 ("mov/mov-1elist-ends-last-bframe.mov" .
14111 "04lyjsm8zncw9aac7vmkc2h45dcyb6y8643s3pg3rgzgcgqkq3nn")
14112 ("mov/white_zombie_scrunch-part.mov" .
14113 "07wg7mxa799z8dcvnbbrr9f0b5l6r42bd7d414isk3kc3jw0z6ka")
14114 ("mpeg2/mpeg2_field_encoding.ts" .
14115 "1f3waj8jhp6v655hnqpxi2bx3b36976vdjmr74hjr7jv2hx3724n")
14116 ("vorbis/vorbis_chapter_extension_demo.ogg" .
14117 "1prhhwi44psk9xji2mvk7rnvk899h5rx9wi3dmzkgwaz11r0cjdk")
14118 ("mxf/track_01_v02.mxf" .
14119 "04gpbma4kxvhn4dr1sh2k4pq2kbpmnmk2s2bdhq081jzap2983q1")
14120 ("png1/55c99e750a5fd6_50314226.png" .
14121 "05rha9vdix0wfibrhpaknh9fzj0cv84q6d2ypxq1wc0y328fc068")
14122 ("qtrle/aletrek-rle.mov" .
14123 "1n6ksjrqrb7gnbvzhj58y5z5jx6bmpgg7lxwzvnbfg9f9ib2yxdr")
14124 ("sub/MovText_capability_tester.mp4" .
14125 "07znmm4bhnp5f40yksnpf7ws94yflsbv169ydkga6rdby6ys2sv3")
14126 ("sub/vobsub.sub" .
14127 "12rwhnv1k7mngvyq026f2xd9dpd9mxmwg82sa9p5r8z54hrw8sjz"))))))
14128
14129(define-public python-av
14130 (package
14131 (name "python-av")
14132 (version "16.0.1")
14133 (source
14134 (origin
14135 (method url-fetch)
14136 (uri (pypi-uri "av" version))
14137 (sha256
14138 (base32 "1gqxzwbgwj164x211lsjgqj8xx9rpjxhzq6rls4mhpqbz9wyfb6x"))))
14139 (build-system pyproject-build-system)
14140 (arguments
14141 (list
14142 ;; Upstream is not great in responding to open issues or change requests.
14143 ;; See:
14144 ;; - <https://github.com/PyAV-Org/PyAV/issues/1942>
14145 ;; - <https://github.com/PyAV-Org/PyAV/issues/1946>
14146 ;; - <https://github.com/PyAV-Org/PyAV/pull/1944>
14147 #:test-flags
14148 ;; Writing to custom IO requires network access.
14149 #~(list "-k" "not test_writing_to_custom_io_dash")
14150 #:phases
14151 #~(modify-phases %standard-phases
14152 (add-before 'check 'pre-check
14153 (lambda _
14154 ;; This would otherwise interfere with finding the installed
14155 ;; av when running tests.
14156 (delete-file-recursively "av")
14157 (setenv "PYAV_TESTDATA_DIR" #+python-av-testdata)
14158 (substitute* "tests/common.py"
14159 (("^os\\.environ\\[\"PYAV_TESTDATA_DIR\"\\] = asset\\(\\)")
14160 "os.environ.setdefault(\"PYAV_TESTDATA_DIR\", asset())")))))))
14161 (native-inputs
14162 (list pkg-config
14163 python-cython
14164 python-numpy
14165 python-pillow
14166 python-pytest
14167 python-setuptools))
14168 (inputs (list ffmpeg))
14169 (home-page "https://github.com/PyAV-Org/PyAV")
14170 (synopsis "Pythonic bindings for FFmpeg's libraries")
14171 (description
14172 "PyAV is a Python library that allows for direct and precise manipulation
14173of media through containers, streams, packets, codecs, and frames. It provides
14174access to the powerful FFmpeg libraries while managing the complex details as
14175much as possible.
14176PyAV also facilitates data transformation and integration with
14177other packages such as Numpy and Pillow. However, working with media is a
14178challenging task and PyAV cannot abstract it away or make all the best decisions
14179for you. If you can accomplish your tasks with the ffmpeg command, PyAV may not
14180be necessary. Nonetheless, PyAV is an essential tool when working with media
14181that requires its specific capabilities.")
14182 (license license:bsd-3)))
14183
14184(define-public python-ffmpeg-python
14185 ;; The latest release (0.2.0) is old and its test suite crashes on Python 3.10.
14186 (package
14187 (name "python-ffmpeg-python")
14188 (properties '((commit . "df129c7ba30aaa9ffffb81a48f53aa7253b0b4e6")
14189 (revision . "0")))
14190 (version (git-version "0.2.0"
14191 (assoc-ref properties 'revision)
14192 (assoc-ref properties 'commit)))
14193 (source
14194 (origin
14195 (method git-fetch)
14196 (uri (git-reference
14197 (url "https://github.com/kkroening/ffmpeg-python.git")
14198 (commit (assoc-ref properties 'commit))))
14199 (file-name (git-file-name name version))
14200 (sha256
14201 (base32 "1zj4ac37n4igfj21zy405mdlvbpv6jyb12wfpszf8zkhhj2qby4c"))))
14202 (build-system pyproject-build-system)
14203 (arguments
14204 (list
14205 #:test-flags
14206 #~(list "-k" "not test_pipe and not test__probe")
14207 #:phases
14208 #~(modify-phases %standard-phases
14209 (add-after 'unpack 'hardcode-ffmpeg
14210 (lambda* (#:key inputs #:allow-other-keys)
14211 (let ((ffmpeg (search-input-file inputs "bin/ffmpeg")))
14212 (substitute* "ffmpeg/_run.py"
14213 (("cmd='ffmpeg'")
14214 (string-append "cmd='" ffmpeg "'")))
14215 (substitute* "ffmpeg/tests/test_ffmpeg.py"
14216 (("out_file.compile\\(\\) == \\['ffmpeg'")
14217 (format #f "out_file.compile() == [~s" ffmpeg)))))))))
14218 (inputs (list ffmpeg))
14219 (propagated-inputs (list python-future))
14220 (native-inputs (list python-future
14221 python-numpy
14222 python-pytest
14223 python-pytest-mock
14224 python-setuptools))
14225 (home-page "https://github.com/kkroening/ffmpeg-python")
14226 (synopsis "Python bindings for FFmpeg with complex filtering support")
14227 (description
14228 "ffmpeg-python allows you to write FFmpeg filtergraphs in familiar
14229Python terms, taking care of running ffmpeg with the correct command-line
14230arguments. It handles arbitrarily large (directed-acyclic) signal graphs.")
14231 (license license:asl2.0)))
14232
14233(define-public python-imageio-ffmpeg
14234 (package
14235 (name "python-imageio-ffmpeg")
14236 (version "0.6.0")
14237 (source
14238 (origin
14239 (method url-fetch)
14240 (uri (pypi-uri "imageio_ffmpeg" version))
14241 (sha256
14242 (base32 "0m8ppa4ap5vnic3jb25hsrq2gn0283x7mfr5z6ln8m80ivnnnmg2"))))
14243 (build-system pyproject-build-system)
14244 (arguments
14245 (list
14246 #:tests? #f ;XXX: tests require network access to get FFmpeg data
14247 #:phases
14248 #~(modify-phases %standard-phases
14249 (add-after 'unpack 'hardcode-ffmpeg
14250 (lambda* (#:key inputs #:allow-other-keys)
14251 (substitute* "imageio_ffmpeg/_utils.py"
14252 (("os\\.getenv\\(\"IMAGEIO_FFMPEG_EXE\".*\\)" all)
14253 (string-append "(" all " or \""
14254 (search-input-file inputs "bin/ffmpeg")
14255 "\")"))))))))
14256 (native-inputs
14257 (list python-setuptools
14258 python-wheel))
14259 (inputs
14260 (list ffmpeg))
14261 (home-page "https://github.com/imageio/imageio-ffmpeg")
14262 (synopsis "FFMPEG wrapper for Python")
14263 (description
14264 "This package provides an FFMPEG wrapper for working with video files.
14265It implements generator functions for reading and writing data to and from
14266FFMPEG, reliably terminating the process when done.")
14267 (license license:bsd-2)))
14268
14269(define-public python-imageio
14270 (package
14271 (name "python-imageio")
14272 (version "2.36.1")
14273 (source
14274 (origin
14275 (method url-fetch)
14276 (uri (pypi-uri "imageio" version))
14277 (sha256
14278 (base32
14279 "0qmy8qbnycas6v2a43qw9pxmd23fm3hpq3qb20b9x6kzyhqx5qg4"))))
14280 (build-system pyproject-build-system)
14281 (arguments
14282 (list
14283 #:test-flags #~(list "-m" "not needs_internet"
14284 ;; This attempts to load libGL.so (provided by mesa)
14285 ;; at the Python store path (sys.base_prefix?).
14286 "-k" "not test_findlib2"
14287 "--ignore" "tests/test_freeimage.py")
14288 #:phases
14289 #~(modify-phases %standard-phases
14290 (add-after 'unpack 'fix-source
14291 (lambda* (#:key inputs #:allow-other-keys)
14292 (substitute* "imageio/core/util.py"
14293 (("\"/var/tmp\"")
14294 "os.getenv(\"TMPDIR\", \"/tmp\")")))))))
14295 (propagated-inputs
14296 (list python-imageio-ffmpeg python-numpy python-pillow python-tifffile))
14297 (native-inputs
14298 (list python-fsspec
14299 python-pytest
14300 python-setuptools))
14301 (home-page "https://imageio.github.io/")
14302 (synopsis "Library for reading and writing a wide range of image data")
14303 (description
14304 "Imageio is a Python library that provides an easy interface to read and
14305write a wide range of image data, including animated images, video, volumetric
14306data, and scientific formats.")
14307 (license license:bsd-2)))
14308
14309(define-public python-pyudorandom
14310 ;; Releases are not tagged in Git:
14311 ;; https://github.com/mewwts/pyudorandom/issues/3
14312 (let ((commit "473b3f9c562469dd3c3ddbdfa3e9351e7709812c")
14313 (revision "0"))
14314 (package
14315 (name "python-pyudorandom")
14316 (version (git-version "1.0.0" revision commit))
14317 (source
14318 (origin
14319 (method git-fetch)
14320 (uri (git-reference
14321 (url "https://github.com/mewwts/pyudorandom")
14322 (commit commit)))
14323 (file-name (git-file-name name version))
14324 (sha256
14325 (base32 "0k54lxlmh56n8l60hhigi57y8dycnmfw700vq6diqn8b30xna47c"))))
14326 (build-system pyproject-build-system)
14327 (arguments (list #:test-backend #~'unittest))
14328 (native-inputs (list python-setuptools))
14329 (home-page "https://github.com/mewwts/pyudorandom")
14330 (synopsis "Generate pseudorandom numbers by using algebra")
14331 (description
14332 "The @code{pyudorandom} module lets you iterate over a list
14333in a non-succsessive, yet deterministic way based on integer modulo.
14334It comes in handy when you want to mix up the items, but don't need
14335any guarantees of randomness. It might be slow on small data,
14336but shall be significantly faster than @code{random.shuffle}
14337for longer lists.")
14338 (license license:expat))))
14339
14340(define-public python-pyvips
14341 (package
14342 (name "python-pyvips")
14343 (version "3.1.1")
14344 (source
14345 (origin
14346 (method git-fetch) ; PyPI does not include test helpers
14347 (uri (git-reference
14348 (url "https://github.com/libvips/pyvips")
14349 (commit (string-append "v" version))))
14350 (file-name (git-file-name name version))
14351 (sha256
14352 (base32 "1ibc1m2qbr9dzw3ck69fcbgrn1kvq3j6mkw1ac52ngd4v2fhbx04"))))
14353 (build-system pyproject-build-system)
14354 (native-inputs
14355 (list pkg-config
14356 python-pytest
14357 python-setuptools
14358 python-wheel))
14359 (inputs
14360 (list glib vips))
14361 (propagated-inputs
14362 (list python-cffi python-pkgconfig))
14363 (home-page "https://github.com/libvips/pyvips")
14364 (synopsis "Python bindings for VIPS")
14365 (description "The @code{pyvips} package provides Python bindings for VIPS,
14366a multithreaded image-processing system with low memory needs.")
14367 (license license:expat)))
14368
14369;; WARNING: This package is a dependency of mesa.
14370;; There are no users in python-xyz for this package, consider to adopt closer
14371;; to Mesa.
14372(define-public python-pycparser
14373 (package
14374 (name "python-pycparser")
14375 (version "2.22")
14376 (source
14377 (origin
14378 (method url-fetch)
14379 (uri (pypi-uri "pycparser" version))
14380 (sha256
14381 (base32
14382 "1xhhxjg460f70ldki4prxmb7zl1bfl3mnjplbc7kkxa0q3lqn729"))))
14383 (outputs '("out" "doc"))
14384 (build-system pyproject-build-system)
14385 (arguments
14386 (list
14387 #:test-backend #~'unittest
14388 #:phases
14389 #~(modify-phases %standard-phases
14390 (add-after 'install 'install-doc
14391 (lambda _
14392 (let* ((data (string-append #$output:doc "/share"))
14393 (doc (string-append data "/doc/" #$name "-" #$version))
14394 (examples (string-append doc "/examples")))
14395 (mkdir-p examples)
14396 (for-each (lambda (file)
14397 (copy-file (string-append "." file)
14398 (string-append doc file)))
14399 '("/README.rst" "/CHANGES" "/LICENSE"))
14400 (copy-recursively "examples" examples)))))))
14401 (native-inputs
14402 (list python-setuptools))
14403 (home-page "https://github.com/eliben/pycparser")
14404 (synopsis "C parser in Python")
14405 (description
14406 "Pycparser is a complete parser of the C language, written in pure Python
14407using the PLY parsing library. It parses C code into an AST and can serve as
14408a front-end for C compilers or analysis tools.")
14409 (license license:bsd-3)))
14410
14411(define-public python-pywavelets
14412 (package
14413 (name "python-pywavelets")
14414 (version "1.8.0")
14415 (home-page "https://github.com/PyWavelets/pywt")
14416 (source (origin
14417 (method url-fetch)
14418 (uri (pypi-uri "pywavelets" version))
14419 (sha256
14420 (base32
14421 "1aimbjxvflmx4qrl17bfzy64pz5ql4s9bhnb8g0ssh28fm2h507k"))))
14422 (build-system pyproject-build-system)
14423 (arguments
14424 (list
14425 #:test-flags '(list "--pyargs" "pywt")
14426 #:phases
14427 #~(modify-phases %standard-phases
14428 ;; The compiled libraries are only in the output at this point,
14429 ;; but they are needed to run tests.
14430 ;; FIXME: This should be handled by the pyargs pytest argument,
14431 ;; but is not for some reason.
14432 (add-before 'check 'pre-check
14433 (lambda _ (chdir #$output))))))
14434 (native-inputs
14435 (list meson
14436 ninja
14437 pkg-config
14438 python-cython
14439 python-meson
14440 python-numpy
14441 python-pytest))
14442 (propagated-inputs
14443 (list python-numpy python-scipy))
14444 (synopsis "Wavelet transforms in Python")
14445 (description
14446 "PyWavelets is a library for wavelet transforms in Python. Wavelets are
14447mathematical basis functions that are localized in both time and frequency.
14448Wavelet transforms are time-frequency transforms employing wavelets. They are
14449similar to Fourier transforms, the difference being that Fourier transforms are
14450localized only in frequency instead of in time and frequency.")
14451 (license license:expat)))
14452
14453(define-public python-pywal
14454 (package
14455 (name "python-pywal")
14456 (version "3.3.0")
14457 (source
14458 (origin
14459 (method git-fetch)
14460 (uri (git-reference
14461 (url "https://github.com/dylanaraps/pywal")
14462 (commit version)))
14463 (file-name (git-file-name name version))
14464 (sha256
14465 (base32 "039m7dch479hlwddynacdrr0klz6a5bdly5swqbs94hfimficiyf"))))
14466 (build-system pyproject-build-system)
14467 (arguments
14468 `(#:phases
14469 (modify-phases %standard-phases
14470 (add-before 'check 'fix-home-directory
14471 (lambda _
14472 ;; Tests fail with "Permission denied: '/homeless-shelter'".
14473 (setenv "HOME" "/tmp"))))))
14474 (native-inputs
14475 (list python-pytest
14476 python-setuptools))
14477 (inputs
14478 (list imagemagick))
14479 (home-page "https://github.com/dylanaraps/pywal")
14480 (synopsis "Color palette generator and applicator")
14481 (description
14482 "Pywal is a tool that generates a color palette from the dominant colors
14483in an image. It then applies the colors system-wide and on-the-fly in all of
14484your favourite programs.")
14485 (license license:expat)))
14486
14487(define-public python-pywal16
14488 (package
14489 (name "python-pywal16")
14490 (version "3.8.10")
14491 (source
14492 (origin
14493 (method url-fetch)
14494 (uri (pypi-uri "pywal16" version))
14495 (sha256
14496 (base32 "0836ya6zw0dglh0yldd9apsfvh5f9cxvmy8nc7aw2w8s491yancf"))))
14497 (build-system pyproject-build-system)
14498 (arguments
14499 (list
14500 #:phases
14501 '(modify-phases %standard-phases
14502 (add-before 'check 'set-HOME
14503 (lambda _ (setenv "HOME" "/tmp"))))))
14504 (native-inputs
14505 (list imagemagick
14506 python-pytest
14507 python-setuptools))
14508 (home-page "https://github.com/eylles/pywal16")
14509 (synopsis "16 colors fork of pywal")
14510 (description
14511 "Pywal16 is a tool that generates a color palette from the dominant
14512colors in an image. It then applies the colors system-wide and on-the-fly in
14513all of your favorite programs.")
14514 (license license:expat)))
14515
14516(define-public python-click-didyoumean
14517 (package
14518 (name "python-click-didyoumean")
14519 (version "0.3.1")
14520 (source
14521 (origin
14522 (method git-fetch) ;no tests in PyPI archive
14523 (uri (git-reference
14524 (url "https://github.com/click-contrib/click-didyoumean")
14525 (commit (string-append "v" version))))
14526 (file-name (git-file-name name version))
14527 (sha256
14528 (base32 "1byfqs3m87zfpvssm1al9dvq94gjd0iddpwrzk6205n18wjsphqb"))))
14529 (build-system pyproject-build-system)
14530 (native-inputs
14531 (list python-poetry-core python-pytest))
14532 (propagated-inputs
14533 (list python-click))
14534 (home-page "https://github.com/timofurrer/click-didyoumean")
14535 (synopsis "Git-like did-you-mean feature in Click")
14536 (description
14537 "This plugin enables git-like did-you-mean feature in Click.")
14538 (license license:expat)))
14539
14540(define-public python-pywinrm
14541 (package
14542 (name "python-pywinrm")
14543 (version "0.5.0")
14544 (source
14545 (origin
14546 (method git-fetch)
14547 (uri (git-reference
14548 (url "https://github.com/diyan/pywinrm/")
14549 (commit (string-append "v" version))))
14550 (file-name (git-file-name name version))
14551 (sha256
14552 (base32 "0jp7rps6zg5b6n98lfkwbhv72982sxxnqc4v4i6hjlq1ycjmmb8r"))))
14553 (build-system pyproject-build-system)
14554 (propagated-inputs
14555 (list python-requests python-requests-ntlm python-xmltodict))
14556 (native-inputs
14557 (list python-mock python-pytest python-setuptools))
14558 (home-page "https://github.com/diyan/pywinrm/")
14559 (synopsis "Python library for Windows Remote Management (WinRM)")
14560 (description
14561 "pywinrm is a Python client for the Windows Remote Management (WinRM)
14562service. It allows you to invoke commands on target Windows machines from
14563any machine that can run Python.")
14564 (license license:expat)))
14565
14566(define-public python-manimpango
14567 (package
14568 (name "python-manimpango")
14569 (version "0.5.0")
14570 (source
14571 (origin
14572 (method git-fetch) ; no tests data in PyPi package
14573 (uri (git-reference
14574 (url "https://github.com/ManimCommunity/ManimPango")
14575 (commit (string-append "v" version))))
14576 (file-name (git-file-name name version))
14577 (sha256
14578 (base32 "00mrvswk8yly0m13jq0f432pr19sy3j6w37lrv78ah1j6jz9n50h"))))
14579 (build-system pyproject-build-system)
14580 (arguments
14581 (list
14582 #:phases
14583 #~(modify-phases %standard-phases
14584 (add-before 'check 'build-extensions
14585 (lambda _
14586 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
14587 (native-inputs
14588 (list pkg-config
14589 python-cython
14590 python-pytest
14591 python-setuptools
14592 python-wheel))
14593 (inputs
14594 (list pango))
14595 (home-page "https://manimpango.manim.community/")
14596 (synopsis "Bindings for Pango for using with Manim")
14597 (description
14598 "Python bindings for ManimPango which is a C binding for Pango,
14599using Cython.
14600
14601ManimPango is internally used in Manim to render (non-LaTeX) text.")
14602 (license license:expat)))
14603
14604(define-public python-cairocffi
14605 (package
14606 (name "python-cairocffi")
14607 (version "1.7.1")
14608 (source
14609 (origin
14610 ;; The PyPI archive does not include the documentation, so use Git.
14611 (method git-fetch)
14612 (uri (git-reference
14613 (url "https://github.com/Kozea/cairocffi")
14614 (commit (string-append "v" version))))
14615 (file-name (git-file-name name version))
14616 (sha256
14617 (base32
14618 "08ilpzf1027f5w461yx2cg0ky64pd41kclfklyn8n292dmc9sk4g"))))
14619 (build-system pyproject-build-system)
14620 (outputs '("out" "doc"))
14621 (inputs
14622 (list glib gtk+ gdk-pixbuf cairo))
14623 (native-inputs
14624 (list python-flit-core
14625 python-numpy
14626 python-pikepdf
14627 python-pytest
14628 python-sphinx
14629 python-sphinx-rtd-theme))
14630 (propagated-inputs
14631 (list python-xcffib)) ; used at run time
14632 (arguments
14633 (list
14634 #:phases
14635 #~(modify-phases %standard-phases
14636 (add-after 'unpack 'patch-paths
14637 (lambda* (#:key inputs #:allow-other-keys)
14638 (substitute* "cairocffi/__init__.py"
14639 ;; Hack the dynamic library loading mechanism.
14640 (("find_library\\(library_name\\)")
14641 "\"found\"")
14642 (("filenames = \\(library_filename,\\) \\+ filenames")
14643 "pass")
14644 (("libcairo.so.2")
14645 (search-input-file inputs "/lib/libcairo.so.2")))
14646 (substitute* "cairocffi/pixbuf.py"
14647 (("libgdk_pixbuf-2.0.so.0")
14648 (search-input-file inputs "/lib/libgdk_pixbuf-2.0.so.0"))
14649 (("libgobject-2.0.so.0")
14650 (search-input-file inputs "/lib/libgobject-2.0.so.0"))
14651 (("libglib-2.0.so.0")
14652 (search-input-file inputs "/lib/libglib-2.0.so.0"))
14653 (("libgdk-3.so.0")
14654 (search-input-file inputs "/lib/libgdk-3.so.0")))))
14655 (add-after 'install 'install-doc
14656 (lambda* (#:key inputs #:allow-other-keys)
14657 (let* ((data (string-append #$output:doc "/share"))
14658 (doc (string-append data "/doc/" #$name "-" #$version))
14659 (html (string-append doc "/html")))
14660 (setenv "LD_LIBRARY_PATH"
14661 (string-append (assoc-ref inputs "cairo") "/lib" ":"
14662 (assoc-ref inputs "gdk-pixbuf") "/lib"))
14663 (setenv "LANG" "en_US.UTF-8")
14664 (mkdir-p html)
14665 (for-each (lambda (file)
14666 (copy-file (string-append "." file)
14667 (string-append doc file)))
14668 '("/README.rst" "/NEWS.rst"))
14669 (system* "python" "setup.py" "build_sphinx")
14670 (copy-recursively "docs/_build/html" html)))))))
14671 (home-page "https://github.com/Kozea/cairocffi")
14672 (synopsis "Python bindings and object-oriented API for Cairo")
14673 (description
14674 "Cairocffi is a CFFI-based drop-in replacement for Pycairo, a set of
14675Python bindings and object-oriented API for cairo. Cairo is a 2D vector
14676graphics library with support for multiple backends including image buffers,
14677PNG, PostScript, PDF, and SVG file output.")
14678 (license license:bsd-3)))
14679
14680(define-public python-decorator
14681 (package
14682 (name "python-decorator")
14683 (version "5.2.1")
14684 (source
14685 (origin
14686 (method url-fetch)
14687 (uri (pypi-uri "decorator" version))
14688 (sha256
14689 (base32 "0q03vavcj2hxnv6006wiqnw7bbqq8rpw90yclyq39xsj6wa6dwk5"))))
14690 (build-system pyproject-build-system)
14691 (arguments
14692 (list #:test-backend #~'custom
14693 #:test-flags #~(list "tests/test.py")))
14694 (native-inputs
14695 (list python-setuptools))
14696 (home-page "https://pypi.org/project/decorator/")
14697 (synopsis "Python module to simplify usage of decorators")
14698 (description
14699 "The aim of the decorator module is to simplify the usage of decorators
14700for the average programmer, and to popularize decorators usage giving examples
14701of useful decorators, such as memoize, tracing, redirecting_stdout, locked,
14702etc. The core of this module is a decorator factory.")
14703 (license license:expat)))
14704
14705(define-public python-drmaa
14706 (package
14707 (name "python-drmaa")
14708 (version "0.7.7")
14709 (source
14710 (origin
14711 (method url-fetch)
14712 (uri (pypi-uri "drmaa" version))
14713 (sha256
14714 (base32 "0xzqriqyvk5b8hszbavsyxd29wm3sxirm8zvvdm73rs2iq7w4hkx"))))
14715 (build-system pyproject-build-system)
14716 ;; The test suite requires libdrmaa which is provided by the cluster
14717 ;; environment. At runtime the environment variable DRMAA_LIBRARY_PATH
14718 ;; should be set to the path of the libdrmaa library.
14719 (arguments
14720 (list
14721 #:tests? #f
14722 #:phases
14723 #~(modify-phases %standard-phases
14724 ;; Loading the library fails because DRMAA_LIBRARY_PATH
14725 ;; is not configured.
14726 (delete 'sanity-check))))
14727 (native-inputs (list python-setuptools))
14728 (home-page "https://pypi.org/project/drmaa/")
14729 (synopsis "Python bindings for the DRMAA library")
14730 (description
14731 "A Python package for Distributed Resource Management (DRM) job
14732submission and control. This package is an implementation of the DRMAA 1.0
14733Python language binding specification.")
14734 (license license:bsd-3)))
14735
14736(define-public python-grako
14737 (package
14738 (name "python-grako")
14739 (version "3.99.9")
14740 (source
14741 (origin
14742 (method url-fetch)
14743 (uri (pypi-uri "grako" version ".zip"))
14744 (sha256
14745 (base32 "0r63i68wcnv63rfjkasq1ah81frz61a6mzbcnaxhrkdpx84p7hzw"))
14746 (snippet
14747 #~(begin (use-modules (guix build utils))
14748 (substitute* "grako/grammars.py"
14749 (("from collections import defaultdict, Mapping")
14750 (string-append "from collections import defaultdict\n"
14751 "from collections.abc import Mapping")))
14752 (substitute* '("grako/util.py"
14753 "grako/walkers.py")
14754 (("collections\\.Mapping") "collections.abc.Mapping"))))))
14755 (build-system pyproject-build-system)
14756 ;; XXX: Test file 'grako.ebnf' is missing from archive.
14757 (arguments (list #:tests? #f))
14758 (native-inputs (list unzip python-pytest python-setuptools))
14759 (home-page "https://pypi.org/project/grako")
14760 (synopsis "EBNF parser generator")
14761 (description
14762 "Grako takes a grammar in a variation of EBNF as input, and outputs a
14763memoizing PEG/Packrat parser in Python.")
14764 (license license:bsd-3)))
14765
14766(define-public python-grandalf
14767 (package
14768 (name "python-grandalf")
14769 ;; `guix refresh` will try to upgrade to v0.55555, but that is older.
14770 (version "0.8")
14771 (source
14772 (origin
14773 (method git-fetch)
14774 (uri (git-reference
14775 (url "https://github.com/bdcht/grandalf")
14776 (commit (string-append "v" version))))
14777 (file-name (git-file-name name version))
14778 (sha256
14779 (base32
14780 "199f86hz3g4p237ma4j27rzwmska3bxzsbgq20i4l4pczf9v7ax0"))))
14781 (build-system pyproject-build-system)
14782 (arguments
14783 (list
14784 #:phases
14785 #~(modify-phases %standard-phases
14786 (add-before 'build 'patch-requirements
14787 (lambda _
14788 (substitute* "setup.py"
14789 (("install_requires=\\['pyparsing'],") "")))))))
14790 (native-inputs
14791 (list python-setuptools python-pytest))
14792 (propagated-inputs
14793 (list python-numpy python-ply))
14794 (home-page "https://github.com/bdcht/grandalf")
14795 (synopsis "Graph and drawing algorithms framework")
14796 (description
14797 "Grandalf is a Python package made for experimentations with graphs
14798drawing algorithms. It is written in pure Python, and currently implements
14799two layouts: the Sugiyama hierarchical layout and the force-driven or energy
14800minimization approach. While not as fast or featured as graphviz or other
14801libraries like OGDF (C++), it provides a way to walk and draw graphs no larger
14802than thousands of nodes, while keeping the source code simple enough to tweak
14803and hack any part of it for experimental purpose. With a total of about 1500
14804lines of Python, the code involved in drawing the Sugiyama (dot) layout fits
14805in less than 600 lines. The energy minimization approach is comprised of only
14806250 lines!
14807
14808Grandalf does only 2 not-so-simple things:
14809@itemize
14810@item computing the nodes (x,y) coordinates (based on provided nodes
14811dimensions, and a chosen layout)
14812@item routing the edges with lines or nurbs
14813@end itemize
14814
14815It doesn’t depend on any GTK/Qt/whatever graphics toolkit. This means that it
14816will help you find where to draw things like nodes and edges, but it’s up to
14817you to actually draw things with your favorite toolkit.")
14818 ;; The user can choose either license.
14819 (license (list license:gpl2 license:epl1.0))))
14820
14821(define-public python-gridmap
14822 ;; XXX: Project is unmaintained since 2020-08-24, see:
14823 ;; <https://github.com/pygridtools/gridmap/issues/99>.
14824 (package
14825 (name "python-gridmap")
14826 (version "0.15.0")
14827 (source
14828 (origin
14829 (method git-fetch)
14830 (uri (git-reference
14831 (url "https://github.com/pygridtools/gridmap")
14832 (commit (string-append "v" version))))
14833 (file-name (git-file-name name version))
14834 (sha256
14835 (base32 "0w1sxvhv5ldbzkx70q7036yvny0zsylc4zj7nzmp3nhjdl8whlrm"))))
14836 (build-system pyproject-build-system)
14837 (arguments
14838 (list #:tests? #f ;XXX: freezes or timeout
14839 #:test-backend #~'nose))
14840 (native-inputs
14841 (list ;; python-pynose
14842 python-setuptools))
14843 (propagated-inputs
14844 (list python-cherrypy
14845 python-cloudpickle
14846 python-psutil
14847 python-drmaa
14848 python-pyzmq))
14849 (home-page "https://github.com/pygridtools/gridmap")
14850 (synopsis "Create jobs on a cluster directly from Python")
14851 (description
14852 "Gridmap is a Python package to allow you to easily create jobs on the
14853cluster directly from Python. You can directly map Python functions onto the
14854cluster without needing to write any wrapper code yourself.")
14855 (license license:gpl3+)))
14856
14857(define-public python-honcho
14858 (package
14859 (name "python-honcho")
14860 (version "2.0.0")
14861 (source
14862 (origin
14863 (method git-fetch)
14864 (uri (git-reference
14865 (url "https://github.com/nickstenning/honcho")
14866 (commit (string-append "v" version))))
14867 (file-name (git-file-name name version))
14868 (sha256
14869 (base32 "0hdp4cr6imxrlyg9x9xj5r6qdmgi63ffvmqjrr1kjs3qapan6s4l"))))
14870 (build-system pyproject-build-system)
14871 (arguments
14872 ;; Tests below fail with the error
14873 ;; ValueError: The 'honcho.export.xxx' package was not installed
14874 ;; in a way that PackageLoader understands.
14875 ;; Probably safe because it's testing for different init systems.
14876 (list #:test-flags #~(list "--ignore" "tests/integration/test_export.py"
14877 "--ignore" "tests/test_export_runit.py"
14878 "--ignore" "tests/test_export_supervisord.py"
14879 "--ignore" "tests/test_export_systemd.py"
14880 "--ignore" "tests/test_export_upstart.py")))
14881 (native-inputs
14882 (list python-jinja2 python-mock python-pytest python-setuptools python-wheel))
14883 (propagated-inputs
14884 (list python-colorama))
14885 (home-page "https://github.com/nickstenning/honcho")
14886 (synopsis "Manage Procfile-based applications")
14887 (description
14888 "A Procfile is a file which describes how to run an application
14889consisting of several processes. honcho starts all listed processes.
14890The output of all running processes is collected by honcho and
14891displayed.")
14892 (license license:expat)))
14893
14894(define-public python-hsluv
14895 (package
14896 (name "python-hsluv")
14897 (version "5.0.4")
14898 (source
14899 (origin
14900 (method url-fetch)
14901 (uri (pypi-uri "hsluv" version))
14902 (sha256
14903 (base32 "0bmpd7qxcvin8szblilxmw50v7mygf6a6i180h82123s893gk092"))))
14904 (build-system pyproject-build-system)
14905 (native-inputs
14906 (list python-pytest python-setuptools))
14907 (home-page "https://www.hsluv.org")
14908 (synopsis "Human-friendly HSL colour space implemented in Python")
14909 (description
14910 "Human-friendly @acronym{Hue Saturation Lightness,HSL}. HSLuv extends
14911@url{http://en.wikipedia.org/wiki/CIELUV,CIELUV} with a new saturation
14912component that allows you to span all the available chroma as a neat
14913percentage.")
14914 (license license:expat)))
14915
14916(define-public python-pebble
14917 (package
14918 (name "python-pebble")
14919 (version "5.1.3")
14920 (source
14921 (origin
14922 (method git-fetch)
14923 (uri (git-reference
14924 (url "https://github.com/noxdafox/pebble")
14925 (commit version)))
14926 (file-name (git-file-name name version))
14927 (sha256
14928 (base32 "1x3rvgm5b0g33xlh8w68r50zwqrdwjafwri8y2lzxny8y4i01ffp"))))
14929 (build-system pyproject-build-system)
14930 (native-inputs (list python-pytest python-setuptools))
14931 (home-page "https://github.com/noxdafox/pebble")
14932 (synopsis "Threading and multiprocessing for Python")
14933 (description
14934 "Pebble aims to help manage threads and processes in an easier way. It
14935wraps Python's standard library threading and multiprocessing objects.")
14936 (license license:lgpl3+)))
14937
14938(define-public python-pexpect
14939 (package
14940 (name "python-pexpect")
14941 (version "4.9.0")
14942 (source
14943 (origin
14944 (method url-fetch)
14945 (uri (pypi-uri "pexpect" version))
14946 (sha256
14947 (base32 "03ykxacc64ijldbpa31v5lxw93an0z0xmhm21q2i369w7w942zgf"))))
14948 (build-system pyproject-build-system)
14949 (arguments
14950 (list
14951 #:test-flags
14952 #~(list "-k" (string-join
14953 (list
14954 ;; Disable failing test, see
14955 ;; <https://github.com/pexpect/pexpect/issues/568>.
14956 "not test_bash"
14957 ;; Fails with attempt to find OpenSSL.
14958 "test_large_stdout_stream"
14959 ;; Tests fail while trying to find
14960 ;; tmp-pexpect-xxxxxxxxxxxx directories.
14961 "test_run_uses_env"
14962 "test_run_uses_env_path"
14963 "test_run_uses_env_path_over_path"
14964 "test_spawn_uses_env"
14965 ;; Fails with assertion error: assert 0 == 500
14966 "test_before_across_chunks"
14967 ;; Bash is enough for tests.
14968 "test_zsh")
14969 " and not "))
14970 #:phases
14971 #~(modify-phases %standard-phases
14972 (add-before 'check 'prepare-tests
14973 (lambda _
14974 (substitute* (find-files "tests")
14975 (("/bin/bash") (which "bash"))
14976 (("/bin/echo") (which "echo"))
14977 (("/bin/ls") (which "ls"))
14978 (("/bin/which") (which "which"))
14979 ;; Many tests try to use the /bin directory which is not
14980 ;; present in the build environment. Use one that's non-empty
14981 ;; and unlikely to change.
14982 (("/bin'") "/dev'")))))))
14983 (native-inputs
14984 (list bash ;full Bash for 'test_replwrap.py'
14985 man-db
14986 python-pytest
14987 python-setuptools
14988 python-wheel
14989 which))
14990 (propagated-inputs
14991 (list python-ptyprocess))
14992 (home-page "https://pexpect.readthedocs.org/")
14993 (synopsis "Controlling interactive console applications")
14994 (description
14995 "Pexpect is a pure Python module for spawning child applications;
14996controlling them; and responding to expected patterns in their output. Pexpect
14997works like Don Libes’ Expect. Pexpect allows your script to spawn a child
14998application and control it as if a human were typing commands.")
14999 (license license:isc)))
15000
15001(define-public python-sexpdata
15002 (package
15003 (name "python-sexpdata")
15004 (version "1.0.2")
15005 (source
15006 (origin
15007 (method url-fetch)
15008 (uri (pypi-uri "sexpdata" version))
15009 (sha256
15010 (base32
15011 "02f1v96wzqf3jgwbp1fvankszkzvyff53fa4ks7nyxpnc41ppdlj"))))
15012 (build-system pyproject-build-system)
15013 (arguments
15014 (list #:tests? #f)) ; no tests
15015 (native-inputs (list python-setuptools python-wheel))
15016 (home-page "https://github.com/jd-boyd/sexpdata")
15017 (synopsis "S-expression parser for Python")
15018 (description
15019 "Sexpdata is an S-expression parser/serializer. It has load and dump
15020functions like pickle, json or PyYAML module.")
15021 (license license:bsd-3)))
15022
15023(define-public python-pathable
15024 (package
15025 (name "python-pathable")
15026 (version "0.4.3")
15027 (source
15028 (origin
15029 (method url-fetch)
15030 (uri (pypi-uri "pathable" version))
15031 (sha256
15032 (base32 "1ayw9jzlw0qrz51rcfbba00xqq0c7vs3lgwrib67c1z5bcqrv1jw"))))
15033 (build-system pyproject-build-system)
15034 (arguments (list #:tests? #false)) ;there are none
15035 (native-inputs (list python-poetry-core))
15036 (home-page "https://github.com/p1c2u/pathable")
15037 (synopsis "Object-oriented paths")
15038 (description "With this package you can traverse resources like paths and
15039access resources on demand with separate accessor layer.")
15040 (license license:asl2.0)))
15041
15042(define-public python-importlib-resources
15043 (package
15044 (name "python-importlib-resources")
15045 (version "6.5.2")
15046 (source (origin
15047 (method url-fetch)
15048 (uri (pypi-uri "importlib_resources" version))
15049 (sha256
15050 (base32
15051 "0b7dizkjyjpwqm2dsmb40fy7iskwl3xv93yr9622ik2vxynqfpqq"))))
15052 (build-system pyproject-build-system)
15053 (native-inputs
15054 (list python-jaraco-test
15055 python-jaraco-collections
15056 python-pytest
15057 python-setuptools
15058 python-setuptools-scm
15059 python-zipp))
15060 (home-page "https://importlib-resources.readthedocs.io/")
15061 (synopsis "Read resources from Python packages")
15062 (description
15063 "@code{importlib_resources} is a backport of Python 3's standard library
15064@code{importlib.resources} module for Python 2.7, and Python 3.")
15065 (license license:asl2.0)))
15066
15067(define-public python-importlib-metadata
15068 (package
15069 (name "python-importlib-metadata")
15070 (version "8.7.0")
15071 (source
15072 (origin
15073 (method url-fetch)
15074 (uri (pypi-uri "importlib_metadata" version))
15075 (sha256
15076 (base32
15077 "004h71gl22rg57wxd0hgy72pdksn62ng4waldjhhm29v4anq2fyi"))))
15078 (build-system pyproject-build-system)
15079 (arguments
15080 (list #:test-flags #~(list "tests")))
15081 (native-inputs
15082 (list python-jaraco-test
15083 python-packaging-bootstrap
15084 python-pyfakefs
15085 python-pytest-bootstrap
15086 python-setuptools
15087 python-setuptools-scm))
15088 (propagated-inputs
15089 (list python-zipp))
15090 (home-page "https://importlib-metadata.readthedocs.io/")
15091 (synopsis "Read metadata from Python packages")
15092 (description
15093 "@code{importlib_metadata} is a library which provides an API for
15094accessing an installed Python package's metadata, such as its entry points or
15095its top-level name. This functionality intends to replace most uses of
15096@code{pkg_resources} entry point API and metadata API. Along with
15097@code{importlib.resources} in Python 3.7 and newer, this can eliminate the
15098need to use the older and less efficient @code{pkg_resources} package.")
15099 (license license:asl2.0)))
15100
15101(define-public python-importlib-metadata-argparse-version
15102 (package
15103 (name "python-importlib-metadata-argparse-version")
15104 (version "2.0.1")
15105 (home-page
15106 "https://github.com/mondeja/importlib-metadata-argparse-version")
15107 (source
15108 (origin
15109 (method git-fetch)
15110 (uri (git-reference
15111 (url home-page)
15112 (commit (string-append "v" version))))
15113 (file-name (git-file-name name version))
15114 (sha256
15115 (base32 "02jbfv7xkd4lhdcsr232b6x8xcpv93micz7848fhi5946grvm1j2"))))
15116 (build-system pyproject-build-system)
15117 (native-inputs (list python-pytest python-hatchling))
15118 (synopsis "Get Python package version more efficiently")
15119 (description
15120 "This package provides an @code{argparse} action to define CLI version
15121with a delayed call to @code{importlib.metadata}, avoiding to load this module
15122when not needed.")
15123 (license license:bsd-3)))
15124
15125(define-public python-importmagic
15126 (package
15127 (name "python-importmagic")
15128 (version "0.1.7")
15129 (source
15130 (origin
15131 (method git-fetch)
15132 (uri (git-reference
15133 (url "https://github.com/alecthomas/importmagic")
15134 (commit version)))
15135 (file-name (git-file-name name version))
15136 (sha256
15137 (base32 "1asijinpirq9ips9drsibyg2bj6qbpryz27n91akhvmzn78pbz7s"))))
15138 (build-system pyproject-build-system)
15139 (native-inputs (list python-pytest python-setuptools))
15140 (home-page "https://github.com/alecthomas/importmagic")
15141 (synopsis "Library for adding, removing and managing Python imports")
15142 (description
15143 "Importmagic is a Python library for automatically managing imports by
15144finding unresolved symbols in Python code and their corresponding imports.")
15145 (license license:bsd-3)))
15146
15147(define-public python-inotify-simple
15148 (package
15149 (name "python-inotify-simple")
15150 (version "1.3.5")
15151 (source
15152 (origin
15153 (method git-fetch)
15154 (uri (git-reference
15155 (url "https://github.com/chrisjbillington/inotify_simple")
15156 (commit version)))
15157 (file-name (git-file-name name version))
15158 (sha256
15159 (base32 "1dv9svrcz31acyq9smjlnw75xv3x5wpn5h6s8j8h0vrqyl3d7l05"))))
15160 (build-system pyproject-build-system)
15161 (arguments
15162 (list
15163 #:test-backend #~'custom
15164 #:test-flags #~(list "example.py")))
15165 (native-inputs (list python-setuptools))
15166 (home-page "https://github.com/chrisjbillington/inotify_simple")
15167 (synopsis "Simple wrapper around inotify library")
15168 (description
15169 "@code{inotify-simple} is a simple wrapper around inotify library.")
15170 (license license:bsd-3)))
15171
15172(define-public python-interface-meta
15173 (package
15174 (name "python-interface-meta")
15175 (version "1.3.0")
15176 (source
15177 (origin
15178 (method url-fetch)
15179 (uri (pypi-uri "interface_meta" version))
15180 (sha256
15181 (base32 "18brkmz2ssjikkrkb23cwccp683yi6y1alfdbmjvjgxpppw96i4a"))))
15182 (build-system pyproject-build-system)
15183 (native-inputs (list python-poetry-core python-pytest))
15184 (home-page "https://github.com/matthewwardrop/interface_meta")
15185 (synopsis
15186 "API for enforced method signatures and consistent documentation")
15187 (description
15188 "This package provides a convenient way to expose an extensible API with
15189enforced method signatures and consistent documentation.")
15190 (license license:expat)))
15191
15192(define-public python-jaraco-itertools
15193 (package
15194 (name "python-jaraco-itertools")
15195 (version "6.4.3")
15196 (source
15197 (origin
15198 (method git-fetch)
15199 (uri (git-reference
15200 (url "https://github.com/jaraco/jaraco.itertools")
15201 (commit (string-append "v" version))))
15202 (file-name (git-file-name name version))
15203 (sha256
15204 (base32 "0nf674j28nlqszcvjhjdgbmy92xbwhylvg2rlic11w28iz4s8d9f"))))
15205 (build-system pyproject-build-system)
15206 (arguments
15207 (list #:tests? #f)) ;no tests
15208 (native-inputs
15209 (list python-setuptools
15210 python-setuptools-scm))
15211 (propagated-inputs
15212 (list python-inflect
15213 python-more-itertools))
15214 (home-page "https://github.com/jaraco/jaraco.itertools")
15215 (synopsis "Tools for working with iterables")
15216 (description
15217 "This package provides an utility collection based on no longer
15218maintained @code{jaraco.util}.")
15219 (license license:expat)))
15220
15221(define-public python-jaraco-packaging
15222 (package
15223 (name "python-jaraco-packaging")
15224 (version "9.4.0") ;the latest version compatible with [email protected]
15225 (source
15226 (origin
15227 (method url-fetch)
15228 (uri (pypi-uri "jaraco.packaging" version))
15229 (sha256
15230 (base32
15231 "1djpwmw2gmb6i9by1bc4lh4qlkvifgsqfj5alb9xz7pa80fcm416"))))
15232 (build-system pyproject-build-system)
15233 (arguments
15234 (list #:tests? #f)) ;no tests in PyPI archive
15235 (native-inputs
15236 (list python-setuptools
15237 python-setuptools-scm))
15238 (propagated-inputs
15239 (list python-pypa-build
15240 python-virtualenv
15241 python-domdf-python-tools
15242 python-jaraco-context
15243 python-sphinx))
15244 (home-page "https://github.com/jaraco/jaraco.packaging")
15245 (synopsis "Tools to supplement packaging Python releases")
15246 (description
15247 "This package provides various tools to supplement packaging Python
15248releases.")
15249 (license license:expat)))
15250
15251(define-public python-jaraco-vcs
15252 (package
15253 (name "python-jaraco-vcs")
15254 (version "2.4.1")
15255 (source
15256 (origin
15257 (method git-fetch)
15258 (uri (git-reference (url "https://github.com/jaraco/jaraco.vcs")
15259 (commit (string-append "v" version))))
15260 (file-name (git-file-name name version))
15261 (sha256 (base32 "1n9f0l4zp8dbbq2ha93bd9z6gb9y7gsmbd4jkl5gcm51qpsq4vpm"))))
15262 (build-system pyproject-build-system)
15263 (arguments
15264 (list
15265 #:test-flags
15266 ;; Ignore doctests.
15267 #~(list "--ignore-glob=jaraco/vcs/*.py")))
15268 (propagated-inputs (list python-jaraco-classes
15269 python-jaraco-path
15270 python-jaraco-versioning
15271 python-more-itertools
15272 python-packaging
15273 python-dateutil
15274 python-tempora))
15275 (native-inputs (list python-pygments
15276 python-pytest
15277 python-pytest-home
15278 python-setuptools
15279 python-setuptools-scm))
15280 (home-page "https://github.com/jaraco/jaraco.vcs")
15281 (synopsis "Utilities for working with VCS repositories")
15282 (description
15283 "This package provides facilities for working with VCS repositories in
15284Python.")
15285 (license license:expat)))
15286
15287(define-public python-jaraco-versioning
15288 (package
15289 (name "python-jaraco-versioning")
15290 (version "1.1.0")
15291 (source
15292 (origin
15293 (method git-fetch)
15294 (uri (git-reference
15295 (url "https://github.com/jaraco/jaraco.versioning")
15296 (commit (string-append "v" version))))
15297 (file-name (git-file-name name version))
15298 (sha256
15299 (base32 "12svnpa5sl3r5lci9bybzy5gb8pd4clfkl65x5hsap00ada2w91r"))))
15300 (build-system pyproject-build-system)
15301 (propagated-inputs (list python-packaging))
15302 (native-inputs
15303 (list python-pytest python-setuptools python-setuptools-scm))
15304 (home-page "https://github.com/jaraco/jaraco.versioning")
15305 (synopsis "Version manipulation utils")
15306 (description
15307 "This package builds upon @code{python-packaging} to provide more
15308sophisticated version manipulation.")
15309 (license license:expat)))
15310
15311(define-public python-pypytools
15312 (package
15313 (name "python-pypytools")
15314 (version "0.6.2")
15315 (source
15316 (origin
15317 (method git-fetch)
15318 (uri (git-reference
15319 (url "https://github.com/antocuni/pypytools/")
15320 (commit version)))
15321 (file-name (git-file-name name version))
15322 (sha256
15323 (base32 "1nmq4gsw3hcayj2d96n8n166h0wnmp7n28fqswcn562hx57mlh05"))
15324 (patches (search-patches "python-pypytools-python-3-fixes.patch"))))
15325 (build-system pyproject-build-system)
15326 (arguments
15327 (list
15328 ;; These tests are using deprecated py.code module.
15329 #:test-flags
15330 #~(list
15331 "--deselect=pypytools/testing/test_codegen.py::test_def__default_args"
15332 "--deselect=pypytools/testing/test_codegen.py::test_def_"
15333 "--deselect=pypytools/testing/test_codegen.py::test_compile"
15334 "--ignore=pypytools/testing/test_unroll.py"
15335 ;; clone_func returns an object of the wrong type.
15336 "--deselect=pypytools/testing/test_util.py::test_clonefunc")))
15337 (native-inputs
15338 (list python-freezegun
15339 python-numpy
15340 python-pytest
15341 python-setuptools))
15342 (propagated-inputs (list python-py))
15343 (home-page "https://github.com/antocuni/pypytools/")
15344 (synopsis "Tools to use PyPy-specific features, with CPython fallbacks")
15345 (description
15346 "This package provides a collection of useful tools to use PyPy-specific
15347features, with CPython fallbacks.")
15348 (license license:x11)))
15349
15350(define-public python-simplegeneric
15351 (package
15352 (name "python-simplegeneric")
15353 (version "0.8.1")
15354 (source
15355 (origin
15356 (method url-fetch)
15357 (uri (pypi-uri "simplegeneric" version ".zip"))
15358 (sha256
15359 (base32 "0wwi1c6md4vkbcsfsf8dklf3vr4mcdj4mpxkanwgb6jb1432x5yw"))))
15360 (build-system pyproject-build-system)
15361 (arguments
15362 (list
15363 #:test-backend #~'custom
15364 #:test-flags #~(list "-m" "simplegeneric")))
15365 (native-inputs
15366 (list unzip python-setuptools))
15367 (home-page "https://cheeseshop.python.org/pypi/simplegeneric")
15368 (synopsis "Python module for simple generic functions")
15369 (description
15370 "The simplegeneric module lets you define simple single-dispatch generic
15371functions, akin to Python’s built-in generic functions like @code{len()},
15372@code{iter()} and so on. However, instead of using specially-named methods,
15373these generic functions use simple lookup tables, akin to those used by
15374e.g. @code{pickle.dump()} and other generic functions found in the Python
15375standard library.")
15376 (license license:zpl2.1)))
15377
15378(define-public python-ipython-genutils
15379 ;; TODO: This package is retired, check if can be removed, see description.
15380 (package
15381 (name "python-ipython-genutils")
15382 (version "0.1.0")
15383 (source
15384 (origin
15385 (method url-fetch)
15386 (uri (pypi-uri "ipython_genutils" version))
15387 (sha256
15388 (base32 "19l2pp1c64ansr89l3cqh19jdi2ixhssdzx0vz4n6r52a6i281is"))))
15389 (build-system pyproject-build-system)
15390 (arguments `(#:tests? #f)) ; no tests
15391 (native-inputs
15392 (list python-setuptools))
15393 (home-page "https://ipython.org")
15394 (synopsis "Vestigial utilities from IPython")
15395 (description
15396 "This package provides retired utilities from IPython. No packages
15397outside IPython/Jupyter should depend on it.
15398
15399This package shouldn't exist. It contains some common utilities shared by
15400Jupyter and IPython projects during The Big Split. As soon as possible, those
15401packages will remove their dependency on this, and this package will go
15402away.")
15403 (license license:bsd-3)))
15404
15405;;; Variant used to break a cycle with python-ipykernel.
15406(define-public python-ipyparallel-bootstrap
15407 (hidden-package
15408 (package
15409 (name "python-ipyparallel-bootstrap")
15410 (version "9.0.1")
15411 (source
15412 (origin
15413 (method url-fetch)
15414 (uri (pypi-uri "ipyparallel" version))
15415 (sha256
15416 (base32 "177jk2g8srsddgyb4djbyci93v766vzrnqzzpd7ski804anjqn9f"))))
15417 (build-system pyproject-build-system)
15418 (arguments
15419 (list
15420 #:tests? #f
15421 #:phases #~(modify-phases %standard-phases
15422 ;; The python-ipykernel is normally propagated but is
15423 ;; removed from this package to break the cycle.
15424 (delete 'sanity-check))))
15425 (native-inputs
15426 (list python-hatchling))
15427 (propagated-inputs
15428 (list python-dateutil
15429 python-decorator
15430 python-entrypoints
15431 python-ipython
15432 ;; python-ipykernel is omitted here to break a cycle.
15433 python-jupyter-client-bootstrap
15434 python-psutil
15435 python-pyzmq
15436 python-tornado
15437 python-tqdm
15438 python-traitlets))
15439 (home-page "https://ipython.org/")
15440 (synopsis "Interactive Parallel Computing with IPython")
15441 (description
15442 "@code{ipyparallel} is a Python package and collection of CLI scripts
15443for controlling clusters for Jupyter. @code{ipyparallel} contains the
15444following CLI scripts:
15445@enumerate
15446@item ipcluster - start/stop a cluster
15447@item ipcontroller - start a scheduler
15448@item ipengine - start an engine
15449@end enumerate")
15450 (license license:bsd-3))))
15451
15452(define-public python-ipyparallel
15453 (package
15454 (inherit python-ipyparallel-bootstrap)
15455 (name "python-ipyparallel")
15456 (arguments
15457 (list
15458 #:test-flags
15459 ;; Disable warning because DeprecationWarnings make tests fail.
15460 #~(list "-p" "no:warnings" "--pyargs" "ipyparallel")))
15461 (native-inputs
15462 (modify-inputs native-inputs
15463 (append python-ipython
15464 python-pytest
15465 python-pytest-asyncio
15466 python-pytest-tornado
15467 python-testpath)))
15468 (propagated-inputs
15469 (modify-inputs propagated-inputs
15470 (replace "python-jupyter-client-bootstrap" python-jupyter-client)
15471 (append python-ipykernel)))
15472 (properties (alist-delete 'hidden? (package-properties
15473 python-ipyparallel-bootstrap)))))
15474
15475;; TODO: Package python-jupysql which is the maintained fork of this one.
15476(define-public python-ipython-sql
15477 (package
15478 (name "python-ipython-sql")
15479 (properties '((commit . "e21bc64e172270311d9103602e1c2ec1bcdd5aa8")
15480 (revision . "0")))
15481 (version (git-version "0.5.0"
15482 (assoc-ref properties 'revision)
15483 (assoc-ref properties 'commit)))
15484 (source
15485 (origin
15486 (method git-fetch)
15487 (uri (git-reference
15488 (url "https://github.com/catherinedevlin/ipython-sql")
15489 (commit (assoc-ref properties 'commit))))
15490 (file-name (git-file-name name version))
15491 (sha256
15492 (base32 "0palwgr7lnar8ykifzhf1qach206bf1xa1zkji2adk9pr9ajsiix"))))
15493 (build-system pyproject-build-system)
15494 (arguments
15495 (list #:tests? #f ;Fail because of prettytable.
15496 #:phases
15497 #~(modify-phases %standard-phases
15498 (replace 'check
15499 (lambda* (#:key tests? #:allow-other-keys)
15500 (setenv "HOME" (getcwd))
15501 (if tests?
15502 (invoke "ipython" "-c"
15503 "import pytest; pytest.main(['.'])")
15504 (format #t "test suite not run.~%")))))))
15505 (native-inputs (list python-pytest python-setuptools))
15506 (propagated-inputs
15507 (list python-ipython
15508 python-ipython-genutils
15509 python-prettytable
15510 python-sqlalchemy-2
15511 python-sqlparse))
15512 (home-page "https://github.com/catherinedevlin/ipython-sql")
15513 (synopsis "RDBMS access via IPython")
15514 (description "This library connects to a database, using SQLAlchemy URL
15515connect strings, then issue SQL commands within IPython or IPython Notebook.")
15516 (license license:expat)))
15517
15518(define-public python-optree
15519 (package
15520 (name "python-optree")
15521 (version "0.14.0")
15522 (source
15523 (origin
15524 (method git-fetch)
15525 (uri (git-reference
15526 (url "https://github.com/metaopt/optree")
15527 (commit (string-append "v" version))))
15528 (file-name (git-file-name name version))
15529 (sha256
15530 (base32
15531 "17zph1jgzk0zaanj7057qj8x5cml8j66ip0xmlbwmq4396hmdlbs"))))
15532 (build-system pyproject-build-system)
15533 (arguments
15534 (list
15535 #:test-flags
15536 ;; These tests fails due to a circular import
15537 '`("-k" ,(string-append "not test_treespec_pickle_missing_registration"
15538 " and not test_import_no_warnings"))))
15539 (propagated-inputs (list python-typing-extensions))
15540 (native-inputs
15541 (list python-pytest
15542 python-setuptools
15543 python-wheel
15544 cmake-minimal
15545 pybind11-2))
15546 (home-page "https://github.com/metaopt/optree")
15547 (synopsis "Optimized PyTree Utilities")
15548 (description "This package contains operations on PyTrees (a tree made of
15549container data structures in Python).")
15550 (license license:asl2.0)))
15551
15552(define-public python-backcall
15553 (package
15554 (name "python-backcall")
15555 (version "0.2.0")
15556 (source
15557 (origin
15558 (method git-fetch)
15559 (uri (git-reference
15560 (url "https://github.com/takluyver/backcall/")
15561 (commit version)))
15562 (file-name (git-file-name name version))
15563 (sha256
15564 (base32 "0br41zib1zph2jazanyjfl03rrb7frplk639fb10wvdqkrzgm6cd"))))
15565 (build-system pyproject-build-system)
15566 (native-inputs (list python-flit-core python-pytest))
15567 (home-page "https://github.com/takluyver/backcall/")
15568 (synopsis "Specifications for callback functions passed in to an API")
15569 (description
15570 "If your code lets other people supply callback functions, it's important
15571to specify the function signature you expect, and check that functions support
15572that. Adding extra parameters later would break other peoples code unless
15573you're careful. The @code{backcall} package provides a way of specifying the
15574callback signature using a prototype function.")
15575 (license license:bsd-3)))
15576
15577(define-public python-pubmed-parser
15578 (package
15579 (name "python-pubmed-parser")
15580 (version "0.5.1")
15581 (source (origin
15582 (method git-fetch)
15583 (uri (git-reference
15584 (url "https://github.com/titipata/pubmed_parser")
15585 (commit version)))
15586 (file-name (git-file-name name version))
15587 (sha256
15588 (base32
15589 "0hm520pxmbqlfckkdyccagmmsrqwdi0qdsc0l7rgp62jmsv7ppi5"))))
15590 (build-system pyproject-build-system)
15591 (arguments (list #:tests? #f)) ;; Tests require internet
15592 (native-inputs
15593 (list python-setuptools))
15594 (propagated-inputs
15595 (list python-lxml
15596 python-numpy
15597 python-requests
15598 python-six ;hard dependency
15599 python-unidecode))
15600 (home-page "https://titipata.github.io/pubmed_parser/")
15601 (synopsis "Parser for Pubmed Open-Access Subset and MEDLINE XML repository")
15602 (description
15603 "This package provides a Python parser for Pubmed Open-Access Subset and
15604MEDLINE XML repository.")
15605 (license license:expat)))
15606
15607(define-public python-pure-eval
15608 (package
15609 (name "python-pure-eval")
15610 (version "0.2.3")
15611 (source
15612 (origin
15613 (method url-fetch)
15614 (uri (pypi-uri "pure_eval" version))
15615 (sha256
15616 (base32 "0hmg1qcv1h5k0dyj7sfp54ibnmjrvf4awdc6gin5fk2n80zrhkjz"))))
15617 (build-system pyproject-build-system)
15618 (native-inputs
15619 (list python-pytest
15620 python-setuptools
15621 python-setuptools-scm
15622 python-wheel))
15623 (home-page "https://github.com/alexmojaki/pure_eval")
15624 (synopsis "Python library to evaluate abstract syntax tree nodes")
15625 (description "The @code{pure_eval} Python library can safely evaluate
15626abstract syntax tree (AST) nodes without side effects.")
15627 (license license:expat)))
15628
15629(define-public python-puremagic
15630 (package
15631 (name "python-puremagic")
15632 (version "1.28")
15633 (source
15634 (origin
15635 (method git-fetch) ;no tests in PyPI archive
15636 (uri (git-reference
15637 (url "https://github.com/cdgriffith/puremagic")
15638 (commit version)))
15639 (file-name (git-file-name name version))
15640 (sha256
15641 (base32 "0sffrjjqh37ijwnggyvs2rfm4iwaz2m395wqg0x727wv8i0x3f3b"))))
15642 (build-system pyproject-build-system)
15643 (native-inputs
15644 (list python-pytest python-setuptools python-wheel))
15645 (home-page "https://github.com/cdgriffith/puremagic")
15646 (synopsis "Pure Python implementation of magic file detection")
15647 (description
15648 "This package implements a functionality that will identify a file based
15649off it's magic numbers.")
15650 (license license:expat)))
15651
15652(define-public python-ast-decompiler
15653 (package
15654 (name "python-ast-decompiler")
15655 (version "0.7.0")
15656 (source
15657 (origin
15658 (method url-fetch)
15659 (uri (pypi-uri "ast_decompiler" version))
15660 (sha256
15661 (base32 "0dw3fck4ajilphqw4hdpa8pmqxg3jfk2xkmjnk3kx5pqwl3sbhzg"))
15662 ;; We need to manually create an __init__.py file under the tests/
15663 ;; directory, since it is not included in the distributed
15664 ;; version. (See:
15665 ;; https://github.com/JelleZijlstra/ast_decompiler/issues/52).
15666 (modules '((guix build utils)))
15667 (snippet '(call-with-output-file "tests/__init__.py"
15668 (const #t)))))
15669 (build-system pyproject-build-system)
15670 (native-inputs (list python-flit-core python-pytest))
15671 (home-page "https://github.com/JelleZijlstra/ast_decompiler")
15672 (synopsis
15673 "Decompile an @acronym{AST, Abstract Syntax Tree} to Python code")
15674 (description
15675 "This library provides functionality to decompile @acronym{AST, Abstract
15676Syntax Tree} objects, as generated by the standard library @code{ast} module,
15677to Python code.")
15678 (license license:asl2.0)))
15679
15680(define-public python-asttokens
15681 (package
15682 (name "python-asttokens")
15683 (version "3.0.0")
15684 (source
15685 (origin
15686 (method url-fetch)
15687 (uri (pypi-uri "asttokens" version))
15688 (sha256
15689 (base32 "1ixv6n8cg08n9h6rwyhd3lkzyjiwpbfv56dk338w3c32inm8pk8d"))))
15690 (build-system pyproject-build-system)
15691 (native-inputs
15692 (list python-astroid
15693 python-pytest
15694 python-setuptools
15695 python-setuptools-scm
15696 python-wheel))
15697 (home-page "https://github.com/gristlabs/asttokens")
15698 (synopsis "Python library to annotate abstract syntax trees")
15699 (description "The @code{asttokens} module annotates Python abstract syntax
15700trees (ASTs) with the positions of tokens and text in the source code that
15701generated them. It makes it possible for tools that work with logical AST
15702nodes to find the particular text that resulted in those nodes, for example
15703for automated refactoring or highlighting.")
15704 (license license:asl2.0)))
15705
15706(define-public python-littleutils
15707 (package
15708 (name "python-littleutils")
15709 (version "0.2.4")
15710 (source
15711 (origin
15712 (method url-fetch)
15713 (uri (pypi-uri "littleutils" version))
15714 (sha256
15715 (base32 "069xlm6vp1rprgrl4gsg3fd2vg0nzdw7v2qij7i45v8c080mp0y7"))))
15716 (build-system pyproject-build-system)
15717 (arguments (list #:tests? #f)) ;no tests in PyPIi archive or Git checkout
15718 (native-inputs
15719 (list python-setuptools
15720 python-setuptools-scm
15721 python-wheel))
15722 (home-page "https://github.com/alexmojaki/littleutils")
15723 (synopsis "Python utility function collection")
15724 (description "@code{littleutils} is a small collection of Python utility
15725functions, useful in the context of writing unit tests among other uses.")
15726 (license license:expat)))
15727
15728(define-public python-ipython
15729 (package
15730 (name "python-ipython")
15731 (version "9.8.0")
15732 (source
15733 (origin
15734 (method git-fetch)
15735 (uri (git-reference
15736 (url "https://github.com/ipython/ipython")
15737 (commit version)))
15738 (file-name (git-file-name name version))
15739 (sha256
15740 (base32 "01xislvlz33hlpbpf9cfgqabva3wzg49gb5437ypdzwldf8q25cg"))))
15741 (build-system pyproject-build-system)
15742 (arguments
15743 (list
15744 ;; tests: 1655 passed, 118 skipped, 3 xfailed, 7 warnings
15745 ;; with-extra: 1681 passed, 87 skipped, 5 deselected, 3 xfailed, 8 warnings
15746 #:test-backend #~'custom
15747 ;; XXX: It's a workaround to fix the error with module import
15748 ;; "_pytest.pathlib.ImportPathMismatchError:", see:
15749 ;; <https://codeberg.org/guix/guix/issues/2108>.
15750 #:test-flags
15751 #~(list "-m" "pytest" "-vv"
15752 "-k" (string-join
15753 ;; These need git.
15754 (list "not test_json_getsysinfo"
15755 "IPython.utils.sysinfo.sys_info"
15756 ;; Failed: DID NOT RAISE
15757 "test_timeit_raise_on_interrupt"
15758 "test_script_raise_on_interrupt"
15759 "test_time_raise_on_interrupt")
15760 " and not "))
15761 #:phases
15762 #~(modify-phases %standard-phases
15763 (add-before 'check 'pre-check
15764 (lambda _
15765 (setenv "HOME" "/tmp"))))))
15766 (propagated-inputs
15767 (list python-decorator
15768 python-ipython-pygments-lexers
15769 python-jedi
15770 python-matplotlib-inline
15771 python-pexpect
15772 python-prompt-toolkit
15773 python-pygments
15774 python-stack-data
15775 python-traitlets
15776 python-typing-extensions))
15777 (native-inputs
15778 (list python-pytest
15779 python-pytest-asyncio
15780 python-setuptools
15781 python-testpath
15782 ;; [extra]
15783 ;; python-curio ;deprecated
15784 ;; python-ipykernel ;cycles
15785 ;; python-jupyter-ai ;not packaged
15786 python-matplotlib
15787 ;; python-nbclient ;cycles
15788 python-nbformat
15789 python-numpy
15790 python-pandas
15791 python-trio))
15792 (home-page "https://ipython.org")
15793 (synopsis "IPython is a tool for interactive computing in Python")
15794 (description
15795 "IPython provides a rich architecture for interactive computing with:
15796Powerful interactive shells, a browser-based notebook, support for interactive
15797data visualization, embeddable interpreters and tools for parallel
15798computing.")
15799 (properties '((cpe-name . "ipython")))
15800 (license license:bsd-3)))
15801
15802(define-public python-ipython-documentation
15803 (package
15804 (inherit python-ipython)
15805 (name "python-ipython-documentation")
15806 (version (package-version python-ipython))
15807 (arguments
15808 (list
15809 #:phases
15810 #~(modify-phases %standard-phases
15811 (add-after 'unpack 'set-pythonpath
15812 (lambda _
15813 ;; Ensure this fixed (via the
15814 ;; "python-ipython-documentation-chars.patch" patch) copy of
15815 ;; IPython gets used.
15816 (setenv "PYTHONPATH" (string-append (getcwd)))))
15817 (delete 'build)
15818 (delete 'check)
15819 (replace 'install
15820 (lambda* (#:key outputs #:allow-other-keys)
15821 (let* ((data (string-append #$output "/share"))
15822 (doc (string-append data "/doc/" #$name "-" #$version))
15823 (html (string-append doc "/html"))
15824 (info (string-append data "/info")))
15825 (invoke "make" "-C" "docs" "info" "html"
15826 (string-append "SPHINXOPTS=-j"
15827 (number->string (parallel-job-count))))
15828 (install-file "COPYING.rst" doc)
15829 (copy-recursively "examples" (string-append doc "/examples"))
15830 ;; Install HTML documentation.
15831 (copy-recursively "docs/build/html" html)
15832 ;; Likewise for the info manual.
15833 (install-file "docs/build/texinfo/ipython.info" info)
15834 (symlink (string-append html "/_images")
15835 (string-append info "/ipython-figures"))))))))
15836 (native-inputs
15837 (list graphviz
15838 python-docrepr
15839 python-ipykernel
15840 python-sphinx
15841 python-sphinx-rtd-theme
15842 python-sphinx-toml
15843 texinfo))))
15844
15845;; A bare minimal package, mainly to use in tests and reduce closure
15846;; size. Tests are left out in the main package to slim down native-inputs.
15847(define-public python-ipython-minimal
15848 (package/inherit python-ipython
15849 (name "python-ipython-minimal")
15850 (arguments
15851 (list #:tests? #f))
15852 (native-inputs
15853 (list python-setuptools))))
15854
15855(define-public python-ipython-pygments-lexers
15856 (package
15857 (name "python-ipython-pygments-lexers")
15858 (version "1.1.1")
15859 (source
15860 (origin
15861 (method git-fetch)
15862 (uri (git-reference
15863 (url "https://github.com/ipython/ipython-pygments-lexers/")
15864 (commit version)))
15865 (file-name (git-file-name name version))
15866 (sha256
15867 (base32 "154vbpp9mkblsk1d0w8x8mybwgn5gz6mjgg77nqyn75ky0banrd7"))))
15868 (build-system pyproject-build-system)
15869 (propagated-inputs (list python-pygments))
15870 (native-inputs (list python-flit-core python-pytest))
15871 (home-page "https://github.com/ipython/ipython-pygments-lexers/")
15872 (synopsis "Plugin for IPython code sessions")
15873 (description
15874 "This package defines a variety of Pygments lexers for highlighting IPython
15875code.")
15876 (license license:bsd-3)))
15877
15878(define-public python-pydbus
15879 (package
15880 (name "python-pydbus")
15881 (version "0.6.0")
15882 (source
15883 (origin
15884 (method url-fetch)
15885 (uri (pypi-uri "pydbus" version))
15886 (sha256
15887 (base32 "0b0gipvz7vcfa9ddmwq2jrx16d4apb0hdnl5q4i3h8jlzwp1c1s2"))))
15888 (build-system pyproject-build-system)
15889 (arguments
15890 (list #:tests? #f ; no tests in PyPI, git tests require running DBus
15891 #:phases
15892 #~(modify-phases %standard-phases
15893 (add-after 'unpack 'fix-comparability-with-pygobject
15894 (lambda _
15895 (substitute* "pydbus/_inspect3.py"
15896 (("getargspec")
15897 "getfullargspec")))))))
15898 (native-inputs
15899 (list python-setuptools
15900 python-wheel))
15901 (propagated-inputs
15902 (list python-pygobject))
15903 (home-page "https://github.com/LEW21/pydbus")
15904 (synopsis "Pythonic D-Bus library")
15905 (description
15906 "Pydbus provides a pythonic interface to the D-Bus message bus system.
15907Pydbus can be used to access remote objects and also for object publication.
15908It is based on PyGI, the Python GObject Introspection bindings, which is the
15909recommended way to use GLib from Python.")
15910 (license license:lgpl2.1+)))
15911
15912(define-public python-dbus-1.2
15913 (package
15914 (name "python-dbus")
15915 (version "1.2.18")
15916 (source
15917 (origin
15918 (method url-fetch)
15919 (uri (string-append "https://dbus.freedesktop.org/releases/dbus-python/"
15920 "dbus-python-" version ".tar.gz"))
15921 (sha256
15922 (base32 "0q3jrw515z98mqdk9x822nd95rky455zz9876f1nqna5igkd3gcj"))))
15923 (build-system gnu-build-system)
15924 (native-inputs
15925 (list pkg-config
15926 python-setuptools))
15927 (inputs
15928 `(("python" ,python-wrapper)
15929 ("dbus-glib" ,dbus-glib)))
15930 (synopsis "Python bindings for D-bus")
15931 (description "python-dbus provides bindings for libdbus, the reference
15932implementation of D-Bus.")
15933 (home-page "https://www.freedesktop.org/wiki/Software/DBusBindings/")
15934 (license license:expat)))
15935
15936(define-public python-notify2
15937 (package
15938 (name "python-notify2")
15939 (version "0.3.1")
15940 (source
15941 (origin
15942 (method url-fetch)
15943 (uri (pypi-uri "notify2" version))
15944 (sha256
15945 (base32
15946 "0z8rrv9rsg1r2qgh2dxj3dfj5xnki98kgi3w839kqby4a26i1yik"))))
15947 (build-system pyproject-build-system)
15948 (arguments (list #:tests? #f)) ; tests depend on system state
15949 (native-inputs (list python-setuptools))
15950 (propagated-inputs (list python-dbus))
15951 (home-page "https://bitbucket.org/takluyver/pynotify2")
15952 (synopsis "Python interface to D-Bus notifications")
15953 (description
15954 "Pynotify2 provides a Python interface for sending D-Bus notifications.
15955It is a reimplementation of pynotify in pure Python, and an alternative to
15956the GObject Introspection bindings to libnotify for non-GTK applications.")
15957 (license (list license:bsd-2
15958 license:lgpl2.1+))))
15959
15960;; beautifulsoup4 has a totally different namespace than 3.x,
15961;; and pypi seems to put it under its own name, so I guess we should too
15962(define-public python-beautifulsoup4
15963 (package
15964 (name "python-beautifulsoup4")
15965 (version "4.14.3")
15966 (source
15967 (origin
15968 (method url-fetch)
15969 (uri (pypi-uri "beautifulsoup4" version))
15970 (sha256
15971 (base32
15972 "11pvlxgxxn8bcgfsbbfrb9b9jw3ma7qggycycsx6ndbd332v34k2"))))
15973 (build-system pyproject-build-system)
15974 (native-inputs
15975 (list python-hatchling
15976 python-pytest))
15977 (propagated-inputs
15978 (list python-soupsieve
15979 python-typing-extensions
15980 ;; [optional]
15981 python-cchardet
15982 python-chardet
15983 python-charset-normalizer
15984 python-html5lib
15985 python-lxml))
15986 (home-page "https://www.crummy.com/software/BeautifulSoup/bs4/")
15987 (synopsis "Python screen-scraping library")
15988 (description
15989 "Beautiful Soup is a Python library designed for rapidly setting up
15990screen-scraping projects. It offers Pythonic idioms for navigating,
15991searching, and modifying a parse tree, providing a toolkit for
15992dissecting a document and extracting what you need. It automatically
15993converts incoming documents to Unicode and outgoing documents to UTF-8.")
15994 (license license:expat)))
15995
15996(define-public python-beautifulsoup4-bootstrap
15997 (hidden-package
15998 (package/inherit python-beautifulsoup4
15999 (arguments
16000 (list #:tests? #f))
16001 (native-inputs
16002 (list python-hatchling))
16003 (propagated-inputs '()))))
16004
16005
16006(define-public python-netifaces
16007 (package
16008 (name "python-netifaces")
16009 (version "0.11.0")
16010 (source
16011 (origin
16012 (method url-fetch)
16013 (uri (pypi-uri "netifaces" version))
16014 (sha256
16015 (base32 "0cnajf5rl4w1sa72j921scbigr6zndig56cq8ggpx45jdqa7jfh4"))))
16016 (build-system pyproject-build-system)
16017 (arguments
16018 (list
16019 #:test-backend #~'custom
16020 #:test-flags #~(list "test.py")))
16021 (native-inputs (list python-setuptools))
16022 (home-page "https://github.com/al45tair/netifaces")
16023 (synopsis "Python module for portable network interface information")
16024 (description
16025 "Netifaces is a Python module providing information on network
16026interfaces in an easy and portable manner.")
16027 (license license:expat)))
16028
16029(define-public python-networkx
16030 (package
16031 (name "python-networkx")
16032 (version "3.4.2")
16033 (source
16034 (origin
16035 (method url-fetch)
16036 (uri (pypi-uri "networkx" version))
16037 (sha256
16038 (base32 "1qaks3c3h5qlw25z949q3plw8iwgm9h152kwnam64lwc89lkcz1h"))))
16039 (build-system pyproject-build-system)
16040 (arguments
16041 (list
16042 #:test-flags
16043 #~(list "--numprocesses" (number->string (parallel-job-count)))))
16044 (native-inputs
16045 (list python-pytest
16046 python-pytest-xdist
16047 python-setuptools
16048 python-wheel))
16049 (propagated-inputs
16050 (list python-decorator))
16051 (home-page "https://networkx.github.io/")
16052 (synopsis "Python module for creating and manipulating graphs and networks")
16053 (description
16054 "NetworkX is a Python package for the creation, manipulation, and study
16055of the structure, dynamics, and functions of complex networks.")
16056 (license license:bsd-3)))
16057
16058(define-public python-datrie
16059 (package
16060 (name "python-datrie")
16061 (version "0.8.3")
16062 (source
16063 (origin
16064 (method git-fetch)
16065 (uri (git-reference
16066 (url "https://github.com/kmike/datrie")
16067 (commit version)))
16068 (file-name (git-file-name name version))
16069 (sha256
16070 (base32 "1jfyhzfjgin370l6chd0cjg521ql3y53db194n94ff6cdbdbg7cg"))))
16071 (build-system pyproject-build-system)
16072 (arguments
16073 (list
16074 #:phases
16075 #~(modify-phases %standard-phases
16076 (add-after 'ensure-no-mtimes-pre-1980 'inject-libdatrie
16077 (lambda* (#:key inputs #:allow-other-keys)
16078 (let* ((headers (search-input-directory inputs
16079 "include/datrie"))
16080 (base (dirname (dirname headers))))
16081 (symlink headers "libdatrie/datrie")
16082 (setenv "LDFLAGS" (string-append "-L" base "/lib")))))
16083 (add-before 'build 'relax-gcc-14-strictness
16084 (lambda _
16085 (setenv "CFLAGS"
16086 "-g -O2 -Wno-error=incompatible-pointer-types"))))))
16087 (native-inputs
16088 (list python-cython python-hypothesis python-pytest python-setuptools))
16089 (inputs (list libdatrie))
16090 (home-page "https://github.com/kmike/datrie")
16091 (synopsis "Fast, efficiently stored trie for Python")
16092 (description
16093 "This package provides a fast, efficiently stored trie implementation for
16094Python.")
16095 (license license:lgpl2.1+)))
16096
16097(define-public python-amply
16098 (package
16099 (name "python-amply")
16100 (version "0.1.6")
16101 (source
16102 (origin
16103 (method url-fetch)
16104 (uri (pypi-uri "amply" version))
16105 (sha256
16106 (base32 "195fg1n5nsl722hk33f6a7ak3n0hfs8yfpqi2xkhdqgqrh1i2hk1"))))
16107 (build-system pyproject-build-system)
16108 (native-inputs
16109 (list python-pytest
16110 python-setuptools
16111 python-setuptools-scm
16112 python-wheel))
16113 (propagated-inputs
16114 (list python-docutils
16115 python-pyparsing))
16116 (home-page "https://github.com/willu47/amply")
16117 (synopsis "Load and manipulate AMPL/GLPK data as Python data structures")
16118 (description
16119 "Amply allows you to load and manipulate AMPL/GLPK data as Python data
16120structures.")
16121 (license license:epl1.0)))
16122
16123(define-public python-pulp
16124 ;; When updating, check snakemake@N builds still fine, see:
16125 ;; <https://codeberg.org/guix/guix/issues/4782>.
16126 (package
16127 (name "python-pulp")
16128 (version "2.4")
16129 (source
16130 (origin
16131 (method url-fetch)
16132 (uri (pypi-uri "PuLP" version))
16133 (sha256
16134 (base32
16135 "1dammrg0f1v0r028i3rpxbf2bsyxmjq0q6ihb4x2wsdki44z3bxj"))))
16136 (build-system pyproject-build-system)
16137 (arguments
16138 ;; TODO: They need a special setup, see:
16139 ;; <https://codeberg.org/guix/guix/pulls/4908>.
16140 (list #:tests? #f))
16141 (native-inputs
16142 (list python-setuptools))
16143 (propagated-inputs
16144 (list python-amply))
16145 (home-page "https://github.com/coin-or/pulp")
16146 (synopsis "Linear Programming modeler")
16147 (description
16148 "PuLP is a Linear Programming modeler written in Python. PuLP can
16149generate MPS or LP files and call GLPK, COIN CLP/CBC, CPLEX, and GUROBI to
16150solve linear problems.")
16151 (license license:expat)))
16152
16153(define-public python-py-partiql-parser
16154 (package
16155 (name "python-py-partiql-parser")
16156 (version "0.6.3")
16157 (source
16158 (origin
16159 (method git-fetch)
16160 (uri (git-reference
16161 (url "https://github.com/getmoto/py-partiql-parser")
16162 (commit version)))
16163 (file-name (git-file-name name version))
16164 (sha256
16165 (base32 "1jkdndlih5zapi6ypq1z2rkqbgadyl4lcghb0gajfwiczdhs9lgp"))))
16166 (build-system pyproject-build-system)
16167 (native-inputs
16168 (list python-hatchling
16169 python-pytest))
16170 (home-page "https://pypi.org/project/py-partiql-parser/")
16171 (synopsis "Pure Python PartiQL Parser")
16172 (description
16173 "This package provides a tokenizer/parser/executor for the PartiQL
16174language, in Python.")
16175 (license license:expat)))
16176
16177(define-public python-py-tes
16178 (package
16179 (name "python-py-tes")
16180 (version "0.4.2")
16181 (source
16182 (origin
16183 (method git-fetch)
16184 (uri (git-reference
16185 (url "https://github.com/ohsu-comp-bio/py-tes")
16186 (commit version)))
16187 (file-name (git-file-name name version))
16188 (sha256
16189 (base32 "0nacmw7whmbfqa6y728l6f646wpgaanfa0v4p5mggag2044v55qx"))))
16190 (build-system pyproject-build-system)
16191 (native-inputs
16192 (list python-pytest python-requests-mock python-setuptools))
16193 (propagated-inputs
16194 (list python-attrs python-dateutil python-future python-requests))
16195 (home-page "https://github.com/ohsu-comp-bio/py-tes")
16196 (synopsis "Library for communicating with the GA4GH Task Execution API")
16197 (description "This package provides a library for communicating with the
16198GA4GH Task Execution API.")
16199 (license license:expat)))
16200
16201(define-public python-altgraph
16202 (package
16203 (name "python-altgraph")
16204 (version "0.17.4")
16205 (source
16206 (origin
16207 (method url-fetch)
16208 (uri (pypi-uri "altgraph" version))
16209 (sha256
16210 (base32 "01j48np3g50g6insjkszsz0vifwlm6gspria5vdwlkbciywznnhv"))))
16211 (build-system pyproject-build-system)
16212 (native-inputs (list python-pytest python-setuptools python-wheel))
16213 (home-page "https://altgraph.readthedocs.io")
16214 (synopsis "Python graph network package")
16215 (description
16216"This package provides tools for constructing graphs, BFS and DFS
16217traversals, topological sort, shortest paths, and more with graphviz
16218output.")
16219 (license license:expat)))
16220
16221(define-public python-pyqrcode
16222 (package
16223 (name "python-pyqrcode")
16224 (properties '((commit . "674a77b5eaf850d063f518bd90c243ee34ad6b5d")
16225 (revision . "0")))
16226 (version (git-version "1.2.1"
16227 (assoc-ref properties 'revision)
16228 (assoc-ref properties 'commit)))
16229 (source
16230 (origin
16231 (method git-fetch)
16232 (uri (git-reference
16233 (url "https://github.com/mnooner256/pyqrcode")
16234 (commit (assoc-ref properties 'commit))))
16235 (file-name (git-file-name name version))
16236 (sha256
16237 (base32 "0ks4sqwcwsnb5r65z6zdfbir34f35sfv3agnlmcq1w36fya2y62m"))))
16238 (build-system pyproject-build-system)
16239 (arguments (list #:test-backend #~'nose))
16240 (native-inputs (list python-pynose python-pypng python-setuptools))
16241 (home-page "https://github.com/mnooner256/pyqrcode")
16242 (synopsis "QR code generator")
16243 (description
16244 "Pyqrcode is a QR code generator written purely in Python with SVG, EPS,
16245PNG and terminal output.")
16246 (license license:bsd-3)))
16247
16248(define-public python-seaborn
16249 (package
16250 (name "python-seaborn")
16251 (version "0.13.2")
16252 (source (origin
16253 (method url-fetch)
16254 (uri (pypi-uri "seaborn" version))
16255 (sha256
16256 (base32
16257 "1xzzxrbxsmmk39647vcx7avzdbzxw9vz8pc8yklnakcgk100mrlk"))))
16258 (build-system pyproject-build-system)
16259 (arguments
16260 (list
16261 ;; tests: 2354 passed, 16 skipped, 6 xfailed, 224 warnings
16262 #:test-flags
16263 #~(list "--numprocesses" (number->string (parallel-job-count))
16264 ;; XXX: See: <https://github.com/mwaskom/seaborn/issues/3892>.
16265 ;; KeyError: 'labelleft'
16266 "--deselect=tests/_core/test_plot.py::TestLabelVisibility::test_1d_column_wrapped"
16267 "--deselect=tests/_core/test_plot.py::TestLabelVisibility::test_1d_row_wrapped"
16268 ;; AttributeError: module 'numpy' has no attribute
16269 ;; 'VisibleDeprecationWarning'
16270 "--deselect=tests/test_distributions.py::TestKDEPlotBivariate::test_weights")))
16271 (native-inputs
16272 (list python-flit-core
16273 python-pytest-8
16274 python-pytest-xdist))
16275 (propagated-inputs
16276 (list python-matplotlib
16277 python-numpy
16278 python-pandas
16279 python-scipy
16280 python-statsmodels))
16281 (home-page "https://seaborn.pydata.org/")
16282 (synopsis "Statistical data visualization")
16283 (description
16284 "Seaborn is a library for making attractive and informative statistical
16285graphics in Python. It is built on top of matplotlib and tightly integrated
16286with the PyData stack, including support for numpy and pandas data structures
16287and statistical routines from scipy and statsmodels.")
16288 (license license:bsd-3)))
16289
16290(define-public python-session-info
16291 (package
16292 (name "python-session-info")
16293 (version "1.0.0")
16294 (source
16295 (origin
16296 (method git-fetch)
16297 (uri (git-reference
16298 (url "https://gitlab.com/joelostblom/session_info")
16299 (commit version)))
16300 (file-name (git-file-name name version))
16301 (sha256
16302 (base32 "0w6y764qci5w9925c75xdr8jizgf8189mzzaz4zk5lw1f182yqy4"))))
16303 (build-system pyproject-build-system)
16304 (arguments (list #:tests? #f)) ; No tests.
16305 (native-inputs (list python-setuptools))
16306 (propagated-inputs (list python-stdlib-list))
16307 (home-page "https://gitlab.com/joelostblom/session_info")
16308 (synopsis "Output version information for modules currently loaded")
16309 (description
16310 "This package outputs version information for modules loaded in the current
16311session, Python, and the OS.")
16312 (license license:bsd-3)))
16313
16314(define-public python-mpmath
16315 (package
16316 (name "python-mpmath")
16317 (version "1.3.0")
16318 (source
16319 (origin
16320 (method git-fetch)
16321 (uri (git-reference
16322 (url "https://github.com/fredrik-johansson/mpmath")
16323 (commit version)))
16324 (file-name (git-file-name name version))
16325 (sha256
16326 (base32 "058ahp0z0gn0z1hwvggrmiir1xag6rzgrfgfg138kjnk5ml9q4gl"))))
16327 (build-system pyproject-build-system)
16328 (native-inputs
16329 (list python-pytest
16330 python-setuptools
16331 python-setuptools-scm))
16332 (home-page "https://mpmath.org")
16333 (synopsis "Arbitrary-precision floating-point arithmetic in python")
16334 (description
16335 "@code{mpmath} can be used as an arbitrary-precision substitute for
16336Python's float/complex types and math/cmath modules, but also does much
16337more advanced mathematics.")
16338 (license license:bsd-3)))
16339
16340(define-public python-bigfloat
16341 (package
16342 (name "python-bigfloat")
16343 (version "0.4.0")
16344 (source
16345 (origin
16346 (method url-fetch)
16347 (uri (pypi-uri "bigfloat" version))
16348 (sha256
16349 (base32 "1f0c1hdr39bbl5rds5r1waa1papjmjiyp0ixs64mkjiahzg6pfaq"))
16350 (snippet '(delete-file "mpfr.c"))))
16351 (build-system pyproject-build-system)
16352 (arguments
16353 (list
16354 #:test-flags
16355 ;; This one fails with AssertionError: 0 != 8796082524191. Not good,
16356 ;; but I don't know what to do about it.
16357 '(list "-k" "not test_hash")
16358 #:phases
16359 '(modify-phases %standard-phases
16360 (add-before 'build 'cythonize
16361 (lambda _ (invoke "cython" "mpfr.pyx"))))))
16362 (inputs (list mpfr))
16363 (native-inputs
16364 (list python-cython python-pytest python-setuptools python-wheel))
16365 (propagated-inputs
16366 (list python-six))
16367 (home-page "https://github.com/mdickinson/bigfloat")
16368 (synopsis "Arbitrary precision floating-point arithmetic for Python")
16369 (description
16370 "This package provides a Python interface to the MPFR library for
16371multiprecision arithmetic.")
16372 (license license:lgpl3+)))
16373
16374(define-public python-plac
16375 (package
16376 (name "python-plac")
16377 (version "1.4.3")
16378 (source
16379 (origin
16380 (method git-fetch)
16381 (uri (git-reference
16382 (url "https://github.com/ialbert/plac")
16383 (commit (string-append "v" version))))
16384 (file-name (git-file-name name version))
16385 (sha256
16386 (base32 "0c9nagff8x7wk137yhs9fm1823c2l6yiyvm6w5gb0i4w5nsh6v0i"))))
16387 (build-system pyproject-build-system)
16388 (arguments
16389 (list
16390 #:phases
16391 #~(modify-phases %standard-phases
16392 (add-after 'unpack 'fix-tkinter
16393 (lambda _
16394 (substitute* "plac_tk.py"
16395 (("from Tkinter import Tk")
16396 "from tkinter import Tk")
16397 (("from ScrolledText import ScrolledText")
16398 "from tkinter.scrolledtext import ScrolledText")))))))
16399 (native-inputs
16400 (list (list python "tk") python-pytest python-setuptools))
16401 (home-page "https://github.com/ialbert/plac")
16402 (synopsis "Command line arguments parser")
16403 (description
16404 "This package can generate command line parameters from function
16405signatures.")
16406 (license license:bsd-3)))
16407
16408(define-public python-q
16409 (package
16410 (name "python-q")
16411 (properties '((commit . "cbad74095e20017f33d3ab75aa8375aa046ee697")
16412 (revision . "0")))
16413 (version (git-version "2.7"
16414 (assoc-ref properties 'revision)
16415 (assoc-ref properties 'commit)))
16416 (source
16417 (origin
16418 (method git-fetch)
16419 (uri (git-reference
16420 (url "https://github.com/zestyping/q")
16421 (commit (assoc-ref properties 'commit))))
16422 (file-name (git-file-name name version))
16423 (sha256
16424 (base32 "17bzi4xma4313waxanz5lly0cf0k6h33qrpy24sra2frh7gp0j0j"))))
16425 (build-system pyproject-build-system)
16426 (arguments
16427 (list
16428 ;; Deduced from the makefile.
16429 #:test-backend #~'custom
16430 #:test-flags #~(list "test/test_basic.py")
16431 #:phases
16432 #~(modify-phases %standard-phases
16433 (add-before 'check 'configure-tests
16434 (lambda* (#:key tests? #:allow-other-keys)
16435 (when tests?
16436 (setenv "TMPDIR" "/tmp")))))))
16437 (native-inputs (list python-setuptools))
16438 (home-page "https://github.com/zestyping/q")
16439 (synopsis "Quick-and-dirty debugging output for tired programmers")
16440 (description
16441 "q is a Python module for \"print\" style of debugging Python code. It
16442provides convenient short API for print out of values, tracebacks, and
16443falling into the Python interpreter.")
16444 (license license:asl2.0)))
16445
16446(define-public python-qnorm
16447 (package
16448 (name "python-qnorm")
16449 (version "0.9.0")
16450 (source
16451 (origin
16452 (method git-fetch)
16453 (uri (git-reference
16454 (url "https://github.com/Maarten-vd-Sande/qnorm")
16455 (commit (string-append "v" version))))
16456 (file-name (git-file-name name version))
16457 (sha256
16458 (base32 "0bgqxmqq8d3il0gnbvlb5sik50f6z8myx7p652lpv4llj9hrl2w8"))))
16459 (build-system pyproject-build-system)
16460 (propagated-inputs
16461 (list python-numba python-numpy python-pandas
16462 ;; XXX: pandas optional dependencies.
16463 python-tables python-pyarrow python-fastparquet))
16464 (native-inputs (list python-setuptools))
16465 (home-page "https://github.com/Maarten-vd-Sande/qnorm")
16466 (synopsis "Quantile normalization")
16467 (description
16468 "This tool implements quantile normalization. It properly resolves rank
16469ties, which is important when ties happen frequently, such as when working
16470with discrete numbers (integers) in count tables. This implementation should
16471be relatively fast, and can use multiple cores to sort the columns and
16472tie-resolvement is accelerated by numba.")
16473 (license license:expat)))
16474
16475(define-public python-quantlaw
16476 (package
16477 (name "python-quantlaw")
16478 (version "0.0.7")
16479 (source
16480 (origin
16481 (method git-fetch)
16482 (uri (git-reference
16483 (url "https://github.com/Quantlaw/quantlaw")
16484 (commit (string-append "v" version))))
16485 (file-name (git-file-name name version))
16486 (sha256
16487 (base32 "1ps0hcw2x2w9g0gipflka98zf1zsadgs161r6pgp7nh0sq8kpkrh"))))
16488 (build-system pyproject-build-system)
16489 (arguments
16490 (list
16491 #:test-flags
16492 #~(list "-k"
16493 ;; test expects network access
16494 "not test_load_statue_names")))
16495 (native-inputs (list python-pytest python-setuptools))
16496 (propagated-inputs (list python-beautifulsoup4 python-networkx
16497 python-pandas python-regex python-requests))
16498 (home-page "https://quantlaw.readthedocs.io/")
16499 (synopsis "Coding utilities for quantitative legal studies")
16500 (description
16501 "This package provides coding utilities for quantitative legal studies.")
16502 (license license:bsd-3)))
16503
16504(define-public python-singledispatch
16505 (package
16506 (name "python-singledispatch")
16507 (version "4.0.0")
16508 (source
16509 (origin
16510 (method url-fetch)
16511 (uri (pypi-uri "singledispatch" version))
16512 (sha256
16513 (base32
16514 "1z5qbbvvjvh3cwcjv57p7vzhayx0j1ysnvjq0d5py6k5d2ljghzk"))))
16515 (build-system pyproject-build-system)
16516 (native-inputs
16517 (list python-pytest
16518 python-setuptools
16519 python-six ; required for conversion, not at run-time
16520 python-wheel))
16521 (home-page
16522 "https://docs.python.org/3/library/functools.html#functools.singledispatch")
16523 (synopsis "Backport of singledispatch feature from Python 3.4")
16524 (description
16525 "This library brings functools.singledispatch from Python 3.4 to Python
165262.6-3.3.")
16527 (license license:expat)))
16528
16529(define-public python-pyzmq
16530 (package
16531 (name "python-pyzmq")
16532 (version "27.1.0")
16533 (source
16534 (origin
16535 (method git-fetch)
16536 (uri (git-reference
16537 (url "https://github.com/zeromq/pyzmq")
16538 (commit (string-append "v" version))))
16539 (file-name (git-file-name name version))
16540 (sha256
16541 (base32 "1zw0wm48ja90f616nwd33njplcni7wszw6r660l7cnim81yb3rhq"))))
16542 (build-system pyproject-build-system)
16543 (arguments
16544 (list
16545 #:test-flags
16546 '(list "-m" "not flaky")
16547 #:phases
16548 #~(modify-phases %standard-phases
16549 (add-before 'build 'configure
16550 (lambda _
16551 ;; Our zeromq package is built with '--enable-drafts'; also
16552 ;; enable draft support for pyzmq so the draft test passes.
16553 (setenv "ZMQ_DRAFT_API" "1")
16554 ;; Make sure to prevent building bundled libzmq.
16555 (setenv "PYZMQ_NO_BUNDLE" "1")))
16556 (add-before 'check 'delete-source
16557 ;; To prevent loading it and skip build extensions one more times.
16558 (lambda _
16559 (delete-file-recursively "zmq"))))))
16560 (native-inputs
16561 (list cmake-minimal
16562 ;; python-cffi ; for PyPy
16563 python-cython
16564 python-packaging
16565 python-pytest
16566 python-pytest-asyncio
16567 python-scikit-build-core
16568 python-tornado))
16569 (inputs
16570 (list libsodium
16571 zeromq))
16572 (home-page "https://github.com/zeromq/pyzmq")
16573 (synopsis "Python bindings for 0MQ")
16574 (description
16575 "PyZMQ is the official Python binding for the ZeroMQ messaging library.")
16576 (license license:bsd-4)))
16577
16578(define-public python-immutabledict
16579 (package
16580 (name "python-immutabledict")
16581 (version "4.2.0")
16582 (source
16583 (origin
16584 (method url-fetch)
16585 (uri (pypi-uri "immutabledict" version))
16586 (sha256
16587 (base32 "0pvwfasa5l78pi32zk55x5ihpdzkdh4f3xwbfmd7ldyjma0zs0z0"))))
16588 (build-system pyproject-build-system)
16589 (native-inputs
16590 (list python-poetry-core python-pytest))
16591 (home-page "https://github.com/corenting/immutabledict")
16592 (synopsis "Immutable wrapper around dictionaries")
16593 (description
16594 "@dfn{immutabledict} is an immutable wrapper around dictionaries.
16595It implements the complete mapping interface and can be used as a drop-in
16596replacement for dictionaries where immutability is desired.")
16597 (license license:expat)))
16598
16599(define-public python-emoji
16600 (package
16601 (name "python-emoji")
16602 (version "2.12.1")
16603 (source
16604 (origin
16605 (method url-fetch)
16606 (uri (pypi-uri "emoji" version))
16607 (sha256
16608 (base32 "1svk94pad8gcvjwd329zmfrw09wakwh6qjvnhf6sa6k92y44i82a"))))
16609 (build-system pyproject-build-system)
16610 (propagated-inputs (list python-typing-extensions))
16611 (native-inputs
16612 (list python-pytest
16613 python-setuptools
16614 python-wheel))
16615 (home-page "https://github.com/carpedm20/emoji/")
16616 (synopsis "Emoji terminal output for Python")
16617 (description
16618 "This package provides Emoji terminal output for Python. The
16619entire set of Emoji codes as defined by the Unicode Consortium is supported in
16620addition to a bunch of aliases.")
16621 (license license:bsd-3)))
16622
16623;; TODO: Remove this package when upgrading python-gh-md-to-html to the
16624;; latest version. The latest gh-md-to-html does not build successfully from
16625;; the PyPI distribution. Let's resolve #72102 while keeping gh-md-to-html at
16626;; version 1.21.2 from failing.
16627;; https://issues.guix.gnu.org/72102
16628;; https://github.com/phseiff/github-flavored-markdown-to-html/issues/73
16629(define-public python-emoji-for-gh-md-to-html
16630 (package
16631 (inherit python-emoji)
16632 (version "1.6.1")
16633 (source
16634 (origin
16635 (method url-fetch)
16636 (uri (pypi-uri "emoji" version))
16637 (sha256
16638 (base32 "0923mpixwq6hdpkgvi4r46alfvf608iq975rb8lnqpq29j71mmjk"))))))
16639
16640(define-public python-sarge
16641 (package
16642 (name "python-sarge")
16643 (version "0.1.7.post1") ;post release only to correct errors in metadata
16644 (source
16645 (origin
16646 (method git-fetch)
16647 (uri (git-reference
16648 (url "https://github.com/vsajip/sarge")
16649 (commit version)))
16650 (file-name (git-file-name name version))
16651 (sha256
16652 (base32 "0kn577lnaznr2hz1w1617l1agd21xs1fq2qv8kg2dy92qinl6gbd"))))
16653 (build-system pyproject-build-system)
16654 (native-inputs (list python-pytest python-setuptools))
16655 (home-page "https://docs.red-dove.com/sarge/")
16656 (synopsis "Subprocess wrapper with command pipeline functionality")
16657 (description "@code{sarge} is a wrapper for subprocess which provides
16658command pipeline functionality.")
16659 (license license:bsd-3)))
16660
16661(define-public python-sentry-sdk
16662 ;; TODO: Move to (gnu packages python-web).
16663 (package
16664 (name "python-sentry-sdk")
16665 (version "2.59.0")
16666 (source
16667 (origin
16668 (method git-fetch)
16669 (uri (git-reference
16670 (url "https://github.com/getsentry/sentry-python")
16671 (commit version)))
16672 (file-name (git-file-name name version))
16673 (sha256
16674 (base32 "1ghpfqfhjkh511q11l5lisahian34b3lzjk2xvkg2ijm6p9ail88"))))
16675 (build-system pyproject-build-system)
16676 (arguments
16677 (list
16678 ;; tests: 2119 passed, 128 skipped, 224 warnings
16679 #:test-flags
16680 #~(list "--durations=10"
16681 "--numprocesses" (number->string (parallel-job-count))
16682 ;; The whole test suite is quite shaky, may fail unpredictably
16683 ;; and depends on many additional inputs to enable all
16684 ;; integration tests.
16685 "-k" (string-join
16686 (list "not test_aggregates"
16687 "test_aggregates_deprecated"
16688 (string-append "test_aggregates_explicitly_disabled"
16689 "_session_tracking_request_mode")
16690 (string-append "test_aggregates_explicitly_disabled"
16691 "_session_tracking_request"
16692 "_mode_deprecated")
16693 "test_auto_session_tracking_with_aggregates[False]"
16694 "test_auto_session_tracking_with_aggregates[True]"
16695 "test_basic"
16696 "test_default_attributes"
16697 "test_default_release"
16698 (string-append "test_ensure_integration_enabled"
16699 "_no_original_function_enabled")
16700 "test_logger_with_all_attributes"
16701 "test_merging"
16702 (string-append "test_session_mode_defaults_to"
16703 "_request_mode_in_wsgi_handler"))
16704 " and not "))
16705 #:phases
16706 #~(modify-phases %standard-phases
16707 (add-after 'unpack 'fix-pytest-config
16708 (lambda _
16709 ;; Tests run in debug mode which generats a lot of noise.
16710 (delete-file "tox.ini")
16711 (substitute* "pyproject.toml"
16712 (("addopts =.*") "")))))))
16713 (native-inputs
16714 (list nss-certs-for-test
16715 python-brotli
16716 python-jsonschema
16717 python-mock
16718 python-pysocks
16719 python-pytest
16720 python-pytest-aiohttp
16721 python-pytest-asyncio
16722 python-pytest-localserver
16723 python-pytest-timeout
16724 python-pytest-xdist
16725 python-responses
16726 python-setuptools
16727 python-socksio))
16728 (propagated-inputs
16729 (list python-certifi
16730 python-urllib3
16731 ;; [optional]
16732 ;; python-unleashclient
16733 python-aiohttp
16734 ;; python-anthropic
16735 ;; python-apache-beam
16736 ;; python-arq
16737 python-asttokens
16738 ;; python-asyncpg
16739 ;; python-blinker
16740 ;; python-bottle
16741 ;; python-celery
16742 ;; python-celery-redbeat
16743 ;; python-chalice
16744 ;; python-clickhouse-driver
16745 ;; python-django
16746 python-executing
16747 ;; python-falcon
16748 ;; python-fastapi
16749 ;; python-flask
16750 ;; python-google-genai
16751 ;; python-grpcio
16752 python-httpcore
16753 ;; python-httpx
16754 ;; python-huey
16755 ;; python-huggingface-hub
16756 ;; python-langchain
16757 ;; python-langgraph
16758 ;; python-launchdarkly-server-sdk
16759 ;; python-litellm
16760 ;; python-litestar
16761 ;; python-loguru
16762 ;; python-markupsafe
16763 ;; python-mcp
16764 ;; python-openai
16765 ;; python-openfeature-sdk
16766 ;; python-opentelemetry-distro
16767 ;; python-protobuf
16768 ;; python-pure-eval
16769 ;; python-pydantic-ai
16770 ;; python-pymongo
16771 ;; python-pyspark
16772 ;; python-quart
16773 ;; python-rq
16774 ;; python-sanic
16775 ;; python-sqlalchemy
16776 ;; python-starlette
16777 ;; python-starlite
16778 ;; python-statsig
16779 ;; python-tiktoken
16780 #;python-tornado))
16781 (home-page "https://github.com/getsentry/sentry-python")
16782 (synopsis "Python SDK for Sentry")
16783 (description "This package provides a Python SDK for the Sentry
16784application monitoring and error tracking software.")
16785 (license license:bsd-2)))
16786
16787;; A bare minimal package, mainly to use in tests and reduce closure
16788;; size. Tests are left out in the main package to slim down native-inputs.
16789(define-public python-sentry-sdk-minimal
16790 (package/inherit python-sentry-sdk
16791 (name "python-sentry-sdk-minimal")
16792 (arguments
16793 (list #:tests? #f))
16794 (native-inputs
16795 (list python-setuptools))
16796 (propagated-inputs
16797 (list python-certifi
16798 python-urllib3))))
16799
16800(define-public python-pep440
16801 (package
16802 (name "python-pep440")
16803 (version "0.1.2")
16804 (source
16805 (origin
16806 (method url-fetch)
16807 (uri (pypi-uri "pep440" version))
16808 (sha256
16809 (base32 "0kfhysbyci4f2sxvv991yvn22kbhncn0jg1arbhzw4rbri375csq"))))
16810 (build-system pyproject-build-system)
16811 (arguments
16812 ;; This checks for "pep440" in the output, but we actually print
16813 ;; ".pep440-real" due to wrapping.
16814 (list #:test-flags '(list "-k" "not test_cli_help")))
16815 (propagated-inputs (list python-check-manifest python-mypy python-pytest
16816 python-pytest-console-scripts python-pytest-cov))
16817 (native-inputs (list python-flit-core))
16818 (home-page "https://pypi.org/project/pep440/")
16819 (synopsis "Utils to check whether versions number match PEP 440")
16820 (description
16821 "This package provides a simple package with utils to check whether
16822versions number match PEP 440.")
16823 (license license:expat)))
16824
16825(define-public python-pyproject-metadata
16826 (package
16827 (name "python-pyproject-metadata")
16828 (version "0.10.0")
16829 (source
16830 (origin
16831 (method git-fetch)
16832 (uri (git-reference
16833 (url "https://github.com/FFY00/python-pyproject-metadata")
16834 (commit version)))
16835 (file-name (git-file-name name version))
16836 (sha256
16837 (base32 "1vz2dx46ag42bqp81frd92pfnryfdry6112g6z5inrywqs8vymkw"))))
16838 (build-system pyproject-build-system)
16839 (arguments
16840 (list
16841 #:test-flags
16842 ;; Two tests fail because the error message slightly changed, so the
16843 ;; tests' regular expressions no longer match.
16844 '(list "--ignore=tests/test_standard_metadata.py")))
16845 (propagated-inputs (list python-packaging))
16846 (native-inputs
16847 (list python-flit-core python-pytest python-tomli))
16848 (home-page "https://github.com/FFY00/python-pyproject-metadata")
16849 (synopsis "Dataclass for PEP 621 metadata")
16850 (description "This project does not implement the parsing of
16851@file{pyproject.toml} containing PEP 621 metadata. Instead, given a Python
16852data structure representing PEP 621 metadata (already parsed), it will
16853validate this input and generate a PEP 643-compliant metadata
16854file (e.g. @file{PKG-INFO}).")
16855 (license license:expat)))
16856
16857(define-public python-meson
16858 (package
16859 (name "python-meson")
16860 (version "0.19.0")
16861 (source
16862 (origin
16863 (method git-fetch)
16864 (uri (git-reference
16865 (url "https://github.com/mesonbuild/meson-python")
16866 (commit version)))
16867 (file-name (git-file-name name version))
16868 (sha256
16869 (base32 "0kbp3iax1w12bkx0kfxsavdw4almksi1yh9866pcsf9zim49k5nz"))))
16870 (build-system pyproject-build-system)
16871 ;; tests: 124 passed, 16 skipped
16872 (native-inputs
16873 (list git-minimal/pinned
16874 patchelf
16875 python-pytest
16876 python-pytest-mock))
16877 (propagated-inputs
16878 (list meson
16879 ninja
16880 python-cython
16881 python-packaging
16882 python-pyproject-metadata))
16883 (home-page "https://github.com/mesonbuild/meson-python")
16884 (synopsis "Meson Python build backend (PEP 517)")
16885 (description "This package provides a PEP 517 build backend that makes
16886use of the Meson build system.")
16887 (license license:expat)))
16888
16889;; XXX: Deprecated on <2026-01-26>.
16890(define-deprecated/public-alias python-meson-python python-meson)
16891;;; Deprecated on 2026-03-02.
16892(define-deprecated-package meson-python python-meson)
16893
16894(define-public python-mccabe
16895 (package
16896 (name "python-mccabe")
16897 (version "0.7.0")
16898 (source
16899 (origin
16900 (method url-fetch)
16901 (uri (pypi-uri "mccabe" version))
16902 (sha256
16903 (base32 "09b34c7jj2a0yya7fp3x7lncna4zj7pr4caj9vgvnq1vqd0053il"))))
16904 (build-system pyproject-build-system)
16905 (arguments
16906 (list
16907 ;; Test fixtures are not released yet, see
16908 ;; <https://github.com/PyCQA/mccabe/issues/93>
16909 #:tests? #f))
16910 (native-inputs
16911 (list python-toml
16912 python-setuptools
16913 python-wheel))
16914 (home-page "https://github.com/PyCQA/mccabe")
16915 (synopsis "McCabe checker, plugin for flake8")
16916 (description
16917 "This package provides a Flake8 plug-in to compute the McCabe cyclomatic
16918complexity of Python source code.")
16919 (license license:expat)))
16920
16921(define-public python-autoflake8
16922 (package
16923 (name "python-autoflake8")
16924 (version "0.4.0")
16925 (source (origin
16926 (method git-fetch) ;for tests
16927 (uri (git-reference
16928 (url "https://github.com/fsouza/autoflake8")
16929 (commit (string-append "v" version))))
16930 (file-name (git-file-name name version))
16931 (sha256
16932 (base32
16933 "0jx7bkslbhr24yvq60pl39faz2r6g93f1zm1gygswl0rzr5zmgnh"))))
16934 (build-system pyproject-build-system)
16935 (native-inputs
16936 (list python-aiofiles
16937 python-poetry-core
16938 python-pytest
16939 python-pytest-xdist))
16940 (propagated-inputs (list python-pyflakes))
16941 (home-page "https://github.com/fsouza/autoflake8")
16942 (synopsis "Automatically fix issues reported by flake8")
16943 (description "Tool to automatically fix some issues reported by
16944@command{flake8}.")
16945 (license license:expat)))
16946
16947(define-public python-flake8
16948 (package
16949 (name "python-flake8")
16950 (version "7.1.1")
16951 (source
16952 (origin
16953 (method git-fetch) ; no tests data in PyPi package
16954 (uri (git-reference
16955 (url "https://github.com/pycqa/flake8")
16956 (commit version)))
16957 (file-name (git-file-name name version))
16958 (sha256
16959 (base32 "0qbj2m1ljyvpnncnkbm1cscy726c1if4n2c9ysfpmd2zm88rj87a"))))
16960 (build-system pyproject-build-system)
16961 (native-inputs
16962 (list python-pytest
16963 python-setuptools
16964 python-wheel))
16965 (propagated-inputs
16966 (list python-mccabe
16967 python-pycodestyle
16968 python-pyflakes))
16969 (home-page "https://flake8.pycqa.org/en/latest/")
16970 (synopsis "The modular source code checker: pep8, pyflakes and co")
16971 (description
16972 "Flake8 is a wrapper around PyFlakes, pep8 and python-mccabe.")
16973 (license license:expat)))
16974
16975(define-public python-flake8-blind-except
16976 (package
16977 (name "python-flake8-blind-except")
16978 (version "0.2.1")
16979 (source
16980 (origin
16981 (method git-fetch)
16982 (uri (git-reference
16983 (url "https://github.com/elijahandrews/flake8-blind-except")
16984 (commit (string-append "v" version))))
16985 (file-name (git-file-name name version))
16986 (sha256
16987 (base32 "09zrfrm0896miysrpb7fhxzqjn6pm8y0b638nncswm2wvw9by72q"))))
16988 (build-system pyproject-build-system)
16989 (arguments (list #:tests? #f)) ;no tests
16990 (native-inputs (list python-setuptools))
16991 (propagated-inputs (list python-pycodestyle))
16992 (home-page "https://github.com/elijahandrews/flake8-blind-except")
16993 (synopsis "Check for blind @code{except:} statements")
16994 (description
16995 "This package provides a flake8 extension that checks for blind
16996@code{except:} statements.")
16997 (license license:expat)))
16998
16999(define-public python-flake8-bugbear
17000 (package
17001 (name "python-flake8-bugbear")
17002 (version "24.10.31")
17003 (source
17004 (origin
17005 (method url-fetch)
17006 (uri (pypi-uri "flake8_bugbear" version))
17007 (sha256
17008 (base32 "1nrrwhfmk49riflmng26qqjzvfang5lij14ripzqwzxjf8f56ns3"))))
17009 (build-system pyproject-build-system)
17010 (native-inputs
17011 (list python-hypothesmith
17012 python-pytest
17013 python-setuptools
17014 python-wheel))
17015 (propagated-inputs
17016 (list python-attrs
17017 python-flake8))
17018 (home-page "https://github.com/PyCQA/flake8-bugbear")
17019 (synopsis "Flake8 plugin for finding likely bugs and design problems in your program")
17020 (description
17021 "This package contains a plugin for Flake8 finding likely bugs and design
17022problems in your program. It contains warnings that don't belong in pyflakes
17023and pycodestyle.")
17024 (license license:expat)))
17025
17026(define-public python-flake8-continuation
17027 (package
17028 (name "python-flake8-continuation")
17029 (version "1.0.5")
17030 (source
17031 (origin
17032 (method git-fetch)
17033 (uri (git-reference
17034 (url "https://github.com/planetlabs/flake8-continuation")
17035 (commit version)))
17036 (file-name (git-file-name name version))
17037 (sha256
17038 (base32 "04fsd361x03mgyydsdm9vr28ikr2mdip13c805i2wzxc45qsc9x7"))))
17039 (build-system pyproject-build-system)
17040 (arguments
17041 (list
17042 #:phases
17043 #~(modify-phases %standard-phases
17044 (add-after 'unpack 'remove-python-six-dependency
17045 (lambda _
17046 (substitute* "flake8_continuation.py"
17047 (("import six|six\\.moves\\.")
17048 ""))
17049 (substitute* "setup.py"
17050 ((", \"six\"")
17051 "")))))))
17052 (native-inputs (list python-pytest python-setuptools))
17053 (propagated-inputs (list python-flake8 python-pycodestyle))
17054 (home-page "https://github.com/planetlabs/flake8-continuation")
17055 (synopsis "Flake8 Line Continuation Plugin")
17056 (description
17057 "A Flake8 plugin that checks for the line continuation style to be in the
17058preferred method according to PEP-8, specifically:
17059@quotation
17060The preferred way of wrapping long lines is by using Python's implied line
17061continuation inside parentheses, brackets and braces. Long lines can be
17062broken over multiple lines by wrapping expressions in parentheses. These
17063should be used in preference to using a backslash for line continuation.
17064@end quotation")
17065 (license license:asl2.0)))
17066
17067(define-public python-flake8-debugger
17068 (package
17069 (name "python-flake8-debugger")
17070 (version "4.1.2")
17071 (source
17072 (origin
17073 (method git-fetch)
17074 (uri (git-reference
17075 (url "https://github.com/jbkahn/flake8-debugger")
17076 (commit version)))
17077 (file-name (git-file-name name version))
17078 (sha256
17079 (base32 "1nmqs238a02ypld32lwbagbk1jppm3pddrjdrrngc1xpbzb9nyl0"))))
17080 (build-system pyproject-build-system)
17081 (native-inputs (list python-poetry-core python-pytest python-setuptools))
17082 (propagated-inputs (list python-flake8 python-pycodestyle))
17083 (home-page "https://github.com/jbkahn/flake8-debugger")
17084 (synopsis "@code{ipdb} and @code{pdb} statement checker plugin for flake8")
17085 (description
17086 "This package provides a Flake8 plugin that checks for @code{ipdb} and
17087@code{pdb} imports and set traces, as well as @code{from
17088IPython.terminal.embed}, @code{import InteractiveShellEmbed} and
17089@code{InteractiveShellEmbed()()}.")
17090 (license license:expat)))
17091
17092(define-public python-flake8-implicit-str-concat
17093 (package
17094 (name "python-flake8-implicit-str-concat")
17095 (version "0.5.0")
17096 (source
17097 (origin
17098 (method url-fetch)
17099 (uri (pypi-uri "flake8_implicit_str_concat" version))
17100 (sha256
17101 (base32 "1s59w4x053j4794n6h9c7hafa8jjjymx6aar5q23pjw4vrdis7hh"))))
17102 (build-system pyproject-build-system)
17103 (arguments
17104 (list
17105 #:tests? #f)) ; no tests in PiPY or git checkout
17106 (native-inputs
17107 (list python-hatchling))
17108 (propagated-inputs
17109 (list python-attrs
17110 python-more-itertools))
17111 (home-page "https://github.com/keisheiled/flake8-implicit-str-concat")
17112 (synopsis "Flake8 plugin to encourage correct string literal concatenation")
17113 (description
17114 "This is a plugin for the Python code checking tool Flake8 to encourage
17115correct string literal concatenation.
17116
17117It looks for style problems like implicitly concatenated string literals on
17118the same line (which can be introduced by the code formatting tool Black), or
17119unnecessary plus operators for explicit string literal concatenation.")
17120 (license license:expat)))
17121
17122(define-public python-flake8-print
17123 (package
17124 (name "python-flake8-print")
17125 (version "5.0.0")
17126 (source
17127 (origin
17128 (method url-fetch)
17129 (uri (pypi-uri "flake8-print" version))
17130 (sha256
17131 (base32 "1ydx92xck090ajp8vk2378fm0f4wj3mikhinjs3w1hcw70m5m4bn"))))
17132 (build-system pyproject-build-system)
17133 (arguments
17134 (list
17135 #:tests? #f)) ; no tests in PiPY or git checkout
17136 (native-inputs
17137 (list python-poetry-core))
17138 (propagated-inputs
17139 (list python-flake8
17140 python-pycodestyle))
17141 (home-page "https://github.com/jbkahn/flake8-print")
17142 (synopsis "Print statement checker plugin for Flake8")
17143 (description
17144 "This plugin for Flake8 checks for @code{print} statements in Python
17145files.")
17146 (license license:expat)))
17147
17148(define-public python-flake8-pyi
17149 (package
17150 (name "python-flake8-pyi")
17151 (version "24.9.0")
17152 (source
17153 (origin
17154 (method url-fetch)
17155 (uri (pypi-uri "flake8_pyi" version))
17156 (sha256
17157 (base32 "1n8cqbqq9cfyn952kwqqs4s7lcyycgr829ymxnplg0cm49877yv4"))))
17158 (build-system pyproject-build-system)
17159 (arguments
17160 (list
17161 #:phases
17162 #~(modify-phases %standard-phases
17163 (add-after 'unpack 'fix-pytest-config
17164 (lambda _
17165 ;; Prevent full threads utilization.
17166 (substitute* "pyproject.toml"
17167 (("-nauto") "")))))))
17168 (native-inputs
17169 (list python-hatchling
17170 python-pytest))
17171 (propagated-inputs
17172 (list python-attrs
17173 python-flake8
17174 python-pyflakes))
17175 (home-page "https://github.com/ambv/flake8-pyi")
17176 (synopsis "Flake8 plugin that provides specializations for type hinting stub files")
17177 (description
17178 "This package contains a plugin that provides specializations for type
17179hinting stub files, especially interesting for linting typeshed. It adds the
17180@file{.pyi} extension to the default value of the @code{--filename}
17181command-line argument to Flake8. This means stubs are linted by default with
17182this plugin enabled, without needing to explicitly list every file. It
17183modifies PyFlakes runs for @file{.pyi} files to defer checking type annotation
17184expressions after the entire file has been read. This enables support for
17185first-class forward references that stub files use.")
17186 (license license:expat)))
17187
17188(define-public python-flake8-quotes
17189 (package
17190 (name "python-flake8-quotes")
17191 (version "3.4.0")
17192 (source
17193 (origin
17194 (method url-fetch)
17195 (uri (pypi-uri "flake8-quotes" version))
17196 (sha256
17197 (base32 "0v1762x0819xqha7w4l4hh66bpi82imgiib8pvmd78hhnwplkn5a"))))
17198 (build-system pyproject-build-system)
17199 (native-inputs
17200 (list python-pytest
17201 python-setuptools
17202 python-wheel))
17203 (propagated-inputs
17204 (list python-flake8))
17205 (home-page "https://github.com/zheller/flake8-quotes/")
17206 (synopsis "Flake8 lint for quotes")
17207 (description "This package provides a Flake8 lint for quotes.")
17208 (license license:expat)))
17209
17210(define-public python-flake8-todo
17211 (package
17212 (name "python-flake8-todo")
17213 (version "0.7")
17214 (source
17215 (origin
17216 (method git-fetch)
17217 (uri (git-reference
17218 (url "https://github.com/schlamar/flake8-todo")
17219 (commit (string-append "v" version))))
17220 (file-name (git-file-name name version))
17221 (sha256
17222 (base32 "0bx4bs9l6cvqk5v21my4dn0zmkrr0sajsw6f3x1dj4fpg3dp5d8s"))))
17223 (build-system pyproject-build-system)
17224 (arguments (list #:tests? #f)) ; No tests.
17225 (native-inputs (list python-setuptools))
17226 (propagated-inputs (list python-pycodestyle))
17227 (home-page "https://github.com/schlamar/flake8-todo")
17228 (synopsis "TODO notes checker, plugin for flake8")
17229 (description
17230 "This package provides the @code{flake8-todo} Python module, a
17231TODO notes checker plugin for flake8.")
17232 (license license:expat)))
17233
17234(define-public python-flake8-isort
17235 (package
17236 (name "python-flake8-isort")
17237 (version "7.0.0")
17238 (source
17239 (origin
17240 (method git-fetch)
17241 (uri (git-reference
17242 (url "https://github.com/gforcada/flake8-isort")
17243 (commit version)))
17244 (file-name (git-file-name name version))
17245 (sha256
17246 (base32 "0d7j2ws59bm9143m69ah6h865i2pn97p4gjpwx6jrwi9sy26kj5z"))))
17247 (build-system pyproject-build-system)
17248 (arguments (list #:test-backend #~'custom
17249 #:test-flags #~(list "run_tests.py")))
17250 (native-inputs (list python-hatchling python-pytest))
17251 (propagated-inputs (list python-flake8 python-isort))
17252 (home-page "https://github.com/gforcada/flake8-isort")
17253 (synopsis "Flake8 plugin integrating isort")
17254 (description
17255 "This package provides a flake8 plugin that integrates isort,
17256extending flake8 so that it can warn about badly sorted Python import
17257directives.")
17258 (license license:gpl2+)))
17259
17260(define-public python-autoflake
17261 (package
17262 (name "python-autoflake")
17263 (version "2.3.1")
17264 (source
17265 (origin
17266 (method url-fetch)
17267 (uri (pypi-uri "autoflake" version))
17268 (sha256
17269 (base32 "17lhrmz6h7pz2nald90p8gn3hhzbqwmd78819yf4b1habgf7b2y9"))))
17270 (build-system pyproject-build-system)
17271 (arguments
17272 (list
17273 #:phases
17274 #~(modify-phases %standard-phases
17275 (replace 'check
17276 (lambda _
17277 (invoke "python" "test_autoflake.py"))))))
17278 (native-inputs
17279 (list python-hatchling))
17280 (propagated-inputs
17281 (list python-pyflakes))
17282 (home-page "https://github.com/myint/autoflake")
17283 (synopsis "Removes unused imports and unused variables")
17284 (description
17285 "@code{autoflake} removes unused imports and unused variables from Python
17286code as reported by @code{pyflakes}.
17287
17288By default, it only removes unused imports for modules that are part of the
17289standard library. Removal of unused variables is also disabled by default.
17290It also removes useless @code{pass} statements.")
17291 (license license:expat)))
17292
17293(define-public python-mistune
17294 (package
17295 (name "python-mistune")
17296 (version "3.1.3")
17297 (source
17298 (origin
17299 (method url-fetch)
17300 (uri (pypi-uri "mistune" version))
17301 (sha256
17302 (base32 "1802kx9hdbqmbd9acxx4dx6wn77q7mfz5y32psvfqarbg0hmq0x7"))))
17303 (build-system pyproject-build-system)
17304 (native-inputs
17305 (list python-pytest
17306 python-setuptools
17307 python-wheel))
17308 (home-page "https://github.com/lepture/mistune")
17309 (synopsis "Markdown parser in pure Python")
17310 (description "This package provides a fast markdown parser in pure
17311Python.")
17312 (license license:bsd-3)))
17313
17314(define-public python-markdown
17315 (package
17316 (name "python-markdown")
17317 (version "3.10")
17318 (source
17319 (origin
17320 (method url-fetch)
17321 (uri (pypi-uri "markdown" version))
17322 (sha256
17323 (base32
17324 "03lcnvr39pmfiids6jdr1iwwr0hg62m0zf7g5arvdcm4597js1ip"))))
17325 (build-system pyproject-build-system)
17326 (native-inputs
17327 (list python-pyyaml
17328 python-setuptools))
17329 (home-page "https://python-markdown.github.io/")
17330 (synopsis "Python implementation of Markdown")
17331 (description
17332 "This package provides a Python implementation of John Gruber's
17333Markdown. The library features international input, various Markdown
17334extensions, and several HTML output formats. A command line wrapper
17335markdown_py is also provided to convert Markdown files to HTML.")
17336 (license license:bsd-3)))
17337
17338(define-public python-markdown2
17339 (package
17340 (name "python-markdown2")
17341 (version "2.5.3")
17342 (source
17343 (origin
17344 (method git-fetch) ; no tests data in PyPi package
17345 (uri (git-reference
17346 (url "https://github.com/trentm/python-markdown2")
17347 (commit version)))
17348 (file-name (git-file-name name version))
17349 (sha256
17350 (base32 "136lwfhrbgdy3ci7qrkvcm5qx5c4xv4zwbnn57yfqg37pymflima"))))
17351 (build-system pyproject-build-system)
17352 (arguments
17353 (list
17354 #:test-backend #~'custom
17355 #:test-flags #~(list "test.py" "--" "-knownfailure")
17356 #:phases
17357 #~(modify-phases %standard-phases
17358 (add-before 'check 'pre-check
17359 (lambda _
17360 (chdir "test"))))))
17361 (native-inputs
17362 (list ;; python-pygments ;optional, tests fail when added
17363 ;; python-wavedrom ;optional, not packaged
17364 ;; python-latex2mathml ;optional, not packaged
17365 python-setuptools))
17366 (home-page "https://github.com/trentm/python-markdown2")
17367 (synopsis "Fast and complete Python implementation of Markdown")
17368 (description
17369 "This package provides a fast and complete Python implementation of
17370Markdown. It was written to closely match the behaviour of the original
17371Perl-implemented Markdown.pl. It also comes with a number of
17372extensions (called @code{extras}) for things like syntax coloring, tables,
17373header-ids.")
17374 (license license:expat)))
17375
17376(define-public python-mdx-include
17377 (package
17378 (name "python-mdx-include")
17379 (version "1.4.2")
17380 (source
17381 (origin
17382 (method git-fetch)
17383 (uri (git-reference
17384 (url "https://github.com/neurobin/mdx_include")
17385 (commit (string-append "v" version))))
17386 (file-name (git-file-name name version))
17387 (sha256
17388 (base32 "01fk4y7hkl8a06qfd4a258l8rgcx7z7j4dzb80gk9md48l6p516a"))))
17389 (build-system pyproject-build-system)
17390 (arguments
17391 (list
17392 #:test-backend #~'unittest
17393 #:phases
17394 (let* ((django-hello-url "\
17395https://gist.github.com/drgarcia1986/3cce1d134c3c3eeb01bd/raw/\
1739673951574d6b62a18b4c342235006ff89d299f879/django_hello.py")
17397 (django-hello
17398 (origin
17399 (method url-fetch)
17400 (uri django-hello-url)
17401 (sha256 (base32 "\
1740213bqmfqwypnv3apxs9akpk3fqsk0yzys5slxfllj285npnka550r")))))
17403 #~(modify-phases %standard-phases
17404 (add-before 'check 'disable-test-requiring-network
17405 (lambda _
17406 (substitute* "mdx_include/test/test.py"
17407 (("(\\s+def )test_(config|non_existent)\\(" _ pre post)
17408 (string-append pre "__off__test_" post "("))
17409 (((string-join (string-split #$django-hello-url #\.) "\\."))
17410 #+django-hello))))))))
17411 (native-inputs (list python-setuptools))
17412 (propagated-inputs (list python-cyclic python-markdown python-rcslice))
17413 (home-page "https://github.com/neurobin/mdx_include")
17414 (synopsis "Python Markdown extension to include local or remote files")
17415 (description "Include extension for Python Markdown. It lets you include
17416local or remote (downloadable) files into your markdown at arbitrary
17417positions.
17418
17419This project is motivated by markdown-include and provides the same
17420functionalities with some extras.")
17421 (license license:bsd-3)))
17422
17423(define-public python-ptyprocess
17424 (package
17425 (name "python-ptyprocess")
17426 (version "0.7.0")
17427 (source
17428 (origin
17429 (method url-fetch)
17430 (uri (pypi-uri "ptyprocess" version))
17431 (sha256
17432 (base32
17433 "081j893x6c9qrfszp8swfqlpvk8agh1jc32y9140pvnf90xhlpaw"))))
17434 (build-system pyproject-build-system)
17435 (native-inputs
17436 (list python-flit-core
17437 python-pytest))
17438 (home-page "https://github.com/pexpect/ptyprocess")
17439 (synopsis "Run a subprocess in a pseudo terminal")
17440 (description
17441 "This package provides a Python library used to launch a subprocess in a
17442pseudo terminal (pty), and interact with both the process and its pty.")
17443 (license license:isc)))
17444
17445(define-public python-configshell-fb
17446 (package
17447 (name "python-configshell-fb")
17448 (version "1.1.30")
17449 (source
17450 (origin
17451 (method url-fetch)
17452 (uri (pypi-uri "configshell-fb" version))
17453 ;; XXX: Snippet below is required because on v1.1.30 the source code
17454 ;; has configshell_fb as softlink to configshell and guix
17455 ;; pyproject-build-system doesn't work with symlinks very well.
17456 ;;
17457 ;; This package is only used in spdk for now and it's crucial to keep
17458 ;; it locked on version and keep the snipped for spdk to build
17459 ;; successfully.
17460 (snippet #~(begin
17461 (use-modules (guix build utils))
17462 (delete-file "setup.py")
17463 (delete-file-recursively "configshell_fb")
17464 (rename-file "configshell" "configshell_fb")))
17465 (sha256
17466 (base32 "1zkhf62qsfcbxwzlc62r6qx37wwyscppc469rlm45zy9lzmbgxj1"))))
17467 (build-system pyproject-build-system)
17468 (arguments
17469 (list #:tests? #f)) ;; this package has no tests
17470 (native-inputs
17471 (list python-setuptools
17472 python-six
17473 python-wheel))
17474 (propagated-inputs
17475 (list python-pyparsing))
17476 (home-page "https://github.com/open-iscsi/configshell-fb")
17477 (synopsis "Framework to implement simple but nice CLIs")
17478 (description
17479 "This package provides a framework to implement simple but nice CLIs.")
17480 (license license:asl2.0)))
17481
17482(define-public python-configupdater
17483 (package
17484 (name "python-configupdater")
17485 (version "3.2")
17486 (source
17487 (origin
17488 (method git-fetch)
17489 (uri (git-reference
17490 (url "https://github.com/pyscaffold/configupdater")
17491 (commit (string-append "v" version))))
17492 (file-name (git-file-name name version))
17493 (sha256
17494 (base32 "0s2znph12lrs2wcnwz114153dkr1ccn2g7z8xcc83ypy15sbmz6r"))))
17495 (build-system pyproject-build-system)
17496 (native-inputs
17497 (list python-pytest python-setuptools python-setuptools-scm))
17498 (home-page "https://github.com/pyscaffold/configupdater")
17499 (synopsis "Parser like ConfigParser but for updating configuration files")
17500 (description
17501 "ConfigUpdater is a Python library for updating INI configuration files
17502while preserving the original file's formatting, structure, and comments.
17503Unlike Python's standard ConfigParser, ConfigUpdater maintains minimal,
17504targeted changes--keeping comments, section ordering, key-value pair
17505ordering, and original casing intact.")
17506 (license license:expat)))
17507
17508(define-public python-crccheck
17509 (package
17510 (name "python-crccheck")
17511 (version "1.3.0")
17512 (source
17513 (origin
17514 (method git-fetch) ; no tests in PyPI
17515 (uri (git-reference
17516 (url "https://github.com/MartinScharrer/crccheck")
17517 (commit (string-append "v" version))))
17518 (file-name (git-file-name name version))
17519 (sha256
17520 (base32 "1sagpmsh95si77nhqmxx6mbal2jbxpl4a3mqjfnz19mf2pfyvs4y"))))
17521 (build-system pyproject-build-system)
17522 (native-inputs (list python-pytest python-setuptools python-wheel))
17523 (home-page "https://github.com/MartinScharrer/crccheck")
17524 (synopsis "Calculation library for CRCs and checksums")
17525 (description "@code{crccheck} is a calculation library for CRCs and
17526checksums. It implement more than a hundred checksum routines.")
17527 (license license:gpl3+)))
17528
17529(define-public python-crashtest
17530 (package
17531 (name "python-crashtest")
17532 (version "0.4.1")
17533 (source
17534 (origin
17535 (method git-fetch)
17536 (uri (git-reference
17537 (url "https://github.com/sdispater/crashtest")
17538 (commit version)))
17539 (file-name (git-file-name name version))
17540 (sha256
17541 (base32 "180xrr1iw1614z7yrrnsigy0211q9985f9pbzjsj6rvrs6w7fm2d"))))
17542 (build-system pyproject-build-system)
17543 (native-inputs (list python-poetry-core python-pytest))
17544 (home-page "https://github.com/sdispater/crashtest")
17545 (synopsis "Manage Python errors with ease")
17546 (description
17547 "Python library that makes exceptions handling and inspection easier.")
17548 (license license:expat)))
17549
17550(define-public python-pysendfile
17551 (package
17552 (name "python-pysendfile")
17553 (version "2.0.1")
17554 (source
17555 (origin
17556 (method git-fetch)
17557 (uri (git-reference
17558 (url "https://github.com/giampaolo/pysendfile")
17559 (commit (string-append "release-" version))))
17560 (file-name (git-file-name name version))
17561 (sha256
17562 (base32 "1d2pcqad57l5ilc2icabybzzjgsg46djklhvyf17fgbkb0x3yc7c"))))
17563 (build-system pyproject-build-system)
17564 (arguments
17565 (list
17566 #:phases
17567 #~(modify-phases %standard-phases
17568 (replace 'check
17569 (lambda* (#:key tests? #:allow-other-keys)
17570 (when tests?
17571 (setenv "HOME" "/tmp")
17572 (invoke "make" "test")))))))
17573 (native-inputs (list python-pytest python-setuptools))
17574 (propagated-inputs (list python-pyasynchat))
17575 (home-page "https://github.com/giampaolo/pysendfile")
17576 (synopsis "Python interface to sendfile(2)")
17577 (description "The @code{pysendfile} Python library provides an interface to
17578the @code{sendfile(2)} system call.")
17579 (license license:expat)))
17580
17581(define-public python-pyftpdlib
17582 (package
17583 (name "python-pyftpdlib")
17584 (version "1.5.10")
17585 (source
17586 (origin
17587 (method url-fetch)
17588 (uri (pypi-uri "pyftpdlib" version))
17589 (sha256
17590 (base32 "0a3i1253d3qp9rqb64wdq908a05bn7yizqys92vjzfmw2l9fpgcd"))))
17591 (build-system pyproject-build-system)
17592 ;; Using Pytest instead of the Makefile causes the command line tests to
17593 ;; fail on unknown Pytest arguments.
17594 (arguments
17595 (list
17596 #:test-flags
17597 #~(list "-k" "not TestCommandLineParser"
17598 #$@(if (target-aarch64?)
17599 ;; TimeoutError: timed out
17600 '((string-append "--deselect=pyftpdlib/test/test_functional.py"
17601 "::TestTimeouts::test_idle_data_timeout2"))
17602 '()))))
17603 (native-inputs
17604 (list python-psutil
17605 python-pytest
17606 python-setuptools
17607 python-wheel))
17608 (propagated-inputs
17609 (list python-pyopenssl
17610 python-pysendfile))
17611 (home-page "https://github.com/giampaolo/pyftpdlib/")
17612 (synopsis "Asynchronous and scalable Python FTP server library")
17613 (description "The Python FTP server library provides a high-level
17614interface to write efficient, scalable and asynchronous FTP servers with
17615Python. It is the most complete @url{http://www.faqs.org/rfcs/rfc959.html,
17616RFC-959} FTP server implementation available for Python, and has the following
17617traits:
17618@itemize
17619@item
17620It is lightweight, fast and scalable.
17621@item
17622It uses the @code{sendfile(2)} system call for uploads.
17623@item
17624It uses @code{epoll}, @code{kqueue} and @code{select} to handle concurrency
17625asynchronously.
17626@item
17627It supports FTPS (@url{http://tools.ietf.org/html/rfc4217, RFC-4217}),
17628IPv6 (RFC-2428), Unicode file names (@url{http://tools.ietf.org/html/rfc2640,
17629RFC-2640}) and MLSD/MLST commands (RFC-3659).
17630@item
17631It has a flexible system of @samp{authorizers} able to manage both
17632@samp{virtual} and @samp{real} users.
17633@end itemize")
17634 (license license:expat)))
17635
17636(define-public python-fonttools
17637 (package
17638 (name "python-fonttools")
17639 (version "4.59.2")
17640 (source
17641 (origin
17642 (method url-fetch)
17643 (uri (pypi-uri "fonttools" version ".tar.gz"))
17644 (sha256
17645 (base32 "08pgq9nrj3r81gzb6gbf5mcak0xyqrj26cw0rc5za4v1n14hfb77"))))
17646 (build-system pyproject-build-system)
17647 (arguments
17648 (list
17649 #:tests? (not (%current-target-system))
17650 ;; tests: 4529 passed, 59 skipped, 8 deselected, 2 xfailed, 28 warnings,
17651 ;; 3 subtests passed
17652 #:test-flags
17653 #~(list "--deselect=tfmLib.py::fontTools.tfmLib"
17654 #$@(map (lambda (ls) (string-append "--deselect=Tests/"
17655 (string-join ls "::")))
17656 ;; XXX: Some test data is not included in PyPI archive,
17657 ;; remove when switched to git-fetch.
17658 '(("cffLib/cffLib_test.py" "CffLibTest"
17659 "test_reading_supplement_encoding")
17660 ("tfmLib/tfmLib_test.py"
17661 "test_read_boundary_char")
17662 ("tfmLib/tfmLib_test.py"
17663 "test_read_fontdimens_vanilla")
17664 ("tfmLib/tfmLib_test.py"
17665 "test_read_fontdimens_mathex")
17666 ("tfmLib/tfmLib_test.py"
17667 "test_read_fontdimens_mathsy")
17668 ("voltLib/volttofea_test.py" "ToFeaTest"
17669 "test_cli_vtp")
17670 ("voltLib/volttofea_test.py" "ToFeaTest"
17671 "test_group_order"))))))
17672 (native-inputs
17673 (list python-pytest
17674 python-setuptools))
17675 ;; All of them are listed as extras_require.
17676 (propagated-inputs
17677 (list python-brotli
17678 python-lxml
17679 python-unicodedata2
17680 python-zopfli))
17681 (home-page "https://github.com/fonttools/fonttools")
17682 (synopsis "Tools to manipulate font files")
17683 (description
17684 "FontTools/TTX is a library to manipulate font files from Python. It
17685supports reading and writing of TrueType/OpenType fonts, reading and writing
17686of AFM files, reading (and partially writing) of PS Type 1 fonts. The package
17687also contains a tool called “TTX” which converts TrueType/OpenType fonts to and
17688from an XML-based format.")
17689 (license license:expat)))
17690
17691;;; Tests are left out in the main package to avoid cycles.
17692;; XXX: When updating, solve comment in python-cu2qu.
17693(define-public python-fonttools-minimal
17694 (hidden-package
17695 (package
17696 (inherit python-fonttools)
17697 (name "python-fonttools-minimal")
17698 (arguments '(#:tests? #f))
17699 (native-inputs
17700 (list python-setuptools))
17701 (propagated-inputs '()))))
17702
17703(define-public python-ly
17704 (package
17705 (name "python-ly")
17706 (version "0.9.9")
17707 (source
17708 (origin
17709 (method git-fetch)
17710 (uri (git-reference
17711 (url "https://github.com/frescobaldi/python-ly")
17712 (commit (string-append "v" version))))
17713 (file-name (git-file-name name version))
17714 (sha256
17715 (base32 "1q9jdvc4mrv3xkp7jm4g4kisq1k1d05b5d3wfvhpd85a9yqjrhq8"))))
17716 (build-system pyproject-build-system)
17717 (arguments
17718 (list
17719 #:phases
17720 (let ((namespace-url "http://www.w3.org/2001/03/xml.xsd")
17721 (xlink-url "http://www.w3.org/XML/2008/06/xlink.xsd"))
17722 #~(modify-phases %standard-phases
17723 (add-after 'unpack 'inject-data
17724 (lambda _
17725 (substitute* "tests/musicxml.xsd"
17726 (((string-join (string-split #$namespace-url #\.) "\\."))
17727 #$(origin
17728 (method url-fetch)
17729 (uri namespace-url)
17730 (sha256 (base32 "\
177311j6h0sp0pcqi5dv9m6sxwr8brrb59fyx091ld1x6wlh28js4vn8f"))))
17732 (((string-join (string-split #$xlink-url #\.) "\\."))
17733 #$(origin
17734 (method url-fetch)
17735 (uri xlink-url)
17736 (sha256 (base32 "\
177370jpjha5iiq4rf4hx3qfnmyya9cf17ysxz0rbhsffn5nwgxnghgf8")))))))))))
17738 (native-inputs (list python-hatchling python-lxml python-pytest))
17739 (synopsis "Tool and library for manipulating LilyPond files")
17740 (description
17741 "This package provides a Python library to parse, manipulate or create
17742documents in LilyPond format. A command line program ly is also provided that
17743can be used to do various manipulations with LilyPond files.")
17744 (home-page "https://pypi.org/project/python-ly/")
17745 (license license:gpl2+)))
17746
17747(define-public python-appdirs
17748 (package
17749 (name "python-appdirs")
17750 (version "1.4.4")
17751 (source
17752 (origin
17753 (method url-fetch)
17754 (uri (pypi-uri "appdirs" version))
17755 (sha256
17756 (base32 "0hfzmwknxqhg20aj83fx80vna74xfimg8sk18wb85fmin9kh2pbx"))))
17757 (build-system pyproject-build-system)
17758 (arguments (list #:test-backend #~'unittest))
17759 (native-inputs (list python-setuptools))
17760 (home-page "https://github.com/ActiveState/appdirs")
17761 (synopsis "Determine platform-specific dirs, e.g. a \"user data dir\"")
17762 (description
17763 "This module provides a portable way of finding out where user data
17764should be stored on various operating systems.")
17765 (license license:expat)))
17766
17767(define-public python-gorilla
17768 (package
17769 (name "python-gorilla")
17770 (version "0.5.0")
17771 (source
17772 (origin
17773 (method git-fetch)
17774 (uri (git-reference
17775 (url "https://github.com/christophercrouzet/gorilla")
17776 (commit (string-append "v" version))))
17777 (file-name (git-file-name name version))
17778 (sha256
17779 (base32 "1j1ajnav99nlggqcpcpzg6hny3wgpsy4i8f1s9drx003m9ma2j7l"))))
17780 (build-system pyproject-build-system)
17781 (arguments (list #:test-backend #~'unittest))
17782 (native-inputs (list python-setuptools))
17783 (home-page "https://github.com/christophercrouzet/gorilla")
17784 (synopsis "Convenient monkey patching with Python")
17785 (description
17786 "Gorilla is a Python library that provides a convenient approach to
17787monkey patching. Monkey patching is the process of modifying module and
17788class attributes at runtime with the purpose of replacing or extending
17789third-party code.")
17790 (license license:expat)))
17791
17792(define-public python-llfuse
17793 (package
17794 (name "python-llfuse")
17795 (version "1.5.1")
17796 (source
17797 (origin
17798 (method git-fetch)
17799 (uri (git-reference
17800 (url "https://github.com/python-llfuse/python-llfuse")
17801 (commit (string-append "release-" version))))
17802 (file-name (git-file-name name version))
17803 (sha256
17804 (base32 "16wsrg1py4gvcxfgsfkll73lfq62psc0hcqvs73az7s4b1pvyy62"))))
17805 (build-system pyproject-build-system)
17806 (arguments
17807 (list
17808 #:test-flags
17809 #~(list "-k" "not test_listdir") ; requires /usr/bin access.
17810 #:phases
17811 #~(modify-phases %standard-phases
17812 (add-before 'build 'build-cython
17813 (lambda _
17814 (invoke "python" "setup.py" "build_cython"))))))
17815 (inputs (list fuse-2 attr))
17816 (native-inputs
17817 (list pkg-config python-cython python-pytest python-setuptools))
17818 (synopsis "Python bindings for FUSE")
17819 (description
17820 "Python-LLFUSE is a set of Python bindings for the low level FUSE API.")
17821 (home-page "https://github.com/python-llfuse/python-llfuse")
17822 (license license:lgpl2.0+)))
17823
17824(define-public python-msgpack
17825 (package
17826 (name "python-msgpack")
17827 (version "1.1.2")
17828 (source
17829 (origin
17830 (method url-fetch)
17831 (uri (pypi-uri "msgpack" version))
17832 (sha256
17833 (base32 "0zpl4sb9zk7fh3abaxqlf65d0g3hvjy6k028k3rn1pbk2cy7cq1v"))))
17834 (build-system pyproject-build-system)
17835 (native-inputs
17836 (list python-pytest
17837 python-setuptools))
17838 (home-page "https://msgpack.org/")
17839 (synopsis "MessagePack (de)serializer")
17840 (description "MessagePack is a fast, compact binary serialization format,
17841suitable for similar data to JSON. This package provides CPython bindings for
17842reading and writing MessagePack data.")
17843 (license license:asl2.0)))
17844
17845(define-public python-openstep-plist
17846 (package
17847 (name "python-openstep-plist")
17848 (version "0.5.2")
17849 (source
17850 (origin
17851 (method git-fetch)
17852 (uri (git-reference
17853 (url "https://github.com/fonttools/openstep-plist")
17854 (commit (string-append "v" version))))
17855 (file-name (git-file-name name version))
17856 (sha256
17857 (base32 "0h6d9cm3chfwf05jdw5axf9ck38kpcsyj16bkdh5ipkgz3x4mwr6"))))
17858 (build-system pyproject-build-system)
17859 (native-inputs
17860 (list python-cython
17861 python-pytest
17862 python-setuptools-scm
17863 python-setuptools))
17864 (home-page "https://github.com/fonttools/openstep-plist")
17865 (synopsis "OpenStep plist parser and writer")
17866 (description
17867 "This package provides a parser for the \"old style\" OpenStep property
17868list format (also known as ASCII plist), written in Cython.")
17869 (license license:expat)))
17870
17871(define-public python-resolvelib
17872 (package
17873 (name "python-resolvelib")
17874 (version "1.1.0")
17875 (source
17876 (origin
17877 ;; Tests are missing from the PyPI release.
17878 (method git-fetch)
17879 (uri (git-reference
17880 (url "https://github.com/sarugaku/resolvelib")
17881 (commit version)))
17882 (file-name (git-file-name name version))
17883 (sha256
17884 (base32 "0pw99897mm2y7pa2g35z0f7vcmgh42xglz5szbrvigczvwa605sh"))))
17885 (build-system pyproject-build-system)
17886 (native-inputs
17887 (list python-packaging
17888 python-pytest
17889 python-setuptools
17890 python-wheel))
17891 (home-page "https://github.com/sarugaku/resolvelib")
17892 (synopsis "Abstract dependencies resolver")
17893 (description
17894 "The ResolveLib library provides a @code{Resolver} class that includes
17895dependency resolution logic.")
17896 (license license:isc)))
17897
17898;; XXX: Deprecated package: this project was archived by the owner on Mar 26,
17899;; 2022. It is now read-only.
17900(define-public python-commonmark
17901 (package
17902 (name "python-commonmark")
17903 (version "0.9.1")
17904 (source
17905 (origin
17906 (method url-fetch)
17907 (uri (pypi-uri "commonmark" version))
17908 (sha256
17909 (base32 "0q7d39lm8kcingpmykk5r959hrwwj6v2icyw3mihczxyb749sbs5"))))
17910 (build-system pyproject-build-system)
17911 (native-inputs
17912 (list python-setuptools))
17913 (home-page "https://github.com/readthedocs/commonmark.py")
17914 (synopsis "Python parser for the CommonMark Markdown spec")
17915 (description
17916 "This module is a pure Python port of jgm's @code{commonmark.js}, a
17917Markdown parser and renderer for the CommonMark specification, using only
17918native modules.")
17919 (license license:bsd-3)))
17920
17921(define-public python-immutables
17922 (package
17923 (name "python-immutables")
17924 (version "0.21")
17925 (source
17926 (origin
17927 (method git-fetch)
17928 (uri (git-reference
17929 (url "https://github.com/MagicStack/immutables")
17930 (commit (string-append "v" version))))
17931 (file-name (git-file-name name version))
17932 (sha256
17933 (base32 "1p5g20y7di5xglk6yyhb010vdmz73q9fsxpq0cm2gksp8mj856y1"))))
17934 (build-system pyproject-build-system)
17935 (arguments
17936 (list #:phases #~(modify-phases %standard-phases
17937 (add-after 'unpack 'remove-mypy-dependency
17938 (lambda _
17939 (delete-file "tests/test_mypy.py")
17940 (delete-file "tests/conftest.py"))))))
17941 (native-inputs
17942 (list python-pytest python-setuptools python-wheel))
17943 (home-page "https://github.com/MagicStack/immutables")
17944 (synopsis "High-performance immutable mapping type for Python")
17945 (description
17946 "An immutable mapping type for Python. The underlying datastructure is a
17947Hash Array Mapped Trie (HAMT) used in Clojure, Scala, Haskell, and other
17948functional languages.")
17949 (license license:asl2.0)))
17950
17951(define-public python-prettytable
17952 (package
17953 (name "python-prettytable")
17954 (version "3.12.0")
17955 (source
17956 (origin
17957 (method url-fetch)
17958 (uri (pypi-uri "prettytable" version))
17959 (sha256
17960 (base32 "0168xqdr0i9r4p3a3hjd4n7f133lp4xkxhvfx63aqisplcdkwjzh"))))
17961 (build-system pyproject-build-system)
17962 (native-inputs
17963 (list python-hatchling
17964 python-hatch-vcs
17965 python-pytest
17966 python-pytest-lazy-fixtures
17967 python-setuptools-scm))
17968 (propagated-inputs
17969 (list python-wcwidth))
17970 (home-page "https://github.com/jazzband/prettytable")
17971 (synopsis "Display tabular data in an ASCII table format")
17972 (description
17973 "A library designed to represent tabular data in visually appealing ASCII
17974tables. PrettyTable allows for selection of which columns are to be printed,
17975independent alignment of columns (left or right justified or centred) and
17976printing of sub-tables by specifying a row range.")
17977 (license license:bsd-3)))
17978
17979(define-public python-rtf-tokenize
17980 (package
17981 (name "python-rtf-tokenize")
17982 (version "1.0.1")
17983 (source (origin
17984 (method url-fetch)
17985 (uri (pypi-uri "rtf_tokenize" version))
17986 (sha256
17987 (base32
17988 "1ljs0dcg2p1iad4zrxgn1pbrrcjcrswhjxrbprhdxd822n0al84h"))))
17989 (build-system pyproject-build-system)
17990 (native-inputs (list python-pytest python-setuptools python-wheel))
17991 (home-page "https://github.com/benoit-pierre/rtf_tokenize")
17992 (synopsis "Simple RTF tokenizer")
17993 (description "This package is a simple RTF tokenizer.")
17994 (license license:gpl2+)))
17995
17996(define-public python-sniffio
17997 (package
17998 (name "python-sniffio")
17999 (version "1.3.1")
18000 (source
18001 (origin
18002 (method url-fetch)
18003 (uri (pypi-uri "sniffio" version))
18004 (sha256
18005 (base32 "1p496yran6zwg47m7w26r8y89nrsbkrrbf4119slj3qaczf4wcpl"))))
18006 (build-system pyproject-build-system)
18007 (arguments
18008 (list
18009 #:test-flags
18010 #~(list "--deselect=sniffio/_tests/test_sniffio.py::test_curio")))
18011 (native-inputs
18012 (list python-pytest python-setuptools))
18013 (home-page "https://github.com/python-trio/sniffio")
18014 (synopsis "Detect which async library a program is running under")
18015 (description
18016 "This package detects which async library a program is running under. It
18017supports multiple async I/O packages, like Trio, and asyncio.")
18018 ;; Either license applies.
18019 (license (list license:expat license:asl2.0))))
18020
18021(define-public python-snuggs
18022 (package
18023 (name "python-snuggs")
18024 (version "1.4.7")
18025 (source (origin
18026 (method url-fetch)
18027 (uri (pypi-uri "snuggs" version))
18028 (sha256
18029 (base32
18030 "0yv1wayrw9g6k0c2f721kha7wsv0s1fdlxpf5x7f34iqzq9z272h"))))
18031 (build-system pyproject-build-system)
18032 (propagated-inputs (list python-numpy python-pyparsing))
18033 (native-inputs (list python-hypothesis python-pytest python-setuptools
18034 python-wheel))
18035 (home-page "https://github.com/mapbox/snuggs")
18036 (synopsis "Snuggs are S-expressions for Numpy")
18037 (description "Snuggs are S-expressions for Numpy.")
18038 (license license:expat)))
18039
18040(define-public python-geojson
18041 (package
18042 (name "python-geojson")
18043 (version "3.2.0")
18044 (source
18045 (origin
18046 (method url-fetch)
18047 (uri (pypi-uri "geojson" version))
18048 (sha256
18049 (base32 "00s9h22vs4ppncwg3a0gh90czb2dd6d99qznypw72vwc3sxblq5q"))))
18050 (build-system pyproject-build-system)
18051 (native-inputs (list python-pytest python-setuptools))
18052 (home-page "https://github.com/jazzband/geojson")
18053 (synopsis "Python bindings and utilities for GeoJSON")
18054 (description
18055 "This package provides Python bindings and utilities for
18056@uref{http://geojson.org/, GeoJSON}, a format for encoding geographic data
18057structures.")
18058 (license license:bsd-3)))
18059
18060;; pyowm only accepts a version less than version 3.
18061(define-public python-geojson-for-pyowm
18062 (package
18063 (inherit python-geojson)
18064 (version "2.5.0")
18065 (source
18066 (origin
18067 (method url-fetch)
18068 (uri (pypi-uri "geojson" version))
18069 (sha256
18070 (base32 "12k5bzqskvq3gqzkryarhdjl0df47y5k9cf8r3clasi2wjnbfjvf"))))
18071 (arguments
18072 ;; https://github.com/jazzband/geojson/issues/175
18073 (list #:tests? #f))))
18074
18075(define-public python-gpxpy
18076 (package
18077 (name "python-gpxpy")
18078 (version "1.6.2")
18079 (source
18080 (origin
18081 (method url-fetch)
18082 (uri (pypi-uri "gpxpy" version))
18083 (sha256
18084 (base32 "1bh1dkrbmcqb46r7j4fazzq7j6zfr2f04frm6h4bhhpcjx5lhb57"))))
18085 (build-system pyproject-build-system)
18086 (arguments
18087 (list #:test-backend #~'unittest))
18088 (native-inputs
18089 (list python-setuptools))
18090 (home-page "https://github.com/tkrajina/gpxpy")
18091 (synopsis "Python GPX parser")
18092 (description "GPX file parser and GPS track manipulation library.")
18093 (license license:asl2.0)))
18094
18095(define-public python-get-version
18096 (package
18097 (name "python-get-version")
18098 (version "3.5.5")
18099 (source
18100 (origin
18101 (method url-fetch)
18102 (uri (pypi-uri "get_version" version))
18103 (sha256
18104 (base32
18105 "01afv4fkgrm8v9hiww3qymmx201b6z3f8lc4g6nzq7djappn581x"))))
18106 (build-system pyproject-build-system)
18107 (arguments
18108 ;; XXX: No tests in PyPI and building from GitHub fails because of the
18109 ;; lack of git metadata in the checkout.
18110 (list #:tests? #f))
18111 (native-inputs (list python-flit-core))
18112 (propagated-inputs (list python-dunamai))
18113 (home-page "https://github.com/flying-sheep/get_version")
18114 (synopsis "Version helper in the spirit of versioneer")
18115 (description
18116 "This package provides a version helper that lets you automatically use
18117the latest @code{vX.X.X} Git tag as the version in your Python package. It
18118also supports getting the version from Python source distributions or, once
18119your package is installed, via @code{pkg_resources} (part of
18120@code{setuptools}).")
18121 (license license:gpl3+)))
18122
18123(define-public python-filetype
18124 (package
18125 (name "python-filetype")
18126 (version "1.2.0")
18127 (source
18128 (origin
18129 (method url-fetch)
18130 (uri (pypi-uri "filetype" version))
18131 (sha256
18132 (base32 "1nxa91szfbhhbhvdwj06jz8zghzwgb9lf0v6aj61vx2b8zb6rdb6"))))
18133 (build-system pyproject-build-system)
18134 (native-inputs (list python-pytest
18135 python-pytest-benchmark
18136 python-setuptools
18137 python-wheel))
18138 (home-page "https://github.com/h2non/filetype.py")
18139 (synopsis "Infer file type and MIME type of any file/buffer")
18140 (description "@code{filetype} is a small and dependency free Python
18141package to infer file type and MIME type checking the magic numbers
18142signature of a file or buffer.")
18143 (license license:expat)))
18144
18145(define-public python-cachelib
18146 (package
18147 (name "python-cachelib")
18148 (version "0.13.0")
18149 (source
18150 (origin
18151 (method url-fetch)
18152 (uri (pypi-uri "cachelib" version))
18153 (sha256
18154 (base32 "0j0s5vyhgka6g16a7n9g1fcc8wqxdl8rgzvlwaz9axf5wfb8k790"))))
18155 (build-system pyproject-build-system)
18156 (arguments
18157 ;; These tests use a remote connection.
18158 (list #:test-flags #~(list "--ignore" "tests/test_dynamodb_cache.py"
18159 "--ignore" "tests/test_mongodb_cache.py")))
18160 (native-inputs
18161 (list python-pytest python-pytest-xprocess python-setuptools python-wheel))
18162 (home-page "https://github.com/pallets-eco/cachelib")
18163 (synopsis "Collection of cache libraries")
18164 (description "Cachelib is a library extracted from @code{werkzeug} which
18165provides a collection of cache libraries in the same API interface.")
18166 (license license:bsd-3)))
18167
18168(define-public python-pylru
18169 (package
18170 (name "python-pylru")
18171 (version "1.2.0")
18172 (source
18173 (origin
18174 (method git-fetch)
18175 (uri (git-reference
18176 (url "https://github.com/jlhutch/pylru")
18177 (commit (string-append "v" version))))
18178 (file-name (git-file-name name version))
18179 (sha256
18180 (base32 "0sqai530d7fpjzny476f3zqq9mv05xqbyw500jmbhrpj9yy1l9xp"))))
18181 (build-system pyproject-build-system)
18182 (arguments
18183 (list
18184 #:test-backend #~'custom
18185 #:test-flags #~(list "test.py")))
18186 (native-inputs (list python-pytest python-setuptools))
18187 (home-page "https://github.com/jlhutch/pylru")
18188 (synopsis "Least recently used (LRU) cache implementation")
18189 (description
18190 "Pylru implements a true LRU cache along with several support classes.
18191Pylru provides a cache class with a simple dict interface. It also provides
18192classes to wrap any object that has a dict interface with a cache. Both
18193write-through and write-back semantics are supported. Pylru also provides
18194classes to wrap functions in a similar way, including a function decorator.")
18195 (license license:gpl2+)))
18196
18197(define-public python-legacy-api-wrap
18198 (package
18199 (name "python-legacy-api-wrap")
18200 (version "1.5")
18201 (source
18202 (origin
18203 (method url-fetch)
18204 (uri (pypi-uri "legacy_api_wrap" version))
18205 (sha256
18206 (base32
18207 "1wmdkhfbkwc9rwmnq3s55awh9gn3vsbpynm3jylf7gry5x9sc6xl"))))
18208 (build-system pyproject-build-system)
18209 (native-inputs
18210 (list python-hatch-docstring-description
18211 python-hatch-vcs
18212 python-hatchling
18213 python-pytest
18214 python-typer))
18215 (home-page "https://github.com/flying-sheep/legacy-api-wrap")
18216 (synopsis "Legacy API wrapper")
18217 (description "This module defines a decorator to wrap legacy APIs. The
18218primary use case is APIs defined before keyword-only parameters existed.")
18219 (license license:gpl3+)))
18220
18221(define-public python-langdetect
18222 (package
18223 (name "python-langdetect")
18224 (version "1.0.9")
18225 (source
18226 (origin
18227 (method url-fetch)
18228 (uri (pypi-uri "langdetect" version))
18229 (sha256
18230 (base32 "1805svvb7xjm4sf1j7b6nc3409x37pd1xmabfwwjf1ldkzwgxhfb"))))
18231 (build-system pyproject-build-system)
18232 (native-inputs
18233 (list python-pytest
18234 python-setuptools))
18235 (propagated-inputs
18236 (list python-six))
18237 (home-page "https://github.com/Mimino666/langdetect")
18238 (synopsis "Language detection library")
18239 (description
18240 "This library is a port of Nakatani Shuyo's language-detection library
18241(version from 03/03/2014) to Python.")
18242 (license license:expat)))
18243
18244(define-public python-pyasn1
18245 (package
18246 (name "python-pyasn1")
18247 (version "0.6.1")
18248 (source
18249 (origin
18250 (method url-fetch)
18251 (uri (pypi-uri "pyasn1" version))
18252 (sha256
18253 (base32
18254 "0d5h500ig8sp72pabd1wcyglc4951xalbkqahf056dl4vlmhsn3g"))))
18255 (build-system pyproject-build-system)
18256 (arguments
18257 (list #:test-backend #~'unittest
18258 #:test-flags #~(list "discover" "tests")))
18259 (native-inputs
18260 (list python-setuptools))
18261 (home-page "https://github.com/pyasn1/pyasn1")
18262 (synopsis "ASN.1 types and codecs")
18263 (description
18264 "This is an implementation of ASN.1 types and codecs in Python. It is
18265suitable for a wide range of protocols based on the ASN.1 specification.")
18266 (license license:bsd-2)))
18267
18268(define-public python-pyasn1-modules
18269 (package
18270 (name "python-pyasn1-modules")
18271 (version "0.4.2")
18272 (source
18273 (origin
18274 (method url-fetch)
18275 (uri (pypi-uri "pyasn1_modules" version))
18276 (sha256
18277 (base32
18278 "1rj1x4333b20chwslljsihngllj6yls63jmi8klam00ahzg92w37"))))
18279 (build-system pyproject-build-system)
18280 (arguments
18281 (list #:test-backend #~'unittest
18282 #:test-flags #~(list "discover" "tests")))
18283 (native-inputs
18284 (list python-setuptools))
18285 (propagated-inputs
18286 (list python-pyasn1))
18287 (home-page "https://github.com/pyasn1/pyasn1-modules")
18288 (synopsis "ASN.1 codec implementations")
18289 (description
18290 "Pyasn1-modules is a collection of Python modules providing ASN.1 types and
18291implementations of ASN.1-based codecs and protocols.")
18292 (license license:bsd-3)))
18293
18294(define-public python-asn1tools
18295 (package
18296 (name "python-asn1tools")
18297 (version "0.167.0")
18298 (source
18299 (origin
18300 (method url-fetch)
18301 (uri (pypi-uri "asn1tools" version))
18302 (sha256
18303 (base32 "1cpm6m3znagc553bc5l0rhwg2fccrl0k8m1pbvn6x2kqdmpkzmfa"))))
18304 (build-system pyproject-build-system)
18305 (arguments
18306 (list
18307 #:test-flags
18308 #~(list "-k" (string-join
18309 ;; Tests fail with error: IndexError: string index out of
18310 ;; range. It may be some incompatibility with pyparsing,
18311 ;; see <https://github.com/eerimoq/asn1tools/issues/167>.
18312 (list "not test_c_source"
18313 "test_command_line_generate_c_source_oer"
18314 "test_command_line_generate_c_source_uper"
18315 "test_command_line_generate_rust_source_uper"
18316 "test_missing_parameterized_value"
18317 "test_c_source"
18318 "test_parse_parameterization")
18319 " and not "))))
18320 (native-inputs
18321 (list python-pytest
18322 python-setuptools
18323 python-wheel))
18324 (propagated-inputs
18325 (list python-bitstruct
18326 python-diskcache
18327 python-prompt-toolkit
18328 python-pyparsing))
18329 (home-page "https://github.com/eerimoq/asn1tools")
18330 (synopsis "ASN.1 parsing, encoding and decoding")
18331 (description "This package provides ASN.1 parsing, encoding and decoding
18332for Python, including constraints checking. It supports several
18333codecs (e.g. BER, PER, UPER, XER) as well as limited C source code generating
18334for OER and UPER.")
18335 (license license:expat)))
18336
18337(define-public python-idna
18338 (package
18339 (name "python-idna")
18340 (version "3.10")
18341 (source
18342 (origin
18343 (method url-fetch)
18344 (uri (pypi-uri "idna" version))
18345 (sha256
18346 (base32
18347 "1a9yn40rph0amwq61j7j3nqm472baz6673ng6pfadg8a8ydmrxhj"))))
18348 (build-system pyproject-build-system)
18349 (native-inputs
18350 (list python-flit-core))
18351 (home-page "https://github.com/kjd/idna")
18352 (synopsis "Internationalized domain names in applications")
18353 (description
18354 "This is a library to support the Internationalised Domain Names in
18355Applications (IDNA) protocol as specified in RFC 5891. This version of the
18356protocol is often referred to as “IDNA2008” and can produce different results
18357from the earlier standard from 2003. The library is also intended to act as a
18358suitable drop-in replacement for the “encodings.idna” module that comes with
18359the Python standard library but currently only supports the older 2003
18360specification.")
18361 (license license:bsd-4)))
18362
18363(define-public python-libsass
18364 (package
18365 (name "python-libsass")
18366 (version "0.23.0")
18367 (source
18368 (origin
18369 ;; PyPI tarball is missing some test files.
18370 (method git-fetch)
18371 (uri (git-reference
18372 (url "https://github.com/sass/libsass-python")
18373 (commit version)))
18374 (file-name (git-file-name name version))
18375 (sha256
18376 (base32 "04jpk4y15k69chdnd64ks85bfn82071mbfiv2d1hl3y4zpvsn90a"))))
18377 (build-system pyproject-build-system)
18378 (arguments
18379 '(#:phases
18380 (modify-phases %standard-phases
18381 ;; Use Guix package of libsass instead of compiling from a checkout.
18382 (add-before 'build 'set-libsass
18383 (lambda _ (setenv "SYSTEM_SASS" "indeed")))
18384 ;; XXX: Silent 2 failing tests, reported to upstream (closed), see
18385 ;; https://github.com/sass/libsass-python/issues/440. It passed with
18386 ;; [email protected] which requires rebuild the world (1200+ packages),
18387 ;; remove when v3.6.5 is available.
18388 (add-before 'check 'silent-failing-tests
18389 (lambda _
18390 (substitute* "sasstests.py"
18391 (("def test_build_one")
18392 "def __off_test_build_one")
18393 (("def test_stack_trace_formatting")
18394 "def __off_test_stack_trace_formatting"))))
18395 (replace 'check
18396 (lambda* (#:key tests? #:allow-other-keys)
18397 (when tests?
18398 (invoke "pytest" "sasstests.py"))))
18399 (add-after 'install 'delete-test
18400 (lambda* (#:key inputs outputs #:allow-other-keys)
18401 ;; Delete sasstests.py because it attempts to open a file
18402 ;; that is not installed when loaded, which breaks the sanity
18403 ;; check.
18404 (delete-file (string-append
18405 (assoc-ref outputs "out")
18406 "/lib/python"
18407 (python-version
18408 (dirname (dirname
18409 (search-input-file inputs "bin/python"))))
18410 "/site-packages/sasstests.py")))))))
18411 (native-inputs
18412 (list python-pytest python-setuptools python-werkzeug python-wheel))
18413 (inputs
18414 (list libsass))
18415 (home-page "https://sass.github.io/libsass-python/")
18416 (synopsis "Straightforward binding of libsass for Python")
18417 (description
18418 "This package provides a simple Python extension module @code{sass} which
18419is binding LibSass.")
18420 (license license:expat)))
18421
18422;; It may be removed after 2026-01-24.
18423(define-deprecated/public-alias python-path-bootstrap python-path)
18424
18425(define-public python-pip-run
18426 (package
18427 (name "python-pip-run")
18428 (version "8.8.0")
18429 (source
18430 (origin
18431 (method git-fetch)
18432 (uri (git-reference
18433 (url "https://github.com/jaraco/pip-run")
18434 (commit (string-append "v" version))))
18435 (file-name (git-file-name name version))
18436 (sha256
18437 (base32 "0ycrjj3jgqcr9c2k7y8vprq65iblg0q0hvwz8zwi13gmb0ffds0c"))))
18438 (build-system pyproject-build-system)
18439 (arguments
18440 (list
18441 #:tests? (not (%current-target-system))
18442 #:test-flags
18443 #~(list "-k" (string-append
18444 ;; Do not test the myproject.toml build as it tries
18445 ;; to pull dependencies from the internet.
18446 "not project "
18447 ;; These tests attempt to install dependencies from
18448 ;; the network and fail.
18449 "and not test_pkg_imported "
18450 "and not test_pkg_loaded_from_alternate_index "
18451 "and not test_pkg_loaded_from_url "))))
18452 (native-inputs
18453 (list python-nbformat
18454 python-pygments
18455 python-pytest
18456 python-setuptools
18457 python-setuptools-scm))
18458 (propagated-inputs
18459 (list python-autocommand
18460 python-packaging
18461 python-path
18462 python-pip))
18463 (home-page "https://github.com/jaraco/pip-run")
18464 (synopsis "Dynamic dependency loader for Python")
18465 (description "The @command{pip-run} command provides on-demand temporary
18466package installation for a single interpreter run. It replaces this series of
18467commands:
18468@example
18469$ virtualenv --python pythonX.X --system-site-packages /tmp/env
18470$ /tmp/env/bin/pip install pkg1 pkg2 -r reqs.txt
18471$ /tmp/env/bin/python ...
18472$ rm -rf /tmp/env
18473@end example")
18474 (license license:expat)))
18475
18476;; It may be removed after 2026-01-24.
18477(define-deprecated/public-alias python-pip-run-bootstrap python-pip-run)
18478
18479(define-public python-libarchive-c
18480 (package
18481 (name "python-libarchive-c")
18482 (version "5.2")
18483 (source (origin
18484 (method url-fetch)
18485 (uri (pypi-uri "libarchive_c" version))
18486 (sha256
18487 (base32
18488 "05vl0pjpv5wqy9xybzixjv9anvih9yjx361c4rw6xbq9hpiahi7x"))))
18489 (build-system pyproject-build-system)
18490 (arguments
18491 (list
18492 #:phases
18493 #~(modify-phases %standard-phases
18494 (add-before 'build 'reference-libarchive
18495 (lambda* (#:key inputs #:allow-other-keys)
18496 ;; Retain the absolute file name of libarchive.so.
18497 (substitute* "libarchive/ffi.py"
18498 (("find_library\\('archive'\\)")
18499 (string-append
18500 "'"
18501 (search-input-file inputs "/lib/libarchive.so")
18502 "'"))))))))
18503 (native-inputs
18504 (list python-setuptools python-wheel python-pytest))
18505 (inputs
18506 (list libarchive))
18507 (home-page "https://github.com/Changaco/python-libarchive-c")
18508 (synopsis "Python interface to libarchive")
18509 (description
18510 "This package provides Python bindings to libarchive, a C library to
18511access possibly compressed archives in many different formats. It uses
18512Python's @code{ctypes} foreign function interface (FFI).")
18513 (license license:lgpl2.0+)))
18514
18515(define-public python-file
18516 (package/inherit file
18517 (name "python-file")
18518 (build-system pyproject-build-system)
18519 (arguments
18520 (list
18521 #:tests? #f ;no tests
18522 #:phases
18523 #~(modify-phases %standard-phases
18524 (add-before 'build 'change-directory
18525 (lambda _
18526 (chdir "python")))
18527 (add-before 'build 'set-library-file-name
18528 (lambda* (#:key inputs #:allow-other-keys)
18529 (substitute* "magic.py"
18530 (("find_library\\('magic'\\)")
18531 (format #f "~s" (search-input-file inputs
18532 "lib/libmagic.so")))))))))
18533 (inputs (list file))
18534 (native-inputs (cons* python-setuptools
18535 (if (%current-target-system)
18536 (list this-package)
18537 '())))
18538 (synopsis "Python bindings to the libmagic file type guesser")
18539 (description "This package provides Python bindings to the libmagic file
18540type guesser.
18541
18542Note that this module and the @code{python-magic} module both provide a
18543@file{magic.py} file; these two modules, which are different and were
18544developed separately, both serve the same purpose: provide Python bindings for
18545libmagic.")))
18546
18547(define-public python-pydevd
18548 (package
18549 (name "python-pydevd")
18550 (version "3.2.3")
18551 (source
18552 (origin
18553 (method git-fetch)
18554 (uri (git-reference
18555 (url "https://github.com/fabioz/PyDev.Debugger")
18556 (commit (string-append
18557 "pydev_debugger_"
18558 (string-join (string-split version #\.) "_")))))
18559 (modules '((guix build utils)))
18560 (snippet '(begin
18561 ;; Delete pre-built binaries.
18562 (for-each delete-file (find-files "." "\\.(so|dylib|dll)"))
18563 ;; This source is generated via Cython.
18564 (delete-file "_pydevd_bundle/pydevd_cython.c")))
18565 (file-name (git-file-name name version))
18566 (sha256
18567 (base32
18568 "0a40574f0rx23gissxmrpjq9cimhjxqsq9wbv5l7620h3blb5510"))))
18569 (build-system pyproject-build-system)
18570 (arguments
18571 (list
18572 #:test-flags
18573 #~(list "-n" (number->string (parallel-job-count))
18574 "-m" "not flaky"
18575 "-k"
18576 (string-join
18577 (list
18578 ;; The two "break_01" tests have been failing on
18579 ;; Python 3.10:
18580 ;; <https://github.com/fabioz/PyDev.Debugger/issues/222>.
18581 "not test_set_pydevd_break_01 "
18582 ;; the GUI event loop requires an X server.
18583 "test_gui_event_loop_custom"
18584 ;; This test validates that 'pydevd' is not in the
18585 ;; exception message, but it is due to being part
18586 ;; of the build file name present in the message.
18587 "test_evaluate_exception_trace"
18588 ;; This test fail with TimeoutError, no message on stderr.
18589 "test_soft_terminate"
18590 "test_debugger_case_deadlock_interrupt_thread"
18591 ;; subprocess.CalledProcessError
18592 ;; Python 3.11/3.12 specific issue:
18593 ;; <https://github.com/fabioz/PyDev.Debugger/issues/284>.
18594 "test_find_main_thread_id")
18595 " and not "))
18596 #:phases
18597 #~(modify-phases %standard-phases
18598 (add-after 'unpack 'fix-tests
18599 (lambda _
18600 (substitute* "tests_python/test_convert_utilities.py"
18601 ;; Add missing trailing '/'.
18602 (("\"\\\\\\\\usr\\\\\\\\bin\\\\\\\\\") == \"/usr/bin" all)
18603 (string-append all "/")))))
18604 (add-after 'unpack 'patch-command-paths
18605 (lambda* (#:key inputs #:allow-other-keys)
18606 (substitute* "_pydevd_bundle/pydevd_api.py"
18607 (("'kill'")
18608 (format #f "~s" (search-input-file inputs "bin/kill")))
18609 (("'pgrep'")
18610 (format #f "~s" (search-input-file inputs "bin/pgrep"))))))
18611 (add-after 'unpack 'generate-sources
18612 (lambda _
18613 (setenv "PYTHONPATH" (getcwd))
18614 (invoke "python" "build_tools/build.py")))
18615 (add-after 'unpack 'adjust-attach-binary-name
18616 (lambda _
18617 (substitute*
18618 '("pydevd_tracing.py"
18619 "pydevd_attach_to_process/add_code_to_python_process.py")
18620 (("def get_(target|python_helper_lib)_filename.*" all)
18621 (format #f "~a return ~s~%" all
18622 (string-append #$output "/lib/attach.so"))))))
18623 (add-after 'unpack 'patch-gdb
18624 (lambda* (#:key inputs #:allow-other-keys)
18625 (substitute*
18626 "pydevd_attach_to_process/add_code_to_python_process.py"
18627 (("'gdb',")
18628 (format #f "~s," (search-input-file inputs "bin/gdb"))))))
18629 (add-after 'build 'build-attach-linux-binary
18630 (lambda _
18631 (invoke #+(cxx-for-target) "-shared" "-o" "attach.so"
18632 "-fPIC" "-nostartfiles"
18633 "pydevd_attach_to_process/linux_and_mac/attach.cpp")))
18634 (add-before 'check 'pre-check
18635 (lambda* (#:key tests? #:allow-other-keys)
18636 (when tests?
18637 (setenv "PYDEVD_USE_CYTHON" "YES"))))
18638 (add-after 'install 'install-attach-binary
18639 (lambda _
18640 (install-file "attach.so"
18641 (string-append #$output "/lib"))))
18642 ;; Some modules aren't designed to be loadable by themselves, such
18643 ;; as 'pydev_app_engine_debug_startup' and fail.
18644 (delete 'sanity-check))))
18645 (native-inputs
18646 (list python-cython
18647 python-numpy
18648 python-psutil
18649 python-pytest
18650 python-pytest-xdist
18651 python-setuptools
18652 python-trio
18653 python-untangle
18654 python-wheel))
18655 (inputs (list coreutils gdb/pinned procps))
18656 (home-page "https://github.com/fabioz/PyDev.Debugger/")
18657 (synopsis "Python debugger")
18658 (description "PyDev.Debugger is a capable Python debugger used in PyDev
18659and other @acronym{IDEs, Integrated Development Environments}.")
18660 (license license:epl1.0)))
18661
18662(define-public python-debugpy
18663 (package
18664 (name "python-debugpy")
18665 (version "1.8.17")
18666 (source
18667 (origin
18668 (method git-fetch)
18669 (uri (git-reference ;no tests in PyPI archive
18670 (url "https://github.com/microsoft/debugpy")
18671 (commit (string-append "v" version))))
18672 (file-name (git-file-name name version))
18673 (modules '((guix build utils)))
18674 ;; Remove the bundled PyDev-Debugger copy, including its pre-built
18675 ;; attach binary.
18676 (snippet '(delete-file-recursively "src/debugpy/_vendored"))
18677 (patches (search-patches "python-debugpy-unbundle-pydevd.patch"))
18678 (sha256
18679 (base32
18680 "12yhmayc21zcq16dv5hrp4n896d9v3b88hh1biqvj8gnrmsxvcwb"))))
18681 (build-system pyproject-build-system)
18682 (arguments
18683 (list
18684 #:tests? #f ;FIXME: Fail on systems with YAMA LSM’s ptrace scope > 0.
18685 #:phases
18686 #~(modify-phases %standard-phases
18687 (add-after 'unpack 'patch-sh-in-tests
18688 (lambda _
18689 (substitute* "tests/debugpy/test_run.py"
18690 (("#!/bin/sh")
18691 (string-append "#!" (which "sh"))))))
18692 (add-before 'build 'configure
18693 (lambda _
18694 ;; This adjusts the behavior of debugpy to load pydevd from
18695 ;; Python site packages.
18696 (setenv "DEBUGPY_BUNDLING_DISABLED" "1"))))))
18697 (native-inputs
18698 (list python-setuptools
18699 python-versioneer))
18700 (propagated-inputs
18701 (list python-pydevd))
18702 (home-page "https://aka.ms/debugpy")
18703 (synopsis "Debug Adapter Protocol Python implementation")
18704 (description "An implementation of the Debug Adapter Protocol for
18705Python.")
18706 (license license:expat)))
18707
18708(define-public python-debian
18709 (package
18710 (name "python-debian")
18711 (home-page "https://salsa.debian.org/python-debian-team/python-debian")
18712 (version "0.1.49")
18713 (source
18714 (origin
18715 ;; Use git-fetch, as pypi doesn't include test suite.
18716 (method git-fetch)
18717 (uri (git-reference
18718 (url home-page)
18719 (commit version)))
18720 (file-name (git-file-name name version))
18721 (sha256
18722 (base32
18723 "190vy2ns0650icpwvv4qp6kr3c3i9jszy1vkdwpigxb96fs1bqf3"))
18724 (modules '((guix build utils)))
18725 (snippet
18726 #~(begin
18727 ;; python-apt, apt and dpkg are not yet available in guix,
18728 ;; and these tests heavily depend on them.
18729 (for-each delete-file
18730 '("lib/debian/tests/test_deb822.py"
18731 "lib/debian/tests/test_debfile.py"))
18732
18733 ;; for reproducible builds, otherwise python-debian
18734 ;; generates a _version.py including the date
18735 (copy-file "lib/debian/_version.py.in" "lib/debian/_version.py")
18736 (substitute* "lib/debian/_version.py"
18737 (("__CHANGELOG_VERSION__") #$version))))))
18738 (build-system pyproject-build-system)
18739 (native-inputs
18740 (list python-pytest python-setuptools))
18741 (propagated-inputs
18742 (list python-six python-chardet))
18743 (synopsis "Debian package related modules")
18744 (description
18745 "This package provides Python modules that abstract many formats of
18746Debian-related files, such as:
18747@itemize
18748@item Debtags information;
18749@item @file{debian/changelog} files;
18750@item packages files, pdiffs;
18751@item control files of single or multiple RFC822-style paragraphs---e.g.
18752 @file{debian/control}, @file{.changes}, @file{.dsc};
18753@item Raw @file{.deb} and @file{.ar} files, with (read-only) access to
18754 contained files and meta-information.
18755@end itemize")
18756 ;; Modules are either GPLv2+ or GPLv3+.
18757 (license license:gpl3+)))
18758
18759(define-public python-json-spec
18760 (package
18761 (name "python-json-spec")
18762 (version "0.12.0")
18763 (source
18764 (origin
18765 (method git-fetch) ;no tests in PyPI archive
18766 (uri (git-reference
18767 (url "https://github.com/johnnoone/json-spec")
18768 (commit version)))
18769 (file-name (git-file-name name version))
18770 (sha256
18771 (base32 "14lzvpfi8vpwn2hsizljcyiiywfc1fssj0hh079jxw4xwjkm9328"))))
18772 (build-system pyproject-build-system)
18773 (native-inputs
18774 (list python-pytest
18775 python-poetry-core))
18776 (propagated-inputs
18777 (list python-termcolor)) ;for the CLI
18778 (home-page "https://json-spec.readthedocs.io/")
18779 (synopsis "JSON Schema, JSON Pointer and JSON Reference for Python")
18780 (description
18781 "This Python library implements several JSON specs, like JSON Schema,
18782JSON Reference and JSON Pointer.")
18783 (license license:bsd-3)))
18784
18785(define-public python-fastbencode
18786 (package
18787 (name "python-fastbencode")
18788 (version "0.3.9")
18789 (source
18790 (origin
18791 (method git-fetch)
18792 (uri (git-reference
18793 (url "https://github.com/breezy-team/fastbencode")
18794 (commit (string-append "v" version))))
18795 (file-name (git-file-name name version))
18796 (sha256
18797 (base32 "0d4sd1c2yv85spxx2gvi2fm0avlgpnb7nfkvw7hpxlx6qlaqi4ad"))))
18798 (build-system pyproject-build-system)
18799 (arguments
18800 (list
18801 #:test-backend #~'unittest
18802 #:test-flags #~(list "tests.test_suite")
18803 #:imported-modules (append %cargo-build-system-modules
18804 %pyproject-build-system-modules)
18805 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
18806 (guix build pyproject-build-system)
18807 (guix build utils))
18808 #:phases
18809 #~(modify-phases %standard-phases
18810 (add-after 'unpack 'prepare-cargo-build-system
18811 (lambda args
18812 (for-each
18813 (lambda (phase)
18814 (format #t "Running cargo phase: ~a~%" phase)
18815 (apply (assoc-ref cargo:%standard-phases phase)
18816 #:cargo-target #$(cargo-triplet)
18817 args))
18818 '(unpack-rust-crates
18819 configure
18820 check-for-pregenerated-files
18821 patch-cargo-checksums)))))))
18822 (inputs (cargo-inputs 'fastbencode))
18823 (native-inputs
18824 (append
18825 (list python-setuptools-rust
18826 rust
18827 `(,rust "cargo"))
18828 (or (and=> (%current-target-system)
18829 (compose list make-rust-sysroot))
18830 '())))
18831 (home-page "https://github.com/breezy-team/fastbencode")
18832 (synopsis "Python Bencode (de)serializer with optional fast C extensions")
18833 (description
18834 "The fastbencode Python package implements the bencode serialization
18835format for storing and transmitting loosely structured data, originally used
18836by BitTorrent.
18837
18838The format can encode four different types of values: byte strings, integers,
18839lists, and dictionaries (associative arrays). It's simple and unaffected by
18840endianness,
18841
18842This package includes both a pure-Python version and an optional C extension
18843based on Cython. Both provide the same functionality, but the C version has
18844significantly better performance.")
18845 (license (list license:expat ; _bencode_py.py
18846 license:gpl2+)))) ; __init__.py
18847
18848(define-public python-fastjsonschema
18849 (package
18850 (name "python-fastjsonschema")
18851 (version "2.21.1")
18852 (source
18853 (origin
18854 (method git-fetch) ; no tests in PyPI release
18855 (uri (git-reference
18856 (url "https://github.com/horejsek/python-fastjsonschema")
18857 (commit (string-append "v" version))))
18858 (file-name (git-file-name name version))
18859 (sha256
18860 (base32 "1j7dc8hlvrlhzkiv0vqzd6shhjaf14g9v3zlfn7x17j04c1g3iz7"))))
18861 (build-system pyproject-build-system)
18862 (arguments
18863 (list
18864 #:test-flags #~(list "--ignore=tests/benchmarks/test_benchmark.py")))
18865 (native-inputs
18866 (list python-json-spec
18867 python-jsonschema
18868 python-pytest
18869 python-pytest-benchmark
18870 python-setuptools))
18871 (home-page "https://github.com/horejsek/python-fastjsonschema")
18872 (synopsis "Fast Python implementation of JSON schema")
18873 (description
18874 "This library implements validation of JSON documents by JSON schema for
18875drafts 04, 06 and 07.")
18876 (license license:bsd-3)))
18877
18878(define-public python-nbformat
18879 (package
18880 (name "python-nbformat")
18881 (version "5.10.4")
18882 ;; The PyPi release tarball lacks some test cases and test data.
18883 (source (origin
18884 (method git-fetch)
18885 (uri (git-reference
18886 (url "https://github.com/jupyter/nbformat")
18887 (commit (string-append "v" version))))
18888 (sha256
18889 (base32
18890 "0abd1d8iq21dwh17m72na2f3kr6a5p6ji1gnykf06jshikalj2x3"))
18891 (file-name (git-file-name name version))))
18892 (build-system pyproject-build-system)
18893 (arguments
18894 (list
18895 #:phases
18896 #~(modify-phases %standard-phases
18897 ;; We don't want to use hatch-nodejs just to get a version string.
18898 (add-after 'unpack 'patch-pyproject
18899 (lambda _
18900 (substitute* "pyproject.toml"
18901 ((", \"hatch-nodejs-version\"") "")
18902 (("dynamic = \\[\"version\"\\]")
18903 (string-append "version = \"" #$version "\""))))))))
18904 (propagated-inputs
18905 (list python-fastjsonschema python-jsonschema python-jupyter-core
18906 python-traitlets))
18907 (native-inputs
18908 (list python-hatchling
18909 python-pep440
18910 python-pytest
18911 python-testpath))
18912 (home-page "https://jupyter.org")
18913 (synopsis "Jupyter Notebook format")
18914 (description "This package provides the reference implementation of the
18915Jupyter Notebook format and Python APIs for working with notebooks.")
18916 (license license:bsd-3)))
18917
18918(define-public python-nb-clean
18919 (package
18920 (name "python-nb-clean")
18921 (version "4.0.1")
18922 (source
18923 (origin
18924 (method git-fetch) ; no tests in PyPI
18925 (uri (git-reference
18926 (url "https://github.com/srstevenson/nb-clean")
18927 (commit version)))
18928 (file-name (git-file-name name version))
18929 (sha256
18930 (base32 "1pa4m1qn7gx77lg3vy7y7vlyl45cg9ai9z93ds9ax108mbnrbdw7"))))
18931 (build-system pyproject-build-system)
18932 (native-inputs (list python-poetry-core
18933 python-pytest
18934 python-pytest-mock))
18935 (propagated-inputs (list python-nbformat))
18936 (home-page "https://github.com/srstevenson/nb-clean")
18937 (synopsis "Clean Jupyter notebooks for versioning")
18938 (description "This package cleans Jupyter notebooks of cell execution
18939counts, metadata, outputs, and empty cells, preparing them for committing to
18940version control. It provides a Git filter to automatically clean notebooks
18941before they're staged, and can also be used with other version control
18942systems, as a command line tool, and as a Python library.")
18943 (license license:isc)))
18944
18945(define-public python-entrypoints
18946 (package
18947 (name "python-entrypoints")
18948 (version "0.4")
18949 (source
18950 (origin
18951 (method url-fetch)
18952 (uri (pypi-uri "entrypoints" version))
18953 (sha256
18954 (base32 "1m5crkagmbvlgdwqv7nan64pbcjvy0c6idb7rpmik2i1m7dfs1mp"))))
18955 (build-system pyproject-build-system)
18956 (native-inputs
18957 (list python-flit-core
18958 python-pytest))
18959 (home-page "https://github.com/takluyver/entrypoints")
18960 (synopsis "Discover and load entry points from installed Python packages")
18961 (description "Entry points are a way for Python packages to advertise
18962objects with some common interface. The most common examples are
18963@code{console_scripts} entry points, which define shell commands by
18964identifying a Python function to run. The @code{entrypoints} module contains
18965functions to find and load entry points.")
18966 (license license:expat)))
18967
18968(define-public python-epc
18969 (package
18970 (name "python-epc")
18971 (properties '((commit . "f3673ae5c35f20a0f71546ab34c28e3dde3595c1")
18972 (revision . "0")))
18973 (version (git-version "0.0.5"
18974 (assoc-ref properties 'revision)
18975 (assoc-ref properties 'commit)))
18976 (source
18977 (origin
18978 (method git-fetch)
18979 (uri (git-reference
18980 (url "https://github.com/tkf/python-epc")
18981 (commit (assoc-ref properties 'commit))))
18982 (file-name (git-file-name name version))
18983 (sha256
18984 (base32 "0q27bj49yan2qg6i8m5czs5b5jv26ff42yz7j4r5652s7j3f42mm"))))
18985 (build-system pyproject-build-system)
18986 (arguments (list #:test-backend #~'nose))
18987 (propagated-inputs (list python-sexpdata))
18988 (native-inputs (list python-pynose python-setuptools))
18989 (home-page "https://github.com/tkf/python-epc")
18990 (synopsis "Remote procedure call (RPC) stack for Emacs Lisp and Python")
18991 (description
18992 "Python-EPC can call elisp functions from Python and Python functions
18993from elisp.")
18994 (license license:gpl3)))
18995
18996(define-public python-forex-python
18997 (package
18998 (name "python-forex-python")
18999 (version "1.5")
19000 (source
19001 (origin
19002 (method git-fetch)
19003 (uri (git-reference
19004 (url "https://github.com/MicroPyramid/forex-python")
19005 (commit version)))
19006 (file-name (git-file-name name version))
19007 (sha256
19008 (base32 "0pl5sfd0wkv1a2y324l518h6sing7wkadrbr5xcf6hjykn2mbi5h"))))
19009 (build-system pyproject-build-system)
19010 (arguments (list #:tests? #f)) ; Tests require online data.
19011 (native-inputs (list python-setuptools))
19012 (propagated-inputs (list python-requests python-simplejson))
19013 (home-page "https://github.com/MicroPyramid/forex-python")
19014 (synopsis "Foreign exchange rates and currency conversion")
19015 (description
19016 "@code{python-forex-python} can be used to manipulate foreign
19017exchange rates and to operate currency conversions.
19018
19019Features:
19020@itemize
19021@item List all currency rates.
19022@item BitCoin price for all currencies.
19023@item Converting amount to BitCoins.
19024@item Get historical rates for any day since 1999.
19025@item Conversion rate for one currency(ex; USD to INR).
19026@item Convert amount from one currency to other.('USD 10$' to INR).
19027@item Currency symbols.
19028@item Currency names.
19029@end itemize")
19030 (license license:expat)))
19031
19032(define-public python-simpleeval
19033 (package
19034 (name "python-simpleeval")
19035 (version "0.9.12")
19036 (source
19037 (origin
19038 (method git-fetch)
19039 (uri (git-reference
19040 (url "https://github.com/danthedeckie/simpleeval")
19041 (commit version)))
19042 (file-name (git-file-name name version))
19043 (sha256
19044 (base32 "0khgl729q5133fgc00d550f4r77707rkkn7r56az4v8bvx0q8xp4"))))
19045 (build-system pyproject-build-system)
19046 (native-inputs (list python-pytest python-setuptools))
19047 (home-page "https://github.com/danthedeckie/simpleeval")
19048 (synopsis "Simple, safe single expression evaluator library")
19049 (description
19050 "This package provides a quick single file library for easily adding
19051evaluatable expressions into python projects. Say you want to allow a user
19052to set an alarm volume, which could depend on the time of day, alarm level,
19053how many previous alarms had gone off, and if there is music playing at the
19054time.")
19055 (license license:expat)))
19056
19057(define-public python-haas
19058 ;; A recent revision is required to avoid obsoleted dependencies.
19059 (let ((commit "e9c45e88b682c9129ea0971ba31671429495de2c")
19060 (revision "0"))
19061 (package
19062 (name "python-haas")
19063 (version (git-version "0.9.0" revision commit))
19064 (source
19065 (origin
19066 (method git-fetch)
19067 (uri (git-reference
19068 (url "https://github.com/scalative/haas")
19069 (commit commit)))
19070 (file-name (git-file-name name version))
19071 (sha256
19072 (base32 "0hxfinnyc2jb5sgq8zwyn6zn63jb18p92pdz65fvhgf8w2r4ci13"))))
19073 (build-system pyproject-build-system)
19074 (propagated-inputs
19075 (list python-stevedore))
19076 (native-inputs
19077 (list python-coverage
19078 python-pytest
19079 python-setuptools
19080 python-testfixtures))
19081 (home-page "https://github.com/scalative/haas")
19082 (synopsis "Extensible Python test runner")
19083 (description "Haas is a python test runner that is backward-compatible
19084with Python's built-in unittest test-cases, but supports more advanced
19085features, such as project-specific plugins.")
19086 (license license:bsd-3))))
19087
19088(define-public python-okonomiyaki
19089 (package
19090 (name "python-okonomiyaki")
19091 (version "3.0.0")
19092 (source
19093 (origin
19094 (method git-fetch)
19095 (uri (git-reference
19096 (url "https://github.com/enthought/okonomiyaki/")
19097 (commit version)))
19098 (file-name (git-file-name name version))
19099 (sha256
19100 (base32 "0dx8smrairxcjqjisvvgwmj4nch12v03b779agjws87yv96ps0f4"))))
19101 (build-system pyproject-build-system)
19102 (arguments
19103 (list
19104 #:phases
19105 #~(modify-phases %standard-phases
19106 ;; Unknown platform.
19107 (add-before 'check 'delete-fail-tests
19108 (lambda _
19109 (delete-file-recursively
19110 "okonomiyaki/runtimes/tests/test_runtime.py"))))))
19111 (native-inputs
19112 (list python-distro
19113 python-haas
19114 python-jsonschema
19115 python-packaging
19116 python-parameterized
19117 python-pytest
19118 python-setuptools
19119 python-testfixtures
19120 python-zipfile2))
19121 (home-page "https://github.com/enthought/okonomiyaki/")
19122 (synopsis "Python library to deal with Enthought-specific metadata")
19123 (description
19124 "Okonomiyaki is a self-contained library aiming at consolidating
19125low-level code used in Enthought-specific egg and runtime archives.")
19126 (license license:bsd-3)))
19127
19128(define-public python-nbconvert
19129 (package
19130 (name "python-nbconvert")
19131 (version "7.17.0")
19132 (source
19133 (origin
19134 (method url-fetch)
19135 (uri (pypi-uri "nbconvert" version))
19136 (sha256
19137 (base32
19138 "0y6sdnwwlymhqya0g5bdmzgqfjv0mwj7qw3xdjgk04mynpqrc9hv"))))
19139 (build-system pyproject-build-system)
19140 (arguments
19141 (list
19142 #:test-flags
19143 '(list "-k"
19144 (string-append
19145 ;; These tests require pyppeteer, not yet
19146 ;; available in Guix.
19147 "not test_webpdf_with_chromium"
19148 " and not test_webpdf.py"
19149 ;; These tests require ipywidgets, which would
19150 ;; introduce a dependency cycle.
19151 " and not test_execute_widgets_from_nbconvert"
19152 " and not test_execute_multiple_notebooks"
19153
19154 ;; This test calls nbconvert itself via "sys.executable -m
19155 ;; nbconvert". It's probably harmless.
19156 " and not test_default_config"))
19157 #:phases
19158 #~(modify-phases %standard-phases
19159 (add-after 'unpack 'fix-paths
19160 (lambda* (#:key inputs #:allow-other-keys)
19161 ;; Use pandoc binary from input.
19162 (substitute* "nbconvert/utils/pandoc.py"
19163 (("'pandoc'")
19164 (format #f "~s" (search-input-file inputs "bin/pandoc"))))
19165 ;; Same for LaTeX.
19166 (substitute* "nbconvert/exporters/pdf.py"
19167 (("\"xelatex\"")
19168 (format #f "~s" (search-input-file inputs "bin/xelatex")))
19169 (("\"bibtex\"")
19170 (format #f "~s" (search-input-file inputs "bin/bibtex"))))
19171 ;; Likewise for Inkscape.
19172 (substitute* "nbconvert/preprocessors/svg2pdf.py"
19173 (("inkscape_path = which\\(\"inkscape\")")
19174 (format #f "inkscape_path = ~s"
19175 (search-input-file inputs "bin/inkscape"))))))
19176 (add-after 'unpack 'ignore-deprecation-warnings
19177 (lambda _
19178 (substitute* "pyproject.toml"
19179 (("\"ignore:nbconvert.utils" m)
19180 (string-append "\"ignore:zmq.eventloop.ioloop is deprecated:DeprecationWarning\",\n"
19181 m)))))
19182 (add-before 'check 'pre-check
19183 (lambda _
19184 ;; Tests depend on templates installed to output.
19185 (setenv "JUPYTER_PATH"
19186 (string-append #$output "/share/jupyter:"
19187 (getenv "JUPYTER_PATH")))
19188 ;; jupyter-core demands this
19189 (setenv "JUPYTER_PLATFORM_DIRS" "1")
19190 ;; Tests need writable HOME and TEXMFVAR.
19191 (setenv "HOME" "/tmp")
19192 (setenv "TEXMFVAR" "/tmp"))))))
19193 (inputs
19194 (list inkscape/pinned pandoc))
19195 (native-inputs
19196 (list python-flaky
19197 python-hatchling
19198 python-ipykernel
19199 ;; Adding ipywidgets would create a cycle.
19200 ;;python-ipywidgets
19201 python-pytest
19202 (texlive-local-tree
19203 (list texlive-adjustbox
19204 texlive-booktabs
19205 texlive-caption
19206 texlive-enumitem
19207 texlive-eurosym
19208 texlive-fancyvrb
19209 texlive-float
19210 texlive-fontspec
19211 texlive-grffile
19212 texlive-jknapltx
19213 texlive-parskip
19214 texlive-pdfcol
19215 texlive-rsfs
19216 texlive-soul
19217 texlive-tcolorbox
19218 texlive-titling
19219 texlive-ulem
19220 texlive-unicode-math
19221 texlive-upquote
19222 texlive-xetex))))
19223 (propagated-inputs
19224 (list python-beautifulsoup4
19225 python-bleach
19226 python-defusedxml
19227 python-jinja2
19228 python-jupyter-core
19229 python-jupyterlab-pygments
19230 python-markupsafe
19231 python-mistune
19232 python-nbclient
19233 python-nbformat
19234 python-packaging
19235 python-pandocfilters
19236 python-pygments
19237 python-tinycss2
19238 python-traitlets
19239 ;; Required, even if [serve] is not used.
19240 python-tornado
19241 ;; Required at runtime for `jupyter nbconvert --to=pdf`.
19242 texlive-adjustbox
19243 texlive-amsmath
19244 texlive-booktabs
19245 texlive-caption
19246 texlive-collection-basic
19247 texlive-enumitem
19248 texlive-environ
19249 texlive-etoolbox
19250 texlive-eurosym
19251 texlive-etoolbox
19252 texlive-fancyvrb
19253 texlive-float
19254 texlive-fontspec
19255 texlive-geometry
19256 texlive-grffile
19257 texlive-hyperref
19258 texlive-infwarerr
19259 texlive-jknapltx
19260 texlive-kvoptions
19261 texlive-lm
19262 texlive-lm-math
19263 texlive-mathpazo
19264 texlive-parskip
19265 texlive-pdfcol
19266 texlive-pgf
19267 texlive-rsfs
19268 texlive-soul
19269 texlive-stringenc
19270 texlive-tcolorbox
19271 texlive-titling
19272 texlive-tools
19273 texlive-trimspaces
19274 texlive-ucs
19275 texlive-ulem
19276 texlive-unicode-math
19277 texlive-upquote
19278 texlive-xcolor
19279 texlive-xetex
19280 texlive-zapfding))
19281 (home-page "https://jupyter.org")
19282 (synopsis "Converting Jupyter Notebooks")
19283 (description "The @code{nbconvert} tool, @code{jupyter nbconvert}, converts
19284notebooks to various other formats via Jinja templates. It allows you to
19285convert an @code{.ipynb} notebook file into various static formats including:
19286
19287@enumerate
19288@item HTML
19289@item LaTeX
19290@item PDF
19291@item Reveal JS
19292@item Markdown (md)
19293@item ReStructured Text (rst)
19294@item executable script
19295@end enumerate\n")
19296 (license license:bsd-3)))
19297
19298(define-public python-ipywidgets
19299 (package
19300 (name "python-ipywidgets")
19301 ;; XXX: Newer version requires python-jupyterlab, see guix/guix#2073.
19302 (version "8.1.4")
19303 (source
19304 (origin
19305 (method url-fetch)
19306 ;; Git: <https://github.com/jupyter-widgets/ipywidgets/tree/8.1.8/python/ipywidgets>
19307 (uri (pypi-uri "ipywidgets" version))
19308 (sha256
19309 (base32
19310 "0f9i3ycyc8c3rs3xk30hvq7mjs37phbxv4p8parrm02cxn9yzdc5"))))
19311 (build-system pyproject-build-system)
19312 (native-inputs
19313 (list python-ipykernel
19314 python-jsonschema
19315 python-pytest
19316 python-pytz
19317 python-setuptools))
19318 (propagated-inputs
19319 (list python-comm
19320 python-ipython
19321 python-jupyterlab-widgets
19322 python-traitlets
19323 python-widgetsnbextension))
19324 (home-page "https://ipython.org")
19325 (synopsis "IPython HTML widgets for Jupyter")
19326 (description "Ipywidgets are interactive HTML widgets for Jupyter
19327notebooks and the IPython kernel. Notebooks come alive when interactive
19328widgets are used. Users gain control of their data and can visualize changes
19329in the data.")
19330 (license license:bsd-3)))
19331
19332(define-public python-jsbeautifier
19333 (package
19334 (name "python-jsbeautifier")
19335 (version "1.15.3")
19336 (home-page "https://github.com/beautify-web/js-beautify")
19337 (source
19338 (origin
19339 (method git-fetch)
19340 (uri (git-reference
19341 (url home-page)
19342 (commit (string-append "v" version))))
19343 (file-name (git-file-name name version))
19344 (sha256
19345 (base32 "1zl1g6w5zn2hxk5qq83j52cxa1ig75ryjwsjxv9wiwkar4qq88zg"))))
19346 (build-system pyproject-build-system)
19347 (arguments
19348 (list
19349 #:phases
19350 #~(modify-phases %standard-phases
19351 (add-after 'unpack 'chdir
19352 (lambda _
19353 (chdir "python")
19354 (rename-file "setup-js.py" "setup.py"))))))
19355 (propagated-inputs (list python-editorconfig python-six))
19356 (native-inputs (list python-pytest python-setuptools))
19357 (synopsis "JavaScript unobfuscator and beautifier")
19358 (description
19359 "This packages provides tooling to beautify, unpack or deobfuscate
19360JavaScript, leveraging popular online obfuscators.")
19361 (license license:expat)))
19362
19363(define-public python-chardet
19364 (package
19365 (name "python-chardet")
19366 (version "5.2.0")
19367 (source
19368 (origin
19369 (method url-fetch)
19370 (uri (pypi-uri "chardet" version))
19371 (sha256
19372 (base32
19373 "1xqwkjijq2fxn8rhcvfddl14lp39jllqbh527yy19i58g7s6yfqv"))))
19374 (native-inputs
19375 (list python-pytest python-setuptools python-wheel))
19376 (build-system pyproject-build-system)
19377 (arguments
19378 (list #:test-flags
19379 ;; Disable test that fails sporadically:
19380 ;; https://github.com/chardet/chardet/issues/256
19381 #~'("-k" "not test_detect_all_and_detect_one_should_agree")
19382 #:phases
19383 #~(modify-phases %standard-phases
19384 ;; This package provides a 'chardetect' executable that only
19385 ;; depends on Python, so customize the wrap phase to avoid
19386 ;; adding pytest and friends in order to save size.
19387 ;; (See also <https://bugs.gnu.org/25235>.)
19388 (replace 'wrap
19389 (lambda* (#:key inputs outputs #:allow-other-keys)
19390 (let* ((sitedir (site-packages inputs outputs))
19391 (python (dirname (dirname
19392 (search-input-file
19393 inputs "bin/python"))))
19394 (python-sitedir
19395 (string-append python "/lib/python"
19396 (python-version python)
19397 "/site-packages")))
19398 (wrap-program (string-append #$output "/bin/chardetect")
19399 `("GUIX_PYTHONPATH" ":" suffix
19400 ,(list sitedir python-sitedir)))))))))
19401 (home-page "https://github.com/chardet/chardet")
19402 (synopsis "Universal encoding detector for Python 2 and 3")
19403 (description
19404 "This package provides @code{chardet}, a Python module that can
19405automatically detect a wide range of file encodings.")
19406 (license license:lgpl2.1+)))
19407
19408(define-public python-charset-normalizer
19409 (package
19410 (name "python-charset-normalizer")
19411 (version "3.4.2")
19412 (source
19413 (origin
19414 (method url-fetch)
19415 (uri (pypi-uri "charset_normalizer" version))
19416 (sha256
19417 (base32 "0qqfk84ka3d9hh0yf7n8y0qa0yn08ncdacjjckzix8ybkv5cxbjv"))))
19418 (build-system pyproject-build-system)
19419 (arguments
19420 (list
19421 #:phases
19422 #~(modify-phases %standard-phases
19423 ;; https://github.com/jawah/charset_normalizer/issues/625
19424 ;; https://github.com/jawah/charset_normalizer/pull/626
19425 (add-after 'unpack 'fix-scripts
19426 (lambda _
19427 (substitute* "pyproject.toml"
19428 (("charset_normalizer:cli.cli_detect")
19429 "charset_normalizer.cli:cli_detect")))))))
19430 (native-inputs
19431 (list python-pytest
19432 python-setuptools))
19433 (home-page "https://github.com/ousret/charset_normalizer")
19434 (synopsis "Universal Charset Detector, alternative to Chardet")
19435 (description "This library helps you read text from an unknown charset
19436encoding. Motivated by @code{chardet}, it tries to resolve the issue by
19437taking a new approach. All IANA character set names for which the Python core
19438library provides codecs are supported.")
19439 (license license:expat)))
19440
19441(define-public python-docopt
19442 (package
19443 (name "python-docopt")
19444 (version "0.6.2")
19445 (source
19446 (origin
19447 (method git-fetch)
19448 (uri (git-reference
19449 (url "https://github.com/docopt/docopt")
19450 (commit version)))
19451 (file-name (git-file-name name version))
19452 (sha256
19453 (base32 "0aad9gbswnnhssin2q0m5lmpm0ahyf80ahs2zjigbn5y7fvljnd0"))
19454 (patches (search-patches "python-docopt-pytest6-compat.patch"))))
19455 (build-system pyproject-build-system)
19456 ;; tests: 203 passed, 6 warnings
19457 (native-inputs
19458 (list python-pytest-8 python-setuptools))
19459 (home-page "http://docopt.org")
19460 (synopsis "Command-line interface description language for Python")
19461 (description
19462 "This library allows the user to define a command-line interface from a
19463program's help message rather than specifying it programmatically with
19464command-line parsers like @code{getopt} and @code{argparse}.")
19465 (license license:expat)))
19466
19467(define-public python-pythonanywhere
19468 (package
19469 (name "python-pythonanywhere")
19470 (version "0.19.0")
19471 (source
19472 (origin
19473 (method git-fetch)
19474 (uri (git-reference
19475 (url "https://github.com/pythonanywhere/helper_scripts")
19476 (commit (string-append "v" version))))
19477 (file-name (git-file-name name version))
19478 (sha256
19479 (base32 "18g94djpq03c52j4g2c7v2s2bpijdhqz2lzz0rind97kyvss6fca"))))
19480 (build-system pyproject-build-system)
19481 (arguments
19482 (list
19483 #:test-flags
19484 #~(list "--ignore=tests/test_django_project.py" ;depedns on submodule
19485 "-k" (string-join
19486 ;; Network access is required to clone external
19487 ;; repositories.
19488 (list "not test_actually_creates_django_project_in_vir"
19489 "test_actually_downloads_repo"
19490 "test_actually_installing_a_real_package"
19491 "test_actually_works_against_example_repo"
19492 "test_autoconfigure_actually_works_against_example_repo"
19493 "test_exits_because_boolean_not_satisfied"
19494 "test_gets_version"
19495 "test_nuke_option_lets_you_run_twice"
19496 "test_nuke_option_lets_you_run_twice"
19497 "test_start_actually_creates_django_project_in_vir")
19498 " and not "))
19499 #:phases
19500 #~(modify-phases %standard-phases
19501 (add-after 'unpack 'relax-requirements
19502 (lambda _
19503 (substitute* "pyproject.toml"
19504 (("\"schema==.*\",")
19505 "\"schema\","))))
19506 (add-before 'check 'change-home
19507 (lambda _
19508 (setenv "HOME" "/tmp"))))))
19509 (native-inputs
19510 (list python-psutil
19511 python-pytest
19512 python-pytest-mock
19513 python-responses
19514 python-setuptools))
19515 (propagated-inputs
19516 (list python-dateutil
19517 python-docopt
19518 python-packaging
19519 python-pythonanywhere-core
19520 python-requests
19521 python-schema
19522 python-snakesay
19523 python-tabulate
19524 python-typer))
19525 (home-page "https://github.com/pythonanywhere/helper_scripts/")
19526 (synopsis "PythonAnywhere helper tools for users")
19527 (description
19528 "PythonAnywhere provides a command-line interface and an application
19529programming interface that allows managing files Web apps, scheduled
19530tasks and students. It includes single-command deployment for the Django Girls
19531tutorial.")
19532 (license license:expat)))
19533
19534(define-public python-pythonanywhere-core
19535 (package
19536 (name "python-pythonanywhere-core")
19537 (version "0.3.0")
19538 (source
19539 (origin
19540 (method git-fetch)
19541 (uri (git-reference
19542 (url "https://github.com/pythonanywhere/pythonanywhere-core")
19543 (commit (string-append "v" version))))
19544 (file-name (git-file-name name version))
19545 (sha256
19546 (base32 "0whi3a4wrfcaw224mi69gyds3njq64ck76mvgndamzxcq23sqr4v"))))
19547 (build-system pyproject-build-system)
19548 (arguments
19549 (list
19550 #:phases
19551 #~(modify-phases %standard-phases
19552 (add-before 'check 'pre-check
19553 (lambda _
19554 (setenv "HOME" "/tmp"))))))
19555 (native-inputs
19556 (list python-poetry-core
19557 python-pytest
19558 python-pytest-mock
19559 python-responses))
19560 (propagated-inputs
19561 (list python-dateutil
19562 python-requests
19563 python-snakesay
19564 python-typing-extensions))
19565 (home-page "https://github.com/pythonanywhere/pythonanywhere-core")
19566 (synopsis "API wrapper for PythonAnywhere services")
19567 (description
19568 "This package provides an API wrapper for programmatic management of
19569@code{PythonAnywhere} services.")
19570 (license license:expat)))
19571
19572(define-public python-dialog
19573 (package
19574 (name "python-dialog")
19575 (version "3.5.3")
19576 (source
19577 (origin
19578 (method url-fetch)
19579 (uri (pypi-uri "pythondialog" version))
19580 (sha256
19581 (base32 "08v3flvbhpc0p20drniiaalc3ijghlxk9ka5vz5mqqm6y254m8xj"))
19582 (modules '((guix build utils)))
19583 (snippet #~(delete-file-recursively "doc"))))
19584 (build-system pyproject-build-system)
19585 (arguments
19586 (list
19587 ;; XXX: There are no tests, but some examples. However, they need to
19588 ;; be run on a terminal.
19589 #:tests? #f
19590 #:phases
19591 #~(modify-phases %standard-phases
19592 (add-after 'unpack 'patch-path
19593 (lambda* (#:key inputs #:allow-other-keys)
19594 (substitute* "dialog.py"
19595 (("_path_to_executable\\(dialog\\)")
19596 (format #f "os.path.realpath(~s)"
19597 (search-input-file inputs "bin/dialog")))))))))
19598 (native-inputs (list python-setuptools))
19599 (inputs (list dialog))
19600 (home-page "https://pythondialog.sourceforge.net/")
19601 (synopsis "Python interface to the UNIX dialog utility")
19602 (description
19603 "A Python wrapper for the dialog utility. Its purpose is to provide an
19604easy to use, pythonic and comprehensive Python interface to dialog. This
19605allows one to make simple text-mode user interfaces on Unix-like systems")
19606 (license license:lgpl2.1)))
19607
19608(define-deprecated-package python-pythondialog python-dialog)
19609
19610(define-public python-confection
19611 (package
19612 (name "python-confection")
19613 (version "1.3.3")
19614 (source
19615 (origin
19616 (method git-fetch)
19617 (uri (git-reference
19618 (url "https://github.com/explosion/confection")
19619 (commit (string-append "release-v" version))))
19620 (file-name (git-file-name name version))
19621 (sha256
19622 (base32 "065a3044x26sh8wz9xw4yh1kdzn397j0mzznwvksx5qimp23117b"))))
19623 (build-system pyproject-build-system)
19624 (arguments
19625 (list
19626 #:phases
19627 #~(modify-phases %standard-phases
19628 (add-before 'check 'patch-pythonpath
19629 (lambda _
19630 (setenv "PYTHONPATH"
19631 (string-append (getcwd) ":"
19632 (getenv "GUIX_PYTHONPATH"))))))))
19633 (propagated-inputs (list python-pydantic python-srsly))
19634 (native-inputs (list python-pytest python-setuptools))
19635 (home-page "https://github.com/explosion/confection")
19636 (synopsis "Config system for Python")
19637 (description
19638 "Confection is a lightweight library that offers a configuration system
19639letting you conveniently describe arbitrary trees of objects.")
19640 (license license:expat)))
19641
19642(define-public python-configobj
19643 (package
19644 (name "python-configobj")
19645 (version "5.0.9")
19646 (source
19647 (origin
19648 (method url-fetch)
19649 (uri (pypi-uri "configobj" version))
19650 (sha256
19651 (base32 "0j3872id3ngxkaapz9bv8as4lg4rfmch0dxqy767p81syaxq3j03"))))
19652 (build-system pyproject-build-system)
19653 (native-inputs
19654 (list python-pytest
19655 python-setuptools))
19656 (home-page "https://github.com/DiffSK/configobj")
19657 (synopsis "Config file reading, writing and validation")
19658 (description
19659 "ConfigObj is a simple but powerful config file reader and writer: an
19660 ini file round tripper. Its main feature is that it is very easy to use,
19661with a straightforward programmer’s interface and a simple syntax for config
19662files.")
19663 (license license:bsd-3)))
19664
19665(define-public python-omegaconf
19666 (let ((commit "71e02647d93bb8bd467502008940317920ec7e5b")
19667 (revision "1"))
19668 (package
19669 (name "python-omegaconf")
19670 (version (git-version "2.3.0" revision commit))
19671 (source
19672 (origin
19673 (method git-fetch)
19674 (uri (git-reference
19675 (url "https://github.com/omry/omegaconf")
19676 (commit commit)))
19677 (file-name (git-file-name name version))
19678 (modules '((guix build utils)))
19679 (snippet
19680 #~(begin
19681 (delete-file-recursively "build_helpers/bin")
19682 (substitute* "build_helpers/build_helpers.py"
19683 (("java") "antlr4")
19684 (("\"-jar\",") "")
19685 (("str\\(build_dir / \"bin\" / \"antlr.*\"\\),") ""))))
19686 (sha256
19687 (base32 "1n5s1lm22sl2h4c1wv73lgkkqxcvhzgwm4bafvcqml3ckawvbw99"))))
19688 (build-system pyproject-build-system)
19689 (arguments
19690 (list
19691 #:test-flags
19692 ;; XXX: Those tests currently fail collection.
19693 #~(list "--ignore=tests/structured_conf/test_structured_config.py"
19694 "--ignore=tests/test_basic_ops_list.py"
19695 "--ignore=tests/test_merge.py"
19696 "--ignore=tests/test_select.py")
19697 #:phases
19698 #~(modify-phases %standard-phases
19699 (add-after 'unpack 'loosen-requirements
19700 (lambda _
19701 (substitute* "requirements/base.txt"
19702 (("antlr4-python3-runtime==.*")
19703 "antlr4-python3-runtime >=4.9\n"))
19704 ;; Ignore deprecation warnings.
19705 (substitute* "pyproject.toml"
19706 (("-Werror") "")))))))
19707 (native-inputs
19708 (list icedtea
19709 antlr4
19710 python-pytest
19711 python-pytest-mock
19712 python-setuptools
19713 python-wheel))
19714 (propagated-inputs
19715 (list python-antlr4-runtime
19716 python-pydevd
19717 python-pyyaml))
19718 (home-page "https://github.com/omry/omegaconf")
19719 (synopsis "Flexible configuration system")
19720 (description
19721 "OmegaConf is a hierarchical configuration system and supports merging
19722configurations from multiple sources. It provides a consistent API regardless
19723of how the configuration was created.")
19724 (license license:bsd-3))))
19725
19726(define-public python-configargparse
19727 (package
19728 (name "python-configargparse")
19729 (version "1.7")
19730 (source (origin
19731 (method url-fetch)
19732 (uri (pypi-uri "ConfigArgParse" version))
19733 (sha256
19734 (base32
19735 "1l866g1dcf2ljf8fl7ggpxk1rggry0lya4d5b264gradi1qp81p7"))))
19736 (build-system pyproject-build-system)
19737 (propagated-inputs
19738 (list python-pyyaml))
19739 (native-inputs
19740 (list python-mock python-pytest python-setuptools python-wheel))
19741 (synopsis "Replacement for argparse")
19742 (description "A drop-in replacement for argparse that allows options to also
19743be set via config files and/or environment variables.")
19744 (home-page "https://github.com/bw2/ConfigArgParse")
19745 (license license:expat)))
19746
19747(define-public python-connection-pool
19748 (package
19749 (name "python-connection-pool")
19750 (version "0.0.3")
19751 (source
19752 (origin
19753 (method git-fetch)
19754 (uri (git-reference
19755 (url "https://github.com/zhouyl/ConnectionPool")
19756 (commit version)))
19757 (file-name (git-file-name name version))
19758 (sha256
19759 (base32 "1c6676vga0p4xxa3f0jpbwgp3n69mxjisnfcwibd9x23iyxf3sr2"))))
19760 (build-system pyproject-build-system)
19761 (arguments (list #:tests? #f)) ; No tests.
19762 (native-inputs (list python-setuptools))
19763 (home-page "https://github.com/zhouyl/ConnectionPool")
19764 (synopsis "Thread-safe connection pool")
19765 (description
19766 "This package provides a library implementing a thread-safe connection
19767pool.")
19768 (license license:expat)))
19769
19770(define-public python-argparse-dataclass
19771 (package
19772 (name "python-argparse-dataclass")
19773 (version "2.0.0")
19774 (source
19775 (origin
19776 (method git-fetch) ;no tests in PyPI archive
19777 (uri (git-reference
19778 (url "https://github.com/mivade/argparse_dataclass")
19779 (commit version)))
19780 (file-name (git-file-name name version))
19781 (sha256
19782 (base32 "0fbxs2a4jk5bvy42jlnqw4l02zs1s6mmfn4sr8rknyc4ngl4y9q1"))))
19783 (build-system pyproject-build-system)
19784 (native-inputs (list python-pytest python-setuptools python-wheel))
19785 (home-page "https://github.com/mivade/argparse_dataclass")
19786 (synopsis "Declarative command-line interfaces using argparse and dataclasses")
19787 (description
19788 "This package provides declarative command-line interfaces using argparse
19789and dataclasses.")
19790 (license license:expat)))
19791
19792(define-public python-argparse-manpage
19793 (package
19794 (name "python-argparse-manpage")
19795 (version "4.7")
19796 (source
19797 (origin
19798 (method url-fetch)
19799 (uri (pypi-uri "argparse_manpage" version))
19800 (sha256
19801 (base32 "0clb20scp408gxac675v731vnj89pk9d5fb7pcy7bj1a45mvgshx"))))
19802 (build-system pyproject-build-system)
19803 (arguments
19804 (list
19805 #:test-flags
19806 ;; Tests require PIP.
19807 #~(list "--ignore=tests/test_examples.py")))
19808 (native-inputs
19809 (list python-pytest
19810 python-setuptools))
19811 (home-page "https://github.com/praiskup/argparse-manpage")
19812 (synopsis "Build manual page from Python's ArgumentParser object")
19813 (description
19814 "This package provides tools to build manual pages from Python's
19815@code{ArgumentParser} object.")
19816 (license license:asl2.0)))
19817
19818(define-public python-atomicwrites
19819 (package
19820 (name "python-atomicwrites")
19821 (version "1.4.0")
19822 (source
19823 (origin
19824 (method git-fetch)
19825 (uri (git-reference
19826 (url "https://github.com/untitaker/python-atomicwrites")
19827 (commit version)))
19828 (file-name (git-file-name name version))
19829 (sha256
19830 (base32 "1f21l5fyh8qmsacbsknwwgnd1b9x4i0aw0zpczr05wklkkbvd58y"))))
19831 (build-system pyproject-build-system)
19832 (native-inputs (list python-pytest python-setuptools))
19833 (synopsis "Atomic file writes in Python")
19834 (description
19835 "Library for atomic file writes using platform dependent tools
19836for atomic file system operations.")
19837 (home-page "https://github.com/untitaker/python-atomicwrites")
19838 (license license:expat)))
19839
19840(define-public python-qstylizer
19841 (package
19842 (name "python-qstylizer")
19843 (version "0.2.4")
19844 (source
19845 (origin
19846 (method git-fetch)
19847 (uri (git-reference
19848 (url "https://github.com/blambright/qstylizer")
19849 (commit version)))
19850 (file-name (git-file-name name version))
19851 (sha256
19852 (base32 "0413msw23kv87fgs14ajp9wb2qxkcw6ydvwjzabz7xcp8iif9kr2"))))
19853 (build-system pyproject-build-system)
19854 (native-inputs
19855 (list python-pbr
19856 python-pytest
19857 python-pytest-mock
19858 python-setuptools
19859 python-wheel))
19860 (propagated-inputs
19861 (list python-inflection
19862 python-tinycss2))
19863 (home-page "https://github.com/blambright/qstylizer")
19864 (synopsis "Qt stylesheet generation utility for PyQt/PySide")
19865 (description "@code{qstylizer} is a Python package designed to help with
19866the construction of PyQt/PySide stylesheets.")
19867 (license license:expat)))
19868
19869(define-public python-click-threading
19870 (package
19871 (name "python-click-threading")
19872 (version "0.5.0")
19873 (source
19874 (origin
19875 (method git-fetch)
19876 (uri (git-reference
19877 (url "https://github.com/click-contrib/click-threading")
19878 (commit version)))
19879 (file-name (git-file-name name version))
19880 (sha256
19881 (base32 "185pzw12ap7wrjpyxhsyrkhh7i1l5qclaa3zlpn8qvm39fz0kjni"))))
19882 (build-system pyproject-build-system)
19883 (native-inputs (list python-pytest python-setuptools))
19884 (propagated-inputs (list python-click))
19885 (synopsis "Utilities for multithreading in Click")
19886 (description
19887 "This package provides utilities for multithreading in Click
19888applications.")
19889 (home-page "https://github.com/click-contrib/click-threading")
19890 (license license:expat)))
19891
19892(define-public python-click-log
19893 (package
19894 (name "python-click-log")
19895 (version "0.3.2")
19896 (source
19897 (origin
19898 (method git-fetch)
19899 (uri (git-reference
19900 (url "https://github.com/click-contrib/click-log")
19901 (commit version)))
19902 (file-name (git-file-name name version))
19903 (sha256
19904 (base32 "01zpjyqnyzrx6xi7cii2180bqdcg2a6b1sdbjijri8jv755r7ray"))))
19905 (build-system pyproject-build-system)
19906 (native-inputs (list python-pytest python-setuptools))
19907 (propagated-inputs (list python-click))
19908 (synopsis "Logging for click applications")
19909 (description
19910 "This package provides a Python library for logging Click applications.")
19911 (home-page "https://github.com/click-contrib/click-log")
19912 (license license:expat)))
19913
19914(define-public python-click-default-group
19915 (package
19916 (name "python-click-default-group")
19917 (version "1.2.4")
19918 (source
19919 (origin
19920 (method git-fetch) ; no tests in PyPI release
19921 (uri (git-reference
19922 (url "https://github.com/click-contrib/click-default-group")
19923 (commit (string-append "v" version))))
19924 (file-name (git-file-name name version))
19925 (sha256
19926 (base32 "06h12qwg0lhvxlgfm9768afibwp8j6r3r440v630a30bv0nkhngm"))))
19927 (build-system pyproject-build-system)
19928 (propagated-inputs
19929 (list python-click))
19930 (native-inputs
19931 (list python-flit-core python-pytest))
19932 (synopsis "Extends click.Group")
19933 (description "This package extends click.Group to invoke a command without
19934explicit subcommand name.")
19935 (home-page "https://github.com/click-contrib/click-default-group")
19936 (license license:bsd-3)))
19937
19938(define-public python-apipkg
19939 (package
19940 (name "python-apipkg")
19941 (version "3.0.2")
19942 (source
19943 (origin
19944 (method url-fetch)
19945 (uri (pypi-uri "apipkg" version))
19946 (sha256
19947 (base32 "03ay7j57mfh4sa8vh9qwid1ggwdc0lasyw3ycsmgv5r6z2j63an7"))))
19948 (build-system pyproject-build-system)
19949 (arguments (list #:tests? #f)) ;no tests in PyPI archive
19950 (native-inputs
19951 (list python-hatch-vcs
19952 python-hatchling))
19953 (home-page "https://github.com/pytest-dev/apipkg")
19954 (synopsis "Namespace control and lazy-import mechanism")
19955 (description "With apipkg you can control the exported namespace of a Python
19956package and greatly reduce the number of imports for your users. It is a small
19957pure Python module that works on virtually all Python versions.")
19958 (license license:expat)))
19959
19960(define-public python-essentials
19961 (package
19962 (name "python-essentials")
19963 (version "1.1.8")
19964 (source
19965 (origin
19966 (method git-fetch)
19967 (uri (git-reference
19968 (url "https://github.com/Neoteroi/essentials")
19969 (commit (string-append "v" version))))
19970 (file-name (git-file-name name version))
19971 (sha256
19972 (base32 "1k8ybgxh0xvwxjc22pkmyvdhm0jgmj77rlg656r81iiibc0l7zj8"))))
19973 (build-system pyproject-build-system)
19974 (native-inputs
19975 (list python-hatchling
19976 python-pydantic
19977 python-pytest-asyncio))
19978 (home-page "https://github.com/Neoteroi/essentials/wiki")
19979 (synopsis
19980 "Utility functions, exceptions, and classes for Python applications")
19981 (description
19982 "Essentials is a collection of functions, exceptions, and classes for Python
19983applications. Examples of utilities are exceptions for common scenarios,
19984friendly JSON encoder, decorators for retries and logging.")
19985 (license license:expat)))
19986
19987(define-public python-execnet
19988 (package
19989 (name "python-execnet")
19990 (version "2.1.2")
19991 (source
19992 (origin
19993 (method git-fetch)
19994 (uri (git-reference
19995 (url "https://github.com/pytest-dev/execnet")
19996 (commit (string-append "v" version))))
19997 (file-name (git-file-name name version))
19998 (sha256
19999 (base32 "1msiqa1qz6dkdh4c3z351cld12qh8amhq4j1mdkq8sz015j47vnx"))))
20000 (build-system pyproject-build-system)
20001 (arguments
20002 (list
20003 ;; tests: 466 passed, 614 skipped, 4 xfailed, 11 xpassed, 1 warning
20004 #:phases
20005 #~(modify-phases %standard-phases
20006 (add-before 'check 'pre-check
20007 (lambda _
20008 ;; Unset PYTHONDONTWRITEBYTECODE to match the expectations of a
20009 ;; test in 'testing/test_gateway.py'.
20010 (unsetenv "PYTHONDONTWRITEBYTECODE"))))))
20011 (native-inputs
20012 (list python-hatchling
20013 python-hatch-vcs
20014 python-pytest-bootstrap))
20015 (home-page "https://codespeak.net/execnet/")
20016 (synopsis "Rapid multi-Python deployment")
20017 (description
20018 "Execnet provides a share-nothing model with channel-send/receive communication
20019for distributing execution across many Python interpreters across version,
20020platform and network barriers. It has a minimal and fast API targeting the
20021following uses:
20022
20023@enumerate
20024@item distribute tasks to (many) local or remote CPUs
20025@item write and deploy hybrid multi-process applications
20026@item write scripts to administer multiple environments
20027@end enumerate")
20028 (license license:expat)))
20029
20030(define-public python-icalendar
20031 (package
20032 (name "python-icalendar")
20033 (version "5.0.13")
20034 (source (origin
20035 (method url-fetch)
20036 (uri (pypi-uri "icalendar" version))
20037 (sha256
20038 (base32
20039 "01lp0advx60z8wgng8aga1p1668ydn1r6d9qm3d622yfikg9yycj"))))
20040 (build-system pyproject-build-system)
20041 (arguments
20042 (list
20043 #:phases
20044 #~(modify-phases %standard-phases
20045 (replace 'check
20046 (lambda* (#:key tests? #:allow-other-keys)
20047 (when tests?
20048 (invoke "pytest" "-vv" "src/icalendar/tests")))))))
20049 (propagated-inputs
20050 (list python-dateutil python-pytz python-tzdata))
20051 (native-inputs
20052 (list python-pytest python-pytz python-setuptools python-wheel))
20053 (synopsis "Python library for parsing and generating iCalendar files")
20054 (description
20055 "@code{icalendar} is a Python library for parsing and generating iCalendar files.")
20056 (home-page "https://github.com/collective/icalendar")
20057 (license license:bsd-2)))
20058
20059(define-public python-args
20060 (let ((commit "9460f1a35eb3055e9e4de1f0a6932e0883c72d65")
20061 (revision "0"))
20062 (package
20063 (name "python-args")
20064 (version (git-version "0.1.0" revision commit))
20065 (source
20066 (origin
20067 (method git-fetch)
20068 (uri (git-reference
20069 (url "https://github.com/kennethreitz-archive/args")
20070 (commit commit)))
20071 (file-name (git-file-name name version))
20072 (sha256
20073 (base32 "1zfxpbp9vldqdrjmd0c6y3wisl35mx5v8zlyp3nhwpy1730wrc9j"))))
20074 (build-system pyproject-build-system)
20075 (arguments
20076 (list
20077 #:tests? #f ; XXX: python-nose is deprecated.
20078 #:phases
20079 #~(modify-phases %standard-phases
20080 (add-after 'unpack 'patch-args.py
20081 (lambda _
20082 (substitute* "args.py"
20083 (("basestring")
20084 "str")))))))
20085 (native-inputs (list python-setuptools python-wheel))
20086 (home-page "https://github.com/kennethreitz-archive/args")
20087 (synopsis "Command-line argument parser")
20088 (description
20089 "This library provides a Python module to parse command-line arguments.")
20090 (license license:bsd-3))))
20091
20092(define-public python-clint
20093 (package
20094 (name "python-clint")
20095 (version "0.5.1")
20096 (source (origin
20097 (method url-fetch)
20098 (uri (pypi-uri "clint" version))
20099 (sha256
20100 (base32
20101 "1an5lkkqk1zha47198p42ji3m94xmzx1a03dn7866m87n4r4q8h5"))))
20102 (build-system pyproject-build-system)
20103 (native-inputs
20104 (list python-pytest python-setuptools python-wheel))
20105 (propagated-inputs
20106 (list python-args))
20107 (home-page "https://github.com/kennethreitz/clint")
20108 (synopsis "Command-line interface tools")
20109 (description
20110 "Clint is a Python module filled with a set of tools for developing
20111command-line applications, including tools for colored and indented
20112output, progress bar display, and pipes.")
20113 (license license:isc)))
20114
20115(define-public python-rply
20116 (package
20117 (name "python-rply")
20118 (version "0.7.8")
20119 (source
20120 (origin
20121 (method git-fetch)
20122 (uri (git-reference
20123 (url "https://github.com/alex/rply")
20124 (commit (string-append "v" version))))
20125 (file-name (git-file-name name version))
20126 (sha256
20127 (base32 "0kn8vikyf95mr8l9g3324b7gk4cgxlvvy1abqpl1h803idqg1vwq"))))
20128 (build-system pyproject-build-system)
20129 (arguments
20130 (list
20131 #:test-flags #~(list "--ignore=tests/test_ztranslation.py")
20132 #:phases
20133 #~(modify-phases %standard-phases
20134 (add-before 'check 'fix-pytest-use
20135 (lambda _
20136 (substitute* (find-files "tests" "\\.py$")
20137 (("import py")
20138 "import pytest")
20139 (("py\\.test")
20140 "pytest"))
20141 (setenv "HOME" (getcwd)))))))
20142 (native-inputs (list python-pytest python-setuptools))
20143 (propagated-inputs (list python-appdirs))
20144 (home-page "https://github.com/alex/rply")
20145 (synopsis "Parser generator for Python")
20146 (description
20147 "This package provides a pure Python based parser generator, that also
20148works with RPython. It is a more-or-less direct port of David Bazzley's PLY,
20149with a new public API, and RPython support.")
20150 (license license:bsd-3)))
20151
20152(define-public python-hy
20153 (package
20154 (name "python-hy")
20155 (version "1.3.0")
20156 (source
20157 (origin
20158 (method git-fetch)
20159 (uri (git-reference
20160 (url "https://github.com/hylang/hy")
20161 (commit version)))
20162 (file-name (git-file-name name version))
20163 (sha256
20164 (base32 "0sdv5amhl0p4f84bmw2iy85a7rrkjg969l2gcr6cfl03lb0nxj87"))))
20165 (build-system pyproject-build-system)
20166 (arguments
20167 (list
20168 ;; This test expects the hy executable to be called 'hy', but in Guix
20169 ;; it's .hy-real.
20170 #:test-flags #~(list "-k" "not test_sys_executable")))
20171 (native-inputs (list python-pytest python-setuptools))
20172 (propagated-inputs (list python-funcparserlib))
20173 (home-page "https://hylang.org/hy/doc")
20174 (synopsis "Lisp frontend to Python")
20175 (description
20176 "Hy is a dialect of Lisp that's embedded in Python. Since Hy transforms
20177its Lisp code into the Python Abstract Syntax Tree, you have the whole world of
20178Python at your fingertips, in Lisp form.")
20179 (license license:expat)))
20180
20181(define-public python-hissp
20182 (package
20183 (name "python-hissp")
20184 (version "0.5.0")
20185 (source
20186 (origin
20187 (method git-fetch)
20188 (uri (git-reference
20189 (url "https://github.com/gilch/hissp")
20190 (commit (string-append "v" version))))
20191 (file-name (git-file-name name version))
20192 (sha256
20193 (base32 "03lxna935c0qs3lppb2xrvvgh0dkwz8lh5pmgqrmpddin1kxyjri"))))
20194 (build-system pyproject-build-system)
20195 (arguments (list #:test-backend #~'unittest))
20196 (native-inputs (list python-hypothesis python-setuptools))
20197 (home-page "https://github.com/gilch/hissp")
20198 (synopsis "It's Python with a Lissp")
20199 (description
20200 "Hissp is a modular Lisp implementation that compiles to a functional
20201subset of Python—Syntactic macro metaprogramming with full access to the
20202Python ecosystem.")
20203 (license license:asl2.0)))
20204
20205(define-public python-promise
20206 (package
20207 (name "python-promise")
20208 (version "2.3.0")
20209 (source
20210 (origin
20211 (method git-fetch)
20212 (uri (git-reference
20213 (url "https://github.com/syrusakbary/promise")
20214 (commit (string-append "v" version))))
20215 (file-name (git-file-name name version))
20216 (sha256
20217 (base32 "17mq1bm78xfl0x1g50ng502m5ldq6421rzz35hlqafsj0cq8dkp6"))))
20218 (build-system pyproject-build-system)
20219 (arguments
20220 (list
20221 #:test-flags
20222 #~(list "--ignore=tests/test_benchmark.py"
20223 ;; Issues with pytest-asyncio
20224 "--ignore=tests/test_awaitable.py"
20225 "-k" (string-join
20226 (list "not test_issue_9_safe"
20227 ;; Stacktrace issues.
20228 "test_thrown_exceptions_have_stacktrace"
20229 "test_thrown_exceptions_preserve_stacktrace")
20230 " and not "))))
20231 (native-inputs
20232 (list python-mock
20233 python-pytest
20234 python-pytest-asyncio
20235 python-setuptools))
20236 (propagated-inputs (list python-six))
20237 (home-page "https://github.com/syrusakbary/promise")
20238 (synopsis "Promises/A+ implementation for Python")
20239 (description
20240 "This package provides an implementation of Promises in Python. It is a
20241super set of Promises/A+ designed to have readable, performant code and to
20242provide just the extensions that are absolutely necessary for using promises
20243in Python.")
20244 (license license:expat)))
20245
20246(define-public python-progress
20247 (package
20248 (name "python-progress")
20249 (version "1.6")
20250 (source
20251 (origin
20252 (method git-fetch)
20253 (uri (git-reference
20254 (url "https://github.com/verigak/progress/")
20255 (commit version)))
20256 (file-name (git-file-name name version))
20257 (sha256
20258 (base32 "0qz5b9d3cvfdy2f1gb4r20f1qgcsihhmbc2bm2jgbvryxylp0f5k"))
20259 (snippet #~(delete-file "demo.gif"))))
20260 (build-system pyproject-build-system)
20261 (arguments
20262 (list
20263 #:test-backend #~'custom
20264 #:test-flags #~(list "test_progress.py")))
20265 (native-inputs (list python-setuptools))
20266 (home-page "https://github.com/verigak/progress/")
20267 (synopsis "Progress reporting bars for Python")
20268 (description
20269 "This Python package provides progress reporting for visual of progress
20270of long running operations. There are multiple choices of progress bars and
20271spinners, with customizable options, such as width, fill character, and
20272suffix.")
20273 (license license:isc)))
20274
20275(define-public python-progressbar2
20276 (package
20277 (name "python-progressbar2")
20278 (version "4.5.0")
20279 (source
20280 (origin
20281 (method url-fetch)
20282 (uri (pypi-uri "progressbar2" version))
20283 (sha256
20284 (base32 "1yw8j3sz9y3nw2x1ffiqqzml8l9vb0kixxnsjkmk3vc691icnqk6"))))
20285 (build-system pyproject-build-system)
20286 (arguments
20287 (list
20288 #:test-flags #~(list "--pyargs" "progressbar" "tests")
20289 #:phases
20290 #~(modify-phases %standard-phases
20291 (add-after 'unpack 'fix-pytest-config
20292 (lambda _
20293 ;; Drop test coverage requirements.
20294 (substitute* "pytest.ini"
20295 ((".*-cov.*") "")))))))
20296 (native-inputs
20297 (list python-dill
20298 python-pytest
20299 python-freezegun
20300 python-setuptools
20301 python-setuptools-scm
20302 python-wheel))
20303 (propagated-inputs
20304 (list python-utils))
20305 (home-page "https://github.com/WoLpH/python-progressbar")
20306 (synopsis "Text progress bar library for Python")
20307 (description
20308 "This package provides a Python progressbar library to provide
20309visual (yet text based) progress to long running operations.")
20310 (license license:bsd-3)))
20311
20312(define-public python-progressbar33
20313 (package
20314 (name "python-progressbar33")
20315 (version "2.4")
20316 (source
20317 (origin
20318 (method git-fetch)
20319 (uri (git-reference
20320 (url "https://github.com/germangh/python-progressbar")
20321 (commit (string-append "v" version))))
20322 (file-name (git-file-name name version))
20323 (sha256
20324 (base32 "0vyn2l6i7fgqskqfx3nfs1dibc5v1cxydg3v3422xf41pkba282c"))))
20325 (build-system pyproject-build-system)
20326 (arguments
20327 (list
20328 #:test-backend #~'custom
20329 #:test-flags #~(list "examples.py")))
20330 (native-inputs (list python-setuptools))
20331 (home-page "https://github.com/germangh/python-progressbar")
20332 (synopsis "Text progress bar library for Python")
20333 (description
20334 "This package provides a text progress bar library for Python. This
20335version only differs from the original @code{progressbar} package in that it
20336uses relative package imports instead of absolute imports, which is necessary
20337for the module to work under Python 3.3.")
20338 ;; Either or both of these licenses may be selected.
20339 (license (list license:lgpl2.1+ license:bsd-3))))
20340
20341;; XXX: Not maintained since 2012.
20342(define-public python-monthdelta
20343 (package
20344 (name "python-monthdelta")
20345 (version "0.9.1")
20346 (source
20347 (origin
20348 (method url-fetch)
20349 (uri (pypi-uri "MonthDelta" version))
20350 (sha256
20351 (base32 "0iwcsk7ryjw5h1wp10ykwd01f3am8gdlga6461q1v1njsk0rxh41"))))
20352 (build-system pyproject-build-system)
20353 (arguments
20354 (list #:tests? #f)) ; No tests.
20355 (native-inputs (list python-setuptools))
20356 (home-page "http://packages.python.org/MonthDelta")
20357 (synopsis "Date computations with months")
20358 (description
20359 "MonthDelta provides functionality to do date computations with months.")
20360 (license license:expat)))
20361
20362(define-public python-moto
20363 (package
20364 (name "python-moto")
20365 (version "5.1.20")
20366 (source (origin
20367 (method url-fetch)
20368 (uri (pypi-uri "moto" version))
20369 (sha256
20370 (base32 "1h1yy584gs061s3yrgggqvg3m3hp71aivq5pwj00smbawa0xf4kd"))))
20371 (build-system pyproject-build-system)
20372 (arguments
20373 (list
20374 ;; tests: 11149 passed, 38 skipped, 52 deselected, 2 xfailed, 4 warnings
20375 #:test-flags
20376 #~(list "-m" "not network and not requires_docker"
20377 ;; Not all of the tests are thread save, see:
20378 ;; <https://github.com/getmoto/moto/issues/7786>.
20379 ;; "--numprocesses" (number->string (min 8 (parallel-job-count)))
20380 "-k" (string-join
20381 ;; Network access is required.
20382 (list "not test_passthrough_calls_for_entire_service"
20383 "test_passthrough_calls_for_specific_url"
20384 "test_passthrough_calls_for_wildcard_urls"
20385 "test_put_record_batch_http_destination"
20386 "test_put_record_http_destination"
20387 "test_s3_server_post_cors_multiple_origins"
20388 "test_with_custom_request_header"
20389 ;; AttributeError: 'ImportError' object has no
20390 ;; attribute 'message'
20391 "test_batch_update"
20392 "test_batch_update__not_enough_parameters"
20393 "test_execute_transaction"
20394 "test_without_primary_key_in_where_clause")
20395 " and not ")
20396 "tests")
20397 #:phases
20398 #~(modify-phases %standard-phases
20399 (add-after 'unpack 'patch-hardcoded-executable-names
20400 (lambda* (#:key inputs #:allow-other-keys)
20401 (let ((bash-exec (search-input-file inputs "/bin/sh")))
20402 (substitute* "moto/batch/models.py"
20403 (("/bin/sh") bash-exec))
20404 (substitute* (find-files "tests" "\\.py$")
20405 (("#!/bin/bash") (string-append "#!" bash-exec))))))
20406 (add-before 'check 'pre-check
20407 (lambda _
20408 (setenv "AWS_ACCESS_KEY_ID" "guix-access-key-id")
20409 (setenv "AWS_SECRET_ACCESS_KEY" "guix-secret-access-key")
20410 (setenv "TESTS_SKIP_REQUIRES_DOCKER" "true"))))))
20411 (native-inputs
20412 (list python-flask
20413 python-flask-cors
20414 python-freezegun
20415 python-pycognito
20416 python-pyotp
20417 python-pytest
20418 python-setuptools))
20419 (inputs
20420 (list bash-minimal))
20421 (propagated-inputs
20422 (list python-antlr4-runtime
20423 python-aws-xray-sdk
20424 python-boto3
20425 python-botocore
20426 python-cfn-lint
20427 python-cryptography
20428 python-dateutil
20429 python-graphql-core
20430 python-jinja2
20431 python-joserfc
20432 python-jsonpath-ng
20433 python-multipart
20434 python-openapi-spec-validator
20435 python-py-partiql-parser
20436 python-pyparsing
20437 python-requests
20438 python-responses
20439 python-werkzeug
20440 python-xmltodict))
20441 (home-page "https://github.com/spulec/moto")
20442 (synopsis "Mock out the boto library")
20443 (description
20444 "@code{moto} is a library designed to easily mock out the
20445@code{boto} library.")
20446 (license license:asl2.0)))
20447
20448(define-public python-plumbum
20449 (package
20450 (name "python-plumbum")
20451 (version "1.7.0")
20452 (source
20453 (origin
20454 (method git-fetch)
20455 (uri (git-reference
20456 (url "https://github.com/tomerfiliba/plumbum")
20457 (commit (string-append "v" version))))
20458 (file-name (git-file-name name version))
20459 (sha256
20460 (base32 "1vlaiz4bwgrcay51knj6a20lh3lwihjqxhxhdk6nqkn9ijg0hc81"))))
20461 (build-system pyproject-build-system)
20462 (arguments
20463 (list
20464 #:test-flags
20465 #~(list "--ignore=tests/test_remote.py"
20466 "--ignore=tests/test_putty.py"
20467 "--ignore=tests/test_sudo.py"
20468 "-k"
20469 (string-join (list "not test_home"
20470 "test_iter_lines_error"
20471 "test_quoting"
20472 "test_copy_move_delete")
20473 " and not "))))
20474 (native-inputs
20475 (list procps
20476 python-psutil
20477 python-pytest
20478 python-setuptools
20479 python-setuptools-scm
20480 python-wheel))
20481 (home-page "https://plumbum.readthedocs.io")
20482 (synopsis "Python shell combinators library")
20483 (description
20484 "Plumbum is a library of tools for replacing shell scripts with Python
20485code.")
20486 (license license:expat)))
20487
20488(define-public python-deprecation
20489 (package
20490 (name "python-deprecation")
20491 (version "2.1.0")
20492 (source
20493 (origin
20494 (method url-fetch)
20495 (uri (pypi-uri "deprecation" version))
20496 (sha256
20497 (base32
20498 "1zqqjlgmhgkpzg9ss5ki8wamxl83xn51fs6gn2a8cxsx9vkbvcvj"))))
20499 (build-system pyproject-build-system)
20500 (arguments
20501 (list
20502 #:test-backend #~'unittest
20503 #:phases
20504 #~(modify-phases %standard-phases
20505 (add-after 'unpack 'drop-unittest2
20506 ;; See: <https://github.com/briancurtin/deprecation/issues/54>.
20507 (lambda _
20508 (substitute* "tests/test_deprecation.py"
20509 (("import unittest2")
20510 "import unittest as unittest2")))))))
20511 (native-inputs
20512 (list python-setuptools))
20513 (propagated-inputs
20514 (list python-packaging))
20515 (home-page "https://deprecation.readthedocs.io/")
20516 (synopsis "Python library to handle automated deprecations")
20517 (description
20518 "This is a library that enables automated deprecations. It offers the
20519@code{deprecated()} decorator to wrap functions, providing proper warnings
20520both in documentation and via Python’s warnings system, as well as the
20521@code{deprecation.fail_if_not_removed()} decorator for test methods to ensure
20522that deprecated code is eventually removed.")
20523 (license license:asl2.0)))
20524
20525(define-public python-jmespath
20526 (package
20527 (name "python-jmespath")
20528 (version "1.0.1")
20529 (source
20530 (origin
20531 (method url-fetch)
20532 (uri (pypi-uri "jmespath" version))
20533 (sha256
20534 (base32 "1gpdc1f0q5c9scmbw1l9g40jjfk3pxwg91ayvn7xbvvddlh1n9lh"))))
20535 (build-system pyproject-build-system)
20536 (native-inputs
20537 (list python-pytest
20538 python-setuptools))
20539 (home-page "https://github.com/jmespath/jmespath.py")
20540 (synopsis "JSON Matching Expressions")
20541 (description
20542 "JMESPath (pronounced “james path”) is a Python library that allows one
20543to declaratively specify how to extract elements from a JSON document.")
20544 (license license:expat)))
20545
20546(define-public python-asteval
20547 (package
20548 (name "python-asteval")
20549 (version "1.0.6")
20550 (source
20551 (origin
20552 (method url-fetch)
20553 (uri (pypi-uri "asteval" version))
20554 (sha256
20555 (base32 "17x1qk07cixj1nn59pp5dzjc9jna92v6kljdss81l5rf9cqfga0s"))))
20556 (build-system pyproject-build-system)
20557 (native-inputs
20558 (list python-pytest python-setuptools python-setuptools-scm))
20559 (home-page "https://github.com/newville/asteval")
20560 (synopsis "Minimalistic evaluator of Python expressions")
20561 (description
20562 "This package provides a minimalistic evaluator of Python expression
20563using the @code{ast} module.")
20564 (license license:expat)))
20565
20566(define-public python-lmfit
20567 (package
20568 (name "python-lmfit")
20569 (version "1.3.4")
20570 (source
20571 (origin
20572 (method git-fetch)
20573 (uri (git-reference
20574 (url "https://github.com/lmfit/lmfit-py")
20575 (commit version)))
20576 (file-name (git-file-name name version))
20577 (sha256
20578 (base32 "00zx5fc5qkk8cxjpz00z8xm4kga7m0jgr8pbgb097sifbxlix0d9"))))
20579 (build-system pyproject-build-system)
20580 (native-inputs
20581 (list python-pytest
20582 python-setuptools
20583 python-setuptools-scm))
20584 (propagated-inputs
20585 (list python-asteval
20586 python-dill
20587 python-numpy
20588 python-scipy
20589 python-uncertainties))
20590 (home-page "https://lmfit.github.io/lmfit-py/")
20591 (synopsis "Least-Squares minimization with bounds and constraints")
20592 (description
20593 "Lmfit provides a high-level interface to non-linear optimization and
20594curve fitting problems for Python. It builds on and extends many of the
20595optimization methods of @code{scipy.optimize}. Initially inspired by (and
20596named for) extending the Levenberg-Marquardt method from
20597@code{scipy.optimize.leastsq}, lmfit now provides a number of useful
20598enhancements to optimization and data fitting problems.")
20599 (license license:bsd-3)))
20600
20601(define-public python-bokeh
20602 (package
20603 (name "python-bokeh")
20604 (version "3.7.3")
20605 (source (origin
20606 (method url-fetch)
20607 (uri (pypi-uri "bokeh" version))
20608 (sha256
20609 (base32
20610 "0argn4fadyswnz86x6fsy1f13nmd8iwzn5ddwrg3s43vg6grma3h"))))
20611 (build-system pyproject-build-system)
20612 (arguments
20613 (list
20614 ;; FIXME: Most of the tests do not work, figure out how to enable some
20615 ;; portion.
20616 #:tests? #f
20617 #:test-flags
20618 '(list
20619 ;; These require selenium.
20620 "--ignore=tests/unit/bokeh/io/test_export.py"
20621 "--ignore=tests/unit/bokeh/io/test_webdriver.py"
20622 "--ignore=tests/unit/bokeh/embed/test_standalone.py"
20623
20624 ;; Doesn't find ManagedServerLoop fixture
20625 "--ignore=tests/unit/bokeh/test_client_server.py"
20626
20627 ;; This fails because of the Guix wrapper around pytest
20628 "--ignore=tests/unit/bokeh/io/test_util__io.py"
20629
20630 ;; Fixture ipython not found.
20631 "--ignore=tests/unit/bokeh/application/handlers/test_notebook__handlers.py"
20632 "--ignore=tests/unit/bokeh/command/subcommands/test_info.py"
20633
20634 ;; pd fixture not found.
20635 "--ignore=tests/unit/bokeh/models/test_mappers.py"
20636 "--ignore=tests/unit/bokeh/models/util/test_structure.py"
20637 "--ignore=tests/unit/bokeh/plotting/test__plot.py"
20638 "--ignore=tests/unit/bokeh/plotting/test__graph.py"
20639 "--ignore=tests/unit/bokeh/plotting/test_figure.py"
20640 "--ignore=tests/unit/bokeh/core/test_json_encoder.py"
20641 "--ignore=tests/unit/bokeh/core/property/test_bases.py"
20642 "--ignore=tests/unit/bokeh/core/property/test_container.py"
20643 "--ignore=tests/unit/bokeh/core/property/test_dataspec.py"
20644 "--ignore=tests/unit/bokeh/core/property/test_datetime.py"
20645 "--ignore=tests/unit/bokeh/core/property/test_pandas.py"
20646
20647 ;; nx fixture not found.
20648 "--ignore=tests/unit/bokeh/plotting/test_graph.py"
20649 "--ignore=tests/unit/bokeh/models/test_graphs.py"
20650 "--ignore=tests/unit/bokeh/io/test_showing.py"
20651 "--ignore=tests/unit/bokeh/document/test_events__document.py"
20652
20653 ;; These tests need external sample data
20654 "--ignore-glob=tests/unit/bokeh/sampledata/*"
20655
20656 ;; Attempts to install something via npm.
20657 "--ignore=tests/unit/bokeh/test_ext.py"
20658
20659 ;; More failures due to set up problems.
20660 "--ignore=tests/unit/bokeh/server/test_server__server.py"
20661 "--ignore=tests/unit/bokeh/server/test_tornado__server.py"
20662 "--ignore=tests/unit/bokeh/util/test_serialization.py"
20663 "--ignore=tests/unit/bokeh/util/test_hex.py"
20664 "--ignore=tests/unit/bokeh/models/test_sources.py"
20665 "--ignore=tests/unit/bokeh/embed/test_bundle.py"
20666
20667 "-k"
20668 (string-append
20669 ;; Fails with: 'called_once_with' is not a valid assertion. [...]
20670 ;; Did you mean: 'assert_called_once_with'?
20671 "not test_set_from_json"
20672
20673 ;; XXX: This one test transforms a gif of a red box. It transforms
20674 ;; it all right but the base64 doesn't look as expected, probably
20675 ;; because of a change in pillow.
20676 " and not test_transform_PIL"))
20677 #:phases
20678 #~(modify-phases %standard-phases
20679 (add-before 'build 'set-version
20680 (lambda _
20681 (substitute* "pyproject.toml"
20682 ((", \"setuptools-git-versioning\"") "")
20683 (("dynamic = \\[\"version\"\\]")
20684 (string-append "version = '" #$version "'"))))))))
20685 (propagated-inputs
20686 (list node-lts
20687 python-contourpy
20688 python-jinja2
20689 python-narwhals
20690 python-numpy
20691 python-packaging
20692 python-pandas
20693 python-pillow
20694 python-pyyaml
20695 python-tornado
20696 python-xyzservices))
20697 (native-inputs
20698 (list python-beautifulsoup4
20699 python-dateutil
20700 python-flaky
20701 python-mock
20702 python-nbconvert
20703 python-pandas
20704 python-pytest
20705 python-pytz
20706 python-requests
20707 python-setuptools
20708 python-wheel))
20709 (home-page "https://github.com/bokeh/bokeh")
20710 (synopsis "Interactive plots and applications in the browser from Python")
20711 (description
20712 "This package provides tools for interactive plots and applications in the
20713browser from Python.")
20714 (license license:bsd-3)))
20715
20716;; TODO: Move to python-web.
20717(define-public python-botocore
20718 ;; Note: When updating botocore, also make sure that boto3 and awscli
20719 ;; are compatible.
20720 (package
20721 (name "python-botocore")
20722 (version "1.42.5")
20723 (source
20724 (origin
20725 (method url-fetch)
20726 (uri (pypi-uri "botocore" version))
20727 (sha256
20728 (base32
20729 "0vqkfzrljd15qnzgdzqqbf1l1f8qhg5pz010b5wxk1j2y63w9grp"))))
20730 (build-system pyproject-build-system)
20731 (arguments
20732 (list
20733 ;; tests: 4496 passed, 87 skipped
20734 #:test-flags
20735 #~(list "--numprocesses" (number->string (min (parallel-job-count) 8))
20736 ;; The full test suite is huge, run some of it's portion.
20737 "--ignore=tests/integration"
20738 "--ignore=tests/functional")))
20739 (native-inputs
20740 (list python-jsonschema
20741 python-pytest
20742 python-pytest-xdist
20743 python-setuptools))
20744 (propagated-inputs
20745 (list python-dateutil
20746 python-jmespath
20747 python-urllib3))
20748 (home-page "https://github.com/boto/botocore")
20749 (synopsis "Low-level interface to AWS")
20750 (description
20751 "Botocore is a Python library that provides a low-level interface to the
20752Amazon Web Services (AWS) API.")
20753 (license license:asl2.0)))
20754
20755(define-public python-boto3
20756 (package
20757 (name "python-boto3")
20758 (version "1.42.5")
20759 (source
20760 (origin
20761 (method git-fetch)
20762 (uri (git-reference
20763 (url "https://github.com/boto/boto3")
20764 (commit version)))
20765 (file-name (git-file-name name version))
20766 (sha256
20767 (base32 "15xpx54k503zcr03rx5q4fc3wf4f9zxnmghah9shamb61k2zriv1"))))
20768 (build-system pyproject-build-system)
20769 (arguments
20770 (list
20771 ;; tests: 1435 passed, 22 skipped, 1 warning
20772 #:test-flags
20773 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
20774 ;; Integration tests are trying to connect to AWS.
20775 "--ignore=tests/integration")))
20776 (native-inputs
20777 (list python-mock
20778 python-pytest
20779 python-pytest-xdist
20780 python-setuptools))
20781 (propagated-inputs
20782 (list python-botocore
20783 python-jmespath
20784 python-s3transfer))
20785 (home-page "https://github.com/boto/boto3")
20786 (synopsis "AWS SDK for Python")
20787 (description
20788 "Boto3 is a Python library for writing programs that interact with
20789@acronym{AWS,Amazon Web Services}.")
20790 (license license:asl2.0)))
20791
20792(define-public python-pyfiglet
20793 (package
20794 (name "python-pyfiglet")
20795 (version "1.0.4")
20796 (source
20797 (origin
20798 (method git-fetch)
20799 (uri (git-reference
20800 (url "https://github.com/pwaller/pyfiglet")
20801 (commit (string-append "v" version))))
20802 (file-name (git-file-name name version))
20803 (sha256
20804 (base32 "1r1fyphz99jar2xfk761cl740zxk4b0gygajgjfx6i1kf0dxdv40"))))
20805 (build-system pyproject-build-system)
20806 (arguments
20807 (list
20808 #:phases
20809 #~(modify-phases %standard-phases
20810 (add-after 'unpack 'fallback-on-default-build
20811 (lambda _
20812 ;; This pyproject has little value and fails because of the
20813 ;; :__legacy__ suffix. Removing it to rely on defaults.
20814 (delete-file "pyproject.toml"))))))
20815 (native-inputs (list python-pytest python-setuptools))
20816 (home-page "https://github.com/pwaller/pyfiglet")
20817 (synopsis "Draw ASCII art big letters in Python")
20818 (description
20819 "This module lets you draw large letter from ordinary characters in pure
20820 Python.")
20821 (license license:expat)))
20822
20823(define-public python-mako
20824 (package
20825 (name "python-mako")
20826 (version "1.3.10")
20827 (source
20828 (origin
20829 (method url-fetch)
20830 (uri (pypi-uri "mako" version))
20831 (sha256
20832 (base32 "0a7ala6k7kn094k3g02b85xfkr20yk0w6a0acgjsfgsq75prlmwr"))))
20833 (build-system pyproject-build-system)
20834 (native-inputs
20835 (list python-pytest
20836 python-setuptools
20837 python-wheel))
20838 (propagated-inputs
20839 (list python-markupsafe))
20840 (home-page "https://www.makotemplates.org/")
20841 (synopsis "Templating language for Python")
20842 (description "Mako is a templating language for Python that compiles
20843templates into Python modules.")
20844 (license license:expat)))
20845
20846(define-public python-cookiecutter
20847 (package
20848 (name "python-cookiecutter")
20849 (version "2.6.0")
20850 (source
20851 (origin
20852 (method url-fetch)
20853 (uri (pypi-uri "cookiecutter" version))
20854 (sha256
20855 (base32 "0762882zrvf3sslr9r7v8wkdwjckhm2clj4d831gvx54kqbgh8fv"))))
20856 (build-system pyproject-build-system)
20857 (arguments
20858 (list
20859 #:phases #~(modify-phases %standard-phases
20860 (add-before 'check 'pre-check
20861 (lambda _
20862 ;; test_get_user_config.py requires a writable home
20863 ;; directory.
20864 (setenv "HOME"
20865 (getcwd))
20866 ;; test_hooks.py dynamically creates shell scripts
20867 ;; with a /bin/bash shebang. We have to patch these.
20868 (substitute* "tests/test_hooks.py"
20869 (("/bin/bash")
20870 (string-append #$(this-package-native-input
20871 "bash-minimal") "/bin/bash"))))))))
20872 (native-inputs (list bash-minimal
20873 git-minimal/pinned
20874 python-freezegun
20875 python-pytest
20876 python-pytest-mock
20877 python-setuptools
20878 python-wheel))
20879 (propagated-inputs (list python-arrow
20880 python-binaryornot
20881 python-click
20882 python-jinja2
20883 python-pyyaml
20884 python-requests
20885 python-rich
20886 python-slugify))
20887 (home-page "https://github.com/cookiecutter/cookiecutter")
20888 (synopsis
20889 "Command-line utility that creates projects from project templates")
20890 (description
20891 "This package provides a command-line utility that creates projects from
20892project templates, e.g. creating a Python package project from a Python package
20893project template.")
20894 (license license:bsd-3)))
20895
20896(define-public python-pyquery
20897 (package
20898 (name "python-pyquery")
20899 (version "2.0.1")
20900 (source
20901 (origin
20902 (method url-fetch)
20903 (uri (pypi-uri "pyquery" version))
20904 (sha256
20905 (base32
20906 "1brg6aawb9m5mdfmc6g7v5r6pczbx67r4l9cn5yh6bdi0qkvp501"))))
20907 (build-system pyproject-build-system)
20908 (arguments
20909 (list
20910 #:test-flags
20911 #~(list #$@(map (lambda (test) (string-append
20912 "--deselect=tests/test_pyquery.py::"
20913 test))
20914 (list
20915 ;; AssertionError: 'REQUEST_METHOD: POST' not found in ''
20916 "TestWebScrapping::test_post"
20917 ;; AssertionError: 'HTTP_X_FOO: bar' not found in ''
20918 "TestWebScrapping::test_session"
20919 ;; Assertion is not equal.
20920 "TestManipulating::test_val_for_textarea"
20921 "TestHTMLParser::test_replaceWith"
20922 "TestHTMLParser::test_replaceWith_with_function"
20923 ;; Network access is required.
20924 "TestWebScrapping::test_get"
20925 "TestWebScrappingEncoding::test_get")))))
20926 (native-inputs
20927 (list python-pytest
20928 python-requests
20929 python-setuptools
20930 python-webob
20931 python-webtest
20932 python-wheel))
20933 (propagated-inputs
20934 (list python-cssselect python-lxml))
20935 (home-page "https://github.com/gawel/pyquery")
20936 (synopsis "Make jQuery-like queries on xml documents")
20937 (description "pyquery allows you to make jQuery queries on xml documents.
20938The API is as much as possible the similar to jQuery. pyquery uses lxml for
20939fast xml and html manipulation.")
20940 (license license:bsd-3)))
20941
20942(define-public python-amqp
20943 (package
20944 (name "python-amqp")
20945 (version "5.1.1")
20946 (source
20947 (origin
20948 (method url-fetch)
20949 (uri (pypi-uri "amqp" version))
20950 (sha256
20951 (base32 "1qmmffiy48nady7is8529vxcyqbq88v5zgawqr3fk4q8rkz166rc"))))
20952 (build-system pyproject-build-system)
20953 (arguments
20954 (list ; Integration tests require network connectivity.
20955 #:test-flags '(list "--ignore=t/integration/test_rmq.py")))
20956 (native-inputs (list python-pytest python-setuptools python-wheel))
20957 (propagated-inputs (list python-vine))
20958 (home-page "https://github.com/celery/py-amqp")
20959 (synopsis "Low-level AMQP client for Python (fork of amqplib)")
20960 (description
20961 "This is a fork of amqplib which was originally written by Barry Pederson.
20962It is maintained by the Celery project, and used by kombu as a pure python
20963alternative when librabbitmq is not available.")
20964 (license license:lgpl2.1+)))
20965
20966(define-public python-benchmark-4dn
20967 (package
20968 (name "python-benchmark-4dn")
20969 (version "0.5.24")
20970 (source (origin
20971 (method url-fetch)
20972 (uri (pypi-uri "benchmark_4dn" version))
20973 (sha256
20974 (base32
20975 "1cjin99p8mrh4nkbr4hsdfks9c22dfw3gk5ad80b4rxngs8mwj0s"))))
20976 (properties '(("upstream-name" . "benchmark_4dn")))
20977 (build-system pyproject-build-system)
20978 ;; There are none.
20979 (arguments (list #:tests? #false))
20980 (native-inputs
20981 (list python-poetry-core))
20982 (home-page "https://github.com/SooLee/Benchmark/")
20983 (synopsis "Benchmark functions for CWL workflows")
20984 (description
20985 "This package provides benchmark functions that return total space, memory,
20986CPUs required per given input size, and parameters for CWL workflows.")
20987 (license license:expat)))
20988
20989(define-public python-beniget
20990 (package
20991 (name "python-beniget")
20992 (version "0.4.2.post1")
20993 (source
20994 (origin
20995 (method url-fetch)
20996 (uri (pypi-uri "beniget" version))
20997 (sha256
20998 (base32 "1bjjl12pqbz4amnn8wvcpd4zjrx6cpw04s586gn18zjywqvqa9d0"))))
20999 (build-system pyproject-build-system)
21000 (native-inputs
21001 (list python-pytest
21002 python-setuptools))
21003 (propagated-inputs
21004 (list python-gast))
21005 (home-page "https://github.com/serge-sans-paille/beniget")
21006 (synopsis "Extract semantic information about static Python code")
21007 (description
21008 "Beniget is a collection of analyzers for Python @acronym{AST,
21009Abstract Syntax Tree}. It is a building block for writing a static analyzer
21010or compiler for Python.")
21011 (license license:bsd-3)))
21012
21013(define-public python-kombu
21014 (package
21015 (name "python-kombu")
21016 (version "5.6.2")
21017 (source
21018 (origin
21019 (method git-fetch)
21020 (uri (git-reference
21021 (url "https://github.com/celery/kombu")
21022 (commit (string-append "v" version))))
21023 (file-name (git-file-name name version))
21024 (sha256
21025 (base32 "1yglhylq1vfi43yv2q02k9kf5kwdr0xhrmghmmhyna87qd108ir7"))))
21026 (build-system pyproject-build-system)
21027 (arguments
21028 (list
21029 ;; tests: 854 passed, 193 skipped
21030 #:test-flags
21031 #~(list
21032 ;; TODO: Package azure-identity (required for this file)
21033 "--ignore=t/unit/transport/test_azurestoragequeues.py"
21034 ;; XXX: Requires google-cloud-pubsub.
21035 "--ignore=t/unit/transport/test_gcpubsub.py"
21036 ;; XXX: Requires pyro, see:
21037 ;; <https://codeberg.org/guix/guix/issues/5857>
21038 "--ignore=t/unit/transport/test_pyro.py")
21039 #:phases
21040 #~(modify-phases %standard-phases
21041 (add-after 'unpack 'relax-requirements
21042 (lambda _
21043 (substitute* "requirements/default.txt"
21044 (("tzdata>=2025.2")
21045 "tzdata>=2025.1")))))))
21046 (native-inputs
21047 (list python-botocore
21048 python-pytest
21049 python-pytest-freezer
21050 python-pytest-sugar
21051 python-setuptools))
21052 (propagated-inputs
21053 (list python-amqp
21054 python-packaging
21055 python-tzdata
21056 python-vine))
21057 (home-page "https://kombu.readthedocs.io")
21058 (synopsis "Message passing library for Python")
21059 (description
21060 "The aim of Kombu is to make messaging in Python as easy as possible by
21061providing an idiomatic high-level interface for the AMQ protocol, and also
21062provide proven and tested solutions to common messaging problems. AMQP is the
21063Advanced Message Queuing Protocol, an open standard protocol for message
21064orientation, queuing, routing, reliability and security, for which the
21065RabbitMQ messaging server is the most popular implementation.")
21066 (license license:bsd-3)))
21067
21068(define-public python-billiard
21069 (package
21070 (name "python-billiard")
21071 (version "4.2.2")
21072 (source
21073 (origin
21074 (method git-fetch)
21075 (uri (git-reference
21076 (url "https://github.com/celery/billiard")
21077 (commit (string-append "v" version))))
21078 (file-name (git-file-name name version))
21079 (sha256
21080 (base32 "1p08w9msiajhg23ifcgnkv8jlbnh3ip3qhxahl5q0338sk4kah19"))))
21081 (build-system pyproject-build-system)
21082 (arguments
21083 (list
21084 #:phases
21085 #~(modify-phases %standard-phases
21086 (add-after 'unpack 'remove-win-files
21087 (lambda _
21088 (for-each delete-file-recursively
21089 '("billiard/popen_spawn_win32.py"
21090 "billiard/_win.py")))))))
21091 (native-inputs (list python-psutil python-pytest python-setuptools))
21092 (home-page "https://github.com/celery/billiard")
21093 (synopsis "Python multiprocessing fork with improvements and bugfixes")
21094 (description
21095 "Billiard is a fork of the Python 2.7 multiprocessing package. The
21096multiprocessing package itself is a renamed and updated version of R Oudkerk's
21097pyprocessing package. This standalone variant is intended to be compatible with
21098Python 2.4 and 2.5, and will draw its fixes/improvements from python-trunk.")
21099 (license license:bsd-3)))
21100
21101(define-public python-celery
21102 (package
21103 (name "python-celery")
21104 (version "5.6.3")
21105 (source
21106 (origin
21107 (method url-fetch)
21108 (uri (pypi-uri "celery" version))
21109 (sha256
21110 (base32 "04i9w7sakiahf2593mshxxwqis19hnyrmr8vy3lq5f2l42yhcw0p"))))
21111 (build-system pyproject-build-system)
21112 (arguments
21113 (list
21114 ;; tests: 3364 passed, 38 skipped, 8 deselected, 3 xfailed, 63 warnings,
21115 ;; 28808 subtests passed
21116 #:test-flags
21117 ;; The MongoDB backend test appears to expect an older version of
21118 ;; MongoDB which provided its own bson module, fails with "
21119 ;; AttributeError: module 'bson' has no attribute 'encode'".
21120 #~(list "--ignore=t/unit/backends/test_mongodb.py"
21121 ;; XXX: Requires google-cloud-firestore
21122 "--ignore=t/unit/backends/test_gcs.py"
21123 "-k" (string-join
21124 (list ;; AssertionError.
21125 "not test_check_privileges_no_fchown"
21126 ;; These 3 tests error out on ci.guix.gnu.org with
21127 ;; OSError: [Errno 24] Too many open files
21128 "test_register_with_event_loop__no_on_tick_dupes"
21129 "test_with_autoscaler_file_descriptor_safety"
21130 "test_with_file_descriptor_safety"
21131 ;; XXX: Fails to compare local timezones.
21132 "test_use_local_timezone")
21133 " and not "))))
21134 (native-inputs
21135 (list python-azure-core
21136 python-dnspython
21137 python-flaky
21138 python-gevent
21139 python-google-cloud-storage
21140 python-iniconfig
21141 python-moto
21142 python-msgpack
21143 python-pymongo
21144 python-pytest
21145 python-pytest-celery
21146 python-pytest-click
21147 python-pytest-order
21148 python-pytest-subtests
21149 python-pytest-timeout
21150 python-redis
21151 python-setuptools))
21152 (propagated-inputs
21153 (list python-billiard
21154 python-click
21155 python-click-didyoumean
21156 python-click-plugins
21157 python-click-repl
21158 python-dateutil
21159 python-kombu
21160 python-tzlocal
21161 python-vine))
21162 (home-page "https://celeryproject.org")
21163 (synopsis "Distributed Task Queue")
21164 (description
21165 "Celery is an asynchronous task queue/job queue based on distributed
21166message passing. It is focused on real-time operation, but supports
21167scheduling as well. The execution units, called tasks, are executed
21168concurrently on a single or more worker servers using multiprocessing,
21169Eventlet, or gevent. Tasks can execute asynchronously (in the background) or
21170synchronously (wait until ready).")
21171 (license license:bsd-3)))
21172
21173;; A bare minimal package, mainly to use in tests and reduce closure
21174;; size. Tests are left out in the main package to slim down native-inputs.
21175(define-public python-celery-minimal
21176 (package/inherit python-celery
21177 (name "python-celery-minimal")
21178 (arguments
21179 (list #:tests? #f))
21180 (native-inputs
21181 (list python-setuptools))))
21182
21183(define-public python-anyqt
21184 (package
21185 (name "python-anyqt")
21186 (version "0.2.1")
21187 (source
21188 (origin
21189 (method git-fetch)
21190 (uri (git-reference
21191 (url "https://github.com/ales-erjavec/anyqt")
21192 (commit version)))
21193 (file-name (git-file-name name version))
21194 (sha256
21195 (base32 "0dci4sx53icd3jxv5gm22yr5g4dcyqbyvkkwliqpmbkxxjxj0dc8"))))
21196 (build-system pyproject-build-system)
21197 (arguments
21198 (list
21199 ;; XXX: Qt tests require Qt modules, see test/test_import.py.
21200 ;; TODO Add/configure the right Qt inputs.
21201 #:test-flags
21202 #~(list "--ignore-glob=tests/test_q*.py")
21203 #:phases
21204 #~(modify-phases %standard-phases
21205 (add-after 'unpack 'delete-files
21206 ;; Delete files related to other operating systems.
21207 (lambda _
21208 (delete-file "AnyQt/QtMacExtras.py")
21209 (delete-file "AnyQt/QtWinExtras.py"))))))
21210 (native-inputs
21211 (list python-pyqt-6
21212 python-pytest
21213 python-pytest-qt
21214 python-setuptools))
21215 (home-page "https://github.com/ales-erjavec/anyqt")
21216 (synopsis "PyQt compatibility layer")
21217 (description
21218 "This package provides a PyQt/PySide compatibility layer. More precisely,
21219it provides compatibility for the following modules: PyQt4, PyQt5, PyQt6,
21220PySide, PySide2.")
21221 (license license:gpl3)))
21222
21223(define-public python-qasync
21224 (package
21225 (name "python-qasync")
21226 (version "0.28.0")
21227 (source
21228 (origin
21229 (method git-fetch)
21230 (uri (git-reference
21231 (url "https://github.com/CabbageDevelopment/qasync/")
21232 (commit (string-append "v" version))))
21233 (file-name (git-file-name name version))
21234 (sha256
21235 (base32 "13i5riq7ig4csxlx61fzb8xl12ny0dkwj4h8f8r95xz5rii7a0kr"))))
21236 (build-system pyproject-build-system)
21237 (arguments
21238 (list
21239 #:build-backend "poetry.core.masonry.api" ;XXX: python-uv-build is required
21240 #:phases
21241 #~(modify-phases %standard-phases
21242 (add-before 'check 'set-qpa
21243 (lambda _
21244 (setenv "QT_QPA_PLATFORM" "offscreen"))))))
21245 (native-inputs
21246 (list python-poetry-core python-pytest))
21247 (propagated-inputs
21248 (list python-pyqt-6))
21249 (home-page "https://github.com/CabbageDevelopment/qasync")
21250 (synopsis "Implementation of the PEP 3156 Event-Loop with Qt")
21251 (description
21252 "@code{qasync} allows coroutines to be used in PyQt/PySide applications
21253by providing an implementation of the PEP 3156 event-loop.")
21254 (license license:bsd-2)))
21255
21256(define-public python-editor
21257 (package
21258 (name "python-editor")
21259 (version "1.0.4")
21260 (source
21261 (origin
21262 (method git-fetch)
21263 (uri (git-reference
21264 (url "https://github.com/fmoo/python-editor")
21265 (commit version)))
21266 (file-name (git-file-name name version))
21267 (sha256
21268 (base32 "0hm5gcz5117dsq39bqfxpwazk4khqd272ran0n12x0x84mnqvfxa"))))
21269 (build-system pyproject-build-system)
21270 (arguments (list #:tests? #f)) ;XXX: needs a TTY and an editor
21271 (native-inputs (list python-setuptools))
21272 (home-page "https://github.com/fmoo/python-editor")
21273 (synopsis "Programmatically open an editor, capture the result")
21274 (description
21275 "This package provides the editor module for programmatically interfacing
21276with your system's $EDITOR.")
21277 (license license:asl2.0)))
21278
21279(define-public python-multiprocessing-logging
21280 (package
21281 (name "python-multiprocessing-logging")
21282 (version "0.3.4")
21283 (home-page "https://github.com/jruere/multiprocessing-logging")
21284 (source
21285 (origin
21286 (method git-fetch)
21287 (uri (git-reference
21288 (url home-page)
21289 (commit (string-append "v" version))))
21290 (file-name (git-file-name name version))
21291 (sha256
21292 (base32 "0ib1plsyi4g68n0crc2cqhk54fccsmcijzh66g89fd3lgababgxd"))))
21293 (build-system pyproject-build-system)
21294 (arguments (list #:test-backend #~'unittest))
21295 (native-inputs (list python-setuptools))
21296 (synopsis "Manage logs from multiple processes")
21297 (description
21298 "This Python module implements a multiprocessing-aware @code{Handler}
21299that, when set on the root @code{Logger}, will tunnel log records to the
21300main process so that they are handled correctly.")
21301 (license license:lgpl3+)))
21302
21303(define-public python-munkres
21304 (package
21305 (name "python-munkres")
21306 (version "1.1.4")
21307 (source
21308 (origin
21309 (method url-fetch)
21310 (uri (pypi-uri "munkres" version))
21311 (sha256
21312 (base32 "00yvj8bxmhhhhd74v7j0x673is7vizmxwgb3dd5xmnkr74ybyi7w"))))
21313 (build-system pyproject-build-system)
21314 (arguments
21315 (list
21316 ;; See https://github.com/bmc/munkres/issues/40
21317 #:test-flags
21318 (if (member (%current-system) %32bit-supported-systems)
21319 #~(list "-k" "not test_profit_float")
21320 #~(list))))
21321 (native-inputs (list python-pytest python-setuptools))
21322 (home-page "https://software.clapper.org/munkres/")
21323 (synopsis "Implementation of the Munkres algorithm")
21324 (description
21325 "The Munkres module provides an implementation of the Munkres algorithm
21326(also called the Hungarian algorithm or the Kuhn-Munkres algorithm), useful
21327for solving the Assignment Problem.")
21328 (license license:bsd-3)))
21329
21330(define-public python-codespell
21331 (package
21332 (name "python-codespell")
21333 (version "2.3.0")
21334 (source
21335 (origin
21336 (method url-fetch)
21337 (uri (pypi-uri "codespell" version))
21338 (sha256
21339 (base32 "07s72zfxkznigqdc23k7jp9saq0hgq0gf2kjmmxzcrayyw87s31n"))))
21340 (build-system pyproject-build-system)
21341 (native-inputs
21342 (list python-pygments
21343 python-pytest
21344 python-pytest-dependency
21345 python-setuptools
21346 python-setuptools-scm
21347 python-wheel))
21348 (propagated-inputs
21349 (list python-chardet))
21350 (home-page "https://github.com/codespell-project/codespell/")
21351 (synopsis "Spellchecker for code")
21352 (description
21353 "Codespell fixes common misspellings in text files. It's designed
21354primarily for checking misspelled words in source code, but it can be used
21355with other files as well. It does not check for word membership in a complete
21356dictionary, but instead looks for a set of common misspellings. Therefore it
21357should catch errors like \"adn\", but it will not catch \"adnasdfasdf\". This
21358also means it shouldn't generate false-positives when you use a niche term it
21359doesn't know about.")
21360 (license
21361 (list
21362 ; for codespell and codespell_lib
21363 license:gpl2
21364 ; for dictionary*.txt
21365 license:cc-by-sa3.0))))
21366
21367(define-public python-jellyfish
21368 (package
21369 (name "python-jellyfish")
21370 (version "1.2.1")
21371 (source
21372 (origin
21373 (method git-fetch)
21374 (uri (git-reference
21375 (url "https://github.com/jamesturk/jellyfish")
21376 (commit (string-append "v" version))))
21377 (file-name (git-file-name name version))
21378 (sha256
21379 (base32 "1zsbvyq608yrfv29hlwjkr6ycrghy8s5hpwnj3aa9symihazpb4c"))))
21380 (build-system pyproject-build-system)
21381 (arguments
21382 (list
21383 #:imported-modules (append %cargo-build-system-modules
21384 %pyproject-build-system-modules)
21385 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
21386 (guix build pyproject-build-system)
21387 (guix build utils))
21388 #:phases
21389 #~(modify-phases %standard-phases
21390 (add-after 'unpack 'prepare-cargo-build-system
21391 (lambda args
21392 (for-each
21393 (lambda (phase)
21394 (format #t "Running cargo phase: ~a~%" phase)
21395 (apply (assoc-ref cargo:%standard-phases phase)
21396 #:cargo-target #$(cargo-triplet)
21397 args))
21398 '(unpack-rust-crates
21399 configure
21400 check-for-pregenerated-files
21401 patch-cargo-checksums)))))))
21402 (inputs (cons* maturin (cargo-inputs 'jellyfish)))
21403 (native-inputs
21404 (append
21405 (list python-pytest
21406 python-setuptools
21407 rust
21408 `(,rust "cargo"))
21409 (or (and=> (%current-target-system)
21410 (compose list make-rust-sysroot))
21411 '())))
21412 (home-page "https://www.jpt.sh/projects/jellyfish/")
21413 (synopsis "Approximate and phonetic matching of strings")
21414 (description "Jellyfish uses a variety of string comparison and phonetic
21415encoding algorithms to do fuzzy string matching.")
21416 (license license:bsd-2)))
21417
21418(define-public python-pdfminer-six
21419 (package
21420 (name "python-pdfminer-six")
21421 (version "20260107")
21422 ;; There are no tests in the PyPI tarball.
21423 (source
21424 (origin
21425 (method git-fetch)
21426 (uri (git-reference
21427 (url "https://github.com/pdfminer/pdfminer.six")
21428 (commit version)))
21429 (file-name (git-file-name name version))
21430 (sha256
21431 (base32 "10f0g1zwbahfc5lrg84c8fiav184h0jr86y6ra9dqb81zb0875dj"))))
21432 (build-system pyproject-build-system)
21433 (arguments
21434 (list #:phases
21435 #~(modify-phases %standard-phases
21436 ;; Tests write to the source tree.
21437 (add-after 'unpack 'make-git-checkout-writable
21438 (lambda _
21439 (for-each make-file-writable (find-files ".")))))))
21440 (propagated-inputs
21441 (list python-charset-normalizer python-cryptography))
21442 (native-inputs
21443 (list python-pytest python-setuptools python-setuptools-scm))
21444 (home-page "https://github.com/pdfminer/pdfminer.six")
21445 (synopsis "PDF parser and analyzer")
21446 (description "@code{pdfminer.six} is a community maintained fork of
21447the original PDFMiner. It is a tool for extracting information from PDF
21448documents. It focuses on getting and analyzing text data. Pdfminer.six
21449extracts the text from a page directly from the sourcecode of the PDF. It
21450can also be used to get the exact location, font or color of the text.")
21451 (license license:expat)))
21452
21453(define-public python-rarfile
21454 (package
21455 (name "python-rarfile")
21456 (version "4.2")
21457 (source
21458 (origin
21459 (method git-fetch)
21460 (uri (git-reference
21461 (url "https://github.com/markokr/rarfile")
21462 (commit (string-append "v" version))))
21463 (file-name (git-file-name name version))
21464 (sha256
21465 (base32 "1lm4vz4w0hrnzln7w10ijhdiwxy7gz45m44zw4fz7rdnn7c06b36"))))
21466 (build-system pyproject-build-system)
21467 (arguments
21468 (list
21469 #:tests? #f ;The bsdtar utility is very limited and most tests fail.
21470 #:phases
21471 #~(modify-phases %standard-phases
21472 (add-after 'unpack 'patch
21473 (lambda* (#:key inputs #:allow-other-keys)
21474 (substitute* "rarfile.py"
21475 ;; Disable unrar and unar, which are unavailable on Guix.
21476 (("(unrar|unar)=True" all tool)
21477 (string-append tool "=False"))
21478 ;; Hardcode path to bsdtar
21479 (("\"bsdtar\"")
21480 (format #f "~s"
21481 (search-input-file inputs "bin/bsdtar")))))))))
21482 (native-inputs (list python-pytest python-setuptools))
21483 (inputs (list libarchive))
21484 (home-page "https://github.com/markokr/rarfile")
21485 (synopsis "RAR archive reader for Python")
21486 (description
21487 "This is Python module for RAR archive reading. The interface is made as
21488zipfile like as possible.")
21489 (license license:isc)))
21490
21491(define-public python-rassumfrassum
21492 (package
21493 (name "python-rassumfrassum")
21494 (version "0.3.3")
21495 (source
21496 (origin
21497 (method git-fetch)
21498 (uri (git-reference
21499 (url "https://github.com/joaotavora/rassumfrassum")
21500 (commit (string-append "v" version))))
21501 (file-name (git-file-name name version))
21502 (sha256
21503 (base32 "0iyqg7pnlca9i9a5n2v1pg8xy0chy297d1a934wqxvjzrv11wxyw"))))
21504 (build-system pyproject-build-system)
21505 (arguments
21506 (list
21507 #:phases
21508 #~(modify-phases %standard-phases
21509 (replace 'check
21510 (lambda* (#:key tests? #:allow-other-keys)
21511 (when tests?
21512 (invoke "test/run-all.sh")))))))
21513 (native-inputs (list python-setuptools))
21514 (home-page "https://github.com/joaotavora/rassumfrassum")
21515 (synopsis "Connect an LSP client to multiple LSP servers")
21516 (description
21517 "LSP/JSONRPC multiplexer for connecting one LSP client to multiple servers.")
21518 (license license:gpl3+)))
21519
21520(define-public python-slugid
21521 (package
21522 (name "python-slugid")
21523 (version "2.0.0")
21524 (source
21525 (origin
21526 (method git-fetch)
21527 (uri (git-reference
21528 (url "https://github.com/taskcluster/slugid.py")
21529 (commit (string-append "v" version))))
21530 (file-name (git-file-name name version))
21531 (sha256
21532 (base32 "1h64p2jlqv6lsmw8h2j203kx3bhv72cwzpk5gdhsaamw30cp3h1i"))))
21533 (build-system pyproject-build-system)
21534 (arguments (list #:test-backend #~'nose))
21535 (native-inputs (list python-pynose python-setuptools))
21536 (home-page "http://taskcluster.github.io/slugid.py")
21537 (synopsis "Module for Base64 encoded UUID v4 slugs")
21538 (description
21539 "This package provides a module for generating v4 UUIDs and encoding them
21540into 22 character URL-safe base64 slug representation.")
21541 (license license:mpl2.0)))
21542
21543(define-public python-rich
21544 (package
21545 (name "python-rich")
21546 (version "14.3.3")
21547 (source
21548 (origin
21549 (method git-fetch)
21550 (uri (git-reference
21551 (url "https://github.com/willmcgugan/rich")
21552 (commit (string-append "v" version))))
21553 (file-name (git-file-name name version))
21554 (sha256
21555 (base32 "1g8mb51ffn3bw2dhmmimpyhwkn13xmphircc8bg2kvkmncxmbrza"))))
21556 (build-system pyproject-build-system)
21557 ;; tests: 952 passed, 25 skipped
21558 (native-inputs
21559 (list python-poetry-core
21560 python-pytest
21561 which))
21562 (propagated-inputs
21563 (list python-markdown-it-py
21564 python-pygments))
21565 (home-page "https://github.com/willmcgugan/rich")
21566 (synopsis "Render rich text and more to the terminal")
21567 (description
21568 "This is a Python package for rendering rich text, tables, progress bars,
21569syntax highlighting, markdown and more to the terminal.")
21570 (license license:expat)))
21571
21572(define-public python-rich-click
21573 (package
21574 (name "python-rich-click")
21575 (version "1.9.7")
21576 (source
21577 (origin
21578 (method git-fetch)
21579 (uri (git-reference
21580 (url "https://github.com/ewels/rich-click")
21581 (commit (string-append "v" version))))
21582 (file-name (git-file-name name version))
21583 (sha256
21584 (base32 "1bw3lsj49dln8q7407gv85y8lzdn9a3jcjl9acax6q6x9l73cgqx"))))
21585 (build-system pyproject-build-system)
21586 (native-inputs
21587 (list python-inline-snapshot
21588 python-pytest
21589 python-setuptools
21590 python-typer))
21591 (propagated-inputs
21592 (list python-click
21593 python-rich))
21594 (home-page "https://github.com/ewels/rich-click")
21595 (synopsis "Format click help output nicely with rich")
21596 (description "Click is a \"Python package for creating beautiful command
21597line interfaces\". Rich is a \"Python library for rich text and beautiful
21598formatting in the terminal\". The intention of rich-click is to provide
21599attractive help output from click, formatted with rich, with minimal
21600customization required.")
21601 (license license:expat)))
21602
21603(define-public python-magic
21604 (package
21605 (name "python-magic")
21606 (version "0.4.27")
21607 (home-page "https://github.com/ahupp/python-magic")
21608 (source
21609 (origin
21610 (method git-fetch)
21611 (uri (git-reference (url home-page) (commit version)))
21612 (file-name (git-file-name name version))
21613 (sha256
21614 (base32 "1x11kfn4g244fia9a7y4ly8dqv5zsxfg3l5azc54dl6gkp2bk7vx"))))
21615 (build-system pyproject-build-system)
21616 (arguments
21617 (list
21618 #:test-backend #~'custom
21619 #:test-flags #~(list "test/libmagic_test.py")
21620 #:phases
21621 #~(modify-phases %standard-phases
21622 (add-after 'unpack 'fix-tests
21623 (lambda _
21624 ;; Adjust expected output for [email protected].
21625 (substitute* "test/libmagic_test.py"
21626 (("PDF document, version 1\\.2, 2 pages")
21627 "PDF document, version 1.2, 2 page(s)"))))
21628 ;; Replace a specific method call with a hard-coded path to the
21629 ;; necessary libmagic.so file in the store.
21630 (add-before 'build 'hard-code-path-to-libmagic
21631 (lambda* (#:key inputs #:allow-other-keys)
21632 (substitute* "magic/loader.py"
21633 (("find_library\\('magic'\\)")
21634 (format #f "~s"
21635 (search-input-file inputs "lib/libmagic.so")))))))))
21636 (native-inputs (list which python-setuptools))
21637 (inputs
21638 ;; python-magic needs to be able to find libmagic.so.
21639 (list file))
21640 (synopsis "File type identification using libmagic")
21641 (description
21642 "This module uses ctypes to access the libmagic file type identification
21643library. It makes use of the local magic database and supports both textual
21644and MIME-type output. Note that this module and the python-file module both
21645provide a \"magic.py\" file; these two modules, which are different and were
21646developed separately, both serve the same purpose: to provide Python bindings
21647for libmagic.")
21648 (license license:expat)))
21649
21650(define-public python-securetar
21651 (package
21652 (name "python-securetar")
21653 (version "2025.1.4")
21654 (source
21655 (origin
21656 (method git-fetch)
21657 (uri (git-reference
21658 (url "https://github.com/pvizeli/securetar")
21659 (commit version)))
21660 (file-name (git-file-name name version))
21661 (sha256
21662 (base32 "1b9m29j4mjiv7925wrbiyj6vyx7m9qmdz40zqd4vgxhz4pq6x3xw"))))
21663 (build-system pyproject-build-system)
21664 (native-inputs (list python-setuptools python-wheel python-pytest))
21665 (propagated-inputs (list python-cryptography))
21666 (home-page "https://github.com/pvizeli/securetar")
21667 (synopsis "Python module to handle tarfile backups")
21668 (description
21669 "This library provides a streaming wrapper around python tarfile and allow
21670secure handling files and support encryption.")
21671 (license license:asl2.0)))
21672
21673(define-public python-pkgconfig
21674 (package
21675 (name "python-pkgconfig")
21676 (version "1.5.5")
21677 (source
21678 (origin
21679 (method url-fetch)
21680 (uri (pypi-uri "pkgconfig" version))
21681 (sha256
21682 (base32
21683 "16dqm2g7b2c6s09vf6wv62s629s63xf51n92v0hbax8zy4z1dd6y"))))
21684 (build-system pyproject-build-system)
21685 (arguments
21686 (list
21687 #:tests? #false ;there are none
21688 #:phases
21689 '(modify-phases %standard-phases
21690 (add-before 'build 'patch
21691 ;; Hard-code the path to pkg-config.
21692 (lambda _
21693 (substitute* "pkgconfig/pkgconfig.py"
21694 (("'pkg-config'")
21695 (string-append "'" (which "pkg-config") "'"))))))))
21696 (native-inputs (list python-poetry-core))
21697 (inputs (list pkg-config))
21698 (home-page "https://github.com/matze/pkgconfig")
21699 (synopsis "Python interface for pkg-config")
21700 (description "This module provides a Python interface to pkg-config. It
21701can be used to find all pkg-config packages, check if a package exists,
21702check if a package meets certain version requirements, query CFLAGS and
21703LDFLAGS and parse the output to build extensions with setup.py.")
21704 (license license:expat)))
21705
21706;; This package is unmaintained since 2014, but still used in `khmer'.
21707(define-public python-bz2file
21708 (package
21709 (name "python-bz2file")
21710 (version "0.98")
21711 (source
21712 (origin
21713 (method url-fetch)
21714 (uri (pypi-uri "bz2file" version))
21715 (sha256
21716 (base32 "126s53fkpx04f33a829yqqk8fj4png3qwg4m66cvlmhmwc8zihb4"))))
21717 (build-system pyproject-build-system)
21718 (arguments (list #:tests? #f)) ; Tests use deprecated python modules.
21719 (native-inputs (list python-setuptools))
21720 (home-page "https://github.com/nvawda/bz2file")
21721 (synopsis "Read and write bzip2-compressed files")
21722 (description
21723 "Bz2file is a Python library for reading and writing bzip2-compressed
21724files. It contains a drop-in replacement for the I/O interface in the
21725standard library's @code{bz2} module, including features from the latest
21726development version of CPython that are not available in older releases.")
21727 (license license:asl2.0)))
21728
21729(define-public python-future
21730 (package
21731 (name "python-future")
21732 (version "1.0.0")
21733 (source
21734 (origin
21735 (method url-fetch)
21736 (uri (pypi-uri "future" version))
21737 (sha256
21738 (base32 "01bvq2a5vgxffq8555rvwhxw161m9y54z2j5w7d1x1h7jcq6hadx"))))
21739 (build-system pyproject-build-system)
21740 (arguments
21741 (list
21742 #:test-flags
21743 ;; Self tests failed.
21744 #~(list "--ignore=tests/test_future/test_futurize.py"
21745 "-k" (string-join
21746 ;; Self tests failed.
21747 (list "not test_division"
21748 "test_functions_unchanged"
21749 "test_mixed_annotations"
21750 "test_multiple_param_annotations"
21751 "test_print"
21752 "test_range_slice"
21753 ;; Network access is required.
21754 "test_ftp"
21755 "test_main"
21756 "test_moves_urllib_request_http"
21757 "test_urllib_request_http"
21758 ;; Tests failing on Python 3.12
21759 "test_converting_drive_letter"
21760 "test_converting_drive_letter"
21761 "test_converting_when_no_drive_letter"
21762 "test_converting_when_no_drive_letter"
21763 "test_converting_when_no_drive_letter"
21764 "test_converting_when_no_drive_letter"
21765 "test_isinstance_recursion_limit"
21766 "test_roundtrip_pathname2url"
21767 "test_roundtrip_pathname2url"
21768 "test_roundtrip_url2pathname"
21769 "test_roundtrip_url2pathname"
21770 "test_subclass_recursion_limit")
21771 " and not "))))
21772 (native-inputs
21773 (list python-pytest
21774 python-setuptools))
21775 (home-page "https://python-future.org")
21776 (synopsis "Single-source support for Python 3 and 2")
21777 (description
21778 "@code{python-future} is the missing compatibility layer between Python 2
21779and Python 3. It allows you to use a single, clean Python 3.x-compatible
21780codebase to support both Python 2 and Python 3 with minimal overhead.")
21781 (license license:expat)))
21782
21783(define-public python-cysignals
21784 (package
21785 (name "python-cysignals")
21786 (version "1.12.3")
21787 (source
21788 (origin
21789 (method url-fetch)
21790 (uri (pypi-uri "cysignals" version))
21791 (sha256
21792 (base32 "1syixz6xlmy1pjcr03ij7hcvaklgjy4mmwggssrmmnr9pxnn5xw9"))))
21793 (build-system pyproject-build-system)
21794 (native-inputs (list python-meson
21795 python-cython
21796 python-pytest))
21797 (home-page "https://github.com/sagemath/cysignals")
21798 (synopsis "Handling of interrupts and signals for Cython")
21799 (description
21800 "The cysignals package provides mechanisms to handle interrupts (and
21801other signals and errors) in Cython code, using two related approaches,
21802for mixed Cython/Python code or external C libraries and pure Cython code,
21803respectively.")
21804 (license license:lgpl3+)))
21805
21806(define-public python-rope
21807 (package
21808 (name "python-rope")
21809 (version "1.13.0")
21810 (source
21811 (origin
21812 (method url-fetch)
21813 (uri (pypi-uri "rope" version))
21814 (sha256
21815 (base32
21816 "1078mkzivz45my8x2y5gxisr0vba630xj7yxx7anr068xhnpshsi"))))
21817 (build-system pyproject-build-system)
21818 (arguments
21819 (list
21820 #:test-flags
21821 #~(list "-k" "test_version_hash_varies_on_get_file_content")))
21822 (propagated-inputs (list python-pytoolconfig))
21823 (native-inputs
21824 (list python-pytest python-pytest-timeout python-setuptools))
21825 (home-page "https://github.com/python-rope/rope")
21826 (synopsis "Refactoring library for Python")
21827 (description
21828 "Rope is a refactoring library for Python. It facilitates the renaming,
21829moving and extracting of attributes, functions, modules, fields and parameters
21830in Python source code. These refactorings can also be applied to occurrences
21831in strings and comments.")
21832 (license license:lgpl3+)))
21833
21834(define-public python-py3status
21835 (package
21836 (name "python-py3status")
21837 (version "3.62")
21838 (source
21839 (origin
21840 (method git-fetch)
21841 (uri (git-reference
21842 (url "https://github.com/ultrabug/py3status")
21843 (commit version)))
21844 (file-name (git-file-name name version))
21845 (sha256
21846 (base32 "13ggwr35w5isylrg1n7akhycm18r03bxin95hdpcmqg7fvqyfppz"))))
21847 (build-system pyproject-build-system)
21848 (arguments
21849 (list
21850 #:phases
21851 #~(modify-phases %standard-phases
21852 (add-before 'build 'hardcode-file-path
21853 (lambda* (#:key inputs #:allow-other-keys)
21854 (substitute* "py3status/parse_config.py"
21855 (("\\[\"file\", \"-b\"")
21856 (format #f "[~s, \"-b\""
21857 (search-input-file inputs "bin/file")))))))))
21858 (native-inputs (list python-hatchling python-pytest))
21859 (inputs (list file))
21860 (home-page "https://github.com/ultrabug/py3status")
21861 (synopsis "Extensible i3status wrapper written in Python")
21862 (description
21863 "py3status is an i3status wrapper which extends i3status functionality in
21864a modular way, allowing you to extend your panel with your own code,
21865responding to click events and updating clock every second.")
21866 (license license:bsd-3)))
21867
21868(define-public python-greenlet
21869 (package
21870 (name "python-greenlet")
21871 (version "3.1.1")
21872 (source
21873 (origin
21874 (method url-fetch)
21875 (uri (pypi-uri "greenlet" version))
21876 (sha256
21877 (base32 "0rsla5f2vgc6g450fziprjy98vf2fwbz6zjx8x37kpvavdnarqsc"))))
21878 (build-system pyproject-build-system)
21879 (arguments
21880 (list
21881 ;; AssertionError: 'Exception' not found in ''
21882 #:test-flags
21883 #~(list (string-join
21884 (list "--deselect=src/greenlet/tests/test_greenlet.py"
21885 "TestGreenlet"
21886 "test_dealloc_catches_GreenletExit_throws_other")
21887 "::"))
21888 #:phases
21889 #~(modify-phases %standard-phases
21890 (add-before 'check 'build-extensions
21891 (lambda _
21892 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
21893 (native-inputs
21894 (list python-objgraph
21895 python-pytest
21896 python-psutil
21897 python-setuptools
21898 python-wheel))
21899 (home-page "https://greenlet.readthedocs.io/")
21900 (synopsis "Lightweight in-process concurrent programming")
21901 (description
21902 "Greenlet package is a spin-off of Stackless, a version of CPython
21903that supports micro-threads called \"tasklets\". Tasklets run
21904pseudo-concurrently (typically in a single or a few OS-level threads) and
21905are synchronized with data exchanges on \"channels\".")
21906 (license (list license:psfl license:expat))))
21907
21908(define-public python-objgraph
21909 (package
21910 (name "python-objgraph")
21911 (version "3.6.2")
21912 (source
21913 (origin
21914 (method url-fetch)
21915 (uri (pypi-uri "objgraph" version))
21916 (sha256
21917 (base32 "1n0swlq11w36r2p6x7b4y0zz10dgzpdc8qasyk3y68kl1zsg5f80"))))
21918 (build-system pyproject-build-system)
21919 (arguments
21920 (list
21921 #:test-flags
21922 #~(list "tests.py"
21923 ;; AssertionError: [0, 1, 2] not found in [[], [], [], [], [],
21924 ;; [], [], [], [], [], [], [], ...
21925 "-k" "not test_at_addrs")))
21926 (native-inputs
21927 (list graphviz
21928 python-pytest
21929 python-setuptools
21930 python-wheel))
21931 (propagated-inputs
21932 (list python-graphviz))
21933 (home-page "https://mg.pov.lt/objgraph/")
21934 (synopsis "Draw Python object reference graphs with graphviz")
21935 (description
21936 "This package provides tools to draw Python object reference graphs with
21937graphviz.")
21938 (license license:expat)))
21939
21940(define-public python-gevent
21941 (package
21942 (name "python-gevent")
21943 (version "24.11.1")
21944 (source (origin
21945 (method url-fetch)
21946 (uri (pypi-uri "gevent" version))
21947 (sha256
21948 (base32
21949 "1jhs1k49nfhv59c0li6bcpvkr6pzmxkdgfm56gns7r792j8l3lcb"))
21950 (modules '((guix build utils)))
21951 (snippet
21952 '(begin
21953 ;; unbunding libev and c-ares
21954 (delete-file-recursively "deps")
21955 ;; Remove cythonized files.
21956 (with-directory-excursion "src/gevent"
21957 (for-each delete-file
21958 (append (list "resolver/cares.c"
21959 "queue.c"
21960 "local.c"
21961 "libev/corecext.h"
21962 "libev/corecext.c"
21963 "greenlet.c"
21964 "event.c"
21965 "_waiter.c"
21966 "_tracer.c"
21967 "_semaphore.c"
21968 "_imap.c"
21969 "_ident.c"
21970 "_hub_primitives.c"
21971 "_hub_local.c"
21972 "_greenlet_primitives.c"
21973 "_abstract_linkable.c")
21974 (find-files "." "\\.html$"))))))))
21975 (build-system pyproject-build-system)
21976 (arguments
21977 (list
21978 #:test-flags
21979 '(list
21980 ;; These tests relies on networking which is
21981 ;; not available in the build container.
21982 "test__getaddrinfo_import.py"
21983 ;; These tests rely on KeyboardInterrupts which do not
21984 ;; work inside the build container for some reason
21985 ;; (lack of controlling terminal?).
21986 "test__issues461_471.py"
21987 ;; TODO: Patch out the tests that use getprotobyname, etc
21988 ;; instead of disabling all the tests from these files.
21989 "test__resolver_dnspython.py"
21990 ;; This test contains 'test_unlink', which
21991 ;; fails on i686 (see: https://github.com/gevent/gevent/issues/1558).
21992 "test__core_stat.py")
21993 #:phases
21994 #~(modify-phases %standard-phases
21995 (add-before 'patch-source-shebangs 'patch-hard-coded-paths
21996 (lambda _
21997 (substitute* "src/gevent/subprocess.py"
21998 (("/bin/sh") (which "sh")))
21999 (for-each (lambda (file)
22000 (substitute* file
22001 (("/bin/sh") (which "sh"))
22002 (("/bin/true") (which "true"))))
22003 (find-files "src/greentest" "\\.py$"))))
22004 (add-before 'build 'do-not-use-bundled-sources
22005 (lambda _
22006 (setenv "GEVENTSETUP_EMBED" "0")
22007
22008 ;; Prevent building bundled libev.
22009 (substitute* "setup.py"
22010 (("run_make=_BUILDING")
22011 "run_make=False"))))
22012 (add-before 'build 'augment-C_INCLUDE_PATH
22013 (lambda* (#:key inputs #:allow-other-keys)
22014 (let* ((python (dirname (dirname
22015 (search-input-file
22016 inputs "bin/python"))))
22017 (version (python-version python))
22018 (greenlet (string-append
22019 #$(this-package-input "python-greenlet")
22020 "/include/python" version)))
22021 (setenv "C_INCLUDE_PATH"
22022 (string-append greenlet "/:"
22023 (or (getenv "C_INCLUDE_PATH")
22024 ""))))))
22025 (add-before 'check 'pretend-to-be-CI
22026 (lambda _
22027 ;; A few tests are skipped due to network constraints or
22028 ;; get longer timeouts when running in a CI environment.
22029 ;; Piggy-back on that, as we need the same adjustments.
22030 (setenv "TRAVIS" "1")
22031 (setenv "APPVEYOR" "1")))
22032 (add-before 'check 'adjust-tests
22033 (lambda* (#:key test-flags #:allow-other-keys)
22034 (call-with-output-file "skipped_tests.txt"
22035 (lambda (port)
22036 (format port "~a~%" (string-join test-flags "\n"))))))
22037 (replace 'check
22038 (lambda* (#:key tests? #:allow-other-keys)
22039 (when tests?
22040 ;; Use the build daemons configured number of workers.
22041 (setenv "NWORKERS" (number->string (parallel-job-count)))
22042 (invoke "python" "-m" "gevent.tests" "-unone" "--config"
22043 "known_failures.py" "--ignore" "skipped_tests.txt")))))))
22044 (propagated-inputs
22045 (list python-greenlet python-zope-event python-zope-interface))
22046 (native-inputs
22047 (list python-cffi
22048 python-cython
22049 python-dnspython
22050 python-idna
22051 python-objgraph
22052 python-psutil
22053 python-requests
22054 python-setuptools))
22055 (inputs
22056 (list c-ares libev libuv))
22057 (home-page "https://www.gevent.org/")
22058 (synopsis "Coroutine-based network library")
22059 (description
22060 "@code{gevent} is a coroutine-based Python networking library that uses
22061@code{greenlet} to provide a high-level synchronous API on top of the
22062@code{libev} event loop.")
22063 (license license:expat)))
22064
22065(define-public python-fastimport
22066 (package
22067 (name "python-fastimport")
22068 (version "0.9.16")
22069 (source
22070 (origin
22071 (method git-fetch)
22072 (uri (git-reference
22073 (url "https://github.com/jelmer/python-fastimport")
22074 (commit (string-append "v" version))))
22075 (file-name (git-file-name name version))
22076 (sha256
22077 (base32 "1pbnp9ffjs09ngva9qcizpscxl9s47rmd4dhxl62f5iwl6c46798"))))
22078 (build-system pyproject-build-system)
22079 (arguments (list #:test-backend #~'unittest))
22080 (native-inputs (list python-setuptools))
22081 (home-page "https://github.com/jelmer/python-fastimport")
22082 (synopsis "VCS fastimport parser and generator in Python")
22083 (description
22084 "This package provides a parser for and generator of the Git
22085@url{https://www.kernel.org/pub/software/scm/git/docs/git-fast-import.html,fastimport}
22086format.")
22087 (license license:gpl2+)))
22088
22089(define-public python-pika
22090 (package
22091 (name "python-pika")
22092 (version "1.3.2")
22093 (source
22094 (origin
22095 (method git-fetch)
22096 (uri (git-reference
22097 (url "https://github.com/pika/pika")
22098 (commit version)))
22099 (file-name (git-file-name name version))
22100 (sha256
22101 (base32 "0bmp79lds26y2976xrpf53r3acqzpf3wpkprhlh3asqpfv5pwipb"))))
22102 (build-system pyproject-build-system)
22103 (arguments
22104 (list
22105 #:test-flags
22106 ;; XXX: These test most likely require a running RabbitMQ server.
22107 #~(list "--ignore=tests/acceptance/blocking_adapter_test.py")
22108 #:phases
22109 #~(modify-phases %standard-phases
22110 (add-before 'check 'configure-tests
22111 (lambda* (#:key tests? #:allow-other-keys)
22112 (when tests?
22113 (setenv "PYTHONPATH" (getcwd))))))))
22114 (native-inputs (list python-pytest
22115 python-gevent
22116 python-tornado
22117 python-twisted
22118 python-setuptools))
22119 (home-page "https://pika.readthedocs.org")
22120 (synopsis "Pure Python AMQP Client Library")
22121 (description
22122 "Pika is a pure-Python implementation of the AMQP (Advanced Message Queuing
22123Protocol) 0-9-1 protocol that tries to stay fairly independent of the underlying
22124network support library.")
22125 (license license:bsd-3)))
22126
22127(define-public python-pykka
22128 (package
22129 (name "python-pykka")
22130 (version "4.4.2")
22131 (source
22132 (origin
22133 (method git-fetch)
22134 (uri (git-reference
22135 (url "https://github.com/jodal/pykka")
22136 (commit (string-append "v" version))))
22137 (file-name (git-file-name name version))
22138 (sha256
22139 (base32 "15z6x31269l0zbxjv8afgi34smrh5fd3iwbjyh1342msry6msgla"))))
22140 (build-system pyproject-build-system)
22141 (native-inputs (list python-hatchling python-pytest python-pytest-mock))
22142 (home-page "https://pykka.readthedocs.io")
22143 (synopsis "Implementation of the actor model")
22144 (description
22145 "Pykka implements the actor model in Python, which introduces some simple
22146rules to control the sharing of state and cooperation between execution units,
22147and makes it easier to build concurrent applications.")
22148 (license license:asl2.0)))
22149
22150;; WARNING: This package is a dependency of mesa.
22151(define-public python-ply
22152 (package
22153 (name "python-ply")
22154 (version "3.11")
22155 (source
22156 (origin
22157 (method url-fetch)
22158 (uri (pypi-uri "ply" version))
22159 (sha256
22160 (base32 "18qx113g9bi1ac4indd5phma82zcdq601lxncp3vjn43m2mc3iq0"))))
22161 (build-system pyproject-build-system)
22162 (arguments (list #:tests? #f)) ;XXX: not tests in PyPI archive, there are in Git
22163 (native-inputs
22164 (list python-setuptools
22165 python-wheel))
22166 (home-page "http://www.dabeaz.com/ply/")
22167 (synopsis "Python Lex & Yacc")
22168 (description "PLY is a @code{lex}/@code{yacc} implemented purely in Python.
22169It uses LR parsing and does extensive error checking.")
22170 (license license:bsd-3)))
22171
22172(define-public python-kazoo
22173 (package
22174 (name "python-kazoo")
22175 (version "2.10.0")
22176 (source
22177 (origin
22178 (method git-fetch)
22179 (uri (git-reference
22180 (url "https://github.com/python-zk/kazoo")
22181 (commit version)))
22182 (file-name (git-file-name name version))
22183 (sha256
22184 (base32 "1ic1ky4v64jw59in02hqmyxskd98v32msd46pmsp39l7iighjrn2"))))
22185 (build-system pyproject-build-system)
22186 (arguments (list #:tests? #f)) ; XXX: needs zookeeper
22187 (native-inputs (list python-setuptools))
22188 (home-page "https://kazoo.readthedocs.org")
22189 (synopsis "High-level Zookeeper client library")
22190 (description
22191 "Kazoo is a Python client library for the Apache Zookeeper distributed
22192application service. It is designed to be easy to use and to avoid common
22193programming errors.")
22194 (license license:asl2.0)))
22195
22196(define-public python-columnize
22197 (package
22198 (name "python-columnize")
22199 (version "0.3.11")
22200 (source
22201 (origin
22202 (method url-fetch)
22203 (uri (pypi-uri "columnize" version))
22204 (sha256
22205 (base32 "1clb3lfw694crq8m767q0yjaazkplcrbzdr9fr2w39hhndivhcd6"))))
22206 (build-system pyproject-build-system)
22207 (native-inputs (list python-pytest python-setuptools))
22208 (home-page "https://github.com/rocky/pycolumnize")
22209 (synopsis "Format a simple (i.e. not nested) list into aligned columns.")
22210 (description
22211 "This package provides a way to format a simple (i.e. not nested) list
22212into aligned columns.")
22213 (license license:expat)))
22214
22215(define-public python-pysol-cards
22216 (package
22217 (name "python-pysol-cards")
22218 (version "0.24.0")
22219 (source
22220 (origin
22221 (method url-fetch)
22222 (uri (pypi-uri "pysol_cards" version))
22223 (sha256
22224 (base32 "0jsd7mqp0ak8zidg540b9hjncgx8diy9lv85zj6mi88sm0nlk1d9"))))
22225 (build-system pyproject-build-system)
22226 (arguments
22227 (list
22228 #:phases
22229 #~(modify-phases %standard-phases
22230 (replace 'check
22231 (lambda* (#:key test-flags tests? #:allow-other-keys)
22232 (when tests?
22233 (apply invoke
22234 "python"
22235 "-m"
22236 "unittest"
22237 "discover"
22238 "tests"
22239 test-flags)))))))
22240 (native-inputs (list python-setuptools python-wheel))
22241 (home-page "https://github.com/shlomif/pysol_cards")
22242 (synopsis "Deal PySol FC Cards")
22243 (description
22244 "The pysol-cards python modules provide code to generate the initial deals of
22245some PySol games.")
22246 (license license:expat)))
22247
22248(define-public python-freecell-solver
22249 (package
22250 (name "python-freecell-solver")
22251 (version "0.6.0")
22252 (source
22253 (origin
22254 (method url-fetch)
22255 (uri (pypi-uri "freecell_solver" version))
22256 (sha256
22257 (base32 "0cq77dmq21laqk8fhl61m33lbckymzk312r263x2mv93mccf8jrm"))))
22258 (build-system pyproject-build-system)
22259 (propagated-inputs (list python-cffi))
22260 (native-inputs (list python-pytest python-setuptools))
22261 (home-page "https://pypi.org/project/freecell-solver/")
22262 (synopsis "Freecell Solver bindings")
22263 (description
22264 "This package provides Python bindings for the freecell-solver
22265package. Freecell Solver is a program that automatically solves layouts of
22266Freecell and similar variants of Card Solitaire such as Eight Off, Forecell,
22267and Seahaven Towers, as well as Simple Simon boards.")
22268 (license license:expat)))
22269
22270(define-public python-inflection
22271 (package
22272 (name "python-inflection")
22273 (version "0.5.1")
22274 (source
22275 (origin
22276 (method git-fetch)
22277 (uri (git-reference
22278 (url "https://github.com/jpvanhal/inflection")
22279 (commit version)))
22280 (file-name (git-file-name name version))
22281 (sha256
22282 (base32 "0mvs6wgpi963k7mqrwzdkh32m29zcm772q0fy7pwszlcsh3l50kg"))))
22283 (build-system pyproject-build-system)
22284 (native-inputs (list python-pytest python-setuptools))
22285 (home-page "https://github.com/jpvanhal/inflection")
22286 (synopsis "Python string transformation library")
22287 (description
22288 "Inflection is a string transformation library. It singularizes
22289and pluralizes English words, and transforms strings from CamelCase to
22290underscored string.")
22291 (license license:expat)))
22292
22293(define-public python-krb5
22294 (package
22295 (name "python-krb5")
22296 (version "0.5.1")
22297 (source
22298 (origin
22299 (method url-fetch)
22300 (uri (pypi-uri "krb5" version))
22301 (sha256
22302 (base32 "1jivws8dsscsmyqngbc71r4qw8qmn98pqmhylz01r5dd1ljfw9bi"))))
22303 (build-system pyproject-build-system)
22304 (inputs (list mit-krb5))
22305 (native-inputs (list python-cython python-k5test python-pytest
22306 python-setuptools python-wheel))
22307 (home-page "https://github.com/jborean93/pykrb5")
22308 (synopsis "Kerberos API bindings for Python")
22309 (description "This library provides Python functions that wraps the
22310Kerberos 5 C API.")
22311 (license license:expat)))
22312
22313(define-public python-pylev
22314 (package
22315 (name "python-pylev")
22316 (version "1.4.0")
22317 (source
22318 (origin
22319 (method git-fetch)
22320 (uri (git-reference
22321 (url "https://github.com/toastdriven/pylev")
22322 (commit (string-append "v" version))))
22323 (file-name (git-file-name name version))
22324 (sha256
22325 (base32 "0fgxjdnvnvavnxmxxd0fl5jyr2f31g3a26bwyxcpy56mgpd095c1"))))
22326 (build-system pyproject-build-system)
22327 (arguments
22328 (list
22329 #:test-backend #~'custom
22330 #:test-flags #~(list "tests.py")))
22331 (native-inputs (list python-setuptools))
22332 (home-page "https://github.com/toastdriven/pylev")
22333 (synopsis "Levenshtein distance implementation in Python")
22334 (description
22335 "Pure Python Levenshtein implementation, based off the Wikipedia code
22336samples at @url{http://en.wikipedia.org/wiki/Levenshtein_distance}.")
22337 (license license:bsd-3)))
22338
22339(define-public python-cleo
22340 (package
22341 (name "python-cleo")
22342 (version "2.1.0")
22343 (source (origin
22344 (method url-fetch)
22345 (uri (pypi-uri "cleo" version))
22346 (sha256
22347 (base32
22348 "08ym7xaalxzka3k9wp7i05n6j9xmmjs1y02ilrz0lrhkbl5qhb0b"))))
22349 (build-system pyproject-build-system)
22350 (native-inputs
22351 (list python-poetry-core
22352 python-mock
22353 python-pytest-mock
22354 python-pytest))
22355 (propagated-inputs
22356 (list python-crashtest python-rapidfuzz))
22357 (home-page "https://github.com/sdispater/cleo")
22358 (synopsis "Command-line arguments library for Python")
22359 (description
22360 "Cleo allows you to create command-line commands with signature in
22361docstring and colored output.")
22362 (license license:expat)))
22363
22364(define-public python-shellingham
22365 (package
22366 (name "python-shellingham")
22367 (version "1.5.4")
22368 (source
22369 (origin
22370 (method url-fetch)
22371 (uri (pypi-uri "shellingham" version))
22372 (sha256
22373 (base32 "1ph46hv920ha9clwxgrllbrphh0ww4v4pjmkbb9mnzj8kmrs1g4d"))))
22374 (build-system pyproject-build-system)
22375 (native-inputs
22376 (list python-pytest python-pytest-mock python-setuptools python-wheel))
22377 (home-page "https://github.com/sarugaku/shellingham")
22378 (synopsis "Tool to detect surrounding shell")
22379 (description
22380 "Shellingham detects what shell the current Python executable is
22381running in.")
22382 (license license:isc)))
22383
22384(define-public python-shshsh
22385 (package
22386 (name "python-shshsh")
22387 (version "1.0.5")
22388 (source
22389 (origin
22390 (method git-fetch)
22391 (uri
22392 (git-reference
22393 (url "https://github.com/zqqqqz2000/shshsh")
22394 (commit
22395 "fd21c8696aebaae04507760c16cb45979291fef5")))
22396 (file-name (git-file-name name version))
22397 (sha256
22398 (base32
22399 "1wzqyj1a6jj6cyv5ymzy834qm2lyq80yy1kfz0q0zayq9gm1cj7f"))))
22400 (build-system pyproject-build-system)
22401 (native-inputs
22402 (list python-poetry-core
22403 python-pytest))
22404 (home-page "https://github.com/zqqqqz2000/shshsh")
22405 (synopsis "Write Shell commands simply and safely within Python")
22406 (description "This package provides a way to write Shell commands from
22407within Python. Python functions can be chained together to process input
22408Bash control characters are escapted so that parameters can be passed
22409without worrying about command injection.")
22410 (license license:expat)))
22411
22412(define-public python-memcached
22413 (package
22414 (name "python-memcached")
22415 (version "1.62")
22416 (source
22417 (origin
22418 (method git-fetch)
22419 (uri (git-reference
22420 (url "https://github.com/linsomniac/python-memcached")
22421 (commit version)))
22422 (file-name (git-file-name name version))
22423 (sha256
22424 (base32 "1chw36v1g4zz32s2qc2ql1hzrd1ys8d4abjdjnjgg8anpx13hjj2"))))
22425 (build-system pyproject-build-system)
22426 (arguments
22427 (list
22428 #:tests? #f ;Requires a connection to a socket.
22429 #:test-backend #~'unittest))
22430 (native-inputs (list python-setuptools))
22431 (home-page "https://github.com/linsomniac/python-memcached")
22432 (synopsis "Pure python memcached client")
22433 (description
22434 "This software is a pure Python interface to the memcached memory cache
22435daemon. It is the client side software which allows storing values in one or
22436more, possibly remote, memcached servers.")
22437 (license license:psfl)))
22438
22439(define-public python-mergedeep
22440 (package
22441 (name "python-mergedeep")
22442 (version "1.3.4")
22443 (source
22444 (origin
22445 (method git-fetch)
22446 (uri (git-reference
22447 (url "https://github.com/clarketm/mergedeep")
22448 (commit (string-append "v" version))))
22449 (file-name (git-file-name name version))
22450 (sha256
22451 (base32 "1msvvdzk33sxzgyvs4fs8dlsrsi7fjj038z83s0yw5h8m8d78469"))))
22452 (build-system pyproject-build-system)
22453 (arguments (list #:test-backend #~'unittest))
22454 (native-inputs (list python-setuptools))
22455 (home-page "https://github.com/clarketm/mergedeep")
22456 (synopsis "Deep merge function for Python")
22457 (description
22458 "This package provides a deep merge function for Python, useful to
22459combine multiple data objects as one.")
22460 (license license:expat)))
22461
22462(define-public python-clikit
22463 (package
22464 (name "python-clikit")
22465 (version "0.6.2")
22466 (source
22467 (origin
22468 (method git-fetch)
22469 (uri (git-reference
22470 (url "https://github.com/sdispater/clikit")
22471 (commit version)))
22472 (file-name (git-file-name name version))
22473 (sha256
22474 (base32 "1l11iriqc61m30fp17yxwkgl5900kiw8x8vw2i93n1jh2lv182y4"))))
22475 (build-system pyproject-build-system)
22476 (arguments
22477 (list
22478 #:phases
22479 #~(modify-phases %standard-phases
22480 (add-after 'unpack 'relax-requirements
22481 (lambda _
22482 (substitute* "pyproject.toml"
22483 (("^crashtest.*")
22484 (format #f "crashtest=~s"
22485 #$(package-version
22486 (this-package-input "python-crashtest"))))))))))
22487 (native-inputs (list python-poetry-core python-pytest python-pytest-mock))
22488 (propagated-inputs (list python-crashtest python-pastel python-pylev))
22489 (home-page "https://github.com/sdispater/clikit")
22490 (synopsis "Group of utilities to build command line interfaces")
22491 (description
22492 "CliKit is a group of utilities to build testable command line
22493interfaces.")
22494 (license license:expat)))
22495
22496(define-public python-cattrs
22497 (package
22498 (name "python-cattrs")
22499 (version "24.1.2")
22500 (source (origin
22501 (method git-fetch) ;for tests
22502 (uri (git-reference
22503 (url "https://github.com/python-attrs/cattrs")
22504 (commit (string-append "v" version))))
22505 (file-name (git-file-name name version))
22506 (sha256
22507 (base32
22508 "0l806xs0insnvnd1c2l6f6bcaa7wgfrpvbbcyhhsvf2xy9mzq8rd"))))
22509 (build-system pyproject-build-system)
22510 (arguments
22511 (list
22512 #:test-flags
22513 '(list "--numprocesses" (number->string (parallel-job-count))
22514 ;; Skip all benchmark tests.
22515 "--ignore=bench/test_attrs_collections.py"
22516 "--ignore=bench/test_attrs_nested.py"
22517 "--ignore=bench/test_attrs_primitives.py"
22518 "--ignore=bench/test_primitives.py"
22519 "-k"
22520 (string-join
22521 ;; XXX: Tests fail with error: AssertionError: assert ...,
22522 ;; check why.
22523 (list "not test_msgspec_json_converter"
22524 "test_structure_simple_from_dict_default"
22525 "test_310_optional_field_roundtrip"
22526 "test_310_union_field_roundtrip"
22527 "test_individual_overrides"
22528 "test_nested_roundtrip"
22529 "test_nested_roundtrip_tuple"
22530 "test_omit_default_roundtrip"
22531 "test_optional_field_roundtrip"
22532 "test_renaming"
22533 ;; 'utf-8' codec can't encode character '\ud800' in
22534 ;; position 0: surrogates not allowed
22535 "test_simple_classes"
22536 ;; This test fails with an assertion error on the build
22537 ;; farm, but not on my laptop.
22538 "test_nodefs_generated_unstructuring_cl"
22539 ;; See https://github.com/python-attrs/cattrs/issues/575
22540 "test_simple_roundtrip"
22541 "test_simple_roundtrip_defaults"
22542 "test_simple_roundtrip_defaults_tuple"
22543 "test_simple_roundtrip_tuple"
22544 "test_simple_roundtrip_with_extra_keys_forbidden"
22545 "test_structure_simple_from_dict_default"
22546 "test_union_field_roundtrip"
22547 "test_unmodified_generated_structuring")
22548 " and not "))
22549 #:phases
22550 #~(modify-phases %standard-phases
22551 (add-after 'unpack 'patch-pyproject
22552 (lambda _
22553 (substitute* "pyproject.toml"
22554 ;; Fix version string
22555 (("dynamic = \\[\"version\"\\]")
22556 (string-append "version = \"" #$version "\"")))))
22557 ;; XXX Our python-hypothesis package is too old.
22558 (add-after 'unpack 'compatibility
22559 (lambda _
22560 (substitute* "tests/typed.py"
22561 (("characters\\(codec=codec\\)")
22562 "characters()")))))))
22563 (native-inputs
22564 (list python-hatchling
22565 python-hatch-vcs
22566 python-hypothesis
22567 python-immutables
22568 python-msgpack
22569 python-msgspec
22570 python-poetry-core
22571 python-pymongo ;for the bson module
22572 python-pytest
22573 python-pytest-benchmark
22574 python-pytest-xdist))
22575 (propagated-inputs
22576 (list python-attrs
22577 python-cbor2
22578 python-orjson
22579 python-pyyaml
22580 python-tomlkit
22581 python-typing-extensions
22582 python-ujson))
22583 (home-page "https://github.com/python-attrs/cattrs")
22584 (synopsis "Python library for structuring and unstructuring data")
22585 (description "@code{cattrs} is an Python library for structuring and
22586unstructuring data. @code{cattrs} works best with @code{attrs} classes,
22587@code{dataclasses} and the usual Python collections, but other kinds of
22588classes can also be supported by manually registering converters.")
22589 (license license:expat)))
22590
22591;; A bare minimal package, mainly to use in tests and reduce closure
22592;; size. Tests are left out in the main package to slim down native-inputs and
22593;; optional propagated-inputs.
22594(define-public python-cattrs-minimal
22595 (package/inherit python-cattrs
22596 (name "python-cattrs-minimal")
22597 (arguments
22598 (substitute-keyword-arguments arguments
22599 ((#:tests? _ #t) #f)))
22600 (native-inputs
22601 (list python-hatchling
22602 python-hatch-vcs))
22603 (propagated-inputs
22604 (list python-attrs
22605 python-typing-extensions))))
22606
22607(define-public python-cachy
22608 (package
22609 (name "python-cachy")
22610 (version "0.3.0")
22611 (source
22612 (origin
22613 (method url-fetch)
22614 (uri (pypi-uri "cachy" version))
22615 (sha256
22616 (base32 "1cb9naly8ampzlky7h74n5wj628l7jkpsh0c0jz0namlrvs82r8q"))))
22617 (build-system pyproject-build-system)
22618 (arguments
22619 (list
22620 #:phases
22621 #~(modify-phases %standard-phases
22622 (replace 'check
22623 (lambda* (#:key tests? #:allow-other-keys)
22624 (when tests?
22625 ;; Make it compatible with python-flexmock 0.12.
22626 (substitute* (find-files "tests" "\\.py$")
22627 (("from flexmock import flexmock, flexmock_teardown")
22628 (string-append "from flexmock import flexmock\n"
22629 "from flexmock._api import flexmock_teardown")))
22630 (invoke "pifpaf" "run" "memcached" "--port" "11211" "--"
22631 "pytest")))))))
22632 (native-inputs
22633 (list memcached
22634 python-fakeredis
22635 python-flexmock
22636 python-pifpaf
22637 python-pytest
22638 python-setuptools
22639 python-wheel))
22640 (propagated-inputs
22641 (list python-memcached
22642 python-msgpack
22643 python-redis))
22644 (home-page "https://github.com/sdispater/cachy")
22645 (synopsis "Simple yet effective caching library")
22646 (description
22647 "Cachy provides a simple yet effective caching library. A simple but
22648powerful API: thread-safety; decorator syntax; support for memcached, redis,
22649database, file, dict stores. Cachy supports python versions 2.7+ and 3.2+.")
22650 (license license:expat)))
22651
22652(define-public python-pyproject-api
22653 (package
22654 (name "python-pyproject-api")
22655 (version "1.10.0")
22656 (source
22657 (origin
22658 (method url-fetch)
22659 (uri (pypi-uri "pyproject_api" version))
22660 (sha256
22661 (base32 "0c5kpg0fpqvvimzxjq2a9kdijk601393wxqwwvz4mp7b5vcg5ij0"))))
22662 (build-system pyproject-build-system)
22663 (native-inputs
22664 (list python-hatch-vcs
22665 python-hatchling
22666 python-pytest
22667 python-pytest-mock
22668 python-setuptools))
22669 (propagated-inputs
22670 (list python-packaging python-tomli))
22671 (home-page "https://pyproject-api.readthedocs.io/latest/")
22672 (synopsis "API to interact with the Python pyproject.toml based projects")
22673 (description
22674 "@code{pyproject-api} aims to abstract away interaction with
22675@code{pyproject.toml} style projects in a flexible way.")
22676 (license license:expat)))
22677
22678(define-public python-lark
22679 (package
22680 (name "python-lark")
22681 (version "1.2.2")
22682 (source
22683 (origin
22684 (method url-fetch)
22685 (uri (pypi-uri "lark" version))
22686 (sha256
22687 (base32 "107d1w24b3ln4zwsw4yvkfhff6bk5n3cpvlgbbqww5ndc80pv06a"))))
22688 (build-system pyproject-build-system)
22689 (native-inputs (list python-pytest python-setuptools python-wheel))
22690 (home-page "https://github.com/lark-parser/lark")
22691 (synopsis "Multi-language parser for Python")
22692 (description
22693 "Lark is a parser built with a focus on ergonomics, performance and
22694resilience. Lark can parse all context-free languages. That means it is
22695capable of parsing almost any programming language out there, and to
22696some degree most natural languages too.")
22697 (license license:expat)))
22698
22699(define-public python-find-libpython
22700 (package
22701 (name "python-find-libpython")
22702 (version "0.4.1")
22703 (source
22704 (origin
22705 (method git-fetch)
22706 (uri (git-reference
22707 (url "https://github.com/ktbarrett/find_libpython")
22708 (commit (string-append "v" version))))
22709 (file-name (git-file-name name version))
22710 (sha256
22711 (base32 "173qxif277vc23kgidwbkxx7z7b7676f8lv5kxy9pd82228m8m79"))))
22712 (build-system pyproject-build-system)
22713 (native-inputs (list python-setuptools python-wheel
22714 ;; tests
22715 python-pytest))
22716 (home-page "https://github.com/ktbarrett/find_libpython")
22717 (synopsis "Find the path to the @code{libpython} dynamic library")
22718 (description
22719 "@code{find_libpython} helps find the path to the
22720@code{libpython} dynamic library for the current Python environment. It is
22721both a script and a Python package.")
22722 (license license:expat)))
22723
22724(define-public python-libcst
22725 (package
22726 (name "python-libcst")
22727 (version "1.6.0")
22728 (source (origin
22729 (method url-fetch)
22730 (uri (pypi-uri "libcst" version))
22731 (sha256
22732 (base32
22733 "1nzhvg52whpmfv8fkrnv7rlrmgc5m43hpyp8ra9kffx47yzcs3p8"))
22734 (snippet
22735 #~(begin (use-modules (guix build utils))
22736 ;; This is mostly to keep the cargo-build-system happy
22737 (with-output-to-file "Cargo.toml"
22738 (lambda ()
22739 (format #t "\
22740[workspace]
22741
22742members = [
22743 \"native\",]")))))))
22744 (build-system cargo-build-system)
22745 (arguments
22746 (list
22747 #:install-source? #false
22748 #:cargo-test-flags
22749 ;; According to .github/workflows/ci.yml
22750 '(list "--manifest-path=native/Cargo.toml"
22751 "--release"
22752 "--no-default-features")
22753 #:imported-modules `(,@%pyproject-build-system-modules
22754 ,@%cargo-build-system-modules)
22755 #:modules `((guix build cargo-build-system)
22756 ((guix build pyproject-build-system) #:prefix py:)
22757 (guix build utils))
22758 #:phases
22759 #~(modify-phases %standard-phases
22760 (add-after 'unpack 'prepare-source
22761 (lambda _
22762 (delete-file "native/Cargo.lock")))
22763 (replace 'build
22764 (assoc-ref py:%standard-phases 'build))
22765 (add-after 'install 'wrap
22766 (lambda _
22767 ;; Collection of python- and pyproject-build-system phases
22768 ;; between 'install and 'check.
22769 (assoc-ref py:%standard-phases 'add-install-to-pythonpath)
22770 (assoc-ref py:%standard-phases 'add-install-to-path)
22771 (assoc-ref py:%standard-phases 'wrap)
22772 (assoc-ref py:%standard-phases 'create-entrypoints)
22773 (assoc-ref py:%standard-phases 'compile-bytecode)))
22774 ;; We are not the only ones who cannot load libcst.native
22775 ;; during the 'check phase
22776 ;; https://github.com/Instagram/LibCST/issues/1176
22777 ;; (add-after 'wrap 'python-check
22778 ;; (lambda args
22779 ;; (apply (assoc-ref py:%standard-phases 'check)
22780 ;; #:test-flags '()
22781 ;; args)))
22782 (replace 'install
22783 (assoc-ref py:%standard-phases 'install)))))
22784 (native-inputs
22785 (list python-minimal-wrapper
22786 python-hypothesmith
22787 python-pytest
22788 python-setuptools
22789 python-setuptools-rust
22790 python-setuptools-scm
22791 python-wheel))
22792 (inputs (cons maturin (cargo-inputs 'python-libcst)))
22793 (propagated-inputs
22794 (list python-pyyaml))
22795 (home-page "https://github.com/Instagram/LibCST")
22796 (synopsis "Concrete Syntax Tree (CST) parser and serializer library for Python")
22797 (description
22798 "LibCST parses Python source code as a CST tree that keeps all
22799formatting details (comments, whitespaces, parentheses, etc). It's useful
22800for building automated refactoring (codemod) applications and linters.
22801LibCST creates a compromise between an Abstract Syntax Tree (AST) and
22802a traditional Concrete Syntax Tree (CST). By carefully reorganizing and
22803naming node types and fields, LibCST creates a lossless CST that looks and
22804feels like an AST.")
22805 (license (list license:expat
22806 ;; Some files unde libcst/_parser/ are under Python Software
22807 ;; Foundation license (see LICENSE file for details)
22808 license:psfl
22809 ;; libcst/_add_slots.py
22810 license:asl2.0))))
22811
22812(define-public python-libcst-minimal
22813 (hidden-package
22814 (package
22815 (inherit python-libcst)
22816 (name "python-libcst-minimal")
22817 (arguments
22818 (substitute-keyword-arguments arguments
22819 ((#:tests? _ #t) #f)))
22820 (native-inputs
22821 (list python-minimal-wrapper
22822 python-setuptools
22823 python-setuptools-rust
22824 python-setuptools-scm
22825 python-wheel)))))
22826
22827(define-public python-lazy-loader
22828 (package
22829 (name "python-lazy-loader")
22830 (version "0.4")
22831 (source (origin
22832 (method url-fetch)
22833 (uri (pypi-uri "lazy_loader" version))
22834 (sha256
22835 (base32
22836 "1lacaz292qxpgw6kxiirkx6sv9c5883nq4ssm3hs94cvb2153is7"))))
22837 (build-system pyproject-build-system)
22838 (native-inputs
22839 (list python-numpy python-pytest python-setuptools))
22840 (propagated-inputs
22841 (list python-flit-core
22842 python-setuptools
22843 python-wheel))
22844 (home-page "https://scientific-python.org/specs/spec-0001/")
22845 (synopsis "Load subpackages and functions on demand")
22846 (description "@code{python-lazy-loader} makes it easy to load subpackages
22847and functions on demand. Its main features are:
22848
22849@itemize
22850@item Allow subpackages to be made visible to users without incurring import
22851costs.
22852@item Allow external libraries to be imported only when used, improving import
22853times.
22854@end itemize")
22855 (license license:bsd-3)))
22856
22857(define-public python-lazy-object-proxy
22858 (package
22859 (name "python-lazy-object-proxy")
22860 (version "1.11.0")
22861 (source
22862 (origin
22863 (method url-fetch)
22864 (uri (pypi-uri "lazy_object_proxy" version))
22865 (sha256
22866 (base32 "174fswfrsqr7yj72f8fyry34qxgagbfw37vzljxbp7schq8l91qq"))))
22867 (build-system pyproject-build-system)
22868 (native-inputs
22869 (list python-pytest
22870 python-pytest-benchmark
22871 python-setuptools
22872 python-setuptools-scm
22873 python-wheel))
22874 (home-page "https://github.com/ionelmc/python-lazy-object-proxy")
22875 (synopsis "Lazy object proxy for Python")
22876 (description
22877 "Lazy object proxy is an object that wraps a callable but defers the call
22878until the object is actually required, and caches the result of said call.")
22879 (license license:bsd-2)))
22880
22881(define-public python-dnspython
22882 (package
22883 (name "python-dnspython")
22884 (version "2.8.0")
22885 (source
22886 (origin
22887 (method url-fetch)
22888 (uri (pypi-uri "dnspython" version))
22889 (sha256
22890 (base32 "03vdy97rh9kxwzyjymlrw235ljmqk4awcij0khcb2b25jrlkq78q"))))
22891 (build-system pyproject-build-system)
22892 (arguments
22893 (list
22894 ;; tests: 1216 passed, 198 skipped, 2 deselected
22895 #:test-flags
22896 #~(list
22897 ;; AssertionError: assert False
22898 "--deselect=tests/test_features.py::test_have"
22899 ;; dns.exception.SyntaxError: protocol not found
22900 "--deselect=tests/test_rdata.py::RdataTestCase::test_misc_good_WKS_text")
22901 #:phases
22902 #~(modify-phases %standard-phases
22903 (add-after 'unpack 'patch-getprotobyname-calls
22904 ;; These calls are problematic in the build environment as there is
22905 ;; no /etc/protocols. This breaks the sanity-check phase of any
22906 ;; package depending on this one.
22907 (lambda _
22908 (substitute* "dns/rdtypes/IN/WKS.py"
22909 (("socket.getprotobyname\\('tcp'\\)")
22910 "6")
22911 (("socket.getprotobyname\\('udp'\\)")
22912 "17")))))))
22913 (native-inputs
22914 (list python-hatchling
22915 python-pytest))
22916 (propagated-inputs
22917 (append
22918 (if (supported-package? python-cryptography)
22919 (list ;; DNSSEC
22920 python-cryptography
22921 ;; DNS over Quic
22922 python-aioquic
22923 ;; DNS over HTTPS
22924 python-h2
22925 python-httpcore
22926 python-httpx)
22927 '())
22928 (list python-idna
22929 python-trio)))
22930 (home-page "https://www.dnspython.org")
22931 (synopsis "DNS toolkit for Python")
22932 (description
22933 "dnspython is a DNS toolkit for Python. It supports almost all record
22934types. It can be used for queries, zone transfers, and dynamic updates.
22935It supports TSIG authenticated messages and EDNS0.")
22936 (license license:expat)))
22937
22938(define-public python-py3dns
22939 (package
22940 (name "python-py3dns")
22941 (version "4.0.2")
22942 (source
22943 (origin
22944 (method url-fetch)
22945 (uri (pypi-uri "py3dns" version))
22946 (sha256
22947 (base32 "0fcac412kh34r3gxvn7dc1srmjii2qs6n3lgyxh3q57cxj02wrcq"))))
22948 (build-system pyproject-build-system)
22949 (arguments
22950 ;; This package wants to read /etc/resolv.conf. We can't patch it without
22951 ;; removing functionality so we don't run tests.
22952 (list #:tests? #f))
22953 (native-inputs (list python-flit-core))
22954 (home-page "https://launchpad.net/py3dns")
22955 (synopsis "Python 3 DNS library")
22956 (description
22957 "This Python 3 module provides a DNS API for looking up DNS entries from
22958within Python 3 modules and applications. This module is a simple,
22959lightweight implementation.")
22960 (license license:psfl)))
22961
22962(define-public python-email-validator
22963 (package
22964 (name "python-email-validator")
22965 (version "2.2.0")
22966 (source
22967 (origin
22968 (method url-fetch)
22969 (uri (pypi-uri "email_validator" version))
22970 (sha256
22971 (base32 "1dw28lv9lpsw2s7dylhih93fn72s8iqyfsp6497p2yk19hs0ysfb"))))
22972 (build-system pyproject-build-system)
22973 (arguments
22974 (list
22975 #:test-flags
22976 ;; dns.resolver.NoResolverConfiguration: cannot open /etc/resolv.conf
22977 #~(list "-k" "not test_caching_dns_resolver")))
22978 (native-inputs
22979 (list python-pytest
22980 python-setuptools
22981 python-wheel))
22982 (propagated-inputs
22983 (list python-dnspython
22984 python-idna))
22985 (home-page "https://github.com/JoshData/python-email-validator")
22986 (synopsis "Email address validation library for Python")
22987 (description
22988 "This library validates email address syntax and deliverability.")
22989 (license license:cc0)))
22990
22991(define-public python-faker
22992 (package
22993 (name "python-faker")
22994 (version "37.4.2")
22995 (source
22996 (origin
22997 (method url-fetch)
22998 (uri (pypi-uri "faker" version))
22999 (sha256
23000 (base32 "02kbql0mgjh98ilz5crxlkrsl9qdqlfa5gmqjn46br9hxax1na4f"))))
23001 (build-system pyproject-build-system)
23002 ;; tests: 2104 passed, 12 skipped, 2 warnings
23003 (native-inputs
23004 (list python-freezegun
23005 python-pytest
23006 python-setuptools
23007 python-validators))
23008 (propagated-inputs
23009 (list python-tzdata))
23010 (home-page "https://github.com/joke2k/faker")
23011 (synopsis "Python package that generates fake data")
23012 (description
23013 "Faker is a Python package that generates fake data such as names,
23014addresses, and phone numbers.")
23015 (license license:expat)))
23016
23017(define-public python-pyaml
23018 (package
23019 (name "python-pyaml")
23020 (version "25.7.0")
23021 (source
23022 (origin
23023 (method url-fetch)
23024 (uri (pypi-uri "pyaml" version))
23025 (sha256
23026 (base32 "16yrflm7iyz82igpzlba16cbvwfwny2fnarf14mvz0b8q57ac4z1"))))
23027 (build-system pyproject-build-system)
23028 (native-inputs
23029 (list python-pytest
23030 python-setuptools))
23031 (propagated-inputs
23032 (list python-pyyaml))
23033 (home-page "https://github.com/mk-fg/pretty-yaml")
23034 (synopsis "YAML pretty-print library for Python")
23035 (description
23036 "pyaml is a PyYAML based python module to produce pretty and readable
23037YAML-serialized data.")
23038 (license license:wtfpl2)))
23039
23040(define-public python-pyyaml-env-tag
23041 (package
23042 (name "python-pyyaml-env-tag")
23043 (version "1.1")
23044 (source
23045 (origin
23046 (method git-fetch)
23047 (uri (git-reference
23048 (url "https://github.com/waylan/pyyaml-env-tag")
23049 (commit version)))
23050 (file-name (git-file-name name version))
23051 (sha256
23052 (base32 "16zkwmnlzzsdlxs9ww3b51mcarni2ykmi0v7752l7j4najxw875n"))))
23053 (build-system pyproject-build-system)
23054 (native-inputs (list python-pytest python-setuptools))
23055 (propagated-inputs (list python-pyyaml))
23056 (home-page "https://github.com/waylan/pyyaml-env-tag")
23057 (synopsis "Custom YAML tag for environment variables")
23058 (description
23059 "This package provides a custom YAML tag for referencing environment
23060variables in YAML files.")
23061 (license license:expat)))
23062
23063(define-public python-prompt-toolkit
23064 (package
23065 (name "python-prompt-toolkit")
23066 (version "3.0.51")
23067 (source
23068 (origin
23069 (method url-fetch)
23070 (uri (pypi-uri "prompt_toolkit" version))
23071 (sha256
23072 (base32 "1valgcf324yy0sf7rrbm2ivc4a65n8gvnj0vdz491z177cp1c6lk"))))
23073 (build-system pyproject-build-system)
23074 (arguments
23075 (list
23076 #:phases
23077 #~(modify-phases %standard-phases
23078 (add-before 'check 'pre-check
23079 (lambda _
23080 ;; HOME is needed for the test
23081 ;; "test_pathcompleter_can_expanduser".
23082 (setenv "HOME" "/tmp"))))))
23083 (native-inputs
23084 (list python-pytest
23085 python-setuptools))
23086 (propagated-inputs
23087 (list python-wcwidth))
23088 (home-page "https://github.com/prompt-toolkit/python-prompt-toolkit")
23089 (synopsis "Library for building command line interfaces in Python")
23090 (description
23091 "Prompt-Toolkit is a library for building interactive command line
23092interfaces in Python. It's like GNU Readline but it also features syntax
23093highlighting while typing, out-of-the-box multi-line input editing, advanced
23094code completion, incremental search, support for Chinese double-width
23095characters, mouse support, and auto suggestions.")
23096 (license license:bsd-3)))
23097
23098(define-public python-proselint
23099 (package
23100 (name "python-proselint")
23101 (version "0.14.0")
23102 (source
23103 (origin
23104 (method url-fetch)
23105 (uri (pypi-uri "proselint" version))
23106 (sha256
23107 (base32 "11hfd207bhsvb0iznlnbr0w7jxihvn3ismpjbmz7c57a5ckn8jb2"))))
23108 (build-system pyproject-build-system)
23109 (arguments
23110 (list
23111 #:phases
23112 #~(modify-phases %standard-phases
23113 (add-after 'unpack 'set-home-directory
23114 (lambda _
23115 (setenv "HOME" "/tmp"))))))
23116 (native-inputs
23117 (list python-poetry-core
23118 python-pytest))
23119 (propagated-inputs
23120 (list python-click))
23121 (home-page "http://proselint.com/")
23122 (synopsis "Linter for prose")
23123 (description "@code{python-proselint} is a linter for English prose, that
23124scans through a file and detects issues.")
23125 (license license:bsd-3)))
23126
23127(define-public python-jedi
23128 (package
23129 (name "python-jedi")
23130 (version "0.19.2")
23131 (source
23132 (origin
23133 (method git-fetch)
23134 (uri (git-reference
23135 (url "https://github.com/davidhalter/jedi")
23136 (commit (string-append "v" version))
23137 (recursive? #true)))
23138 (file-name (git-file-name name version))
23139 (sha256
23140 (base32
23141 "0w8rrw6s4bzr5csds8bhasrmzh9q77zh5dzisjysl8cb5qjx0w6s"))))
23142 (build-system pyproject-build-system)
23143 (arguments
23144 (list
23145 #:phases
23146 '(modify-phases %standard-phases
23147 (add-before 'check 'set-HOME
23148 (lambda _ (setenv "HOME" "/tmp"))))))
23149 (native-inputs
23150 (list python-docopt
23151 python-pytest
23152 python-setuptools
23153 python-wheel))
23154 (propagated-inputs
23155 (list python-parso))
23156 (home-page "https://github.com/davidhalter/jedi")
23157 (synopsis "Autocompletion and static analysis library for Python")
23158 (description
23159 "Jedi is a static analysis tool for Python that can be used in Integrated
23160Development Environments (@dfn{IDE}s) and text editors. It understands Python
23161on a deeper level than many other static analysis frameworks for Python.
23162
23163Jedi understands docstrings and you can use Jedi autocompletion in your REPL
23164as well.")
23165 (license license:expat)))
23166
23167(define-public ptpython
23168 (package
23169 (name "ptpython")
23170 (version "3.0.20")
23171 (source
23172 (origin
23173 (method git-fetch)
23174 (uri (git-reference
23175 (url "https://github.com/jonathanslenders/ptpython")
23176 (commit version)))
23177 (file-name (git-file-name name version))
23178 (sha256
23179 (base32 "0qbj7d4qkzl8l05kpmm19953lmqk379i17ab8g3sfnmfpsy3ji5m"))))
23180 (build-system pyproject-build-system)
23181 (arguments
23182 (list
23183 ;; XXX: There is a tests/run_tests.py file but all it does is a
23184 ;; sanity check.
23185 #:tests? #f))
23186 (native-inputs (list python-setuptools))
23187 (propagated-inputs
23188 (list python-appdirs python-jedi python-prompt-toolkit python-pygments))
23189 (home-page "https://github.com/jonathanslenders/ptpython")
23190 (synopsis "Python Read-Eval-Print-Loop with nice IDE-like features")
23191 (description
23192 "ptpython is a Python read-eval-print loop with IDE-like features.
23193It supports syntax highlighting, multiline editing, autocompletion, mouse,
23194color schemes, bracketed paste, Vi and Emacs keybindings, Chinese characters
23195etc.")
23196 (license license:bsd-3)))
23197
23198(define-public python-easyprocess
23199 (package
23200 (name "python-easyprocess")
23201 (version "1.1")
23202 (source
23203 (origin
23204 (method git-fetch)
23205 (uri (git-reference
23206 (url "https://github.com/ponty/easyprocess")
23207 (commit version)))
23208 (file-name (git-file-name name version))
23209 (sha256
23210 (base32 "1dysr0z2mijhxl4z86wxf4w94sszdm4i2w3id0a6qwyid6xqjksp"))))
23211 (build-system pyproject-build-system)
23212 (arguments
23213 ;; Tests require pyvirtualdisplay, which requires this package.
23214 (list #:tests? #f))
23215 (native-inputs (list python-setuptools))
23216 (home-page "https://github.com/ponty/easyprocess")
23217 (synopsis "Python subprocess interface")
23218 (description
23219 "@code{easyprocess} is an easy to use Python subprocess interface.")
23220 (license license:bsd-3)))
23221
23222(define-public python-entrypoint2
23223 (package
23224 (name "python-entrypoint2")
23225 (version "0.2.4")
23226 (source
23227 (origin
23228 (method url-fetch)
23229 (uri (pypi-uri "entrypoint2" version))
23230 (sha256
23231 (base32 "1qyxq54r2fbh09ab5sffbxajy8arbk6czxz5lq3ccr9qrypw6w27"))))
23232 (build-system pyproject-build-system)
23233 (native-inputs (list python-easyprocess
23234 python-pytest
23235 python-setuptools
23236 python-wheel))
23237 (home-page "https://github.com/ponty/entrypoint2")
23238 (synopsis "Command-line interface for Python modules")
23239 (description
23240 "@code{entrypoint2} is an easy to use command-line interface for Python
23241 modules based on @code{argparse}. It translates function signature and
23242 documentation to argparse configuration.")
23243 (license license:bsd-3)))
23244
23245(define-public python-pyvirtualdisplay
23246 (package
23247 (name "python-pyvirtualdisplay")
23248 (version "3.0")
23249 (source
23250 (origin
23251 (method url-fetch)
23252 (uri (pypi-uri "PyVirtualDisplay" version))
23253 (sha256
23254 (base32 "0nb1s7nilakrkcm0vq08pz9mh8rzyhjm9jkyn1gp5sxnrv1mnx89"))))
23255 (build-system pyproject-build-system)
23256 (arguments
23257 (list
23258 ;; tests: 27 passed, 8 deselected
23259 #:test-flags
23260 ;; TODO: Add libxcb to python-pillow on the next python-team cycle.
23261 ;; OSError: Pillow was built without XCB support
23262 #~(list #$@(map (lambda (test) (string-append "--deselect="
23263 "tests/"
23264 test))
23265 (list "test_smart.py::test_slowshot"
23266 "test_smart.py::test_slowshot_with"
23267 "test_smart.py::test_slowshot_nocrop"
23268 "test_smart.py::test_slowshot_timeout"
23269 "test_smart.py::test_slowshot_timeout_nocrop"
23270 "test_smart2.py::test_double"
23271 "test_smart_thread.py::test_smart"
23272 "test_examples.py::test_screenshot")))))
23273 (native-inputs
23274 (list python-easyprocess
23275 python-entrypoint2
23276 python-psutil
23277 python-pytest
23278 python-setuptools
23279 python-vncdotool-bootstrap
23280 xmessage
23281 xorg-server-for-tests))
23282 (home-page "https://github.com/ponty/pyvirtualdisplay")
23283 (synopsis "Python wrapper for Xvfb, Xephyr and Xvnc")
23284 (description
23285 "@code{pyvirtualdisplay} is a Python wrapper for Xvfb, Xephyr and Xvnc.")
23286 (license license:bsd-3)))
23287
23288(define-public python-pyserial
23289 (package
23290 (name "python-pyserial")
23291 (version "3.5")
23292 (source
23293 (origin
23294 (method url-fetch)
23295 (uri (pypi-uri "pyserial" version))
23296 (sha256
23297 (base32
23298 "1nyd4m4mnrz8scbfqn4zpq8gnbl4x42w5zz62vcgpzqd2waf0xrw"))))
23299 (build-system pyproject-build-system)
23300 (native-inputs
23301 (list python-pytest
23302 python-setuptools
23303 python-wheel))
23304 (home-page "https://github.com/pyserial/pyserial")
23305 (synopsis "Python Serial Port Bindings")
23306 (description
23307 "@code{pyserial} provide serial port bindings for Python. It supports
23308different byte sizes, stop bits, parity and flow control with RTS/CTS and/or
23309Xon/Xoff. The port is accessed in RAW mode.")
23310 (license license:bsd-3)))
23311
23312(define-public python-pyserial-asyncio
23313 (package
23314 (name "python-pyserial-asyncio")
23315 (version "0.6")
23316 (source
23317 (origin
23318 (method git-fetch)
23319 (uri (git-reference
23320 (url "https://github.com/pyserial/pyserial-asyncio")
23321 (commit (string-append "v" version))))
23322 (file-name (git-file-name name version))
23323 (sha256
23324 (base32 "0c8kzy2a4awsh580qrniwq0vyydlsvicjw79r270sqflxmjlns6n"))))
23325 (build-system pyproject-build-system)
23326 (arguments (list #:test-backend #~'unittest))
23327 (native-inputs (list python-setuptools))
23328 (propagated-inputs (list python-pyserial))
23329 (home-page "https://github.com/pyserial/pyserial-asyncio")
23330 (synopsis "Pyserial asynchronous I/O extension")
23331 (description
23332 "This package extends Pyserial with asynchronous I/O support.")
23333 (license license:bsd-3)))
23334
23335(define-public python-pymemcache
23336 (package
23337 (name "python-pymemcache")
23338 (version "4.0.0")
23339 (source
23340 (origin
23341 (method url-fetch)
23342 (uri (pypi-uri "pymemcache" version))
23343 (sha256
23344 (base32 "157z9blr8pjg9x84jph5hm0z2l6yaq6n421jcf1hzqn1pg8rpgr7"))))
23345 (build-system pyproject-build-system)
23346 (arguments
23347 ;; We don't have the zstd module.
23348 (list
23349 #:test-flags
23350 '(list "--ignore=pymemcache/test/test_compression.py")))
23351 (native-inputs
23352 (list python-faker
23353 python-pytest
23354 python-setuptools
23355 python-wheel))
23356 (home-page "https://github.com/pinterest/pymemcache")
23357 (synopsis "Comprehensive, fast, pure Python memcached client")
23358 (description
23359 "This package provides a comprehensive, fast, pure Python memcached
23360client.")
23361 (license license:asl2.0)))
23362
23363(define-public python-pymodbus
23364 (package
23365 (name "python-pymodbus")
23366 (version "3.8.6")
23367 (source
23368 (origin
23369 (method git-fetch)
23370 (uri (git-reference
23371 (url "https://github.com/riptideio/pymodbus")
23372 (commit (string-append "v" version))))
23373 (file-name (git-file-name name version))
23374 (sha256
23375 (base32 "1sncllh01c6vqq4fh9k3yg9fchmmw661rcp0066l7fis6sp4yw82"))))
23376 (build-system pyproject-build-system)
23377 (arguments
23378 (list
23379 #:test-flags
23380 #~(list "--ignore"
23381 "test/server/test_simulator_api.py"
23382 ;; These tests require the presence of a certificate.
23383 "--ignore-glob"
23384 "test/examples/*"
23385 "--ignore"
23386 "test/client/test_client.py")))
23387 (native-inputs (list python-mock
23388 python-pytest
23389 python-pytest-asyncio
23390 python-pytest-xdist
23391 python-redis
23392 python-setuptools
23393 python-sqlalchemy
23394 python-tornado
23395 python-twisted
23396 python-wheel))
23397 (propagated-inputs (list python-pyserial
23398 python-six
23399 ;; For the REPL.
23400 python-aiohttp
23401 python-click
23402 python-prompt-toolkit
23403 python-pygments
23404 python-pyserial-asyncio))
23405 (home-page "https://github.com/riptideio/pymodbus/")
23406 (synopsis "Modbus protocol stack in Python")
23407 (description
23408 "Pymodbus is a full Modbus protocol implementation using
23409 @code{asyncio}, @code{tornado} or @code{twisted} for its asynchronous
23410 communications core. It includes the following @emph{client} features:
23411 @itemize
23412 @item full read/write protocol on discrete and register
23413 @item most of the extended protocol (diagnostic/file/pipe/setting/information)
23414 @item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary
23415 @item asynchronous and synchronous versions
23416 @item payload builder/decoder utilities
23417 @item pymodbus read eval print loop (REPL).
23418 @end itemize
23419 It also includes the following @emph{server} features:
23420 @itemize
23421 @item can function as a fully implemented Modbus server
23422 @item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary
23423 @item asynchronous and synchronous versions
23424 @item full server control context (device information, counters, etc)
23425 @item a number of backing contexts (database, redis, sqlite, a slave device).
23426 @end itemize")
23427 (license license:bsd-3)))
23428
23429(define-public python-exodriver
23430 (package
23431 (name "python-exodriver")
23432 (version "2.6.0")
23433 (source (origin
23434 (method git-fetch)
23435 (uri (git-reference
23436 (url "https://github.com/labjack/exodriver")
23437 (commit (string-append "v" version))))
23438 (file-name (git-file-name name version))
23439 (sha256
23440 (base32
23441 "1ikjz8147p14s814yabdq821y691klnr2yg54zgsymcc97kvwp2q"))))
23442 (outputs (list "out"
23443 "doc")) ;544 KiB of examples
23444 (build-system gnu-build-system)
23445 (arguments
23446 (list
23447 #:tests? #f ;no test suite
23448 #:make-flags #~(list (string-append "CC=" #$(cc-for-target))
23449 (string-append "PREFIX=" #$output)
23450 "RUN_LDCONFIG=0"
23451 "LINK_SO=1")
23452 #:phases
23453 #~(modify-phases %standard-phases
23454 (delete 'configure)
23455 (replace 'build
23456 (lambda* (#:key make-flags #:allow-other-keys #:rest args)
23457 (with-directory-excursion "liblabjackusb"
23458 (apply (assoc-ref %standard-phases 'build)
23459 `(,@args #:make-flags ,make-flags)))))
23460 (replace 'install
23461 (lambda* (#:key make-flags #:allow-other-keys #:rest args)
23462 (with-directory-excursion "liblabjackusb"
23463 (apply (assoc-ref %standard-phases 'install)
23464 `(,@args #:make-flags ,make-flags)))
23465 ;; Install udev rules.
23466 (install-file "90-labjack.rules"
23467 (string-append #$output "/lib/udev/rules.d"))
23468 ;; Install examples.
23469 (let ((doc (string-append #$output:doc "/share/doc/" #$name)))
23470 (mkdir-p doc)
23471 (copy-recursively "examples"
23472 (string-append doc "/examples"))))))))
23473 (inputs (list libusb))
23474 (home-page "https://github.com/labjack/exodriver")
23475 (synopsis "USB driver for LabJack data acquisition instruments")
23476 (description "This package provides @code{liblabjackusb}, a USB library for low-level
23477communication with the U3, U6, UE9, Digit, T4 and T7 LabJack data acquisition
23478instruments. A udev rule is also included to allow unprivileged users to
23479communicate with the instruments via USB.")
23480 (license license:expat))) ;see README
23481
23482(define-public python-labjack
23483 (package
23484 (name "python-labjack")
23485 (version "2.1.0")
23486 (source (origin
23487 (method url-fetch)
23488 (uri (pypi-uri "LabJackPython" version))
23489 (sha256
23490 (base32
23491 "0q516y0gzxlk298whiaw0qdi4jcmx7l5y3mp5g5lj68nrvhqzyy4"))))
23492 (build-system pyproject-build-system)
23493 (arguments
23494 (list
23495 #:tests? #f ;no test suite
23496 #:phases
23497 #~(modify-phases %standard-phases
23498 (add-after 'unpack 'patch-liblabjackusb.so
23499 (lambda* (#:key inputs #:allow-other-keys)
23500 (substitute* (find-files "." "\\.py$")
23501 (("ctypes.CDLL\\(\"liblabjackusb.so\"")
23502 (format #f "ctypes.CDLL(~s"
23503 (search-input-file inputs
23504 "lib/liblabjackusb.so")))))))))
23505 (native-inputs (list python-setuptools))
23506 ;; exodriver is provided as a regular input, as only its shared object is
23507 ;; used, not its Python API.
23508 (inputs (list python-exodriver))
23509 (home-page "https://labjack.com/support/software/examples/ud/labjackpython")
23510 (synopsis "Python library for LabJack U3, U6, UE9 and U12")
23511 (description
23512 "This Python library allows communicating with the U3, U6, UE9 and U12
23513LabJack data acquisition (DAQ) modules.")
23514 (license license:expat))) ;see setup.py
23515
23516(define-public python-kivy-garden
23517 (package
23518 (name "python-kivy-garden")
23519 (version "0.1.5")
23520 (source
23521 (origin
23522 (method git-fetch) ; source was removed from PyPI
23523 (uri (git-reference
23524 (url "https://github.com/kivy-garden/garden")
23525 (commit (string-append "v" version))))
23526 (file-name (git-file-name name version))
23527 (sha256
23528 (base32 "1pvjblaljrcmjkq6hsa89zkh9ggdval58d2lwzd69vlma8y03qy4"))))
23529 (build-system pyproject-build-system)
23530 (arguments
23531 (list
23532 #:tests? #f)) ; no tests in PyPI or Git distributions
23533 (native-inputs
23534 (list python-setuptools
23535 python-wheel))
23536 (propagated-inputs
23537 (list python-requests))
23538 (home-page "https://github.com/kivy-garden/garden")
23539 (synopsis "Garden tool for Kivy flowers")
23540 (description
23541 "This package provides the @command{garden} command to install packages
23542for Kivy, the multitouch application platform.")
23543 (license license:expat)))
23544
23545(define-public python-async-lru
23546 (package
23547 (name "python-async-lru")
23548 (version "2.0.4")
23549 (source
23550 (origin
23551 (method url-fetch)
23552 (uri (pypi-uri "async-lru" version))
23553 (sha256
23554 (base32 "09sn3bc3gc2flijm9k8kn4hmbnlkaddhqahb49izy188yrfrm9dq"))))
23555 (build-system pyproject-build-system)
23556 (native-inputs
23557 (list python-pytest
23558 python-pytest-asyncio
23559 python-pytest-timeout
23560 python-setuptools
23561 python-wheel))
23562 (propagated-inputs
23563 (list python-typing-extensions))
23564 (home-page "https://github.com/aio-libs/async-lru")
23565 (synopsis "Simple LRU cache for asyncio")
23566 (description
23567 "This package is a port of Python's built-in @code{functools.lru_cache}
23568function for @code{asyncio}. To better handle async behaviour, it also
23569ensures multiple concurrent calls will only result in 1 call to the wrapped
23570function, with all awaits receiving the result of that call when it
23571completes.")
23572 (license license:expat)))
23573
23574(define-public python-asyncinject
23575 (package
23576 (name "python-asyncinject")
23577 (version "0.6.1")
23578 (source
23579 (origin
23580 (method git-fetch)
23581 (uri (git-reference
23582 (url "https://github.com/simonw/asyncinject")
23583 (commit version)))
23584 (file-name (git-file-name name version))
23585 (sha256
23586 (base32 "127ahb32x2qqjk17a667adrvrl63ima8khifq6dfm0q3vlfslxnn"))))
23587 (build-system pyproject-build-system)
23588 (native-inputs
23589 (list python-pytest
23590 python-pytest-asyncio
23591 python-setuptools))
23592 (home-page "https://github.com/simonw/asyncinject")
23593 (synopsis
23594 "Run async workflows using pytest-fixtures-style dependency injection")
23595 (description
23596 "This package lets you run asynchronous workflows using
23597pytest-fixtures-style dependency injection.")
23598 (license license:asl2.0)))
23599
23600(define-public python-binaryornot
23601 (package
23602 (name "python-binaryornot")
23603 (version "0.4.4")
23604 (source
23605 (origin
23606 (method url-fetch)
23607 (uri (pypi-uri "binaryornot" version))
23608 (sha256
23609 (base32 "0qc006986rb6bcbmiymwgcl1mns2jphr1j7sr7nk41nlr7gh359m"))))
23610 (build-system pyproject-build-system)
23611 (arguments
23612 (list
23613 #:test-backend #~'unittest
23614 #:test-flags #~(list "discover" "tests")
23615 #:phases
23616 #~(modify-phases %standard-phases
23617 (add-after 'unpack 'patch-tests
23618 (lambda _
23619 ;; TypeError: binary() got an unexpected keyword argument
23620 ;; 'average_size'.
23621 (substitute* "tests/test_check.py"
23622 (("average_size=512") "")))))))
23623 (native-inputs
23624 (list python-hypothesis
23625 python-setuptools))
23626 (propagated-inputs
23627 (list python-chardet))
23628 (home-page "https://github.com/audreyr/binaryornot")
23629 (synopsis "Package to check if a file is binary or text")
23630 (description "Ultra-lightweight pure Python package to check if a file is
23631 binary or text.")
23632 (license license:bsd-3)))
23633
23634(define-public python-bson
23635 (package
23636 (name "python-bson")
23637 (properties '((commit . "4e6b4c206f7204034ef74bff8ae84a95d76d1684")
23638 (revision . "0")))
23639 (version (git-version "0.5.10"
23640 (assoc-ref properties 'revision)
23641 (assoc-ref properties 'commit)))
23642 (source
23643 (origin
23644 (method git-fetch) ;for tests
23645 (uri (git-reference
23646 (url "https://github.com/py-bson/bson")
23647 (commit (assoc-ref properties 'commit))))
23648 (file-name (git-file-name name version))
23649 (sha256
23650 (base32
23651 "015db9gfqcirv3zjscvh5hyfw8cixjsbvfxaqdzji863vrvl5ns8"))))
23652 (build-system pyproject-build-system)
23653 (native-inputs
23654 (list python-pytest
23655 python-setuptools))
23656 (propagated-inputs
23657 (list python-dateutil
23658 python-six))
23659 (home-page "https://github.com/py-bson/bson")
23660 (synopsis "BSON (Binary JSON) codec for Python")
23661 (description "@code{bson} is a Python library implementing a BSON (Binary
23662JSON) codec.")
23663 (license license:asl2.0)))
23664
23665(define-public python-nltk
23666 (package
23667 (name "python-nltk")
23668 (version "3.9.1")
23669 (source
23670 (origin
23671 (method url-fetch)
23672 (uri (pypi-uri "nltk" version))
23673 (sha256
23674 (base32 "0s78gayd45vl1wvpa0a44ydij6ybb7xfar8jz2j8kgg47nyjglc7"))))
23675 (build-system pyproject-build-system)
23676 (arguments
23677 ;; Tests require some extra resources to be downloaded.
23678 ;; TODO Try packaging these resources.
23679 '(#:tests? #f))
23680 (propagated-inputs (list python-click python-joblib python-regex
23681 python-tqdm))
23682 (native-inputs (list python-setuptools python-wheel))
23683 (home-page "https://www.nltk.org/")
23684 (synopsis "Natural Language Toolkit")
23685 (description
23686 "NLTK provides interfaces to over 50 corpora and lexical resources such as
23687WordNet, along with a suite of text processing libraries for classification,
23688tokenization, stemming, tagging, parsing, and semantic reasoning, wrappers for
23689natural language processing libraries.")
23690 (license license:asl2.0)))
23691
23692(define-public python-pymongo
23693 (package
23694 (name "python-pymongo")
23695 (version "4.16.0")
23696 (source
23697 (origin
23698 (method url-fetch)
23699 (uri (pypi-uri "pymongo" version))
23700 (sha256
23701 (base32 "0330bj24xl0yq19p330p28x3i3x2jzbn5zkjz2k5iqpncm841a4b"))))
23702 (build-system pyproject-build-system)
23703 (arguments
23704 (list
23705 ;; tests: 1274 passed, 6231 skipped, 1441 deselected, 2 warnings
23706 #:test-flags
23707 ;; Tests need access to /etc/resolve.conf.
23708 #~(list "--ignore=test/asynchronous/test_srv_polling.py"
23709 "--ignore=test/test_srv_polling.py"
23710 "-k" (string-join
23711 ;; Tests need access to /etc/resolve.conf
23712 (list "not test_connection_timeout_ms_propagates_to_DNS_resolver"
23713 "test_detected_environment_warning"
23714 ;; XXX: Tests fail with assertion is not equal.
23715 "test_test_uri_options_srv-options_SRV_URI_with_custom_srvServiceName"
23716 "test_test_uri_options_srv-options_SRV_URI_with_invalid_type_for_srvMaxHosts"
23717 "test_test_uri_options_srv-options_SRV_URI_with_negative_integer_for_srvMaxHosts"
23718 "test_test_uri_options_srv-options_SRV_URI_with_positive_srvMaxHosts_and_loadBalanced"
23719 "test_test_uri_options_srv-options_SRV_URI_with_srvMaxHosts")
23720 " and not "))))
23721 (native-inputs
23722 (list python-hatch-requirements-txt
23723 python-hatchling
23724 python-pytest
23725 python-pytest-asyncio
23726 python-setuptools))
23727 (propagated-inputs
23728 (list python-certifi
23729 python-dnspython))
23730 (home-page "https://github.com/mongodb/mongo-python-driver")
23731 (synopsis "Python driver for MongoDB")
23732 (description "Python driver for MongoDB.")
23733 (license license:asl2.0)))
23734
23735(define-public python-py-consul
23736 (package
23737 (name "python-py-consul")
23738 (version "1.6.0")
23739 (source
23740 (origin
23741 (method git-fetch)
23742 (uri (git-reference
23743 ;; Fork from https://github.com/cablehead/python-consul
23744 (url "https://github.com/criteo/py-consul")
23745 (commit (string-append "v" version))))
23746 (file-name (git-file-name name version))
23747 (sha256
23748 (base32 "0jx0sx572akir5ks30d1hvxwmy2apc51idm5k73dfp9biyjhbllh"))))
23749 (build-system pyproject-build-system)
23750 (arguments (list #:tests? #f)) ; Tests require docker.
23751 (native-inputs (list python-setuptools))
23752 (propagated-inputs (list python-requests))
23753 (home-page "https://github.com/criteo/py-consul")
23754 (synopsis "Python client for Consul")
23755 (description
23756 "Python client for @url{http://www.consul.io/,Consul}, a tool for service
23757discovery, monitoring and configuration.")
23758 (license license:expat)))
23759
23760(define-public python-schematics
23761 (package
23762 (name "python-schematics")
23763 (version "2.1.1")
23764 (source
23765 (origin
23766 (method git-fetch)
23767 (uri (git-reference
23768 (url "https://github.com/schematics/schematics")
23769 (commit (string-append "v" version))))
23770 (file-name (git-file-name name version))
23771 (sha256
23772 (base32 "0nf14wy422f08zzxx4jv8kbym3asgfpjm7b2p51b8hgqgxqlmjcd"))))
23773 (build-system pyproject-build-system)
23774 (native-inputs
23775 (list python-dateutil python-mock python-pytest python-setuptools))
23776 (home-page "https://github.com/schematics/schematics")
23777 (synopsis "Python Data Structures for Humans")
23778 (description
23779 "Schematics is a Python library to combine types into structures,
23780validate them, and transform the shapes of your data based on simple
23781descriptions.
23782
23783The internals are similar to ORM type systems, but there is no database layer
23784in Schematics. Instead, building a database layer is easily made when
23785Schematics handles everything except for writing the query. Schematics can be
23786used for tasks where having a database involved is unusual.")
23787 (license license:bsd-3)))
23788
23789(define-public python-odfpy
23790 (package
23791 (name "python-odfpy")
23792 (version "1.4.2")
23793 (source
23794 (origin
23795 (method git-fetch)
23796 (uri (git-reference
23797 (url "https://github.com/eea/odfpy")
23798 (commit (string-append "release-" version))))
23799 (file-name (git-file-name name version))
23800 (sha256
23801 (base32 "15y0fvkk8akgx30dxld7mdqhdrrkwr16jy1q0znkzvwcgmpywrf4"))))
23802 (build-system pyproject-build-system)
23803 (native-inputs (list python-pytest python-setuptools))
23804 (propagated-inputs (list python-defusedxml))
23805 (home-page "https://github.com/eea/odfpy")
23806 (synopsis "Python API and tools to manipulate OpenDocument files")
23807 (description
23808 "Collection of libraries and utility programs written in Python to
23809manipulate OpenDocument 1.2 files.")
23810 (license
23811 ;; The software is mainly dual GPL2+ and ASL2.0, but includes a
23812 ;; number of files with other licenses.
23813 (list license:gpl2+ license:asl2.0 license:lgpl2.1+ license:cc-by-sa3.0))))
23814
23815(define-public python-namex
23816 (package
23817 (name "python-namex")
23818 (version "0.0.7")
23819 (source
23820 (origin
23821 (method url-fetch)
23822 (uri (pypi-uri "namex" version))
23823 (sha256
23824 (base32 "16ynrq245c3nywv476izrc4bcacm9gxjzgr67ng91g929ny6bfl4"))))
23825 (build-system pyproject-build-system)
23826 (arguments (list #:tests? #false)) ;there are none
23827 (native-inputs (list python-setuptools python-wheel))
23828 (home-page "https://github.com/fchollet/namex")
23829 (synopsis
23830 "Separate implementation and public API surface of Python packages")
23831 (description
23832 "This package provides a simple utility to separate the
23833implementation of your Python package and its public API surface.")
23834 (license license:asl2.0)))
23835
23836(define-public python-natsort
23837 (package
23838 (name "python-natsort")
23839 (version "8.4.0")
23840 (source
23841 (origin
23842 (method url-fetch)
23843 (uri (pypi-uri "natsort" version))
23844 (sha256
23845 (base32 "10d53q50zn2s8iiszv01nr9r4imimc2dvplkl4ymj1sm1r52qca5"))))
23846 (build-system pyproject-build-system)
23847 (native-inputs
23848 (list glibc-utf8-locales ;; Tests want en_US.UTF-8
23849 python-pytest
23850 python-pytest-mock
23851 python-setuptools))
23852 (propagated-inputs
23853 (list python-fastnumbers
23854 python-pyicu))
23855 (home-page "https://github.com/SethMMorton/natsort")
23856 (synopsis "Natural sorting for python and shell")
23857 (description
23858 "Natsort lets you apply natural sorting on lists instead of
23859lexicographical. If you use the built-in @code{sorted} method in python on a
23860list such as @code{[@code{a20}, @code{a9}, @code{a1}, @code{a4}, @code{a10}]},
23861it would be returned as @code{[@code{a1}, @code{a10}, @code{a20}, @code{a4},
23862@code{a9}]}. Natsort provides a function @code{natsorted} that identifies
23863numbers and sorts them separately from strings. It can also sort version
23864numbers, real numbers, mixed types and more, and comes with a shell command
23865@command{natsort} that exposes this functionality in the command line.")
23866 (license license:expat)))
23867
23868(define-public python-graphql-core
23869 (package
23870 (name "python-graphql-core")
23871 (version "3.2.7")
23872 (source
23873 (origin
23874 (method git-fetch)
23875 (uri (git-reference
23876 (url "https://github.com/graphql-python/graphql-core")
23877 (commit (string-append "v" version))))
23878 (file-name (git-file-name name version))
23879 (sha256
23880 (base32 "1jq23vm7lvy6h7rrhfa9iss50vh5anmk0n8kvdbqgrxnzqak43va"))))
23881 (build-system pyproject-build-system)
23882 (native-inputs
23883 (list python-gevent
23884 python-mock
23885 python-poetry-core
23886 python-pytest
23887 python-pytest-benchmark
23888 python-pytest-mock))
23889 (propagated-inputs
23890 (list python-promise python-six))
23891 (home-page "https://github.com/graphql-python/graphql-core")
23892 (synopsis "GraphQL implementation for Python")
23893 (description
23894 "GraphQL implementation for Python. GraphQL is a data query language and
23895 runtime designed and used to request and deliver data to mobile and web apps.
23896 This library is a port of @url{https://github.com/graphql/graphql-js,graphql-js}
23897 to Python.")
23898 (license license:expat)))
23899
23900(define-public python-graphql-relay
23901 (package
23902 (name "python-graphql-relay")
23903 (properties '((commit . "611c0333eeca53663d9b47f7994098edda81b087")
23904 (revision . "0")))
23905 (version (git-version "3.1.5"
23906 (assoc-ref properties 'revision)
23907 (assoc-ref properties 'commit)))
23908 (source
23909 (origin
23910 (method git-fetch)
23911 (uri (git-reference
23912 (url "https://github.com/graphql-python/graphql-relay-py")
23913 (commit (assoc-ref properties 'commit))))
23914 (file-name (git-file-name name version))
23915 (sha256
23916 (base32 "1bghnmyn6rsqji7j70yhvd6z0s4p71pdrm5144rn95dha3pdxih9"))))
23917 (build-system pyproject-build-system)
23918 (native-inputs
23919 (list python-pytest
23920 python-pytest-asyncio
23921 python-pytest-describe
23922 python-poetry-core))
23923 (propagated-inputs (list python-graphql-core))
23924 (home-page "https://github.com/graphql-python/graphql-relay-py")
23925 (synopsis "Relay implementation for Python")
23926 (description
23927 "This is a library to allow the easy creation of Relay-compliant servers
23928using the GraphQL Python reference implementation of a GraphQL server. It
23929should be noted that the code is a exact port of the original
23930@url{https://github.com/graphql/graphql-relay-js,graphql-relay js
23931implementation} from Facebook.")
23932 (license license:expat)))
23933
23934(define-public python-graphene
23935 (package
23936 (name "python-graphene")
23937 (version "3.4.3")
23938 (source
23939 (origin
23940 (method url-fetch)
23941 (uri (pypi-uri "graphene" version))
23942 (sha256
23943 (base32 "1aha3bnrafxd823q4swdmlvbprfb17v3fga4g3hffpz7ija8cdra"))))
23944 (build-system pyproject-build-system)
23945 (arguments
23946 (list #:tests? #f)) ;XXX: tests fail to load
23947 (native-inputs
23948 (list python-setuptools))
23949 (propagated-inputs
23950 (list python-dateutil
23951 python-graphql-core
23952 python-graphql-relay
23953 python-typing-extensions))
23954 (home-page "https://graphene-python.org/")
23955 (synopsis "GraphQL Framework for Python")
23956 (description
23957 "Graphene is a Python library for building GraphQL schemas/types. A
23958GraphQL schema describes your data model, and provides a GraphQL server with
23959an associated set of resolve methods that know how to fetch data.")
23960 (license license:expat)))
23961
23962(define-public python-rodi
23963 (package
23964 (name "python-rodi")
23965 (version "2.0.8")
23966 (source
23967 (origin
23968 (method git-fetch)
23969 (uri (git-reference
23970 (url "https://github.com/Neoteroi/rodi")
23971 (commit (string-append "v" version))))
23972 (file-name (git-file-name name version))
23973 (sha256
23974 (base32 "0kf98yjllrq7vqcp07r2gmkqcviqglsnai3sdigdsrwrfc0b44yp"))))
23975 (build-system pyproject-build-system)
23976 (native-inputs
23977 (list python-hatchling
23978 python-pytest
23979 python-pytest-asyncio))
23980 (home-page "https://github.com/Neoteroi/rodi")
23981 (synopsis "Dependency injection framework for Python")
23982 (description
23983 "Rodi is a dependency injection framework for Python applications.
23984
23985Its features include
23986
23987@itemize
23988@item Type resolution by signature types annotations.
23989@item Type resolution by class annotations.
23990@item Type resolution by names and aliases.
23991@item Build graph of objects without the need for source code changes.
23992@item Minimum overhead to obtain services, once the objects graph is built.
23993@item Support for singleton, transient, and scoped services.
23994@end itemize")
23995 (license license:expat)))
23996
23997;; XXX: The last time updated in 2015, consider to remove it when nothing is
23998;; depend on it.
23999(define-public python-snowballstemmer
24000 (package
24001 (name "python-snowballstemmer")
24002 (version "2.2.0")
24003 (source
24004 (origin
24005 (method url-fetch)
24006 (uri (pypi-uri "snowballstemmer" version))
24007 (sha256
24008 (base32 "1ccwy75i0f5yi1vy6fyvr1gf43ydhjani45mswm43ls7hpmnvc89"))))
24009 (build-system pyproject-build-system)
24010 (arguments
24011 (list
24012 #:tests? #f)) ; no tests
24013 (native-inputs
24014 (list python-setuptools
24015 python-wheel))
24016 (home-page "https://github.com/shibukawa/snowball_py")
24017 (synopsis "Snowball stemming library collection for Python")
24018 (description
24019 "This package provides 16 word stemmer algorithms generated from Snowball
24020algorithms. It includes the 15 original ones plus the Poerter English
24021stemmer.")
24022 (license license:bsd-3)))
24023
24024(define-public python-setproctitle
24025 (package
24026 (name "python-setproctitle")
24027 (version "1.3.7")
24028 (source
24029 (origin
24030 (method git-fetch)
24031 (uri (git-reference
24032 (url "https://github.com/dvarrazzo/py-setproctitle")
24033 (commit (string-append "version-" version))))
24034 (file-name (git-file-name name version))
24035 (sha256
24036 (base32 "0k51ypmr2p2c55dyl2pq3dclih9jk2zx7dxm8010li4pyfsrvwvm"))))
24037 (build-system pyproject-build-system)
24038 (arguments
24039 (list
24040 #:phases
24041 #~(modify-phases %standard-phases
24042 (add-before 'check 'configure-tests
24043 (lambda* (#:key tests? #:allow-other-keys)
24044 (when tests?
24045 (setenv "PYTHON"
24046 (or (which "python3")
24047 (which "python")))
24048 (setenv "PYCONFIG"
24049 (if (which "python3-config")
24050 "python3-config --embed"
24051 "python-config"))
24052 (substitute* "tests/conftest.py"
24053 (("cc") "gcc"))))))))
24054 (native-inputs (list procps python-pytest python-setuptools)) ;required for tests
24055 (home-page "https://github.com/dvarrazzo/py-setproctitle")
24056 (synopsis
24057 "Setproctitle implementation for Python to customize the process title")
24058 (description
24059 "The library allows a process to change its title (as displayed by system
24060tools such as @code{ps} and @code{top}).
24061
24062Changing the title is mostly useful in multi-process systems, for example when a
24063master process is forked: changing the children's title allows identifying the
24064task each process is busy with. The technique is used by PostgreSQL and the
24065OpenSSH Server for example.")
24066 (license license:bsd-3)))
24067
24068(define-public python-pyelftools
24069 (package
24070 (name "python-pyelftools")
24071 (version "0.32")
24072 (source
24073 (origin
24074 (method git-fetch)
24075 (uri (git-reference
24076 (url "https://github.com/eliben/pyelftools")
24077 (commit (string-append "v" version))))
24078 (file-name (git-file-name name version))
24079 (sha256
24080 (base32 "0wx18rj5hcra45ck407vfvg46rs1qcj3qjhfkprf6264zs6z1i77"))
24081 (snippet
24082 #~(begin
24083 ;; Delete bundled readelf and llvm-dwardump executables. Project
24084 ;; also ships quite a lot binary files mainly for tests, check
24085 ;; with:
24086 ;;
24087 ;; find . -type f ! -size 0 -exec grep -IL . "{}" \;
24088 ;;
24089 (delete-file "test/external_tools/readelf")
24090 (delete-file "test/external_tools/llvm-dwarfdump")))))
24091 (build-system pyproject-build-system)
24092 (arguments
24093 (list
24094 #:phases
24095 #~(modify-phases %standard-phases
24096 (replace 'check
24097 (lambda* (#:key tests? #:allow-other-keys)
24098 (when tests?
24099 ;; Run just basic unit and example tests, dwarfdump and
24100 ;; readelf tests are not selected as they are fragile and
24101 ;; arch-specific.
24102 (invoke "python" "test/run_all_unittests.py")
24103 (invoke "python" "test/run_examples_test.py")))))))
24104 (home-page "https://github.com/eliben/pyelftools")
24105 (native-inputs
24106 (list python-setuptools
24107 python-wheel))
24108 (synopsis "Analyze binary and library file information")
24109 (description
24110 "This Python library provides interfaces for parsing and analyzing two
24111binary and library file formats ; the Executable and Linking Format (ELF), and
24112debugging information in the Debugging With Attributed Record
24113Format (DWARF).")
24114 (license license:public-domain)))
24115
24116(define-public python-pefile
24117 (package
24118 (name "python-pefile")
24119 (version "2024.8.26")
24120 (source
24121 (origin
24122 (method git-fetch)
24123 (uri (git-reference
24124 (url "https://github.com/erocarrera/pefile")
24125 (commit (string-append "v" version))))
24126 (file-name (git-file-name name version))
24127 (sha256
24128 (base32 "14bh23b7jipf2pxjivyn2khifal6fmk0pjsddrd3h1gd9n0wl9zd"))
24129 (snippet #~(delete-file "tests/test_data.tar.bz2.enc"))))
24130 (build-system pyproject-build-system)
24131 (arguments
24132 ;; XXX: Taken from tox.ini. Unclear why devs don't supply test data.
24133 ;; It seems clear however that test_data.tar.bz2.enc needs to be
24134 ;; decrypted and unpacked before we can run them.
24135 (list #:test-flags #~(list "--ignore=tests/pefile_test.py")))
24136 (native-inputs (list python-pytest python-setuptools))
24137 (propagated-inputs (list python-future))
24138 (home-page "https://github.com/erocarrera/pefile")
24139 (synopsis "Portable Executable (PE) file parser")
24140 (description
24141 "This python library provides interfaces for parsing and working with
24142Portable Executable (PE) files. It makes to most information from the header,
24143as well as section details and data available.")
24144 (license license:expat)))
24145
24146(define-public python-pyemd
24147 (package
24148 (name "python-pyemd")
24149 (version "1.0.0")
24150 (source (origin
24151 (method url-fetch)
24152 (uri (pypi-uri "pyemd" version))
24153 (sha256
24154 (base32
24155 "1zh0v47lxa33xg04jyvblzl1g4m3k2khx0b3xr6isnyinbkmlaxl"))))
24156 (build-system pyproject-build-system)
24157 (native-inputs
24158 (list python-cython
24159 python-pytest
24160 python-setuptools
24161 python-setuptools-scm))
24162 (propagated-inputs
24163 (list python-numpy-1))
24164 (home-page "https://github.com/wmayner/pyemd")
24165 (synopsis
24166 "Wrapper for Pele and Werman's implementation of the Earth Mover's Distance")
24167 (description
24168 "This package provides a Python wrapper for Ofir Pele and Michael
24169Werman's implementation of the Earth Mover's Distance.")
24170 (license license:expat)))
24171
24172(define-public python-imagesize
24173 (package
24174 (name "python-imagesize")
24175 (version "1.4.1")
24176 (source
24177 (origin
24178 (method url-fetch)
24179 (uri (pypi-uri "imagesize" version))
24180 (sha256
24181 (base32 "0jndjx26p8qibrx997p3kb6vfbqbdxkv74jsrkav177vmx2085b9"))))
24182 (build-system pyproject-build-system)
24183 (arguments (list #:test-backend #~'unittest))
24184 (native-inputs
24185 (list python-setuptools
24186 python-wheel))
24187 (home-page "https://github.com/shibukawa/imagesize_py")
24188 (synopsis "Gets image size of files in various formats in Python")
24189 (description
24190 "This package allows determination of image size from PNG, JPEG,
24191JPEG2000 and GIF files in pure Python.")
24192 (license license:expat)))
24193
24194(define-public python-argcomplete
24195 (package
24196 (name "python-argcomplete")
24197 (version "3.6.2")
24198 (source
24199 (origin
24200 (method url-fetch)
24201 (uri (pypi-uri "argcomplete" version))
24202 (sha256
24203 (base32
24204 "1pvavik22prqdyqid5s40zqab93kp85ash9wf7sg9xb7r0drnlfh"))))
24205 (build-system pyproject-build-system)
24206 (arguments
24207 (list
24208 #:test-backend #~'custom
24209 #:test-flags #~(list "test/test.py" "-v")
24210 #:phases
24211 #~(modify-phases %standard-phases
24212 (add-before 'check 'disable-pip-tests
24213 (lambda _
24214 ;; pip: command not found
24215 (substitute* "test/test.py"
24216 (("def test_console_script")
24217 "def __disable_test_console_script"))))
24218 ;; Disable tests that fail with zsh 5.9.1. See
24219 ;; https://github.com/kislyuk/argcomplete/issues/544
24220 (add-before 'check 'disable-failing-zsh-tests
24221 (lambda _
24222 (substitute* "test/test.py"
24223 (("def (test_python_completion|test_python_filename_completion|test_python_module|test_python_not_executable)" all)
24224 (string-append "@unittest.skip(\"fails with zsh 5.9.1\")\n "
24225 all))))))))
24226 (native-inputs
24227 (list python-hatch-vcs
24228 python-hatchling
24229 python-pexpect
24230 tcsh
24231 fish
24232 bash ;full Bash for 'test_file_completion'
24233 zsh))
24234 (home-page "https://github.com/kislyuk/argcomplete")
24235 (synopsis "Shell tab completion for Python argparse")
24236 (description "argcomplete provides extensible command line tab completion
24237of arguments and options for Python scripts using @code{argparse}. It's
24238particularly useful for programs with many options or sub-parsers that can
24239dynamically suggest completions ; for example, when browsing resources over
24240the network.")
24241 (license license:asl2.0)))
24242
24243(define-public python-csscompressor
24244 (package
24245 (name "python-csscompressor")
24246 (version "0.9.5")
24247 (source
24248 (origin
24249 (method git-fetch)
24250 (uri (git-reference
24251 (url "https://github.com/sprymix/csscompressor")
24252 (commit (string-append "v" version))))
24253 (file-name (git-file-name name version))
24254 (sha256
24255 (base32 "1gzzb474lgs8l539z2vyyvcvm1j7nxxnb5jk79ys63ysbg4jwmz8"))))
24256 (build-system pyproject-build-system)
24257 (native-inputs (list python-pytest python-setuptools))
24258 (home-page "https://github.com/sprymix/csscompressor")
24259 (synopsis "Python port of YUI CSS Compressor")
24260 (description "This package provides a python port of YUI CSS Compressor.")
24261 (license license:bsd-3)))
24262
24263(define-public python-rcssmin
24264 (package
24265 (name "python-rcssmin")
24266 (version "1.2.0")
24267 (source
24268 (origin
24269 (method url-fetch)
24270 (uri (pypi-uri "rcssmin" version))
24271 (sha256
24272 (base32
24273 "0k68sw163vc36nb3nck0kwwal4vb4hi6634rzx7z19ng28j8fdpl"))))
24274 (build-system pyproject-build-system)
24275 (native-inputs (list python-pytest python-setuptools python-wheel))
24276 (home-page "http://opensource.perlig.de/rcssmin/")
24277 (synopsis "CSS Minifier")
24278 (description "The minifier is based on the semantics of the YUI compressor,
24279 which itself is based on the rule list by Isaac Schlueter.")
24280 (license license:asl2.0)))
24281
24282(define-public python-rjsmin
24283 (package
24284 (name "python-rjsmin")
24285 (version "1.2.3")
24286 (source
24287 (origin
24288 (method url-fetch)
24289 (uri (pypi-uri "rjsmin" version))
24290 (sha256
24291 (base32
24292 "1ihcff58vz4xrv1180v46wy5m80z61y7ab8ajyy4zh54jcjbb20k"))
24293 (modules '((guix build utils)))
24294 (snippet
24295 '(for-each delete-file (find-files "bench" "\\.js$")))))
24296 (build-system pyproject-build-system)
24297 (native-inputs
24298 (list python-pytest python-setuptools python-wheel))
24299 (home-page "http://opensource.perlig.de/rjsmin/")
24300 (synopsis "Javascript Minifier")
24301 (description "@code{rJSmin} is a javascript minifier written in Python.
24302The minifier is based on the semantics of jsmin.c by Douglas Crockford. The
24303module is a re-implementation aiming for speed, so it can be used at
24304runtime (rather than during a preprocessing step).")
24305 (license license:asl2.0)))
24306
24307(define-public python-cheetah
24308 (package
24309 (name "python-cheetah")
24310 (version "3.3.1")
24311 (source
24312 (origin
24313 (method url-fetch)
24314 (uri (pypi-uri "CT3" version))
24315 (sha256
24316 (base32 "1j36vampqip18jx0jzngb9rnkhhhl8hqnscg117y0d6cgrgm57qw"))))
24317 (build-system pyproject-build-system)
24318 (arguments
24319 (list
24320 #:test-backend #~'custom
24321 #:test-flags #~(list "Cheetah/Tests/Test.py")
24322 #:phases
24323 #~(modify-phases %standard-phases
24324 (add-after 'unpack 'use-absolute-python
24325 (lambda _
24326 (substitute* "Cheetah/CheetahWrapper.py"
24327 (("#!/usr/bin/env python")
24328 (string-append "#!" (which "python"))))))
24329 (add-before 'check 'configure-tests
24330 (lambda* (#:key tests? #:allow-other-keys)
24331 (substitute* "Cheetah/Tests/ImportHooks.py"
24332 (("os.path.dirname\\(__file__\\)")
24333 (string-append "'" (getcwd) "/Cheetah/Tests'")))
24334 (substitute* "Cheetah/Tests/Test.py"
24335 (("unittest.TextTestRunner\\(\\)")
24336 "unittest.TextTestRunner(verbosity=2)"))
24337 (setenv "TMPDIR" "/tmp"))))))
24338 (native-inputs (list python-setuptools))
24339 (propagated-inputs (list python-markdown)) ;optional
24340 (home-page "https://cheetahtemplate.org/")
24341 (synopsis "Template engine")
24342 (description
24343 "Cheetah is a text-based template engine and Python code generator.
24344
24345 Cheetah can be used as a standalone templating utility or referenced as a
24346library from other Python applications. It has many potential uses, but web
24347developers looking for a viable alternative to ASP, JSP, PHP and PSP are
24348expected to be its principle user group.
24349
24350Features:
24351@enumerate
24352@item Generates HTML, SGML, XML, SQL, Postscript, form email, LaTeX, or any
24353other text-based format.
24354@item Cleanly separates content, graphic design, and program code.
24355@item Blends the power and flexibility of Python with a simple template
24356language that non-programmers can understand.
24357@item Gives template writers full access to any Python data structure, module,
24358function, object, or method in their templates.
24359@item Makes code reuse easy by providing an object-orientated interface to
24360templates that is accessible from Python code or other Cheetah templates. One
24361template can subclass another and selectively reimplement sections of it.
24362@item Provides a simple, yet powerful, caching mechanism that can dramatically
24363improve the performance of a dynamic website.
24364@item Compiles templates into optimized, yet readable, Python code.
24365@end enumerate")
24366 (license (license:x11-style "file://LICENSE"))))
24367
24368(define-public python-chevron
24369 (package
24370 (name "python-chevron")
24371 (version "0.14.0")
24372 (source (origin
24373 (method url-fetch)
24374 (uri (pypi-uri "chevron" version))
24375 (sha256
24376 (base32
24377 "1gqfh00ics2k1sm5g46l3bi8cl5fc5d1cwzh1ylvcxvdvypklqc7"))))
24378 (build-system pyproject-build-system)
24379 (arguments (list #:tests? #false)) ;there are none
24380 (native-inputs (list python-setuptools python-wheel))
24381 (home-page "https://github.com/noahmorrison/chevron")
24382 (synopsis "Mustache templating language renderer")
24383 (description "This package provides a Python implementation of the
24384Mustache templating language renderer.")
24385 (license license:expat)))
24386
24387(define-public python-dulwich
24388 (package
24389 (name "python-dulwich")
24390 (version "1.0.0")
24391 (source
24392 (origin
24393 (method url-fetch)
24394 (uri (list (string-append "https://www.dulwich.io/releases/"
24395 "dulwich-" version ".tar.gz")
24396 (pypi-uri "dulwich" version)))
24397 (sha256
24398 (base32 "1g09iwy5hvjgd8qmkc5cny4qqcng2734ll9mxjzj4psj6m3i01rx"))))
24399 (build-system pyproject-build-system)
24400 (arguments
24401 (list
24402 #:test-flags
24403 ;; DULWICH_SWIFT_CFG is not set.
24404 #~(list "--ignore=tests/contrib/test_swift.py"
24405 "--ignore=tests/contrib/test_swift_smoke.py")
24406 #:phases
24407 #~(modify-phases %standard-phases
24408 (add-after 'unpack 'fix-tests
24409 (lambda* (#:key inputs #:allow-other-keys)
24410 (substitute* '("tests/test_hooks.py"
24411 "tests/porcelain/test_filters.py"
24412 "tests/test_repository.py"
24413 "tests/test_worktree.py")
24414 (("/bin/sh")
24415 (search-input-file inputs "/bin/sh")))))
24416 (add-before 'check 'pre-check
24417 (lambda _ (setenv "PYTHONHASHSEED" "random"))))))
24418 (propagated-inputs
24419 (list python-fastimport python-urllib3))
24420 (native-inputs
24421 (list gnupg
24422 git-minimal/pinned
24423 openssh-sans-x
24424 python-geventhttpclient
24425 python-merge3
24426 python-mypy
24427 python-paramiko
24428 python-pytest
24429 python-requests
24430 python-setuptools
24431 python-setuptools-rust))
24432 (home-page "https://www.dulwich.io/")
24433 (synopsis "Git implementation in Python")
24434 (description "Dulwich is an implementation of the Git file formats and
24435protocols written in pure Python.")
24436 ;; Can be used with either license.
24437 (license (list license:asl2.0 license:gpl2+))))
24438
24439(define-public python-dunamai
24440 (package
24441 (name "python-dunamai")
24442 (version "1.26.0")
24443 (source
24444 (origin
24445 (method url-fetch)
24446 (uri (pypi-uri "dunamai" version))
24447 (sha256
24448 (base32 "0zgrl9rr5qij6zdc6vsc6gs4qin7k2brykh38280bv90m91sr5jk"))))
24449 (build-system pyproject-build-system)
24450 (arguments
24451 (list
24452 #:test-flags
24453 #~(list "-k" "not test__version__from_git__shallow")
24454 #:phases
24455 #~(modify-phases %standard-phases
24456 ;; These steps are taken from NixOS package definition:
24457 ;; nixpkgs/pkgs/development/python-modules/dunamai/default.nix
24458 (add-before 'check 'pre-check
24459 (lambda _
24460 (setenv "PATH" (string-append #$output "/bin:" (getenv "PATH")))
24461 (setenv "HOME" "/tmp")
24462 (invoke "git" "config" "--global" "user.email" "[email protected]")
24463 (invoke "git" "config" "--global" "user.name" "Nobody"))))))
24464 (propagated-inputs
24465 (list python-packaging))
24466 (native-inputs
24467 (list git-minimal/pinned
24468 python-poetry-core
24469 python-pytest))
24470 (home-page "https://github.com/mtkennerly/dunamai")
24471 (synopsis "Dynamic version generation")
24472 (description
24473 "Dunamai is Python library and command line tool for producing dynamic,
24474standards-compliant version strings, derived from tags in your version control
24475system. This facilitates uniquely identifying nightly or per-commit builds in
24476continuous integration and releasing new versions of your software simply by
24477creating a tag.")
24478 (license license:expat)))
24479
24480(define-public python-pbkdf2
24481 (package
24482 (name "python-pbkdf2")
24483 (version "1.3")
24484 (source
24485 (origin
24486 (method url-fetch)
24487 (uri (pypi-uri "pbkdf2" version))
24488 (sha256
24489 (base32 "0yb99rl2mbsaamj571s1mf6vgniqh23v98k4632150hjkwv9fqxc"))))
24490 (build-system pyproject-build-system)
24491 (arguments
24492 (list
24493 #:test-backend #~'custom
24494 #:test-flags #~(list "test/test_pbkdf2.py")))
24495 (native-inputs (list python-setuptools))
24496 (home-page "https://www.dlitz.net/software/python-pbkdf2/")
24497 (synopsis "Password-based key derivation")
24498 (description
24499 "This module implements the password-based key derivation function,
24500PBKDF2, specified in RSA PKCS#5 v2.0.
24501
24502PKCS#5 v2.0 Password-Based Key Derivation is a key derivation function which
24503is part of the RSA Public Key Cryptography Standards series. The provided
24504implementation takes a password or a passphrase and a salt value (and
24505optionally a iteration count, a digest module, and a MAC module) and provides
24506a file-like object from which an arbitrarily-sized key can be read.")
24507 (license license:expat)))
24508
24509(define-public python-qrcode
24510 (package
24511 (name "python-qrcode")
24512 (version "8.2")
24513 (source
24514 (origin
24515 (method url-fetch)
24516 (uri (pypi-uri "qrcode" version))
24517 (sha256
24518 (base32 "0v2h8vs1b80qhkc293w5dzvd439600ffzcznp5m16crb2yjg5hrm"))))
24519 (build-system pyproject-build-system)
24520 (native-inputs
24521 (list python-poetry-core
24522 python-pytest))
24523 (home-page "https://github.com/lincolnloop/python-qrcode")
24524 (synopsis "QR Code image generator")
24525 (description
24526 "This package provides a pure Python QR Code generator module. It uses
24527the Python Imaging Library (PIL) to allow for the generation of QR Codes.
24528
24529In addition this package provides a command line tool to generate QR codes and
24530either write these QR codes to a file or do the output as ascii art at the
24531console.")
24532 (license license:bsd-3)))
24533
24534(define-public python-rst2ansi
24535 (package
24536 (name "python-rst2ansi")
24537 (properties '((commit . "c6f390b45be689a5760060c990e3fe10f502e671")
24538 (revision . "0")))
24539 (version (git-version "0.1.5"
24540 (assoc-ref properties 'revision)
24541 (assoc-ref properties 'commit)))
24542 (source
24543 (origin
24544 (method git-fetch)
24545 (uri (git-reference
24546 (url "https://github.com/Snaipe/python-rst-to-ansi")
24547 (commit (assoc-ref properties 'commit))))
24548 (file-name (git-file-name name version))
24549 (sha256
24550 (base32 "0vsn1jjhm1hx0q5i954lyhny2yvn619am1di03aypfl0wm1mh7qd"))))
24551 (build-system pyproject-build-system)
24552 (arguments
24553 (list
24554 #:tests? #f ; 2 tests fail with additional line characters
24555 #:phases
24556 #~(modify-phases %standard-phases
24557 (replace 'check
24558 (lambda* (#:key tests? #:allow-other-keys)
24559 (when tests?
24560 (invoke "cram" "test" "-v")))))))
24561 (native-inputs (list python-cram python-setuptools))
24562 (propagated-inputs (list python-docutils))
24563 (home-page "https://github.com/Snaipe/python-rst-to-ansi")
24564 (synopsis "Convert RST to ANSI-decorated console output")
24565 (description
24566 "Python module dedicated to rendering RST (reStructuredText) documents to
24567ansi-escaped strings suitable for display in a terminal.")
24568 (license license:expat)))
24569
24570(define-public python-ansi2html
24571 (package
24572 (name "python-ansi2html")
24573 (version "1.9.2")
24574 (source
24575 (origin
24576 (method url-fetch)
24577 (uri (pypi-uri "ansi2html" version))
24578 (sha256
24579 (base32 "19f0ap4w66b35csmx4k97pnb9fkdfnmgliajn0kvhdsxaf3vylrl"))))
24580 (build-system pyproject-build-system)
24581 (native-inputs
24582 (list python-mock
24583 python-pytest
24584 python-setuptools
24585 python-wheel))
24586 (home-page "https://github.com/ralphbean/ansi2html")
24587 (synopsis "Convert ANSI-decorated console output to HTML")
24588 (description
24589 "@command{ansi2html} is a Python library and command line utility for
24590converting text with ANSI color codes to HTML or LaTeX.")
24591 (license license:gpl3+)))
24592
24593(define-public python-easy-ansi
24594 (package
24595 (name "python-easy-ansi")
24596 (version "2.1")
24597 (source
24598 (origin
24599 (method git-fetch)
24600 (uri (git-reference
24601 (url "https://gitlab.com/joeysbytes/easy-ansi")
24602 (commit (string-append "v" version))))
24603 (file-name (git-file-name name version))
24604 (sha256
24605 (base32 "16zk4vyrr3hhb6aijmqchjlz181mgk7mi9zyyjd8i53h9rr00wkx"))))
24606 (build-system pyproject-build-system)
24607 (arguments
24608 (list
24609 #:phases
24610 #~(modify-phases %standard-phases
24611 (add-after 'install 'remove-extra
24612 (lambda* (#:key inputs outputs #:allow-other-keys)
24613 (with-directory-excursion (site-packages inputs outputs)
24614 (delete-file-recursively "tests")
24615 (delete-file "setup.py")))))))
24616 (native-inputs (list python-pytest python-setuptools))
24617 (home-page "https://gitlab.com/joeysbytes/easy-ansi")
24618 (synopsis "Terminal framework API")
24619 (description
24620 "Easy ANSI is a terminal framework API to give you an easy way to use
24621colors, cursor control movements, and line/box drawing. It is not meant as a
24622replacement to more full-featured frameworks (such as curses or urwid), but as
24623a tool to quickly create nice-looking screens in your terminal window. You
24624can even create animations with the cursor controls.")
24625 (license license:expat)))
24626
24627(define-public python-easy-ansi-0.3
24628 (package
24629 (inherit python-easy-ansi)
24630 (name "python-easy-ansi")
24631 (version "0.3")
24632 (source
24633 (origin
24634 (method git-fetch)
24635 (uri (git-reference
24636 (url "https://gitlab.com/joeysbytes/easy-ansi")
24637 (commit (string-append "v" version))))
24638 (file-name (git-file-name name version))
24639 (sha256
24640 (base32 "0albh55ynzs98qy9pln4qaxw5qhhh3lk09jy9bx19gycrp1c3lc3"))))
24641 (arguments '())))
24642
24643(define-public python-pycosat
24644 (package
24645 (name "python-pycosat")
24646 (version "0.6.6")
24647 (source
24648 (origin
24649 (method git-fetch)
24650 (uri (git-reference
24651 (url "https://github.com/ContinuumIO/pycosat")
24652 (commit version)))
24653 (file-name (git-file-name name version))
24654 (sha256
24655 (base32 "1p62d7fqny4ayr218lshrp35g75ljaxlgza9yr2hm44aqggvmqbw"))))
24656 ;; TODO: Unundle picosat. http://fmv.jku.at/picosat/
24657 (build-system pyproject-build-system)
24658 (arguments (list #:test-backend #~'unittest))
24659 (native-inputs (list unzip python-setuptools))
24660 (home-page "https://github.com/ContinuumIO/pycosat")
24661 (synopsis "Bindings to picosat (a SAT solver)")
24662 (description
24663 "This package provides efficient Python bindings to @code{picosat} on the
24664C level. When importing pycosat, the @code{picosat} solver becomes part of
24665the Python process itself. @code{picosat} is a @dfn{Boolean Satisfiability
24666Problem} (SAT) solver.")
24667 (license license:expat)))
24668
24669(define-public python-pypeg2
24670 (package
24671 (name "python-pypeg2")
24672 (version "2.15.2")
24673 (source
24674 (origin
24675 (method url-fetch)
24676 (uri (pypi-uri "pyPEG2" version))
24677 (sha256
24678 (base32 "0v8ziaam2r637v94ra4dbjw6jzxz99gs5x4i585kgag1v204yb9b"))))
24679 (build-system pyproject-build-system)
24680 (native-inputs (list python-pytest python-setuptools))
24681 (propagated-inputs (list python-lxml))
24682 (home-page "https://fdik.org/pyPEG/")
24683 (synopsis "Parsing Expression Grammars in Python")
24684 (description
24685 "PyPEG is an intrinsic parser interpreter framework for Python. It is
24686based on Parsing Expression Grammars, PEG. With pyPEG you can parse many
24687formal languages.")
24688 (license license:gpl2)))
24689
24690(define-public python-pyformlang
24691 (package
24692 (name "python-pyformlang")
24693 (version "1.0.10")
24694 (source
24695 (origin
24696 (method url-fetch)
24697 (uri (pypi-uri "pyformlang" version))
24698 (sha256
24699 (base32 "0szgy4pqfixmswjs37qgma4qa3bsadpp3l1xflrpfi10aa8hh2sp"))))
24700 (build-system pyproject-build-system)
24701 (native-inputs
24702 (list python-pytest
24703 python-setuptools
24704 python-wheel))
24705 (propagated-inputs
24706 (list python-networkx
24707 python-numpy
24708 python-pydot))
24709 (home-page "https://github.com/Aunsiels/pyformlang")
24710 (synopsis "Framework for interacting with formal grammars")
24711 (description
24712 "This package provides a framework for working with formal
24713language grammars. The library was originally developed for educational
24714purposes and therefore implements many textbook algorithms regarding the
24715manipulation and interaction with formal grammars.")
24716 (license license:expat)))
24717
24718(define-public python-incremental
24719 (package
24720 (name "python-incremental")
24721 (version "24.7.2")
24722 (source
24723 (origin
24724 (method url-fetch)
24725 (uri (pypi-uri "incremental" version))
24726 (sha256
24727 (base32
24728 "1jb4skmy8awix345jk2pnar0sxmrf1gvn3kg9xyyivv0xr3iskzv"))))
24729 (build-system pyproject-build-system)
24730 (arguments
24731 ;; Tests require twisted, which needs this package.
24732 (list #:tests? #false
24733 #:build-backend "setuptools.build_meta"))
24734 (native-inputs
24735 (list python-setuptools))
24736 (home-page "https://github.com/hawkowl/incremental")
24737 (synopsis "Library for versioning Python projects")
24738 (description "Incremental is a small library that versions your Python
24739 projects.")
24740 (license license:expat)))
24741
24742(define-public python-invoke
24743 (package
24744 (name "python-invoke")
24745 (version "2.2.1")
24746 (source
24747 (origin
24748 (method url-fetch)
24749 (uri (pypi-uri "invoke" version))
24750 (sha256
24751 (base32 "01z73gmbmf5q3ynr3yfz894rrwr2v9406n94n1wjp4s89adz8nsi"))))
24752 ;; TODO: invoke/vendor contains:
24753 ;; - fluidity -> https://github.com/nsi-iff/fluidity (14y old)
24754 ;; - lexicon -> https://github.com/bitprophet/lexicon (2y old)
24755 ;; - yaml -> https://github.com/yaml/pyyaml (2y old)
24756 (build-system pyproject-build-system)
24757 (arguments
24758 (list
24759 ;; XXX: Requires many dependencies that are not yet in Guix.
24760 #:tests? #f
24761 #:phases
24762 #~(modify-phases %standard-phases
24763 (add-after 'unpack 'fix-bash-path
24764 (lambda _
24765 (let ((bash #$(this-package-input "bash-minimal")))
24766 (substitute* "invoke/config.py"
24767 (("shell = \"/bin/bash\"")
24768 (string-append "shell = \"" bash "/bin/bash\"")))))))))
24769 (native-inputs
24770 (list python-setuptools
24771 python-wheel))
24772 (inputs
24773 (list bash-minimal))
24774 (home-page "https://www.pyinvoke.org/")
24775 (synopsis "Pythonic task execution")
24776 (description
24777 "Invoke is a Python task execution tool and library, drawing inspiration
24778from various sources to arrive at a powerful and clean feature set. It is
24779evolved from the Fabric project, but focuses on local and abstract concerns
24780instead of servers and network commands.")
24781 (license license:bsd-3)))
24782
24783(define-public python-automat
24784 (package
24785 (name "python-automat")
24786 (version "24.8.1")
24787 (source (origin
24788 (method url-fetch)
24789 (uri (pypi-uri "Automat" version))
24790 (sha256
24791 (base32
24792 "123d63k8wg9pfv9j7hr0kd1kw23m0rwdx7irsa55ncpncg7jfhmk"))))
24793 (build-system pyproject-build-system)
24794 (arguments
24795 (list
24796 #:phases
24797 #~(modify-phases %standard-phases
24798 (replace 'check
24799 (lambda* (#:key tests? test-flags #:allow-other-keys)
24800 (with-directory-excursion #$output
24801 (apply invoke "pytest" "-vv" test-flags))))
24802 ;; Remove script, because it depends on python-twisted.
24803 (add-after 'unpack 'remove-entrypoint
24804 (lambda _
24805 (substitute* "pyproject.toml"
24806 (("automat-visualize = \"automat._visualize:tool\"") "")))))))
24807 (native-inputs
24808 (list python-pytest python-setuptools python-setuptools-scm python-wheel))
24809 (propagated-inputs
24810 (list python-graphviz python-typing-extensions))
24811 (home-page "https://github.com/glyph/Automat")
24812 (synopsis "Self-service finite-state machines")
24813 (description "Automat is a library for concise, idiomatic Python
24814 expression of finite-state automata (particularly deterministic finite-state
24815 transducers).")
24816 (license license:expat)))
24817
24818(define-public python-constantly
24819 (package
24820 (name "python-constantly")
24821 (version "23.10.4")
24822 (source
24823 (origin
24824 (method url-fetch)
24825 (uri (pypi-uri "constantly" version))
24826 (sha256
24827 (base32 "1gbw3izhn1gx1rgc61jbfr4dr535fxhynifp7jrhpb726c5bg4ma"))))
24828 (build-system pyproject-build-system)
24829 (arguments
24830 (list #:tests? #f)) ;cycles with python-twisted
24831 (native-inputs
24832 (list python-setuptools
24833 python-versioneer))
24834 (home-page "https://github.com/twisted/constantly")
24835 (synopsis "Symbolic constants in Python")
24836 (description "Constantly is a Python library that provides symbolic
24837 constant support. It includes collections and constants with text, numeric,
24838 and bit flag values.")
24839 (license license:expat)))
24840
24841(define-public python-attrs
24842 (package
24843 (name "python-attrs")
24844 (version "25.3.0")
24845 (source
24846 (origin
24847 (method url-fetch)
24848 (uri (pypi-uri "attrs" version))
24849 (sha256
24850 (base32 "06xgyhxzsc0h3l0pqlkk168f072a9lnl9d415ixp8xmmgzycxmvm"))))
24851 (build-system pyproject-build-system)
24852 (native-inputs
24853 (list python-hatch-fancy-pypi-readme
24854 python-hatch-vcs
24855 python-hatchling
24856 python-hypothesis
24857 python-pytest))
24858 (home-page "https://github.com/python-attrs/attrs/")
24859 (synopsis "Attributes without boilerplate")
24860 (description "@code{attrs} is a Python package with class decorators that
24861 ease the chores of implementing the most common attribute-related object
24862 protocols.")
24863 (license license:expat)))
24864
24865(define-public python-attrs-bootstrap
24866 (package
24867 (inherit python-attrs)
24868 (name "python-attrs-bootstrap")
24869 (native-inputs (list python-hatchling
24870 python-hatch-fancy-pypi-readme
24871 python-hatch-vcs))
24872 (arguments `(#:tests? #f))))
24873
24874(define-public python-astroid
24875 (package
24876 (name "python-astroid")
24877 (version "3.3.11")
24878 (source
24879 (origin
24880 (method git-fetch)
24881 (uri (git-reference
24882 (url "https://github.com/PyCQA/astroid")
24883 (commit (string-append "v" version))))
24884 (file-name (git-file-name name version))
24885 (sha256
24886 (base32 "1x5903kmi47pc87r949lym2cwl0xg885xyy730adxv0g6r083zwn"))))
24887 (build-system pyproject-build-system)
24888 (arguments
24889 ;; UserWarning: pkg_resources is deprecated as an API. See
24890 ;; https://setuptools.pypa.io/en/latest/pkg_resources.html. The
24891 ;; pkg_resources package is slated for removal as early as
24892 ;; 2025-11-30. Refrain from using this package or pin to Setuptools<81.
24893 (list #:test-flags
24894 #~(list "-k" "not test_identify_old_namespace_package_protocol")))
24895 (native-inputs
24896 (list python-mypy-minimal
24897 python-pytest
24898 python-setuptools
24899 python-wheel))
24900 (propagated-inputs
24901 (list python-lazy-object-proxy
24902 python-typing-extensions
24903 python-wrapt))
24904 (home-page "https://github.com/PyCQA/astroid")
24905 (synopsis "Python source code base representation")
24906 (description "@code{python-astroid} provides a common base representation
24907of Python source code for projects such as pychecker, pyreverse, pylint, etc.
24908It provides a compatible representation which comes from the _ast module. It
24909rebuilds the tree generated by the builtin _ast module by recursively walking
24910down the AST and building an extended ast. The new node classes have
24911additional methods and attributes for different usages. They include some
24912support for static inference and local name scopes. Furthermore, astroid
24913builds partial trees by inspecting living objects.")
24914 (license license:lgpl2.1+)))
24915
24916(define-public python-isbnlib
24917 (package
24918 (name "python-isbnlib")
24919 (version "3.10.14")
24920 (source
24921 (origin
24922 (method git-fetch)
24923 (uri (git-reference
24924 (url "https://github.com/xlcnd/isbnlib")
24925 (commit (string-append "v" version))))
24926 (file-name (git-file-name name version))
24927 (sha256
24928 (base32 "07vpq8y0mn16489d1pl4zxgczgl1s2ydli4lci7f73z4zv179akp"))))
24929 (build-system pyproject-build-system)
24930 (arguments
24931 (list
24932 #:test-flags #~(list "-m" "not network")))
24933 (native-inputs (list python-pytest python-setuptools))
24934 (home-page "https://github.com/xlcnd/isbnlib")
24935 (synopsis "Python library to work with ISBN strings")
24936 (description
24937 "@code{python-isbnlib} is a (pure) python library that provides several
24938useful methods and functions to validate, clean, transform, hyphenate and get
24939metadata for ISBN strings. Its origin was as the core of isbntools. This
24940short version, is suitable to be include as a dependency in other projects.")
24941 (license license:lgpl3+)))
24942
24943(define-public python-isoduration
24944 (package
24945 (name "python-isoduration")
24946 (version "20.11.0")
24947 (source
24948 (origin
24949 (method url-fetch)
24950 (uri (pypi-uri "isoduration" version))
24951 (sha256
24952 (base32 "1n8vpa9fckhc5934kp7m83wq81dhkvw987v7mjg2fdbr2car0bxc"))))
24953 (build-system pyproject-build-system)
24954 (arguments '(#:tests? #f)) ;no tests in PyPI archive
24955 (propagated-inputs (list python-arrow))
24956 (native-inputs (list python-setuptools python-wheel))
24957 (home-page "https://github.com/bolsote/isoduration")
24958 (synopsis "Operations with ISO 8601 durations")
24959 (description "ISO 8601 is most commonly known as a way to exchange
24960datetimes in textual format. A lesser known aspect of the standard is the
24961representation of durations. The state of the art of ISO 8601 duration
24962handling in Python is more or less limited to what's offered by isodate. This
24963package attempts to address the shortcomings of @code{isodate}.")
24964 (license license:isc)))
24965
24966(define-public python-isort
24967 (package
24968 (name "python-isort")
24969 (version "6.0.1")
24970 (source
24971 (origin
24972 (method git-fetch) ;no tests in PyPI archive
24973 (uri (git-reference
24974 (url "https://github.com/timothycrosley/isort")
24975 (commit version)))
24976 (file-name (git-file-name name version))
24977 (modules '((guix build utils)))
24978 (snippet '(for-each delete-file (find-files "." "\\.whl$")))
24979 (sha256
24980 (base32 "1fcwv1dlq0d3is9s6scp6vy7yw4l845kk51ihxac8419n8hrpvpq"))))
24981 (build-system pyproject-build-system)
24982 (arguments
24983 (list
24984 #:test-flags
24985 ;; Ignore benchmark and integration to reduce closure size.
24986 #~(list "--ignore=tests/benchmark/"
24987 "--ignore=tests/integration/"
24988 "--ignore=tests/unit/profiles/test_black.py"
24989 "-k" (string-join
24990 (list "not test_gitignore"
24991 "test_isort_supports_shared_profiles_issue_970"
24992 "test_requirements_dir"
24993 "test_requirements_finder"
24994 "test_sort_configurable_sort_issue_1732"
24995 "test_sort_imports_error_handling")
24996 " and not "))))
24997 ;; TODO: Package example plugins separately, available in PyPI:
24998 ;; - example_isort_formatting_plugin
24999 ;; - example_isort_sorting_plugin
25000 ;; - example_shared_isort_profile
25001 (native-inputs
25002 (list python-colorama
25003 python-hatch-vcs
25004 python-hatchling
25005 python-hypothesis
25006 python-pylama
25007 python-pytest))
25008 (home-page "https://github.com/PyCQA/isort")
25009 (synopsis "Python utility/library to sort python imports")
25010 (description
25011 "@code{python-isort} is a python utility/library to sort imports
25012alphabetically, and automatically separated into sections. It provides a
25013command line utility, a python library and plugins for various editors.")
25014 (license license:expat)))
25015
25016(define-public python-configparser
25017 (package
25018 (name "python-configparser")
25019 (version "7.2.0")
25020 (source
25021 (origin
25022 (method url-fetch)
25023 (uri (pypi-uri "configparser" version))
25024 (sha256
25025 (base32 "0w3vichm4igwvh7r560rw58xi4s1yf9x1cyi6syszqqnx65cqadn"))))
25026 (build-system pyproject-build-system)
25027 (native-inputs
25028 (list python-pytest
25029 python-setuptools
25030 python-setuptools-scm
25031 python-wheel))
25032 (home-page "https://github.com/jaraco/configparser/")
25033 (synopsis "Backport of configparser from python 3.5")
25034 (description "@code{python-configparser} is a backport of
25035 @code{configparser} from Python 3.5 so that it can be used directly
25036 in other versions.")
25037 (license license:expat)))
25038
25039(define-public python-mando
25040 (package
25041 (name "python-mando")
25042 (version "0.8.2")
25043 (source
25044 (origin
25045 (method url-fetch)
25046 (uri (pypi-uri "mando" version))
25047 (sha256
25048 (base32 "1ddn4h1fvc9f8z2p8l88jyazxnp0h7rmh711i2hwkipxlbcmk5jk"))))
25049 (build-system pyproject-build-system)
25050 (native-inputs
25051 (list python-pytest python-setuptools))
25052 (home-page "https://mando.readthedocs.org/")
25053 (synopsis "Wrapper around argparse, allowing creation of complete CLI applications")
25054 (description
25055 "This package is a wrapper around argparse, allowing you to write complete CLI
25056applications in seconds while maintaining all the flexibility.")
25057 (license license:expat)))
25058
25059(define-public python-mwclient
25060 (package
25061 (name "python-mwclient")
25062 (version "0.11.0")
25063 (source
25064 (origin
25065 (method git-fetch)
25066 (uri (git-reference
25067 (url "https://github.com/mwclient/mwclient")
25068 (commit (string-append "v" version))))
25069 (file-name (git-file-name name version))
25070 (sha256
25071 (base32 "14kg353vzrwh7zks7zsza4hfb2n5vxprh9hnw4rjsimm8509axda"))))
25072 (build-system pyproject-build-system)
25073 (propagated-inputs
25074 (list python-requests-oauthlib))
25075 (native-inputs
25076 (list python-mock
25077 python-pytest
25078 python-responses
25079 python-setuptools))
25080 (home-page "https://github.com/btongminh/mwclient")
25081 (synopsis "MediaWiki API client")
25082 (description "This package provides a MediaWiki API client.")
25083 (license license:expat)))
25084
25085(define-public python-kneed
25086 (package
25087 (name "python-kneed")
25088 (version "0.8.5")
25089 (source
25090 (origin
25091 (method git-fetch)
25092 (uri (git-reference
25093 (url "https://github.com/arvkevi/kneed")
25094 (commit (string-append "v" version))))
25095 (file-name (git-file-name name version))
25096 (sha256
25097 (base32 "0kcglaql1nqvjv5q62myybznii1n1akln5yacp63rg8xv7l0zad1"))))
25098 (build-system pyproject-build-system)
25099 (arguments
25100 (list
25101 #:test-flags #~(list "--ignore=tests/test_no_matplotlib.py")))
25102 (native-inputs (list python-hatchling python-pytest))
25103 (propagated-inputs (list python-matplotlib python-numpy python-scipy))
25104 (home-page "https://github.com/arvkevi/kneed")
25105 (synopsis "Knee-point detection in Python")
25106 (description
25107 "This package implements the kneedle algorithm. Given a set of x and y
25108values, kneed will return the knee point of the function. The knee point is
25109the point of maximum curvature.")
25110 (license license:bsd-3)))
25111
25112(define-public python-diff-cover
25113 (package
25114 (name "python-diff-cover")
25115 (version "9.7.1")
25116 (source
25117 (origin
25118 (method url-fetch)
25119 (uri (pypi-uri "diff_cover" version))
25120 (sha256
25121 (base32 "0j1m8rfs080zsil516pvr0hy3x24dny4c77ilzfjgp5pcjy7hfx0"))))
25122 (build-system pyproject-build-system)
25123 (arguments
25124 (list
25125 #:test-flags
25126 ;; Dropp check of flake8 in tests.
25127 #~(list "-k" "not test_file_does_not_exist")))
25128 (native-inputs
25129 (list python-pycodestyle
25130 python-poetry-core
25131 python-pyflakes
25132 python-pylint
25133 python-pytest
25134 python-pytest-datadir
25135 python-pytest-mock))
25136 (propagated-inputs
25137 (list python-chardet
25138 python-jinja2
25139 python-pluggy
25140 python-pygments
25141 python-setuptools ; For pkg_resources.
25142 python-tomli))
25143 (home-page "https://github.com/Bachmann1234/diff_cover")
25144 (synopsis "Run coverage and linting reports on diffs")
25145 (description
25146 "Automatically find diff lines that need test coverage. It also finds
25147diff lines that have violations (according to tools such as pycodestyle,
25148pyflakes, flake8, or pylint). This is used as a code quality metric during
25149code reviews.")
25150 (license license:asl2.0)))
25151
25152(define-public python-diff-match-patch
25153 (package
25154 (name "python-diff-match-patch")
25155 (version "20241021")
25156 (source
25157 (origin
25158 (method url-fetch)
25159 (uri (pypi-uri "diff_match_patch" version))
25160 (sha256
25161 (base32
25162 "0wshhdnxvb7l45pjrj1fhrhvh7b6p1l2kvim559q9054kylmgbmy"))))
25163 (build-system pyproject-build-system)
25164 (native-inputs (list python-flit-core python-pytest))
25165 (home-page "https://github.com/diff-match-patch-python/diff-match-patch")
25166 (synopsis "Synchronize plain text")
25167 (description "Diff Match and Patch libraries offer robust algorithms to
25168 perform the operations required for synchronizing plain text.")
25169 (license license:asl2.0)))
25170
25171(define-public python-icdiff
25172 (package
25173 (name "python-icdiff")
25174 (version "2.0.7")
25175 (source (origin
25176 (method git-fetch)
25177 (uri (git-reference
25178 (url "https://github.com/jeffkaufman/icdiff")
25179 (commit (string-append "release-" version))))
25180 (file-name (git-file-name name version))
25181 (sha256
25182 (base32
25183 "0kwgglbnpvsv5qb59yl0pvihr1ca5m8l6cq8hjski5y62g33zv2w"))))
25184 (build-system pyproject-build-system)
25185 (arguments
25186 (list #:tests? #f)) ; there are no test scripts
25187 (native-inputs (list python-setuptools python-wheel))
25188 (home-page "https://www.jefftk.com/icdiff")
25189 (synopsis "Improved colored diff")
25190 (description "This package provides colored diff functions that highlight
25191parts of the lines that were modified.")
25192 (license license:psfl)))
25193
25194(define-public python-dirsync
25195 (package
25196 (name "python-dirsync")
25197 (version "2.2.6")
25198 (source
25199 (origin
25200 (method url-fetch)
25201 (uri (pypi-uri "dirsync" version))
25202 (sha256
25203 (base32
25204 "1g3h0lva0mgmm4i5z62h8jkv9y1mp5xlvl2w2nfa3galbgn5gdak"))))
25205 (build-system pyproject-build-system)
25206 (arguments
25207 ;; No tests in PyPI release and GitHub repository does not have the
25208 ;; latest release tag.
25209 (list #:tests? #f))
25210 (native-inputs (list python-setuptools python-wheel))
25211 (home-page "https://github.com/tkhyn/dirsync")
25212 (synopsis "Advanced directory tree synchronisation tool")
25213 (description
25214 "Dirsync is an advanced directory tree synchronisation tool.")
25215 (license license:expat)))
25216
25217(define-public python-levenshtein
25218 (package
25219 (name "python-levenshtein")
25220 (version "0.27.1")
25221 (source
25222 (origin
25223 (method git-fetch)
25224 (uri (git-reference
25225 (url "https://github.com/rapidfuzz/Levenshtein")
25226 (commit (string-append "v" version))))
25227 (file-name (git-file-name name version))
25228 (sha256
25229 (base32 "1khr1vjmrwakjfdsb22k508h3g8awjp0yb398ca8n1xanwzk4l8h"))))
25230 (build-system pyproject-build-system)
25231 (propagated-inputs (list python-rapidfuzz))
25232 (native-inputs
25233 (list cmake-minimal
25234 python-cython
25235 python-pytest
25236 python-scikit-build-core
25237 python-setuptools
25238 rapidfuzz-cpp))
25239 (home-page "https://github.com/rapidfuzz/Levenshtein")
25240 (synopsis "Fast computation of Levenshtein distance and string similarity")
25241 (description
25242 "The Levenshtein Python C extension module contains functions for fast computation of
25243@enumerate
25244@item Levenshtein (edit) distance, and edit operations
25245@item string similarity
25246@item approximate median strings, and generally string averaging
25247@item string sequence and set similarity
25248@end enumerate
25249It supports both normal and Unicode strings.")
25250 (license license:gpl2+)))
25251
25252(define-public python-factory-boy
25253 (package
25254 (name "python-factory-boy")
25255 (version "3.3.3")
25256 (source
25257 (origin
25258 (method url-fetch)
25259 (uri (pypi-uri "factory_boy" version))
25260 (sha256
25261 (base32 "00rx3v5y5l03vlkq6xqj4r7zbnlrx23h45mlyb3zm38j4v964s46"))))
25262 (build-system pyproject-build-system)
25263 (arguments
25264 ;; Tests are not included in the tarball.
25265 `(#:tests? #f))
25266 (native-inputs (list python-setuptools))
25267 (propagated-inputs (list python-faker))
25268 (home-page "https://github.com/FactoryBoy/factory_boy")
25269 (synopsis "Versatile test fixtures replacement")
25270 (description "Factory_boy is a fixtures replacement based on thoughtbot’s
25271factory_girl. As a fixtures replacement tool, it aims to replace static, hard
25272to maintain fixtures with easy-to-use factories for complex object. Instead
25273of building an exhaustive test setup with every possible combination of corner
25274cases, factory_boy allows you to use objects customized for the current test,
25275while only declaring the test-specific fields.")
25276 (license license:expat)))
25277
25278(define-public python-gtts
25279 (package
25280 (name "python-gtts")
25281 (version "2.5.4")
25282 (source
25283 (origin
25284 (method git-fetch)
25285 (uri (git-reference
25286 (url "https://github.com/pndurette/gTTS")
25287 (commit (string-append "v" version))))
25288 (file-name (git-file-name name version))
25289 (sha256
25290 (base32 "0s1039c94lpijxidiprb8hq8v6z8zqf19xls3xlyy30jq7nx295g"))))
25291 (build-system pyproject-build-system)
25292 (arguments
25293 ;; Disable tests that require internet.
25294 (list #:test-flags '(list "-k" "not net")))
25295 (native-inputs
25296 (list python-pytest python-setuptools python-testfixtures))
25297 (propagated-inputs
25298 (list python-click-8.1 python-requests))
25299 (home-page "https://github.com/pndurette/gTTS")
25300 (synopsis "Google Translate text-to-speech interface")
25301 (description
25302 "Google Text-to-Speech (gTTS) is a Python library and CLI tool to
25303interface with the Google Translate text-to-speech API. It lets you write
25304spoken MP3 data to a file, a file-like object (bytestring) for further audio
25305manipulation, or @code{stdout}.")
25306 (license license:expat)))
25307
25308(define-public python-packaging-legacy
25309 (package
25310 (name "python-packaging-legacy")
25311 (version "23.0.post0")
25312 (source
25313 (origin
25314 (method url-fetch)
25315 (uri (pypi-uri "packaging_legacy" version))
25316 (sha256
25317 (base32 "1nyryxlc7fd4c0jmfp99az1s61vfv5xbi6017wqi4wd7j4ia8x69"))))
25318 (build-system pyproject-build-system)
25319 (propagated-inputs (list python-packaging))
25320 (native-inputs
25321 (list python-pretend
25322 python-pytest
25323 python-setuptools
25324 python-wheel))
25325 (home-page "https://pypi.org/project/packaging-legacy/")
25326 (synopsis "Core utilities for legacy Python packages")
25327 (description "This library provides support for legacy Python Packaging
25328functionality removed from @code{packaging}.")
25329 (license license:asl2.0)))
25330
25331(define-public python-relatorio
25332 (package
25333 (name "python-relatorio")
25334 (version "0.11.1")
25335 (source
25336 (origin
25337 (method url-fetch)
25338 (uri (pypi-uri "relatorio" version))
25339 (sha256
25340 (base32 "0qa8f9xvvc60i41vpf386jqx65379dnn9xpjwp8zaibba5raz83v"))))
25341 (build-system pyproject-build-system)
25342 (native-inputs
25343 (list python-pytest
25344 python-setuptools))
25345 (propagated-inputs
25346 (list python-genshi
25347 python-lxml
25348 python-magic))
25349 (home-page "https://relatorio.tryton.org/")
25350 (synopsis "Templating library able to output ODT and PDF files")
25351 (description
25352 "Relatorio is a templating library which provides a way to easily output
25353ODT, ODS, PNG, SVG and several other kinds of files. Support for more
25354filetypes can be easily added by creating plugins for them.")
25355 (license license:gpl3+)))
25356
25357(define-public python-radon
25358 (package
25359 (name "python-radon")
25360 (version "6.0.1")
25361 (source
25362 (origin
25363 (method git-fetch)
25364 (uri (git-reference
25365 (url "https://github.com/rubik/radon")
25366 (commit (string-append "v" version))))
25367 (file-name (git-file-name name version))
25368 (sha256
25369 (base32 "01n3idnrglgbjgwvvgs7yg9amjda3zs2659sp2zqpllp9gva73y9"))))
25370 (build-system pyproject-build-system)
25371 (arguments
25372 (list
25373 #:phases
25374 #~(modify-phases %standard-phases
25375 (add-after 'unpack 'relax-requirements
25376 (lambda _
25377 (substitute* (list "pyproject.toml" "requirements.txt")
25378 (("(mando.*>=0\\.6),<0\\.8" _ mando-lower-bound)
25379 mando-lower-bound)))))))
25380 (propagated-inputs (list python-colorama python-mando))
25381 (native-inputs (list python-poetry-core python-pytest python-pytest-mock
25382 python-setuptools))
25383 (home-page "https://radon.readthedocs.org/")
25384 (synopsis "Code Metrics in Python")
25385 (description
25386 "Radon is a Python tool which computes various code metrics. Supported
25387metrics are:
25388@itemize @bullet
25389@item raw metrics: SLOC, comment lines, blank lines, &c.
25390@item Cyclomatic Complexity (i.e., McCabe’s Complexity)
25391@item Halstead metrics (all of them)
25392@item the Maintainability Index (a Visual Studio metric)
25393@end itemize")
25394 (license license:expat)))
25395
25396(define-public python-rgbxy
25397 (package
25398 (name "python-rgbxy")
25399 (version "0.5")
25400 (source
25401 (origin
25402 (method url-fetch)
25403 (uri (pypi-uri "rgbxy" version))
25404 (sha256
25405 (base32 "0c3dgm1rf7ih79pgkj7adffn8hlyqh5qah8rbzlq436kz3srk83q"))))
25406 (build-system pyproject-build-system)
25407 (arguments
25408 (list #:tests? #f)) ;no tests in PyPI or Git
25409 (native-inputs
25410 (list python-setuptools))
25411 (home-page "https://github.com/benknight/hue-python-rgb-converter")
25412 (synopsis "RGB conversion tool in Python")
25413 (description
25414 "This package implements functionality of RGB/CIE1931 'xy' gammuts
25415conversion: Gamut A, B, and C.")
25416 (license license:expat)))
25417
25418(define-public python-jsonpointer
25419 (package
25420 (name "python-jsonpointer")
25421 (version "3.0.0")
25422 (source
25423 (origin
25424 (method url-fetch)
25425 (uri (pypi-uri "jsonpointer" version))
25426 (sha256
25427 (base32 "1vsrmwrbix3bnxf71g1zyil0pxkh33hq47xkqdhjslli42gp4b9b"))))
25428 (build-system pyproject-build-system)
25429 (arguments (list #:test-backend #~'unittest))
25430 (native-inputs
25431 (list python-setuptools
25432 python-wheel))
25433 (home-page "https://github.com/stefankoegl/python-json-pointer")
25434 (synopsis "Identify specific nodes in a JSON document")
25435 (description "@code{jsonpointer} allows you to access specific nodes
25436 by path in a JSON document (see RFC 6901).")
25437 (license license:bsd-3)))
25438
25439(define-public python-jsonpatch
25440 (package
25441 (name "python-jsonpatch")
25442 (version "1.33")
25443 (source
25444 (origin
25445 (method git-fetch)
25446 ;; pypi version lacks tests.js
25447 (uri (git-reference
25448 (url "https://github.com/stefankoegl/python-json-patch")
25449 (commit (string-append "v" version))))
25450 (file-name (git-file-name name version))
25451 (sha256
25452 (base32 "0qidj3vrklygsid40y6qgxclssd85hbxnic1av833iy4hbml2w14"))))
25453 (build-system pyproject-build-system)
25454 (arguments
25455 (list #:test-backend #~'custom
25456 #:test-flags #~(list "tests.py")))
25457 (native-inputs
25458 (list python-setuptools))
25459 (propagated-inputs
25460 (list python-jsonpointer))
25461 (home-page "https://github.com/stefankoegl/python-json-patch")
25462 (synopsis "Applying JSON Patches in Python 2.6+ and 3.x")
25463 (description "@code{jsonpatch} is a library and program that allows
25464 applying JSON Patches according to RFC 6902.")
25465 (license license:bsd-3)))
25466
25467(define-public python-rfc3986
25468 (package
25469 (name "python-rfc3986")
25470 (version "2.0.0")
25471 (source
25472 (origin
25473 (method url-fetch)
25474 (uri (pypi-uri "rfc3986" version))
25475 (sha256
25476 (base32 "0716rg74cpmhi9f77ypnwcdsyfjplsgk1rnnmadq5zabpnfwzalp"))))
25477 (build-system pyproject-build-system)
25478 (native-inputs
25479 (list python-pytest python-setuptools))
25480 (home-page "https://rfc3986.readthedocs.io/")
25481 (synopsis "Parse and validate URI references")
25482 (description
25483 "@code{rfc3986} is a Python implementation of RFC@tie{}3986 including
25484validation and authority parsing. This module also supports RFC@tie{}6874
25485which adds support for zone identifiers to IPv6 addresses.")
25486 (license license:asl2.0)))
25487
25488(define-public python-rfc3986-validator
25489 (package
25490 (name "python-rfc3986-validator")
25491 (version "0.1.1")
25492 (source
25493 (origin
25494 (method url-fetch)
25495 (uri (pypi-uri "rfc3986_validator" version))
25496 (sha256
25497 (base32 "0mfh82r37ma5n54n8ibnqvmwr3j3f2ixqfjfmv1rwfqvjbkvsi1x"))))
25498 (build-system pyproject-build-system)
25499 (native-inputs
25500 (list python-pytest
25501 python-rfc3987
25502 python-setuptools))
25503 (home-page "https://github.com/naimetti/rfc3986-validator")
25504 (synopsis "Pure python rfc3986 validator")
25505 (description "This package implements a URI validator according to RFC3986
25506in pure Python.")
25507 (license license:expat)))
25508
25509(define-public python-rfc3987
25510 (package
25511 (name "python-rfc3987")
25512 (version "1.3.8")
25513 (source
25514 (origin
25515 (method url-fetch)
25516 (uri (pypi-uri "rfc3987" version))
25517 (sha256
25518 (base32
25519 "0cx7bhyjaylwnf9armxrkb3r0s37vf0vqf3bhbll9mb0lmbx5i6k"))))
25520 (build-system pyproject-build-system)
25521 (arguments
25522 (list #:test-backend #~'custom
25523 #:test-flags #~(list "-m" "doctest" "rfc3987.py")))
25524 (native-inputs
25525 (list python-setuptools))
25526 ;; Source: <https://codeberg.org/atufi/rfc3987>.
25527 (home-page "https://pypi.org/project/rfc3987/")
25528 (synopsis "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)")
25529 (description "@code{rfc3987} provides routines for parsing and
25530 validation of URIs (see RFC 3986) and IRIs (see RFC 3987).")
25531 (license license:gpl3+)))
25532
25533;; The latest commit contains fixes for building with both python3 and python2.
25534(define-public python-rfc6555
25535 (package
25536 (name "python-rfc6555")
25537 (version "0.1.0")
25538 (source
25539 (origin
25540 (method git-fetch)
25541 (uri (git-reference
25542 (url "https://github.com/sethmlarson/rfc6555")
25543 (commit (string-append "v" version))))
25544 (file-name (git-file-name name version))
25545 (sha256
25546 (base32 "0cynzrs3l6ywmkpcpx9m36604dav64sk3rk1s12hj49qqyx20v1f"))))
25547 (build-system pyproject-build-system)
25548 (arguments
25549 (list
25550 ;; Other tests require network access.
25551 #:test-flags #~(list "tests/test_ipv6.py")))
25552 (native-inputs (list python-pytest python-setuptools))
25553 (home-page "https://pypi.org/project/rfc6555/")
25554 (synopsis "Python implementation of RFC 6555")
25555 (description
25556 "Python implementation of the Happy Eyeballs Algorithm described in RFC
255576555. Provided with a single file and dead-simple API to allow easy vendoring
25558and integration into other projects.")
25559 (license license:asl2.0)))
25560
25561(define-public python-sacn
25562 (package
25563 (name "python-sacn")
25564 (version "1.11.0")
25565 (source
25566 (origin
25567 (method url-fetch)
25568 (uri (pypi-uri "sacn" version))
25569 (sha256
25570 (base32 "1sp0jmrjsd9g62kgi177fw4hi56h21s2p9khia3idmixgz53k2ql"))))
25571 (build-system pyproject-build-system)
25572 (native-inputs (list python-pytest python-setuptools python-wheel))
25573 (home-page "https://github.com/Hundemeier/sacn")
25574 (synopsis "Python library for sending and receiving sACN data")
25575 (description
25576 "This package provides a Python library for sending and receiving
25577 sACN (Streaming Architecture for Control Networks) data, a standard
25578 protocol used for controlling lighting and other devices over
25579 a network.")
25580 (license license:expat)))
25581
25582(define-public python-bagit
25583 (package
25584 (name "python-bagit")
25585 (version "1.9.0")
25586 (source
25587 (origin
25588 (method git-fetch) ; no tests in PyPI
25589 (uri (git-reference
25590 (url "https://github.com/LibraryOfCongress/bagit-python")
25591 (commit (string-append "v" version))))
25592 (file-name (git-file-name name version))
25593 (sha256
25594 (base32
25595 "12qfqha70vhc8pclq0kzv7xk0i44ramnlkphybv7419vdl4aay40"))))
25596 (build-system pyproject-build-system)
25597 (arguments
25598 (list #:test-flags #~(list "test.py")))
25599 (native-inputs
25600 (list python-pytest python-setuptools python-setuptools-scm python-wheel))
25601 (home-page "https://libraryofcongress.github.io/bagit-python/")
25602 (synopsis "Create and validate BagIt packages")
25603 (description "Bagit is a Python library and command line utility for working
25604 with BagIt style packages. BagIt is a minimalist packaging format for digital
25605 preservation.")
25606 (license license:cc0)))
25607
25608(define-public python-prov
25609 (package
25610 (name "python-prov")
25611 (version "2.1.1")
25612 (source
25613 (origin
25614 (method git-fetch)
25615 (uri (git-reference
25616 (url "https://github.com/trungdong/prov")
25617 (commit version)))
25618 (file-name (git-file-name name version))
25619 (sha256
25620 (base32 "14y58x4gqc4lyhgy6iamzxamwj02sqf2bkma6p5ddiqsnilc4wx7"))))
25621 (build-system pyproject-build-system)
25622 (arguments
25623 (list
25624 #:test-backend #~'unittest
25625 #:test-flags #~(list "discover" "-s" "src")
25626 #:phases
25627 #~(modify-phases %standard-phases
25628 (add-before 'check 'disable-tests
25629 (lambda _
25630 ;; prov.model.ProvException: The provided identifier
25631 ;; "http://www.example.org/bundle" is not valid
25632 (substitute* "src/prov/tests/qnames.py"
25633 (("test_namespace_inheritance")
25634 "disabled_test_namespace_inheritance")
25635 (("test_default_namespace_inheritance")
25636 "disabled_test_default_namespace_inheritance")))))))
25637 (native-inputs
25638 (list python-setuptools))
25639 (propagated-inputs
25640 (list graphviz
25641 python-dateutil
25642 python-networkx
25643 python-pydot
25644 ;; optional dependencies, also needed for tests
25645 python-lxml
25646 python-rdflib))
25647 (home-page "https://github.com/trungdong/prov")
25648 (synopsis
25649 "W3C Provenance Data Model supporting PROV-JSON, PROV-XML and PROV-O (RDF)")
25650 (description
25651 "This package provides a library for W3C Provenance Data Model supporting
25652 PROV-O (RDF), PROV-XML, PROV-JSON import/export.")
25653 (license license:expat)))
25654
25655(define-public python-arcp
25656 (package
25657 (name "python-arcp")
25658 (version "0.2.1")
25659 (source
25660 (origin
25661 (method git-fetch)
25662 (uri (git-reference
25663 (url "https://github.com/stain/arcp-py")
25664 (commit version)))
25665 (file-name (git-file-name name version))
25666 (sha256
25667 (base32 "1wjygci60nmcdrgrhb0vwqmhspzdv3g69x2b92vjxq709ifrpgqp"))))
25668 (build-system pyproject-build-system)
25669 (arguments
25670 (list
25671 #:phases
25672 #~(modify-phases %standard-phases
25673 (add-after 'unpack 'patch-tests
25674 (lambda _
25675 (substitute* "tests/test_parse.py"
25676 (("ni:///")
25677 "ni:")))))))
25678 (native-inputs (list python-pytest python-setuptools))
25679 (home-page "https://arcp.readthedocs.io/")
25680 (synopsis "Archive and Package URI parser and generator")
25681 (description
25682 "@acronym{arcp, Archive and Package} provides functions for creating
25683@code{arcp_} URIs, which can be used for identifying or parsing hypermedia
25684files packaged in an archive or package, like a ZIP file. arcp URIs can be
25685used to consume or reference hypermedia resources bundled inside a file
25686archive or an application package, as well as to resolve URIs for archive
25687resources within a programmatic framework. This URI scheme provides
25688mechanisms to generate a unique base URI to represent the root of the archive,
25689so that relative URI references in a bundled resource can be resolved within
25690the archive without having to extract the archive content on the local file
25691system. An arcp URI can be used for purposes of isolation (e.g. when
25692consuming multiple archives), security constraints (avoiding \"climb out\"
25693from the archive), or for externally identiyfing sub-resources referenced by
25694hypermedia formats.")
25695 (license license:asl2.0)))
25696
25697;; XXX: Project has no updates since 2019, consider to remove when nothing
25698;; depends on it in the next refresh cycle.
25699;; See: <https://github.com/pipermerriam/flex/issues/237>.
25700(define-public python-flex
25701 (package
25702 (name "python-flex")
25703 (version "6.14.1")
25704 (source
25705 (origin
25706 (method url-fetch)
25707 (uri (pypi-uri "flex" version))
25708 (sha256
25709 (base32
25710 "1sr91f5sqywj4040jm3cq4333fp8hbmmr7v6v05a3h0sgyixcbi9"))))
25711 (build-system pyproject-build-system)
25712 (arguments (list #:tests? #f)) ;no tests in PyPI archive
25713 (native-inputs
25714 (list python-setuptools))
25715 (propagated-inputs
25716 (list python-click
25717 python-jsonpointer
25718 python-pyyaml
25719 python-requests
25720 python-rfc3987
25721 python-six
25722 python-strict-rfc3339
25723 python-validate-email))
25724 (home-page "https://github.com/pipermerriam/flex")
25725 (synopsis "Validates Swagger schemata")
25726 (description "@code{flex} can be used to validate Swagger schemata.")
25727 (license license:bsd-3)))
25728
25729(define-public python-marshmallow
25730 (package
25731 (name "python-marshmallow")
25732 (version "4.0.0")
25733 (source
25734 (origin
25735 (method url-fetch)
25736 (uri (pypi-uri "marshmallow" version))
25737 (sha256
25738 (base32 "0mcd5aqs33hijapnj2a3g580pfaghp8h3vcpzdf979wrqam80viv"))))
25739 (build-system pyproject-build-system)
25740 (arguments
25741 (list
25742 ;; tests: x86_64 1117 passed
25743 ;; i686-linux 1116 passed, 1 deselected
25744 #:test-flags
25745 #~(list #$@(if (target-64bit?)
25746 '()
25747 ;; OverflowError
25748 '((string-append "--deselect=tests/test_utils.py"
25749 "::test_from_timestamp_with_overflow_value"))))))
25750 (native-inputs
25751 (list python-flit-core
25752 python-pytest
25753 python-simplejson
25754 tzdata-for-tests))
25755 (home-page "https://github.com/marshmallow-code/marshmallow")
25756 (synopsis "Convert complex datatypes to and from native Python datatypes")
25757 (description
25758 "@code{marshmallow} provides a library for converting complex datatypes
25759to and from native Python datatypes.")
25760 (license license:expat)))
25761
25762(define-public python-marshmallow-3
25763 (package
25764 (inherit python-marshmallow)
25765 (version "3.22.0")
25766 (source
25767 (origin
25768 (method url-fetch)
25769 (uri (pypi-uri "marshmallow" version))
25770 (sha256
25771 (base32 "0gl2qmq5sqf1b3f84zd7yzkznaknr6j5lnbxcfw0n8ja20lzawj9"))))
25772 (arguments '())
25773 (native-inputs
25774 (list python-pytest
25775 python-pytz
25776 python-simplejson
25777 python-flit-core))
25778 (propagated-inputs
25779 (list python-packaging))))
25780
25781
25782(define-public python-apispec
25783 (package
25784 (name "python-apispec")
25785 (version "6.8.2")
25786 (source
25787 (origin
25788 (method url-fetch)
25789 (uri (pypi-uri "apispec" version))
25790 (sha256
25791 (base32 "09lza66036a3i1blwrc6qpvw48pzflmabhd0dfshq9ghzjwnjnyf"))))
25792 (build-system pyproject-build-system)
25793 (native-inputs
25794 (list python-flit-core
25795 python-openapi-spec-validator
25796 python-pytest))
25797 (propagated-inputs
25798 (list python-marshmallow
25799 python-packaging
25800 python-pyyaml))
25801 (home-page "https://github.com/marshmallow-code/apispec")
25802 (synopsis "Swagger/OpenAPI specification generator")
25803 (description
25804 "@code{python-apispec} is a pluggable API specification generator. It
25805currently supports the OpenAPI specification, formerly known as Swagger.")
25806 (license license:expat)))
25807
25808(define-public python-apispec-webframeworks
25809 (package
25810 (name "python-apispec-webframeworks")
25811 (version "1.2.0")
25812 (source
25813 (origin
25814 (method url-fetch)
25815 (uri (pypi-uri "apispec_webframeworks" version))
25816 (sha256
25817 (base32 "10gxjwmk8w67b7vcivcky4hrpv1gx8acrshnyp1169va4s62i2an"))))
25818 (build-system pyproject-build-system)
25819 (native-inputs
25820 (list python-aiohttp
25821 python-flit-core
25822 python-bottle
25823 python-flask
25824 python-pytest
25825 python-pyyaml
25826 python-tornado
25827 python-wheel))
25828 (propagated-inputs
25829 (list python-apispec))
25830 (home-page "https://github.com/marshmallow-code/apispec-webframeworks")
25831 (synopsis "Web framework plugins for apispec")
25832 (description "This package provides plugins for using @code{apispec} with
25833web frameworks.")
25834 (license license:expat)))
25835
25836(define-public python-flasgger
25837 (package
25838 (name "python-flasgger")
25839 (version "0.9.7.1")
25840 (source
25841 (origin
25842 (method git-fetch)
25843 (uri (git-reference
25844 (url "https://github.com/rochacbruno/flasgger")
25845 (commit (string-append "v" version))))
25846 (file-name (git-file-name name version))
25847 (sha256
25848 (base32 "08dnn19swfa5lsscj38hil41b3xnqvwgwnx9q2vg9kv26bs1zcah"))
25849 (patches
25850 (list
25851 (origin
25852 (method url-fetch)
25853 (uri
25854 (string-append "https://github.com/flasgger/flasgger/commit/"
25855 "08591b60e988c0002fcf1b1e9f98b78e041d2732.patch"))
25856 (sha256
25857 (base32 "0a9gprhbm4xjc5pg01agh6i99alkknah7z6281f0z8amjyss91rg")))))))
25858 (build-system pyproject-build-system)
25859 (arguments
25860 (list
25861 #:test-flags
25862 #~(list "--ignore=tests/test_examples.py"
25863 "tests")))
25864 (propagated-inputs
25865 (list python-flask
25866 python-pyyaml
25867 python-jsonschema
25868 python-mistune
25869 python-six))
25870 (native-inputs
25871 (list python-pytest
25872 python-setuptools))
25873 (home-page "https://github.com/rochacbruno/flasgger/")
25874 (synopsis "Extract Swagger specs from your Flask project")
25875 (description "@code{python-flasgger} allows extracting Swagger specs
25876 from your Flask project. It is a fork of Flask-Swagger.")
25877 (license license:expat)))
25878
25879(define-public python-apache-libcloud
25880 (package
25881 (name "python-apache-libcloud")
25882 (version "3.8.0")
25883 (source
25884 (origin
25885 (method url-fetch)
25886 (uri (pypi-uri "apache-libcloud" version))
25887 (sha256
25888 (base32 "14bc4z246ka0h6kywpxqdfgb2c5y6lfclpx99ki2bhiv285lrgvm"))))
25889 (build-system pyproject-build-system)
25890 (arguments
25891 (list
25892 #:tests? #f ; XXX: all tests fail requiring additional credentials
25893 #:phases
25894 #~(modify-phases %standard-phases
25895 (add-after 'unpack 'patch-ssh
25896 (lambda* (#:key inputs #:allow-other-keys)
25897 (substitute* "libcloud/compute/ssh.py"
25898 (("'ssh'")
25899 (format #f "~s" (search-input-file inputs "/bin/ssh"))))))
25900 (add-after 'unpack 'patch-tests
25901 (lambda _
25902 (substitute* "libcloud/test/compute/test_ssh_client.py"
25903 (("^class ShellOutSSHClientTests")
25904 "@unittest.skip(\"Guix container doesn't have ssh service\")
25905class ShellOutSSHClientTests"))))
25906 (add-before 'check 'copy-secret
25907 (lambda _
25908 (copy-file "libcloud/test/secrets.py-dist"
25909 "libcloud/test/secrets.py"))))))
25910 (inputs
25911 (list openssh))
25912 (propagated-inputs
25913 (list python-requests))
25914 (native-inputs
25915 (list python-pytest python-requests-mock python-setuptools))
25916 (home-page "https://libcloud.apache.org/")
25917 (synopsis "Unified Cloud API")
25918 (description
25919 "@code{libcloud} is a Python library for interacting with many of the
25920popular cloud service providers using a unified API.")
25921 (license license:asl2.0)))
25922
25923(define-public python-smmap
25924 (package
25925 (name "python-smmap")
25926 (version "5.0.2")
25927 (source
25928 (origin
25929 (method url-fetch)
25930 (uri (pypi-uri "smmap" version))
25931 (sha256
25932 (base32 "1mcai5vf9bgz389y4sqgj6w22wn7zmc7m33y3j50ryjq76h6bsi6"))))
25933 (build-system pyproject-build-system)
25934 (native-inputs
25935 (list python-pytest
25936 python-setuptools
25937 python-wheel))
25938 (home-page "https://github.com/Byron/smmap")
25939 (synopsis "Python sliding window memory map manager")
25940 (description "@code{smmap} is a pure Python implementation of a sliding
25941 window memory map manager.")
25942 (license license:bsd-3)))
25943
25944(define-public python-regex
25945 (package
25946 (name "python-regex")
25947 (version "2026.2.28")
25948 (source
25949 (origin
25950 (method git-fetch)
25951 (uri (git-reference
25952 (url "https://github.com/mrabarnett/mrab-regex")
25953 (commit version)))
25954 (file-name (git-file-name name version))
25955 (sha256
25956 (base32 "10pyq4b2a0qbvmfn0ip6h51lqf4g59kgca4zn3g8hg62ha5kwf13"))))
25957 (build-system pyproject-build-system)
25958 (arguments
25959 (list
25960 #:test-backend #~'unittest
25961 #:test-flags #~(list "-v" "regex.tests.test_regex")
25962 #:phases
25963 #~(modify-phases %standard-phases
25964 (add-before 'check 'remove-local-source
25965 (lambda _
25966 (delete-file-recursively "regex"))))))
25967 (native-inputs
25968 (list python-setuptools))
25969 (home-page "https://github.com/mrabarnett/mrab-regex")
25970 (synopsis "Alternative regular expression module")
25971 (description
25972 "This regular expression implementation is backwards-compatible with the
25973standard @code{re} module, but offers additional functionality like full
25974case-folding for case-insensitive matches in Unicode.")
25975 (license license:psfl)))
25976
25977(define-public python-pysocks
25978 (package
25979 (name "python-pysocks")
25980 (version "1.7.1")
25981 (source
25982 (origin
25983 (method url-fetch)
25984 (uri (pypi-uri "PySocks" version))
25985 (sha256
25986 (base32
25987 "184sg65mbmih6ljblfsxcmq5js5l7dj3gpn618w9q5dy3rbh921z"))))
25988 (build-system pyproject-build-system)
25989 (arguments `(#:tests? #f))
25990 (native-inputs
25991 (list python-setuptools))
25992 (home-page "https://github.com/Anorov/PySocks")
25993 (synopsis "SOCKS client module")
25994 (description "@code{pysocks} is an updated and semi-actively maintained
25995version of @code{SocksiPy} with bug fixes and extra features.")
25996 (license license:bsd-3)))
25997
25998(define-public python-pydub
25999 ;; TODO: Move to (gnu packages audio)
26000 (package
26001 (name "python-pydub")
26002 (version "0.25.1")
26003 (source
26004 (origin
26005 (method git-fetch)
26006 (uri (git-reference
26007 (url "https://github.com/jiaaro/pydub")
26008 (commit (string-append "v" version))))
26009 (file-name (git-file-name name version))
26010 (sha256
26011 (base32 "0xskllq66wqndjfmvp58k26cv3w480sqsil6ifwp4gghir7hqc8m"))
26012 (patches
26013 (list
26014 ;; See: <https://github.com/jiaaro/pydub/pull/769>.
26015 (origin
26016 (method url-fetch)
26017 (uri
26018 (string-append "https://github.com/jiaaro/pydub/commit/"
26019 "66c1bf7813ae8621a71484fdcdf609734c0d8efd.patch"))
26020 (sha256
26021 (base32 "17nlbw79gv9mag6xpd46al5f1bgqcncffh151znn0fmhj8i9rgz3")))))))
26022 (build-system pyproject-build-system)
26023 (arguments
26024 (list
26025 #:test-backend ''unittest
26026 #:phases
26027 #~(modify-phases %standard-phases
26028 (add-after 'unpack 'fix-ffmpeg-path
26029 (lambda* (#:key inputs #:allow-other-keys)
26030 (let ((bin (dirname (search-input-file inputs "bin/ffmpeg"))))
26031 (substitute* "pydub/utils.py"
26032 (("return \"ffmpeg\"")
26033 (string-append "return \"" bin "/ffmpeg\""))
26034 (("return \"ffplay\"")
26035 (string-append "return \"" bin "/ffplay\""))
26036 (("return \"ffprobe\"")
26037 (string-append "return \"" bin "/ffprobe\""))
26038 (("warn\\(\"Couldn't find ff")
26039 "# warn\\(\"Couldn't find ff"))))))))
26040 (native-inputs (list python-setuptools))
26041 (home-page "https://pydub.com")
26042 (inputs (list ffmpeg))
26043 (propagated-inputs (list python-scipy))
26044 (synopsis "Manipulate audio with a high level interface in Python")
26045 (description
26046 "@code{pydub} makes it easy to manipulate audio in Python. It relies on
26047@code{ffmpeg} to open various audio formats.")
26048 (license license:expat))) ; MIT license
26049
26050(define-public python-pkginfo
26051 (package
26052 (name "python-pkginfo")
26053 (version "1.12.1.2")
26054 (source
26055 (origin
26056 (method url-fetch)
26057 (uri (pypi-uri "pkginfo" version))
26058 (sha256
26059 (base32
26060 "0ysbl0rhy8chvx58zi5qb61jli76dcyblklnc0118vy39a15gnaw"))))
26061 (build-system pyproject-build-system)
26062 (arguments
26063 ;; Wheel metatda version mismatched: AssertionError: assert '2.4' == '2.3'
26064 (list #:test-flags #~(list "-k" "not test_installed_ctor_w_dist_info")))
26065 (native-inputs
26066 (list python-pytest
26067 python-setuptools
26068 python-wheel))
26069 (home-page "https://code.launchpad.net/~tseaver/pkginfo/trunk")
26070 (synopsis "Query metadatdata from sdists, bdists, and installed packages")
26071 (description
26072 "API to query the distutils metadata written in @file{PKG-INFO} inside a
26073source distriubtion (an sdist) or a binary distribution (e.g., created by
26074running bdist_egg). It can also query the EGG-INFO directory of an installed
26075distribution, and the *.egg-info stored in a \"development checkout\" (e.g,
26076created by running @code{python setup.py develop}).")
26077 (license license:expat)))
26078
26079;; XXX: This project was archived by the owner on Oct 4, 2023. It is now
26080;; read-only. Consider to remove when nothing depends on it.
26081(define-public python-ratelimiter
26082 ;; From https://github.com/RazerM/ratelimiter/pull/11
26083 (let ((commit "59a0827c434706d62b89e16a220e4ae12e618858")
26084 (revision "0"))
26085 (package
26086 (name "python-ratelimiter")
26087 (version (git-version "1.2.0.post1" revision commit))
26088 (source
26089 (origin
26090 (method git-fetch)
26091 (uri (git-reference
26092 (url "https://github.com/RazerM/ratelimiter")
26093 (commit commit)))
26094 (sha256
26095 (base32
26096 "1v34w12f41j0l2gy9ji9ip01kj4idjfjx7a97wrlr1ibxi7hg3bs"))))
26097 (build-system pyproject-build-system)
26098 (arguments
26099 (list #:phases
26100 '(modify-phases %standard-phases
26101 (add-after 'unpack 'pytest-compatibility
26102 (lambda _
26103 (substitute* "tests/conftest.py"
26104 (("pytest.collect.File") "pytest.File")))))))
26105 (native-inputs
26106 (list python-pytest-8
26107 python-pytest-asyncio-0.26
26108 python-setuptools))
26109 (home-page "https://github.com/RazerM/ratelimiter")
26110 (synopsis "Simple rate limiting object")
26111 (description
26112 "The @code{ratelimiter} module ensures that an operation will not be
26113executed more than a given number of times during a given period.")
26114 (license license:asl2.0))))
26115
26116(define-public python-rbfly
26117 (package
26118 (name "python-rbfly")
26119 (version "0.11.0")
26120 (source
26121 (origin
26122 (method url-fetch)
26123 (uri (pypi-uri "rbfly" version))
26124 (sha256
26125 (base32 "12xwf8zdvc5pf4nlpblml3jbn3gksgkyw9zw6jfsrvddv3hsm1b0"))))
26126 (build-system pyproject-build-system)
26127 (arguments
26128 (list
26129 #:test-flags
26130 #~(list "--pyargs" "rbfly"
26131 #$@(if (target-64bit?)
26132 '()
26133 '((string-append "--deselect=tests/amqp/test_message.py"
26134 "::test_encode_amqp_string_too_long"))))
26135 #:phases
26136 #~(modify-phases %standard-phases
26137 (add-before 'check 'remove-local-source
26138 (lambda _
26139 (delete-file-recursively "rbfly"))))))
26140 (native-inputs
26141 (list python-cython
26142 python-pytest
26143 python-pytest-asyncio
26144 python-pytest-timeout
26145 python-setuptools))
26146 (home-page "https://wrobell.dcmod.org/rbfly/")
26147 (synopsis "Work with RabbitMQ Streams in Python")
26148 (description
26149 "This package implements a functionality to deal with
26150@url{https://www.rabbitmq.com/streams.html, RabbitMQ Streams} using
26151@url{https://docs.python.org/3/library/asyncio.html, @code{asyncio}}.
26152
26153It is designed and implemented with the following qualities in mind:
26154@itemize
26155@item asynchronous Pythonic API with type annotations
26156@item use of
26157@url{https://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol, AMQP}
261581.0 message format to enable interoperability between RabbitMQ Stream. clients
26159@item auto reconnection to RabbitMQ broker with lazily created connection
26160objects
26161@end itemize
26162
26163Support of many RabbitMQ Streams broker features:
26164@itemize
26165@item publishing single messages, or in batches, with confirmation
26166@item subscribing to a stream at a specific point in time, from a specific
26167offset, or using offset reference
26168@item stream message filtering
26169@item writing stream offset reference
26170@item message deduplication
26171@item integration with AMQP 1.0 ecosystem at message format level
26172@end itemize")
26173 (license license:gpl3+)))
26174
26175(define-public python-jsonrpclib-pelix
26176 (package
26177 (name "python-jsonrpclib-pelix")
26178 (version "0.3.2")
26179 (source
26180 (origin
26181 (method git-fetch)
26182 (uri (git-reference
26183 (url "https://github.com/tcalmant/jsonrpclib")
26184 (commit (string-append "v" version))))
26185 (file-name (git-file-name name version))
26186 (sha256
26187 (base32 "1mhnqmgcplsxc4zygxy4hm99si7p2rpyl4bpmilzqc51k2r3khzl"))))
26188 (build-system pyproject-build-system)
26189 (arguments
26190 (list
26191 #:test-flags #~(list "--deselect=\
26192tests/test_internal.py::InternalTests::test_multicall_success")))
26193 (native-inputs (list python-pytest python-setuptools))
26194 (home-page "https://github.com/tcalmant/jsonrpclib")
26195 (synopsis "JSON-RPC 2.0 client library for Python")
26196 (description
26197 "This library implements the JSON-RPC v2.0 specification
26198(backwards-compatible) as a client library for Python. This version is a fork
26199of jsonrpclib by Josh Marshall, usable with Pelix remote services.")
26200 (license license:asl2.0)))
26201
26202(define-public python-setuptools-git
26203 ;; XXX: The project is abandoned since 2018, consider to remove in the next
26204 ;; refresh cycle.
26205 (package
26206 (name "python-setuptools-git")
26207 (version "1.2")
26208 (source
26209 (origin
26210 (method url-fetch)
26211 (uri (pypi-uri "setuptools-git" version))
26212 (sha256
26213 (base32 "0i84qjwp5m0l9qagdjww2frdh63r37km1c48mrvbmaqsl1ni6r7z"))))
26214 (build-system pyproject-build-system)
26215 (arguments
26216 (list
26217 #:tests? #f ;no tests in PyPI
26218 #:phases
26219 #~(modify-phases %standard-phases
26220 ;; This is needed for tests.
26221 (add-after 'unpack 'configure-git
26222 (lambda _
26223 (setenv "HOME" "/tmp")
26224 (invoke "git" "config" "--global" "user.email" "guix")
26225 (invoke "git" "config" "--global" "user.name" "guix"))))))
26226 (native-inputs
26227 (list git-minimal/pinned python-setuptools python-wheel))
26228 (home-page "https://github.com/msabramo/setuptools-git")
26229 (synopsis "Setuptools revision control system plugin for Git")
26230 (description
26231 "This package provides a plugin for Setuptools for revision control with
26232Git.")
26233 (license license:bsd-3)))
26234
26235(define-public python-setuptools-rust
26236 (package
26237 (name "python-setuptools-rust")
26238 (version "1.11.1")
26239 (source
26240 (origin
26241 (method url-fetch)
26242 (uri (pypi-uri "setuptools_rust" version))
26243 (sha256
26244 (base32 "1h3nbg1nlshzrqy7vz4q4g9wbz85dqkn6385p0ad7kjj48ww9avx"))))
26245 (build-system pyproject-build-system)
26246 (arguments
26247 (list #:tests? #f)) ;tests require Cargo
26248 (propagated-inputs
26249 (list python-semantic-version
26250 python-setuptools))
26251 (home-page "https://github.com/PyO3/setuptools-rust")
26252 (synopsis "Setuptools plugin for Rust extensions")
26253 (description
26254 "@code{setuptools-rust} is a plugin for @code{setuptools} to build
26255Rust Python extensions implemented with @code{PyO3} or @code{rust-cpython}.")
26256 (license license:expat)))
26257
26258(define-public python-setuptools-gettext
26259 (package
26260 (name "python-setuptools-gettext")
26261 (version "0.1.14")
26262 (source
26263 (origin
26264 (method git-fetch)
26265 (uri (git-reference
26266 (url "https://github.com/breezy-team/setuptools-gettext")
26267 (commit (string-append "v" version))))
26268 (file-name (git-file-name name version))
26269 (sha256
26270 (base32 "1m6a3qjwvqbvlzwqap7050rqsxb7nwibl38iklnqz8363iclm76k"))))
26271 (build-system pyproject-build-system)
26272 (native-inputs (list python-pytest python-tomli python-setuptools))
26273 (home-page "https://github.com/breezy-team/setuptools-gettext")
26274 (synopsis "Setuptools plugin for gettext")
26275 (description "This package provides a plugin for Setuptools for gettext.")
26276 (license license:gpl2+)))
26277
26278(define-public python-pyclibrary
26279 ;; XXX: https://github.com/MatthieuDartiailh/pyclibrary/issues/82
26280 (let ((commit "4e1e243a0bdfefa188d93ebdf3b60c6861244855")
26281 (revision "0"))
26282 (package
26283 (name "python-pyclibrary")
26284 (version (git-version "0.2.2" revision commit))
26285 (source
26286 (origin
26287 (method git-fetch)
26288 (uri (git-reference
26289 (url "https://github.com/MatthieuDartiailh/pyclibrary")
26290 (commit commit)))
26291 (file-name (git-file-name name version))
26292 (sha256
26293 (base32 "1sza6n2fg8zml0v1s5zwzrlsb79s2abn1n4pr1l8r15al4g9z0c6"))))
26294 (build-system pyproject-build-system)
26295 (native-inputs
26296 (list python-pytest
26297 python-setuptools
26298 python-setuptools-scm))
26299 (propagated-inputs
26300 (list python-pyparsing))
26301 (home-page "https://github.com/MatthieuDartiailh/pyclibrary")
26302 (synopsis "Wrap dynamic libraries in Python")
26303 (description
26304 "This package helps wrapping dynamic libraries in Python. It includes
26305a pure-Python C parser and an automation library that uses C header file
26306definitions to simplify the use of C bindings.")
26307 (license license:expat))))
26308
26309(define-public python-pyclipper
26310 (package
26311 (name "python-pyclipper")
26312 (version "1.3.0.post6")
26313 (source
26314 (origin
26315 (method git-fetch)
26316 (uri (git-reference
26317 (url "https://github.com/greginvm/pyclipper")
26318 (commit version)))
26319 (file-name (git-file-name name version))
26320 (sha256
26321 (base32 "1ijr7sx3203b3ppvsn1zyy8nfz93nbi60l8dxj2hdd6sj25g8q5k"))))
26322 (build-system pyproject-build-system)
26323 (arguments
26324 (list
26325 #:phases
26326 #~(modify-phases %standard-phases
26327 (add-before 'build 'cythonize-sources
26328 (lambda _
26329 (with-directory-excursion "src/pyclipper"
26330 (invoke "cython" "--cplus" "_pyclipper.pyx")))))))
26331 (native-inputs
26332 (list python-cython
26333 python-pytest
26334 python-setuptools
26335 python-setuptools-scm))
26336 (home-page "https://github.com/greginvm/pyclipper")
26337 (synopsis "Wrapper for Angus Johnson's Clipper library")
26338 (description
26339 "Pyclipper is a Cython wrapper for the C++ translation of the
26340Angus Johnson's polygon clipping Clipper library (ver. 6.4.2).")
26341 (license license:expat)))
26342
26343(define-public python-semver
26344 (package
26345 (name "python-semver")
26346 (version "3.0.4")
26347 (source
26348 (origin
26349 (method url-fetch)
26350 (uri (pypi-uri "semver" version))
26351 (sha256
26352 (base32 "00lnb1mpppgq041kwcbg405rqsi2mzl8dw1s0c8hmvd5hk2xiixg"))))
26353 (build-system pyproject-build-system)
26354 (native-inputs (list python-pytest python-setuptools))
26355 (home-page "https://github.com/k-bx/python-semver")
26356 (synopsis "Python helper for Semantic Versioning")
26357 (description
26358 "This package provides a Python library for @url{Semantic Versioning,
26359http://semver.org/}.")
26360 (license license:bsd-3)))
26361
26362(define-public python-phonenumbers
26363 (package
26364 (name "python-phonenumbers")
26365 (version "8.13.37")
26366 (source
26367 (origin
26368 (method git-fetch)
26369 (uri (git-reference
26370 (url "https://github.com/daviddrysdale/python-phonenumbers")
26371 (commit (string-append "v" version))))
26372 (file-name (git-file-name name version))
26373 (sha256
26374 (base32 "1bgab6s7l2bqg671sns138c9qr9f8ndvjr4ig8l3ik9q054l9k9n"))))
26375 (build-system pyproject-build-system)
26376 (arguments
26377 (list
26378 #:test-backend #~'custom
26379 #:test-flags #~(list "-m" "testwrapper")
26380 #:phases
26381 #~(modify-phases %standard-phases
26382 (add-after 'unpack 'chdir
26383 (lambda _
26384 (chdir "python"))))))
26385 (propagated-inputs (list python-protobuf))
26386 (native-inputs (list python-setuptools))
26387 (home-page "https://github.com/daviddrysdale/python-phonenumbers")
26388 (synopsis "Python library for dealing with international phone numbers")
26389 (description
26390 "This package provides a Python port of Google's libphonenumber library.")
26391 (license license:asl2.0)))
26392
26393(define-public python-heapdict
26394 (package
26395 (name "python-heapdict")
26396 (version "1.0.1")
26397 (source
26398 (origin
26399 (method url-fetch)
26400 (uri (pypi-uri "HeapDict" version))
26401 (sha256
26402 (base32
26403 "1dnd7v9adqd21bf4ih2wzn9a7b41m0nccb0vbxny9n037rxzb5c4"))))
26404 (build-system pyproject-build-system)
26405 (arguments (list #:test-backend #~'unittest))
26406 (native-inputs (list python-setuptools))
26407 (home-page "http://stutzbachenterprises.com/")
26408 (synopsis "Heap with decrease-key and increase-key operations")
26409 (description
26410 "heapdict implements the MutableMapping ABC, meaning it works pretty much
26411like a regular Python @code{dict}. It’s designed to be used as a priority
26412queue.")
26413 (license license:bsd-3)))
26414
26415(define-public python-send2trash
26416 (package
26417 (name "python-send2trash")
26418 (version "1.8.2")
26419 (source
26420 (origin (method git-fetch)
26421 ;; Source tarball on PyPI doesn't include tests.
26422 (uri (git-reference
26423 (url "https://github.com/arsenetar/send2trash")
26424 (commit version)))
26425 (file-name (git-file-name name version))
26426 (sha256
26427 (base32
26428 "0dl9nv3h3kkcavwiswzg76pksqczq448gbdvlbz88bm71zvdshx7"))))
26429 (build-system pyproject-build-system)
26430 (arguments
26431 (list
26432 #:phases
26433 '(modify-phases %standard-phases
26434 (add-before 'check 'pre-check
26435 (lambda _ (setenv "HOME" "/tmp"))))))
26436 (native-inputs (list python-pytest python-setuptools python-wheel))
26437 (home-page "https://github.com/arsenetar/send2trash")
26438 (synopsis "Send files to the user's @file{~/Trash} directory")
26439 (description "This package provides a Python library to send files to the
26440user's @file{~/Trash} directory.")
26441 (license license:bsd-3)))
26442
26443(define-public python-pyfavicon
26444 (package
26445 (name "python-pyfavicon")
26446 (version "0.1.1")
26447 (source
26448 (origin
26449 (method git-fetch)
26450 (uri (git-reference
26451 (url "https://github.com/bilelmoussaoui/pyfavicon")
26452 (commit version)))
26453 (file-name (git-file-name name version))
26454 (sha256
26455 (base32 "04mx8vbi6j9l8daqa18sv0kkcyqv4wbc9z4ma77w68baq6ss0jzf"))))
26456 (build-system pyproject-build-system)
26457 (arguments
26458 (list
26459 #:test-flags
26460 #~(list "-k" (string-join (list
26461 ;; Socket name resolution fails.
26462 "not test_url_icon_link_type"
26463 "test_icon_sizes"
26464 ;; Tuples differ.
26465 "test_largest_icon")
26466 " and not "))))
26467 (native-inputs (list python-pytest python-setuptools))
26468 (propagated-inputs
26469 (list python-aiohttp python-beautifulsoup4 python-pillow))
26470 (home-page "https://github.com/bilelmoussaoui/pyfavicon")
26471 (synopsis "Async favicon fetcher")
26472 (description
26473 "@code{pyfavicon} is an async favicon fetcher.")
26474 (license license:expat)))
26475
26476(define-public python-funcy
26477 (package
26478 (name "python-funcy")
26479 (version "1.11")
26480 (source
26481 (origin
26482 (method git-fetch)
26483 (uri (git-reference
26484 (url "https://github.com/Suor/funcy")
26485 (commit version)))
26486 (sha256
26487 (base32 "1s98vkjnq3zq71737hn8xa15kssvmy1sfzsll3vrlv53902418mw"))
26488 (file-name (git-file-name name version))))
26489 (build-system pyproject-build-system)
26490 (native-inputs
26491 (list python-pytest python-whatever python-setuptools python-wheel))
26492 (home-page "https://github.com/Suor/funcy")
26493 (synopsis "Functional tools")
26494 (description "@code{funcy} is a library that provides functional tools.
26495Examples are:
26496@enumerate
26497@item merge - Merges collections of the same type
26498@item walk - Type-preserving map
26499@item select - Selects a part of a collection
26500@item take - Takes the first n items of a collection
26501@item first - Takes the first item of a collection
26502@item remove - Predicated-removes items of a collection
26503@item concat - Concatenates two collections
26504@item flatten - Flattens a collection with subcollections
26505@item distinct - Returns only distinct items
26506@item split - Predicated-splits a collection
26507@item split_at - Splits a collection at a given item
26508@item group_by - Groups items by group
26509@item pairwise - Pairs off adjacent items
26510@item partial - Partially-applies a function
26511@item curry - Curries a function
26512@item compose - Composes functions
26513@item complement - Complements a predicate
26514@item all_fn - \"all\" with predicate
26515@end enumerate")
26516 (license license:bsd-3)))
26517
26518(define-public python-funcy-1.14
26519 (package/inherit python-funcy
26520 (name "python-funcy")
26521 (version "1.14")
26522 (source
26523 (origin
26524 (method git-fetch)
26525 (uri (git-reference
26526 (url "https://github.com/Suor/funcy")
26527 (commit version)))
26528 (sha256
26529 (base32 "1chgi60z3c97m9l23vf5cpyp0nidkqlpxc55q5k5pz41ms3d0440"))
26530 (file-name (git-file-name name version))))))
26531
26532(define-public python-isoweek
26533 (package
26534 (name "python-isoweek")
26535 (version "1.3.3")
26536 (source
26537 (origin
26538 (method url-fetch)
26539 (uri (pypi-uri "isoweek" version))
26540 (sha256
26541 (base32 "1s7zsf0pab0l9gn6456qadnz5i5h90hafcjwnhx5mq23qjxggwvk"))))
26542 (build-system pyproject-build-system)
26543 (arguments (list #:test-backend #~'unittest))
26544 (native-inputs (list python-setuptools))
26545 (home-page "https://github.com/gisle/isoweek")
26546 (synopsis "Objects representing a week")
26547 (description "The @code{isoweek} module provide the class Week that
26548implements the week definition of ISO 8601. This standard also defines
26549a notation for identifying weeks; yyyyWww (where the W is a literal).
26550Week instances stringify to this form.")
26551 (license license:bsd-3)))
26552
26553(define-public bpython
26554 (package
26555 (name "bpython")
26556 (version "0.25")
26557 (source
26558 (origin
26559 (method url-fetch)
26560 (uri (pypi-uri "bpython" version))
26561 (sha256
26562 (base32 "0ny6cqhpil7z36djc4ixakri65kb1rdn3d4ckmpc5p7nks8gqin2"))))
26563 (build-system pyproject-build-system)
26564 (arguments
26565 (list
26566 #:test-flags
26567 ;; Tests can't import curtsies, pygments and urwid.
26568 #~(list "-k" (string-join
26569 (list "not test_issue108"
26570 "test_issue133")
26571 " and not " ))
26572 #:phases
26573 #~(modify-phases %standard-phases
26574 (add-after 'wrap 'add-aliases
26575 ;; For symmetry to bpython2, add symlinks bypthon3, bpdb3, etc.
26576 (lambda _
26577 (for-each
26578 (lambda (old new)
26579 (symlink old (string-append #$output "/bin/" new)))
26580 '("bpython" "bpython-urwid" "bpdb")
26581 '("bpython3" "bpython3-urwid" "bpdb3")))))))
26582 (native-inputs
26583 (list python-mock
26584 python-pytest
26585 python-setuptools))
26586 (propagated-inputs
26587 (list python-curtsies
26588 python-cwcwidth
26589 python-greenlet
26590 python-pygments
26591 python-pyxdg
26592 python-requests
26593 ;; [optional]
26594 python-pyperclip
26595 python-jedi
26596 python-urwid-2
26597 python-watchdog))
26598 (home-page "https://bpython-interpreter.org/")
26599 (synopsis "Fancy interface to the Python interpreter")
26600 (description "Bpython is a fancy interface to the Python
26601interpreter. bpython's main features are
26602
26603@enumerate
26604@item in-line syntax highlighting,
26605@item readline-like autocomplete with suggestions displayed as you type,
26606@item expected parameter list for any Python function,
26607@item \"rewind\" function to pop the last line of code from memory and
26608 re-evaluate,
26609@item send the code you've entered off to a pastebin,
26610@item save the code you've entered to a file, and
26611@item auto-indentation.
26612@end enumerate")
26613 (license license:expat)))
26614
26615(define-public python-pyinotify
26616 (package
26617 (name "python-pyinotify")
26618 (version "0.9.6")
26619 (source
26620 (origin
26621 (method git-fetch)
26622 (uri (git-reference
26623 (url "https://github.com/seb-m/pyinotify")
26624 (commit version)))
26625 (file-name (git-file-name name version))
26626 (sha256
26627 (base32 "0qfvs1sfvlpfb10rxlivwa96mg0ibczis554s2rx32s11nynzvbk"))))
26628 (build-system pyproject-build-system)
26629 (arguments
26630 (list
26631 #:tests? #f ;no tests
26632 #:phases
26633 #~(modify-phases %standard-phases
26634 (add-after 'unpack 'drop-shebang
26635 (lambda _
26636 ;; Dropping this shebang prevents the build system from adding
26637 ;; python-wrapper as an input, reducing package closure size from
26638 ;; ~200 MiB to ~0.2 MiB.
26639 (substitute* "python3/pyinotify.py"
26640 (("#!/usr/bin/env python") "")))))))
26641 (native-inputs
26642 (list python-setuptools))
26643 (propagated-inputs
26644 (list python-pyasyncore))
26645 (home-page "https://github.com/seb-m/pyinotify")
26646 (synopsis "Python library for monitoring inotify events")
26647 (description
26648 "@code{pyinotify} provides a Python interface for monitoring file system
26649events on Linux.")
26650 (license license:expat)))
26651
26652(define-public python-pyinotify-cli
26653 (package
26654 (inherit python-pyinotify)
26655 (name "python-pyinotify-cli")
26656 (arguments
26657 (substitute-keyword-arguments arguments
26658 ((#:phases phases #~%standard-phases)
26659 #~(modify-phases #$phases
26660 (delete 'drop-shebang)
26661 (add-after 'install 'install-entrypoint
26662 (lambda _
26663 (let ((entrypoint
26664 (string-append #$output "/lib/python"
26665 (python-version (which "python"))
26666 "/site-packages/pyinotify.py"))
26667 (bin (string-append #$output "/bin")))
26668 (mkdir-p bin)
26669 (invoke "chmod" "+x" entrypoint)
26670 (symlink
26671 entrypoint (string-append #$output "/bin/pyinotify")))))))))
26672 (description
26673 "This package provides, in addition to the @code{pyinotify} Python library,
26674a command line application exposing the same functionality.")))
26675
26676(define-public python-latex2pydata
26677 (package
26678 (name "python-latex2pydata")
26679 (version "0.5.0")
26680 (source
26681 (origin
26682 (method url-fetch)
26683 (uri (pypi-uri "latex2pydata" version))
26684 (sha256
26685 (base32 "12a2ayhgp5plxkdikhy3myin14ydkj0msgb5j82dfvis7h4d5jmw"))))
26686 (build-system pyproject-build-system)
26687 (native-inputs (list python-setuptools python-wheel python-pytest))
26688 (home-page "https://github.com/gpoore/latex2pydata")
26689 (synopsis "Load data from LaTeX in Python literal format")
26690 (description
26691 "This package is designed to load data in Python literal format that was
26692saved to file by the @code{latex2pydata} LaTeX package. This allows data to be
26693passed from LaTeX to Python.")
26694 (license license:bsd-3)))
26695
26696(define-public python-latexcodec
26697 (package
26698 (name "python-latexcodec")
26699 (version "3.0.1")
26700 (source
26701 (origin
26702 (method git-fetch)
26703 (uri (git-reference
26704 (url "https://github.com/mcmtroffaes/latexcodec/")
26705 (commit version)))
26706 (file-name (git-file-name name version))
26707 (sha256
26708 (base32 "0j4hkn161h0hsx3ixs85dqnsaya27ck9c2ri1lv8cayc5a9kqvcp"))))
26709 (build-system pyproject-build-system)
26710 (native-inputs (list python-pytest python-setuptools))
26711 (home-page "https://readthedocs.org/projects/latexcodec/")
26712 (synopsis "Work with LaTeX code in Python")
26713 (description "Lexer and codec to work with LaTeX code in Python.")
26714 (license license:expat)))
26715
26716(define-public python-latexminted
26717 (package
26718 (name "python-latexminted")
26719 ;; Version 0.6.0 is not compatible with our packaged python-pygments.
26720 (version "0.5.1")
26721 (source
26722 (origin
26723 (method url-fetch)
26724 (uri (pypi-uri "latexminted" version))
26725 (sha256
26726 (base32 "12pj51nw7k3h6pv8r7k7382jwvs5wsd80cpkv222nkv07gnfg390"))))
26727 (build-system pyproject-build-system)
26728 (arguments (list #:tests? #f)) ; No tests upstream.
26729 (propagated-inputs (list python-latex2pydata
26730 python-latexrestricted
26731 python-pygments))
26732 (native-inputs (list texlive-kpathsea python-setuptools))
26733 (home-page "https://github.com/gpoore/minted")
26734 (synopsis "Python library for the LaTeX minted package")
26735 (description "This Python package provides the Python side of the
26736@code{texlive-minted} LaTeX package. It performs syntax highlighting using the
26737@code{python-pygments} library. It also provides several code formatting and
26738manipulation features implemented in Python that would be difficult to perform
26739in LaTeX, such as dedenting code and extracting code snippets from source files
26740using regular expressions.")
26741 (license license:lppl1.3c+)))
26742
26743(define-public python-latexrestricted
26744 (package
26745 (name "python-latexrestricted")
26746 (version "0.6.2")
26747 (source
26748 (origin
26749 (method url-fetch)
26750 (uri (pypi-uri "latexrestricted" version))
26751 (sha256
26752 (base32 "0q5alxifggf0k9wjkyfyj1l0xyhn3xaiiy6057zq39cp26j227fm"))))
26753 (build-system pyproject-build-system)
26754 (arguments
26755 (list
26756 #:tests? #f ;no test
26757 #:phases
26758 #~(modify-phases %standard-phases
26759 (add-after 'unpack 'fix-paths
26760 (lambda* (#:key inputs #:allow-other-keys)
26761 (let ((pystr (lambda (s) (string-append "'" s "'")))
26762 (kpse (search-input-file inputs "/bin/kpsewhich")))
26763 (substitute* "latexrestricted/_latex_config.py"
26764 ;; `latexminted' relies on SELFAUTOLOC to locate `kpsewhich', but
26765 ;; this variable is bogus in Guix because binaries are scattered
26766 ;; across multiple directories. This phase sets SELFAUTOLOC to
26767 ;; the specific directory containing `kpsewhich'.
26768 (("os\\.getenv\\('SELFAUTOLOC'\\)")
26769 (pystr (dirname kpse)))
26770 ;; Refer to kpse by store path instead of looking it upein $PATH.
26771 (("shutil.which\\('kpse'.*$")
26772 (string-append (pystr kpse) "\n")))))))))
26773 (native-inputs (list python-setuptools python-wheel))
26774 (inputs (list texlive-kpathsea))
26775 (home-page "https://github.com/gpoore/latexrestricted")
26776 (synopsis
26777 "Library for creating executables compatible with LaTeX's shell escape")
26778 (description
26779 "This Python package is designed to simplify the process of creating Python
26780executables compatible with LaTeX restricted shell escape. Restricted shell
26781escape allows LaTeX to run trusted executables as part of compiling documents.
26782These executables have restricted access to the file system and restricted
26783ability to launch subprocesses.")
26784 (license license:lppl1.3+)))
26785
26786(define-public python-pybloom-live
26787 (package
26788 (name "python-pybloom-live")
26789 (version "4.0.0")
26790 (source (origin
26791 (method url-fetch)
26792 (uri (pypi-uri "pybloom_live" version))
26793 (sha256
26794 (base32
26795 "040i6bjqvl33j30v865shsk30s3h7f16pqwiaj5kig857dfmqm4r"))))
26796 (build-system pyproject-build-system)
26797 (propagated-inputs (list python-bitarray python-xxhash))
26798 (native-inputs (list python-pytest python-setuptools python-wheel))
26799 (home-page "https://github.com/joseph-fox/python-bloomfilter")
26800 (synopsis "Bloom filter")
26801 (description "This package provides a scalable Bloom filter implemented in
26802Python.")
26803 (license license:expat)))
26804
26805;; XXX: Not maintained since 2020.
26806(define-public python-pybktree
26807 (package
26808 (name "python-pybktree")
26809 (version "1.1")
26810 (source
26811 (origin
26812 (method url-fetch)
26813 (uri (pypi-uri "pybktree" version))
26814 (sha256
26815 (base32 "0asd2lw9c5l5wi4z24k7gkhlprpdkcvs8d94szk56x9xvmy07h7f"))))
26816 (build-system pyproject-build-system)
26817 (arguments
26818 (list #:tests? #f)) ;no tests provided
26819 (native-inputs (list python-setuptools))
26820 (home-page "https://github.com/Jetsetter/pybktree")
26821 (synopsis "Pythonic BK-tree data structure")
26822 (description
26823 "This package provides a BK-tree data structure to allow fast querying of
26824close matches in Python.")
26825 (license license:expat)))
26826
26827(define-public python-pybtex
26828 (package
26829 (name "python-pybtex")
26830 (version "0.25.0")
26831 (source
26832 (origin
26833 (method git-fetch)
26834 (uri (git-reference
26835 (url "https://codeberg.org/pybtex/pybtex")
26836 (commit version)))
26837 (file-name (git-file-name name version))
26838 (sha256
26839 (base32 "12rixrciizlvdxxja7qm6c02yzyslzd0jcv07niaii1ly0dg1fq4"))))
26840 (build-system pyproject-build-system)
26841 (native-inputs (list python-pytest python-setuptools))
26842 (propagated-inputs (list python-latexcodec python-pyyaml))
26843 (home-page "https://pybtex.org/")
26844 (synopsis "BibTeX-compatible bibliography processor")
26845 (description
26846 "Pybtex is a BibTeX-compatible bibliography processor written in Python.
26847You can simply type pybtex instead of bibtex.")
26848 (license license:expat)))
26849
26850(define-public python-pybtex-apa-style
26851 (package
26852 (name "python-pybtex-apa-style")
26853 (version "1.3")
26854 (source
26855 (origin
26856 (method url-fetch)
26857 (uri (pypi-uri "pybtex-apa-style" version))
26858 (sha256
26859 (base32 "1cmgcpcvs9jcw4yxhiy217hdngp9p9nlp5x6s2qmkwj0iwgd39iq"))))
26860 (build-system pyproject-build-system)
26861 (arguments
26862 (list
26863 #:test-backend #~'custom
26864 #:test-flags
26865 #~(list "-c" (string-append "import sys, pybtex.plugin;"
26866 " sys.exit('apa' not"
26867 " in pybtex.plugin.enumerate_plugin_names"
26868 "('pybtex.style.labels'))"))))
26869 (native-inputs (list python-pybtex python-setuptools))
26870 (home-page "https://github.com/naeka/pybtex-apa-style")
26871 (synopsis "APA style for pybtex")
26872 (description
26873 "This package provides support for the APA style within pybtex.")
26874 (license license:expat)))
26875
26876(define-public python-pybtex-docutils
26877 (package
26878 (name "python-pybtex-docutils")
26879 (version "1.0.3")
26880 (source
26881 (origin
26882 (method git-fetch)
26883 (uri (git-reference
26884 (url "https://github.com/mcmtroffaes/pybtex-docutils")
26885 (commit version)))
26886 (file-name (git-file-name name version))
26887 (sha256
26888 (base32 "0s21ik0ql7qi3cf6v5fdmlwbzidwdqpsswwsh1vihhz066n2ycps"))))
26889 (build-system pyproject-build-system)
26890 (propagated-inputs (list python-docutils python-pybtex))
26891 (native-inputs (list python-setuptools python-pytest))
26892 (home-page "https://github.com/mcmtroffaes/pybtex-docutils")
26893 (synopsis "Docutils backend for pybtex")
26894 (description "The pybtex docutils backend allows bibtex citations to be
26895inserted into documentation generated by docutils.")
26896 (license license:expat)))
26897
26898(define-public python-onetimepass
26899 (package
26900 (name "python-onetimepass")
26901 (version "1.0.1")
26902 (source
26903 (origin
26904 (method git-fetch)
26905 (uri (git-reference
26906 (url "https://github.com/tadeck/onetimepass/")
26907 (commit (string-append "v" version))))
26908 (file-name (git-file-name name version))
26909 (sha256
26910 (base32 "0wmv62l3r8r4428gdzyj80lhgadfqvj220khz1wnm9alyzg60wkh"))))
26911 (build-system pyproject-build-system)
26912 (arguments (list #:tests? #f)) ; Requires unpackaged timecop.
26913 (native-inputs (list python-setuptools))
26914 (propagated-inputs (list python-six))
26915 (home-page "https://github.com/tadeck/onetimepass/")
26916 (synopsis "One-time password library")
26917 (description
26918 "Python one-time password library for HMAC-based (HOTP) and time-based
26919(TOTP) passwords.")
26920 (license license:expat)))
26921
26922(define-public python-online-judge-api-client
26923 (package
26924 (name "python-online-judge-api-client")
26925 (properties '((commit . "615c345f169e2603e0b907287559a4535fc3c6f9")
26926 (revision . "0")))
26927 (version (git-version "10.10.1"
26928 (assoc-ref properties 'revision)
26929 (assoc-ref properties 'commit)))
26930 (source
26931 (origin
26932 (method git-fetch)
26933 (uri (git-reference
26934 (url "https://github.com/online-judge-tools/api-client")
26935 (commit (assoc-ref properties 'commit))))
26936 (file-name (git-file-name name version))
26937 (sha256
26938 (base32 "13m3cxv6bd3igj6649149xb27ljmzqzpli6hpfrywvgbm238hbws"))
26939 (patches
26940 (search-patches "python-online-judge-api-client-tests.patch"))
26941 ))
26942 (build-system pyproject-build-system)
26943 (arguments
26944 (list
26945 #:test-flags
26946 #~(list "--ignore-glob=tests/get_contest_*.py"
26947 "--ignore-glob=tests/get_problem_*.py")
26948 #:phases
26949 #~(modify-phases %standard-phases
26950 (add-before 'check 'configure-tests
26951 (lambda* (#:key inputs outputs #:allow-other-keys)
26952 (delete-file-recursively
26953 (string-append (site-packages inputs outputs)
26954 "/tests"))
26955 (call-with-output-file "pytest.ini"
26956 (lambda (port)
26957 (format port "\
26958[pytest]
26959python_files = tests/*.py"))))))))
26960 (native-inputs (list python-pytest python-setuptools))
26961 (propagated-inputs
26962 (list python-appdirs
26963 python-beautifulsoup4
26964 python-colorlog
26965 python-lxml
26966 python-requests
26967 python-toml
26968 python-jsonschema))
26969 (home-page "https://github.com/online-judge-tools/api-client")
26970 (synopsis "API client for various online judges")
26971 (description
26972 "This is an API client for various online judges, used as the backend
26973library of @code{oj} command. You can use the Python library
26974(@code{onlinejudge} module) and the command-line interface (@command{oj-api}
26975command) which talks JSON compatible with jmerle/competitive-companion.")
26976 (license license:expat)))
26977
26978(define-public online-judge-tools
26979 (package
26980 (name "online-judge-tools")
26981 (version "11.5.1")
26982 ;; Source distributions are not uploaded to PyPI.
26983 ;; https://pypi.org/project/online-judge-tools/11.5.1/#files
26984 (source
26985 (origin
26986 (method git-fetch)
26987 (uri (git-reference
26988 (url "https://github.com/online-judge-tools/oj")
26989 (commit (string-append "v" version))))
26990 (file-name (git-file-name name version))
26991 (sha256
26992 (base32 "0zkzmmjgjb6lyrzq1ip54cpnp7al9a7mcyjyi5vx58bvnx3q0c6m"))
26993 (patches (search-patches "online-judge-tools.patch"))))
26994 (build-system pyproject-build-system)
26995 (arguments
26996 (list
26997 #:test-flags
26998 ;; These tests require network connections
26999 #~(list "--ignore=tests/command_version.py")))
27000 (native-inputs (list python-pytest python-setuptools))
27001 (inputs (list time))
27002 (propagated-inputs (list python-online-judge-api-client python-colorama
27003 python-requests))
27004 (home-page "https://github.com/online-judge-tools/oj")
27005 (synopsis "Command to help solving problems on various online judges")
27006 (description
27007 "@command{oj} is a command line tool to help solving problems on
27008various online judges. This command automates downloading sample
27009cases, generating additional test cases, testing for your code, and
27010submitting it.")
27011 (license license:expat)))
27012
27013(define-public python-mpv-jsonipc
27014 (package
27015 (name "python-mpv-jsonipc")
27016 (version "1.2.0")
27017 (source
27018 (origin
27019 (method url-fetch)
27020 (uri (pypi-uri "python-mpv-jsonipc" version))
27021 (sha256
27022 (base32 "0ymdwrx544a6gn6wm9dixpgzbfrbpxvcj5ys7m41cgb4lvpvx691"))))
27023 (build-system pyproject-build-system)
27024 (arguments (list #:tests? #f)) ;No test suite.
27025 (native-inputs (list python-setuptools python-wheel))
27026 (home-page "https://github.com/iwalton3/python-mpv-jsonipc")
27027 (synopsis "Python API to control MPV using JSON IPC")
27028 (description "Python MPV JSONIPC implements an interface similar to
27029python-mpv, but it uses the JSON IPC protocol instead of the C API.")
27030 (license license:asl2.0)))
27031
27032(define-public python-jellyfin-apiclient
27033 (package
27034 (name "python-jellyfin-apiclient")
27035 (version "1.11.0")
27036 (source
27037 (origin
27038 (method git-fetch)
27039 (uri
27040 (git-reference
27041 (url "https://github.com/jellyfin/jellyfin-apiclient-python.git")
27042 (commit (string-append "v" version))))
27043 (sha256
27044 (base32 "1l30r7s4djvcsnf342af8mvh4c68v9b37j5y47k6cpaj8fj78lac"))))
27045 (build-system pyproject-build-system)
27046 (native-inputs (list python-setuptools python-pytest python-wheel))
27047 (propagated-inputs (list python-certifi python-requests python-urllib3
27048 python-websocket-client))
27049 (home-page "https://github.com/jellyfin/jellyfin-apiclient-python")
27050 (synopsis "Python API client for Jellyfin")
27051 (description "The Jellyfin ApiClient Python package makes it possible
27052to use the Jellyfin API from Python. It was extracted from the Jellyfin
27053Kodi plugin.")
27054 (license license:gpl3+)))
27055
27056(define-public python-parso
27057 (package
27058 (name "python-parso")
27059 (version "0.8.5")
27060 (source
27061 (origin
27062 (method url-fetch)
27063 (uri (pypi-uri "parso" version))
27064 (sha256
27065 (base32 "0npyvabbvdp9ci3vhpg8dsfmxw2hljlb4j1g6p7bs650m5a76k83"))))
27066 (build-system pyproject-build-system)
27067 (native-inputs
27068 (list python-pytest
27069 python-setuptools))
27070 (home-page "https://github.com/davidhalter/parso")
27071 (synopsis "Python Parser")
27072 (description "Parso is a Python parser that supports error recovery and
27073round-trip parsing for different Python versions (in multiple Python versions).
27074Parso is also able to list multiple syntax errors in your Python file.")
27075 (license license:expat)))
27076
27077(define-public python-async-generator
27078 (package
27079 (name "python-async-generator")
27080 (version "1.10")
27081 (source
27082 (origin
27083 (method url-fetch)
27084 (uri (pypi-uri "async_generator" version))
27085 (sha256
27086 (base32
27087 "0i11f6z6lix8ixi3vsk6s76zvvpmgrw6zjrcwjm0m4hjdh83vfvf"))))
27088 (build-system pyproject-build-system)
27089 (native-inputs
27090 (list python-pytest python-setuptools))
27091 (home-page "https://github.com/python-trio/async_generator")
27092 (synopsis "Async generators and context managers for Python 3.5+")
27093 (description "@code{async_generator} back-ports Python 3.6's native async
27094generators and Python 3.7's context managers into Python 3.5.")
27095 ;; Dual licensed.
27096 (license (list license:expat license:asl2.0))))
27097
27098(define-public python-async-timeout
27099 (package
27100 (name "python-async-timeout")
27101 (version "5.0.1")
27102 (source
27103 (origin
27104 (method url-fetch)
27105 (uri (pypi-uri "async_timeout" version))
27106 (sha256
27107 (base32 "1lvparrx5sfnapaq4mwk0ai7kqrwg6h2ykc2gqc5wsjs7mx1lcnr"))))
27108 (build-system pyproject-build-system)
27109 (native-inputs
27110 (list python-pytest
27111 python-pytest-asyncio
27112 python-setuptools
27113 python-wheel))
27114 (home-page "https://github.com/aio-libs/async-timeout")
27115 (synopsis "Timeout context manager for asyncio programs")
27116 (description
27117 "@code{async-timeout} provides a timeout timeout context manager
27118compatible with @code{asyncio}.")
27119 (license license:asl2.0)))
27120
27121(define-public python-async-timeout-4
27122 (package
27123 (inherit python-async-timeout)
27124 (name "python-async-timeout")
27125 (version "4.0.3")
27126 (source
27127 (origin
27128 (method url-fetch)
27129 (uri (pypi-uri "async-timeout" version))
27130 (sha256
27131 (base32 "0bsj4z28ggxh1b6h6dvhx2mk6yqgb88bg8lyslpd10jdx1mxjh26"))))))
27132
27133(define-public python-glob2
27134 (package
27135 (name "python-glob2")
27136 (version "0.7")
27137 (source
27138 (origin
27139 (method git-fetch)
27140 (uri (git-reference
27141 (url "https://github.com/miracle2k/python-glob2")
27142 (commit (string-append "v" version))))
27143 (file-name (git-file-name name version))
27144 (sha256
27145 (base32 "160nh2ay9lw2hi0rixpzb2k87r6ql56k0j2cm87lqz8xc8zbw919"))))
27146 (build-system pyproject-build-system)
27147 (arguments
27148 (list
27149 #:phases
27150 #~(modify-phases %standard-phases
27151 (add-after 'unpack 'patch-tests-for-pytest8
27152 ;; See: <https://github.com/miracle2k/python-glob2/issues/30>.
27153 (lambda _
27154 (substitute* "test.py"
27155 (("setup\\(") "setup_method(")
27156 (("teardown\\(") "teardown_method("))
27157 (rename-file "test.py" "glob2_test.py"))))))
27158 (native-inputs (list python-pytest python-setuptools))
27159 (home-page "https://github.com/miracle2k/python-glob2/")
27160 (synopsis "Extended Version of the python buildin glob module")
27161 (description "This is an extended version of the Python
27162@url{http://docs.python.org/library/glob.html, built-in glob module} which
27163adds:
27164
27165@itemize
27166@item The ability to capture the text matched by glob patterns, and return
27167those matches alongside the file names.
27168@item A recursive @code{**} globbing syntax, akin for example to the
27169@code{globstar} option of Bash.
27170@item The ability to replace the file system functions used, in order to glob
27171on virtual file systems.
27172@item Compatible with Python 2 and Python 3 (tested with 3.3).
27173@end itemize
27174
27175Glob2 currently based on the glob code from Python 3.3.1.")
27176 (license license:bsd-2)))
27177
27178(define-public python-gipc
27179 (package
27180 (name "python-gipc")
27181 (version "1.8.0")
27182 (source
27183 (origin
27184 (method git-fetch)
27185 (uri (git-reference
27186 (url "https://github.com/jgehrcke/gipc")
27187 (commit version)))
27188 (file-name (git-file-name name version))
27189 (sha256
27190 (base32 "18w1fi3gh8i3kl58n6jpixzc2w42znxqhb3lj6hwn1641wq2hyrz"))))
27191 (build-system pyproject-build-system)
27192 (arguments
27193 (list
27194 #:phases
27195 #~(modify-phases %standard-phases
27196 (add-after 'unpack 'adjust-for-pytest-8
27197 (lambda _
27198 (substitute* "test/test_gipc.py"
27199 (("def setup") "def setup_method")
27200 (("def teardown") "def teardown_method")))))))
27201 (native-inputs
27202 (list python-pytest
27203 python-setuptools))
27204 (propagated-inputs
27205 (list python-gevent))
27206 (home-page "https://gehrcke.de/gipc/")
27207 (synopsis "Child process management in the context of gevent")
27208 (description
27209 "Usage of Python's multiprocessing package in a gevent-powered
27210application may raise problems. With @code{gipc}, process-based child
27211processes can safely be created anywhere within a gevent-powered
27212application.")
27213 (license license:expat)))
27214
27215(define-public python-beautifultable
27216 (package
27217 (name "python-beautifultable")
27218 (version "1.1.0")
27219 (source
27220 (origin
27221 (method git-fetch)
27222 (uri (git-reference
27223 (url "https://github.com/pri22296/beautifultable")
27224 (commit (string-append "v" version))))
27225 (file-name (git-file-name name version))
27226 (sha256
27227 (base32 "0b6c7dpc45sm3vn65qm00q20sdgpi78xxzwc0rij7hnj9c45w97x"))))
27228 (build-system pyproject-build-system)
27229 (arguments (list #:test-backend #~'unittest))
27230 (native-inputs (list python-pandas python-setuptools))
27231 (propagated-inputs (list python-wcwidth))
27232 (home-page "https://github.com/pri22296/beautifultable")
27233 (synopsis "Print ASCII tables for terminals")
27234 (description
27235 "@code{python-beautifultable} provides a class for easily printing
27236tabular data in a visually appealing ASCII format to a terminal.
27237
27238Features include, but are not limited to:
27239@itemize
27240@item Full customization of the look and feel of the table
27241@item Row and column accessors.
27242@item Full support for colors using ANSI sequences or any library.
27243@item Plenty of predefined styles and option to create custom ones.
27244@item Support for Unicode characters.
27245@item Supports streaming table when data is slow to retrieve.
27246@end itemize")
27247 (license license:expat)))
27248
27249(define-public python-globber
27250 (package
27251 (name "python-globber")
27252 (version "0.2.1")
27253 (source
27254 (origin
27255 (method git-fetch)
27256 (uri (git-reference
27257 (url "https://github.com/asharov/globber")
27258 (commit version)))
27259 (file-name (git-file-name name version))
27260 (sha256
27261 (base32 "055xf7ja7zjhxis0ab5fnfsx16fsvr5fvc6mixqybanwxh8sgfjk"))))
27262 (build-system pyproject-build-system)
27263 (native-inputs (list python-pytest python-setuptools))
27264 (home-page "https://github.com/asharov/globber")
27265 (synopsis "Library for string matching with glob patterns")
27266 (description
27267 "Globber is a Python library for matching file names against glob patterns.
27268In contrast to other glob-matching libraries, it matches arbitrary strings and
27269doesn't require the matched names to be existing files. In addition, it
27270supports the globstar @code{**} operator to match an arbitrary number of
27271path components.")
27272 (license license:asl2.0)))
27273
27274;; XXX: Not maintained since 2021.
27275(define-public python-git-hammer
27276 (package
27277 (name "python-git-hammer")
27278 (version "0.3.2")
27279 (source
27280 (origin
27281 (method git-fetch)
27282 (uri (git-reference
27283 (url "https://github.com/asharov/git-hammer")
27284 (commit version)))
27285 (file-name (git-file-name name version))
27286 (sha256
27287 (base32 "0j0skpbhi7js45hp1w2n87093yz1hjdg5y3kicwvm84fb8i38gvx"))))
27288 (build-system pyproject-build-system)
27289 (arguments
27290 (list
27291 #:phases
27292 #~(modify-phases %standard-phases
27293 (add-after 'unpack 'relax-requirements
27294 (lambda _
27295 (substitute* "setup.py"
27296 (("matplotlib <3.1") "matplotlib")))))))
27297 (native-inputs
27298 (list python-pytest
27299 python-setuptools))
27300 (propagated-inputs
27301 (list python-beautifultable
27302 python-dateutil
27303 python-gitpython
27304 python-globber
27305 python-matplotlib
27306 python-sqlalchemy
27307 python-sqlalchemy-utils))
27308 (home-page "https://github.com/asharov/git-hammer")
27309 (synopsis "Provide statistics for git repositories")
27310 (description
27311 "Git Hammer is a statistics tool for projects in git repositories. Its major
27312feature is tracking the number of lines authored by each person for every
27313commit, but it also includes some other useful statistics.")
27314 (license license:asl2.0)))
27315
27316(define-public python-gitignore-parser
27317 (package
27318 (name "python-gitignore-parser")
27319 (version "0.1.13")
27320 (source
27321 (origin
27322 (method git-fetch)
27323 (uri (git-reference
27324 (url "https://github.com/mherrmann/gitignore_parser")
27325 (commit (string-append "v" version))))
27326 (file-name (git-file-name name version))
27327 (sha256
27328 (base32 "0lx1lip9p70my7z77szxc6izg3dj3000r6z71f2bnx2z13rl5pld"))))
27329 (build-system pyproject-build-system)
27330 (arguments (list #:test-backend #~'unittest))
27331 (native-inputs (list python-setuptools))
27332 (home-page "https://github.com/mherrmann/gitignore_parser")
27333 (synopsis "Spec-compliant gitignore parser for Python")
27334 (description
27335 "This package provides a spec-compliant gitignore parser for Python.")
27336 (license license:expat)))
27337
27338(define-public python-fusepy
27339 (package
27340 (name "python-fusepy")
27341 (version "2.0.4")
27342 (source
27343 (origin
27344 (method git-fetch)
27345 (uri (git-reference
27346 (url "https://github.com/fusepy/fusepy")
27347 (commit (string-append "v" version))))
27348 (file-name (git-file-name name version))
27349 (sha256
27350 (base32 "10smh49lzmqam6ddxcnp1dajy4s9hi5ri3qp1rhwdyfsaq3pay81"))))
27351 (build-system pyproject-build-system)
27352 (arguments
27353 (list
27354 #:tests? #f ; No formalized tests.
27355 #:phases
27356 #~(modify-phases %standard-phases
27357 (add-before 'build 'set-library-file-name
27358 (lambda* (#:key inputs #:allow-other-keys)
27359 (substitute* "fuse.py"
27360 (("find_library\\('fuse'\\)")
27361 (format #f "~s"
27362 (search-input-file inputs "lib/libfuse.so")))))))))
27363 (native-inputs (list python-setuptools))
27364 (propagated-inputs (list fuse-2))
27365 (home-page "https://github.com/fusepy/fusepy")
27366 (synopsis "Simple ctypes bindings for FUSE")
27367 (description
27368 "Python module that provides a simple interface to FUSE and MacFUSE. The
27369binding is created using the standard @code{ctypes} library.")
27370 (license license:isc)))
27371
27372(define-public pybind11-2
27373 (package
27374 (name "pybind11")
27375 (version "2.13.6")
27376 (source (origin
27377 (method git-fetch)
27378 (uri (git-reference
27379 (url "https://github.com/pybind/pybind11")
27380 (commit (string-append "v" version))))
27381 (sha256
27382 (base32
27383 "1dbnki0pnky39kr04afd9ks597bzjc530zbk33jjss53nfvdvlj8"))
27384 (file-name (git-file-name name version))))
27385 (build-system cmake-build-system)
27386 (arguments
27387 (list
27388 #:configure-flags
27389 #~(list (string-append "-DCATCH_INCLUDE_DIR="
27390 (assoc-ref %build-inputs "catch2")
27391 "/include/catch"))
27392 #:modules '((guix build cmake-build-system)
27393 ((guix build gnu-build-system) #:prefix gnu:)
27394 (guix build utils))
27395 #:phases
27396 #~(modify-phases %standard-phases
27397 (replace 'check
27398 (lambda args
27399 (apply (assoc-ref gnu:%standard-phases 'check) args)))
27400 (add-after 'install 'install-python
27401 (lambda _
27402 (with-directory-excursion "../source"
27403 (setenv "PYBIND11_USE_CMAKE" "yes")
27404 (invoke "python" "setup.py" "install"
27405 "--single-version-externally-managed"
27406 "--root=/"
27407 (string-append "--prefix=" #$output))))))))
27408 (native-inputs
27409 (list catch2-1
27410 eigen
27411 python-pytest
27412 python-setuptools
27413 python-wrapper))
27414 (home-page "https://github.com/pybind/pybind11/")
27415 (synopsis "Seamless operability between C++11 and Python")
27416 (description
27417 "@code{pybind11} is a lightweight header-only library that exposes C++
27418types in Python and vice versa, mainly to create Python bindings of existing
27419C++ code. Its goals and syntax are similar to the @code{Boost.Python}
27420library: to minimize boilerplate code in traditional extension modules by
27421inferring type information using compile-time introspection.")
27422 (license license:bsd-3)))
27423
27424(define-public pybind11
27425 (package
27426 (name "pybind11")
27427 (version "3.0.2")
27428 (source (origin
27429 (method git-fetch)
27430 (uri (git-reference
27431 (url "https://github.com/pybind/pybind11")
27432 (commit (string-append "v" version))))
27433 (sha256
27434 (base32
27435 "1ad4fnn4p2m3sradxxd9wfnll3pa44aw081b6ssh3pq95xqpwksg"))
27436 (file-name (git-file-name name version))))
27437 (build-system cmake-build-system)
27438 (arguments
27439 (list
27440 #:configure-flags
27441 #~(list (string-append "-DCATCH_INCLUDE_DIR="
27442 (assoc-ref %build-inputs "catch2")
27443 "/include/catch"))
27444 #:modules '((guix build cmake-build-system)
27445 ((guix build gnu-build-system) #:prefix gnu:)
27446 (guix build utils))
27447 #:phases
27448 #~(modify-phases %standard-phases
27449 (replace 'check
27450 (lambda args
27451 (apply (assoc-ref gnu:%standard-phases 'check) args)))
27452 (add-after 'install 'build-python-library
27453 (lambda _
27454 (with-directory-excursion "../source"
27455 (setenv "PYBIND11_USE_CMAKE" "yes")
27456 (invoke "pip" "install" "--no-deps" "--no-build-isolation"
27457 "--prefix" #$output ".")))))))
27458 (inputs (list boost))
27459 (native-inputs
27460 (list catch2-1
27461 eigen
27462 python-pytest
27463 python-setuptools
27464 python-wrapper
27465 python-scikit-build-core))
27466 (home-page "https://github.com/pybind/pybind11/")
27467 (synopsis "Seamless operability between C++11 and Python")
27468 (description
27469 "@code{pybind11} is a lightweight header-only library that exposes C++
27470types in Python and vice versa, mainly to create Python bindings of existing
27471C++ code. Its goals and syntax are similar to the @code{Boost.Python}
27472library: to minimize boilerplate code in traditional extension modules by
27473inferring type information using compile-time introspection.")
27474 (license license:bsd-3)))
27475
27476(define-public python-pooch
27477 (package
27478 (name "python-pooch")
27479 (version "1.8.1")
27480 (source
27481 (origin
27482 (method url-fetch)
27483 (uri (pypi-uri "pooch" version))
27484 (sha256
27485 (base32 "0w32fhfp67k0ip0gxjpw8kxdx9ghybxmqkv9sbwy99nrgl4n7vr7"))))
27486 (build-system pyproject-build-system)
27487 (arguments
27488 (list
27489 #:test-flags
27490 '(list "-k"
27491 (string-append
27492 ;; We don't have the test archives
27493 "not test_decompress"
27494 " and not test_multiple_unpacking"
27495 " and not test_unpack_members_with_leading_dot"
27496 " and not test_unpacking"
27497 " and not test_unpacking_members_then_no_members"
27498 " and not test_unpacking_wrong_members_then_no_members"
27499 ;; These all require access to the internet
27500 " and not test_check_availability"
27501 " and not test_check_availability_invalid_downloader"
27502 " and not test_check_availability_on_ftp"
27503 " and not test_create_and_fetch"
27504 " and not test_downloader_arbitrary_progressbar"
27505 " and not test_fetch_with_downloader"
27506 " and not test_figshare_data_repository_versions"
27507 " and not test_load_registry_from_doi"
27508 " and not test_pooch_corrupted"
27509 " and not test_pooch_custom_url"
27510 " and not test_pooch_download"
27511 " and not test_pooch_download_retry"
27512 " and not test_pooch_download_retry_fails_eventually"
27513 " and not test_pooch_download_retry_off_by_default"
27514 " and not test_pooch_logging_level"
27515 " and not test_pooch_update"
27516 " and not test_retrieve"
27517 " and not test_retrieve_default_path"
27518 " and not test_retrieve_fname"
27519 " and not test_stream_download")
27520 "--ignore=pooch/tests/test_downloaders.py")))
27521 (native-inputs
27522 (list python-pytest
27523 python-setuptools-scm
27524 python-setuptools
27525 python-wheel))
27526 (propagated-inputs
27527 (list python-packaging python-platformdirs python-requests))
27528 (home-page "https://github.com/fatiando/pooch")
27529 (synopsis "Manage your Python library's sample data files")
27530 (description
27531 "Pooch manages your Python library's sample data files: it automatically
27532downloads and stores them in a local directory, with support for versioning
27533and corruption checks.")
27534 (license license:bsd-3)))
27535
27536(define-public python-fasteners
27537 (package
27538 (name "python-fasteners")
27539 (version "0.20")
27540 (source (origin
27541 ;; No tests in the pypi tarball
27542 (method git-fetch)
27543 (uri (git-reference
27544 (url "https://github.com/harlowja/fasteners")
27545 (commit version)))
27546 (file-name (git-file-name name version))
27547 (sha256
27548 (base32
27549 "0zf28x5n3svkxan97r89331s7dy0prix7111m0hf3mx5gk3nbj47"))))
27550 (build-system pyproject-build-system)
27551 (native-inputs (list python-diskcache python-eventlet python-more-itertools
27552 python-setuptools python-pytest))
27553 (home-page "https://github.com/harlowja/fasteners")
27554 (synopsis "Python package that provides useful locks")
27555 (description
27556 "This package provides a Python program that provides following locks:
27557
27558@itemize
27559@item Locking decorator
27560@item Reader-writer locks
27561@item Inter-process locks
27562@item Generic helpers
27563@end itemize\n")
27564 (license license:asl2.0)))
27565
27566(define-public python-requests-file
27567 (package
27568 (name "python-requests-file")
27569 (version "3.0.1")
27570 (source
27571 (origin
27572 (method git-fetch)
27573 (uri (git-reference
27574 (url "https://codeberg.org/dashea/requests-file")
27575 (commit version)))
27576 (file-name (git-file-name name version))
27577 (sha256
27578 (base32 "0wvz2fkx01libz731a9pfx0l5p44cd33ba8gs7kw5dksfzfwvark"))))
27579 (build-system pyproject-build-system)
27580 (native-inputs (list python-pytest python-setuptools))
27581 (propagated-inputs (list python-requests))
27582 (home-page "https://codeberg.org/dashea/requests-file")
27583 (synopsis "File transport adapter for Requests")
27584 (description
27585 "Requests-File is a transport adapter for use with the Requests Python
27586library to allow local file system access via @code{file://} URLs.")
27587 (license license:asl2.0)))
27588
27589(define-public python-identify
27590 (package
27591 (name "python-identify")
27592 (version "2.6.14")
27593 (source
27594 (origin
27595 ;; There are no tests in the PyPI tarball.
27596 (method git-fetch)
27597 (uri (git-reference
27598 (url "https://github.com/chriskuehl/identify")
27599 (commit (string-append "v" version))))
27600 (file-name (git-file-name name version))
27601 (sha256
27602 (base32 "1fbl7wvhky4rlv37p0531xnl037lq58d8wsxgyylj371bfz3m3wp"))))
27603 (build-system pyproject-build-system)
27604 (native-inputs
27605 (list python-pytest
27606 python-setuptools
27607 python-ukkonen))
27608 (home-page "https://github.com/chriskuehl/identify")
27609 (synopsis "File identification library for Python")
27610 (description
27611 "@code{identify} is a file identification library for Python. Given
27612a file (or some information about a file), return a set of standardized tags
27613identifying what the file is.")
27614 (license license:expat)))
27615
27616(define-public python-nodeenv
27617 (package
27618 (name "python-nodeenv")
27619 (version "1.8.0")
27620 (source
27621 (origin
27622 ;; There's no tarball in PyPI.
27623 (method git-fetch)
27624 (uri (git-reference
27625 (url "https://github.com/ekalinin/nodeenv")
27626 (commit version)))
27627 (file-name (git-file-name name version))
27628 (sha256
27629 (base32 "0g8zp8zw5nnfc14ml0sil9yh7lnpz3xrdkazdkwg6pf5jqsxlvv9"))))
27630 (build-system pyproject-build-system)
27631 (arguments
27632 (list #:test-flags
27633 #~(list "-k" (string-append
27634 "not test_smoke"
27635 " and not test_smoke_n_system_special_chars"))))
27636 (native-inputs
27637 (list python-mock
27638 python-pytest
27639 python-setuptools
27640 python-wheel))
27641 (home-page "https://ekalinin.github.io/nodeenv/")
27642 (synopsis "Create isolated node.js environments")
27643 (description
27644 "Nodeenv (node.js virtual environment) is a tool to create isolated
27645node.js environments. It creates an environment that has its own installation
27646directories, that doesn't share libraries with other node.js virtual
27647environments.")
27648 (license license:bsd-3)))
27649
27650(define-public python-pynamecheap
27651 (package
27652 (name "python-pynamecheap")
27653 (version "0.0.3")
27654 (source
27655 (origin
27656 (method url-fetch)
27657 (uri (pypi-uri "PyNamecheap" version))
27658 (sha256
27659 (base32 "0wkbwz208j8nfrsmzmclvxg22ymknn0mlz76wbdza9k2bx2zja6l"))))
27660 (build-system pyproject-build-system)
27661 (arguments (list #:tests? #f)) ; No tests.
27662 (native-inputs (list python-setuptools))
27663 (propagated-inputs (list python-requests))
27664 (home-page "https://github.com/Bemmu/PyNamecheap")
27665 (synopsis "Namecheap API client in Python")
27666 (description
27667 "PyNamecheap is a Namecheap API client in Python.")
27668 (license license:expat)))
27669
27670(define-public python-pynput
27671 (package
27672 (name "python-pynput")
27673 (version "1.8.1")
27674 (source
27675 (origin
27676 (method git-fetch)
27677 (uri (git-reference
27678 (url "https://github.com/moses-palmer/pynput")
27679 (commit (string-append "v" version))))
27680 (file-name (git-file-name name version))
27681 (sha256
27682 (base32 "00lnram5rm0amp5c1cjsw476bzi59g9m3l76ra29mp4jnz519sdc"))))
27683 (build-system pyproject-build-system)
27684 (arguments
27685 (list
27686 #:tests? #f ;XXX: tests can't be found with pytest or unittest
27687 #:phases
27688 #~(modify-phases %standard-phases
27689 (add-after 'unpack 'relax-requirements
27690 (lambda _
27691 (substitute* "setup.py"
27692 (("RUNTIME_PACKAGES \\+ SETUP_PACKAGES")
27693 "RUNTIME_PACKAGES"))))
27694 (add-before 'sanity-check 'start-xserver
27695 (lambda* (#:key inputs #:allow-other-keys)
27696 (let ((Xvfb (search-input-file inputs "/bin/Xvfb")))
27697 (system (format #f "~a :1 -screen 0 640x480x24 &"
27698 Xvfb))
27699 (setenv "DISPLAY" ":1")))))))
27700 (propagated-inputs
27701 (list python-evdev python-xlib))
27702 (native-inputs
27703 (list python-setuptools xorg-server-for-tests))
27704 (home-page "https://github.com/moses-palmer/pynput")
27705 (synopsis "Send virtual input commands")
27706 (description
27707 "This package provides tools to monitor and control user input devices in
27708Python.")
27709 (license license:lgpl3)))
27710
27711(define-public python-pynixutil
27712 (package
27713 (name "python-pynixutil")
27714 (version "0.5.0")
27715 (source
27716 (origin
27717 (method git-fetch)
27718 (uri (git-reference
27719 (url "https://github.com/nix-community/pynixutil")
27720 (commit version)))
27721 (file-name (git-file-name name version))
27722 (sha256
27723 (base32 "1lnspcai7mqpv73bbd8kgyw63fxwgkwvfkl09b2bl5y2g2v7np6m"))))
27724 (build-system pyproject-build-system)
27725 (arguments
27726 (list
27727 #:test-flags
27728 ;; Tests require nix in the PATH.
27729 #~(list "--ignore=tests/test_drv.py")
27730 #:phases
27731 #~(modify-phases %standard-phases
27732 (add-after 'unpack 'use-poetry-core
27733 (lambda _
27734 ;; Patch to use the core poetry API.
27735 (substitute* "pyproject.toml"
27736 (("poetry.masonry.api") "poetry.core.masonry.api")))))))
27737 (native-inputs
27738 (list python-poetry-core
27739 python-pytest))
27740 (home-page "https://github.com/nix-community/pynixutil")
27741 (synopsis "Utility functions for working with data from Nix in Python")
27742 (description
27743 "@code{pynixutil} provides functions for base32 encoding/decoding and
27744derivation parsing, namingly @code{b32decode()}, @code{b32encode()} and
27745@code{drvparse()}.")
27746 (license license:expat)))
27747
27748(define-public python-dns-lexicon
27749 (package
27750 (name "python-dns-lexicon")
27751 (version "3.21.1")
27752 (source
27753 (origin
27754 (method git-fetch)
27755 (uri (git-reference
27756 (url "https://github.com/dns-lexicon/dns-lexicon")
27757 (commit (string-append "v" version))))
27758 (file-name (git-file-name name version))
27759 (sha256
27760 (base32 "138j8nrkrisn7kh5rqi2wz130p6vr4bkaw1pmbfpjkdjk118ng8c"))))
27761 (build-system pyproject-build-system)
27762 (arguments
27763 (list
27764 ;; Integration tests require network access.
27765 #:test-flags #~(list "--ignore-glob=tests/providers/*.py")
27766 #:phases
27767 #~(modify-phases %standard-phases
27768 (add-before 'check 'configure-tests
27769 (lambda _
27770 (setenv "HOME" (getcwd)))))))
27771 (native-inputs (list nss-certs-for-test python-hatchling python-pytest))
27772 (propagated-inputs
27773 (list python-beautifulsoup4
27774 python-cryptography
27775 python-dnspython
27776 python-pyotp
27777 python-pyyaml
27778 python-requests
27779 python-tldextract))
27780 (home-page "https://github.com/dns-lexicon/dns-lexicon")
27781 (synopsis "Manipulate DNS records on various DNS providers")
27782 (description
27783 "Lexicon provides a way to manipulate DNS records on multiple DNS
27784providers in a standardized way. It has a CLI but it can also be used as a
27785Python library. It was designed to be used in automation, specifically with
27786Let's Encrypt.")
27787 (license license:expat)))
27788
27789(define-public python-cfgv
27790 (package
27791 (name "python-cfgv")
27792 (version "3.4.0")
27793 (source
27794 (origin
27795 ;; There are no tests in the PyPI tarball.
27796 (method git-fetch)
27797 (uri (git-reference
27798 (url "https://github.com/asottile/cfgv")
27799 (commit (string-append "v" version))))
27800 (file-name (git-file-name name version))
27801 (sha256
27802 (base32 "0g7jg6dssyax6k85lk8afs8qdzgq138g6ij0jmmhgdv5fzks6k9z"))))
27803 (build-system pyproject-build-system)
27804 (native-inputs
27805 (list python-pytest python-setuptools python-wheel))
27806 (home-page "https://github.com/asottile/cfgv")
27807 (synopsis "Configuration validation library")
27808 (description
27809 "This library helps to validate configuration files and produce human
27810readable error messages.")
27811 (license license:expat)))
27812
27813(define-public python-commandlines
27814 (package
27815 (name "python-commandlines")
27816 (version "0.4.1")
27817 (source
27818 (origin
27819 (method git-fetch)
27820 (uri (git-reference
27821 (url "https://github.com/chrissimpkins/commandlines")
27822 (commit (string-append "v" version))))
27823 (file-name (git-file-name name version))
27824 (sha256
27825 (base32 "03mxsknqbiwdl4cydnmr3dbid5rh1y1pwfcnbf6k4sf0wiw98y67"))))
27826 (build-system pyproject-build-system)
27827 (native-inputs (list python-pytest python-setuptools))
27828 (home-page "https://github.com/chrissimpkins/commandlines")
27829 (synopsis "Command line argument to object parsing library")
27830 (description
27831 "@code{Commandlines} is a Python library for command line application
27832development that supports command line argument parsing, command string
27833validation testing and application logic.")
27834 (license license:expat)))
27835
27836;; Make sure to upgrade python-llvmlite in (gnu packages llvm) together with
27837;; python-numba. They have a very inflexible relationship.
27838(define-public python-numba
27839 (package
27840 (name "python-numba")
27841 (version "0.62.1")
27842 (source
27843 (origin
27844 (method url-fetch)
27845 (uri (pypi-uri "numba" version))
27846 (sha256
27847 (base32
27848 "0qai1npy5x2p68872zi6hr97sxdmwmigr8802b1383l9m9144xvv"))))
27849 (build-system pyproject-build-system)
27850 (arguments
27851 (list
27852 ;; tests: 10723 tests (skipped=708, expected failures=23)
27853 #:test-backend #~'custom
27854 #:test-flags
27855 ;; Check <buildscripts> directory for more build/tests examples.
27856 #~(list "-m" "numba.runtests"
27857 "--exclude-tags='long_running'"
27858 "--multiprocess" (number->string (min 8 (parallel-job-count)))
27859 "-b"
27860 "-v"
27861 "--"
27862 "numba.tests")
27863 #:phases
27864 #~(modify-phases %standard-phases
27865 (add-after 'unpack 'disable-failing-tests
27866 (lambda _
27867 ;; This expects to be able to run pip.
27868 (delete-file "numba/tests/test_sysinfo.py")
27869 ;; This fails nondeterministically, possibly depending on CPU.
27870 ;; https://github.com/numba/numba/issues/8282.
27871 (substitute* "numba/tests/test_function_type.py"
27872 (("def test_wrapper_address_protocol_libm")
27873 "def disabled_test_wrapper_address_protocol_libm"))
27874 (substitute* "numba/tests/test_caching.py"
27875 ;; RuntimeError: cannot cache function 'simple_usecase': no
27876 ;; locator available for file
27877 (("def test_non_creatable_pycache")
27878 "def __off_test_non_creatable_pycache")
27879 (("def test_non_writable_pycache")
27880 "def __off_test_non_writable_pycache")
27881 ;; AssertionError: None is not an instance of <class
27882 ;; 'numba.core.caching.UserWideCacheLocator'>
27883 (("def test_frozen")
27884 "def __off_test_frozen"))))
27885 (add-before 'build 'disable-proprietary-features
27886 (lambda _
27887 (setenv "NUMBA_DISABLE_HSA" "1")
27888 (setenv "NUMBA_DISABLE_CUDA" "1")))
27889 (add-before 'check 'pre-check
27890 (lambda _
27891 (setenv "HOME" "/tmp")
27892 ;; XXX: Something is wrong with the PYTHONPATH when running the
27893 ;; tests from the build directory, as it complains about not
27894 ;; being able to import certain modules.
27895 (delete-file-recursively "numba"))))))
27896 (native-inputs
27897 (list python-setuptools))
27898 (propagated-inputs
27899 (list python-llvmlite
27900 python-numpy))
27901 (home-page "https://numba.pydata.org")
27902 (synopsis "Compile Python code using LLVM")
27903 (description "Numba gives you the power to speed up your applications with
27904high performance functions written directly in Python. With a few
27905annotations, array-oriented and math-heavy Python code can be just-in-time
27906compiled to native machine instructions, similar in performance to C, C++ and
27907Fortran, without having to switch languages or Python interpreters.
27908
27909Numba works by generating optimized machine code using the LLVM compiler
27910infrastructure at import time, runtime, or statically (using the included pycc
27911tool).")
27912 (license license:bsd-3)))
27913
27914(define-public python-numcodecs
27915 (package
27916 (name "python-numcodecs")
27917 (version "0.13.1")
27918 ;; python-zarr does not want versions 0.14.0 or 0.14.1.
27919 ;;(version "0.14.1")
27920 (source
27921 (origin
27922 (method url-fetch)
27923 (uri (pypi-uri "numcodecs" version))
27924 (sha256
27925 (base32
27926 "1g09fwhgmhmw66x5gzmzhm8yhgqki3gpfi0dkhx8z2gh3n43gkx3"))
27927 (modules '((guix build utils)))
27928 (snippet
27929 '(begin
27930 ;; Only add CFLAGS on architectures where they are supported
27931 (substitute* "setup.py"
27932 (("import sys")
27933 "import sys\nimport platform")
27934 (("os\\.name == 'posix'")
27935 (string-append "os.name + platform.machine() == 'posixx86_64' or"
27936 " os.name + platform.machine() == 'posixx86'")))
27937 (delete-file-recursively "c-blosc")))))
27938 (build-system pyproject-build-system)
27939 (arguments
27940 (list
27941 #:test-flags
27942 ;; zarr isn't available, because it dependes on this package.
27943 '(list "-k" "not test_zarr3_import")
27944 #:phases
27945 '(modify-phases %standard-phases
27946 (add-after 'unpack 'disable-avx2
27947 (lambda _
27948 (setenv "DISABLE_NUMCODECS_AVX2" "1")))
27949 (add-after 'unpack 'unbundle
27950 (lambda _
27951 (substitute* "setup.py"
27952 (("sources=sources \\+ blosc_sources,")
27953 "sources=sources,")
27954 (("extra_compile_args=extra_compile_args")
27955 "extra_compile_args=list(base_compile_args)")
27956 (("'numcodecs.zstd',")
27957 "'numcodecs.zstd', libraries=['zstd'], ")
27958 (("'numcodecs.lz4',")
27959 "'numcodecs.lz4', libraries=['lz4'], ")
27960 (("'numcodecs.blosc',")
27961 "'numcodecs.blosc', libraries=['blosc'], "))))
27962 (add-before 'check 'build-extensions
27963 (lambda _
27964 ;; Cython extensions have to be built before running the tests.
27965 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
27966 (inputs
27967 (list c-blosc lz4 zlib
27968 `(,zstd "lib")))
27969 (propagated-inputs
27970 (list python-google-crc32c
27971 python-importlib-metadata
27972 python-msgpack
27973 python-numpy))
27974 (native-inputs
27975 (list python-cython
27976 python-py-cpuinfo
27977 python-pydata-sphinx-theme
27978 python-pytest
27979 python-setuptools
27980 python-setuptools-scm ;for correct version
27981 python-sphinx
27982 python-sphinx-issues))
27983 (home-page "https://github.com/zarr-developers/numcodecs")
27984 (synopsis "Buffer compression and transformation codecs")
27985 (description
27986 "This Python package provides buffer compression and transformation
27987codecs for use in data storage and communication applications.")
27988 (license license:expat)))
27989
27990(define-public python-asciitree
27991 (package
27992 (name "python-asciitree")
27993 (version "0.3.3")
27994 (source
27995 (origin
27996 (method git-fetch)
27997 (uri (git-reference
27998 (url "https://github.com/mbr/asciitree")
27999 (commit version)))
28000 (file-name (git-file-name name version))
28001 (sha256
28002 (base32 "071wlpyi8pa262sj9xdy0zbj163z84dasxad363z3sfndqxw78h1"))))
28003 (build-system pyproject-build-system)
28004 (native-inputs (list python-pytest python-setuptools))
28005 (home-page "https://github.com/mbr/asciitree")
28006 (synopsis "Draws ASCII trees")
28007 (description "This package draws tree structures using characters.")
28008 (license license:expat)))
28009
28010(define-public python-dill
28011 (package
28012 (name "python-dill")
28013 (version "0.4.0")
28014 (source
28015 (origin
28016 (method url-fetch)
28017 (uri (pypi-uri "dill" version))
28018 (sha256
28019 (base32 "1w5w5hlijw7ahqji45ssyvdip5pv074h4nw97bsj8ws7vz9g2cq6"))))
28020 (build-system pyproject-build-system)
28021 (arguments
28022 (list
28023 #:phases #~(modify-phases %standard-phases
28024 (replace 'check
28025 (lambda* (#:key tests? #:allow-other-keys)
28026 (if tests?
28027 ;; Extracted from tox.ini
28028 (invoke "python" "dill/tests/__main__.py")
28029 (format #t "test suite not run~%")))))))
28030 (native-inputs
28031 (list python-setuptools python-wheel))
28032 (home-page "https://pypi.org/project/dill/")
28033 (synopsis "Serialize all of Python")
28034 (description "Dill extends Python's @code{pickle} module for serializing
28035and de-serializing Python objects to the majority of the built-in Python
28036types. Dill provides the user the same interface as the @code{pickle} module,
28037and also includes some additional features. In addition to pickling Python
28038objects, @code{dill} provides the ability to save the state of an interpreter
28039session in a single command. Hence, it would be feasible to save a
28040interpreter session, close the interpreter, ship the pickled file to another
28041computer, open a new interpreter, unpickle the session and thus continue from
28042the saved state of the original interpreter session.")
28043 (license license:bsd-3)))
28044
28045(define-public python-multiprocess
28046 (package
28047 (name "python-multiprocess")
28048 (version "0.70.18")
28049 (source
28050 (origin
28051 (method url-fetch)
28052 (uri (pypi-uri "multiprocess" version))
28053 (sha256
28054 (base32
28055 "03bdxiincqq3g66vl3sf5ygagjz5sbrpr83djlipprmkwql72ngr"))))
28056 (build-system pyproject-build-system)
28057 (arguments
28058 (list
28059 #:phases
28060 #~(modify-phases %standard-phases
28061 (add-after 'unpack 'disable-broken-tests
28062 (lambda* (#:key inputs #:allow-other-keys)
28063 ;; The "wait_result" and "shared_memory..." tests are broken as
28064 ;; there is no keyboard interrupt.
28065 ;;
28066 ;; The "preload_resources" test fails as it cannot find
28067 ;; mp_preload.py.
28068 (substitute*
28069 (string-append "py" (python-version
28070 (assoc-ref inputs "python"))
28071 "/multiprocess/tests/__init__.py")
28072 (("^(.*)def test_(\
28073wait_result|\
28074shared_memory_SharedMemoryServer_ignores_sigint|\
28075preload_resources\
28076)" line indent)
28077 (string-append indent
28078 "@unittest.skip(\"Disabled by Guix\")\n"
28079 line)))))
28080 (replace 'check
28081 (lambda* (#:key tests? #:allow-other-keys)
28082 (if tests?
28083 (invoke "python" "-m" "multiprocess.tests")
28084 (format #t "test suite not run~%")))))))
28085 (propagated-inputs
28086 (list python-dill))
28087 (native-inputs (list python-setuptools))
28088 (home-page "https://pypi.org/project/multiprocess/")
28089 (synopsis "Multiprocessing and multithreading in Python")
28090 (description
28091 "This package is a fork of the multiprocessing Python package, a package
28092which supports the spawning of processes using the API of the standard
28093library's @code{threading} module.")
28094 (license license:bsd-3)))
28095
28096(define-public python-multiprocessing-on-dill
28097 (package
28098 (name "python-multiprocessing-on-dill")
28099 (version "3.5.0a4")
28100 (source (origin
28101 (method url-fetch)
28102 (uri (pypi-uri "multiprocessing_on_dill" version))
28103 (sha256
28104 (base32
28105 "1rs5a3hx1fcpfsxxkl5kx6g06c82wqjqgdqyny5l1ggl1wq0rmfn"))))
28106 (build-system pyproject-build-system)
28107 (propagated-inputs (list python-dill))
28108 (native-inputs (list python-pytest python-setuptools python-wheel))
28109 (home-page "https://github.com/sixty-north/multiprocessing_on_dill")
28110 (synopsis "Multiprocessing using dill instead of pickle")
28111 (description
28112 "This package provides a friendly fork of multiprocessing which uses dill
28113instead of pickle.")
28114 (license license:psfl)))
28115
28116(define-public python-cytoolz
28117 (package
28118 (name "python-cytoolz")
28119 (version "1.0.1")
28120 (source
28121 (origin
28122 (method url-fetch)
28123 (uri (pypi-uri "cytoolz" version))
28124 (sha256
28125 (base32 "1mn7n916w8dfij3zq139a4szv12rwp94xxrnfvnv66wyp1hk3k49"))
28126 (modules '((guix build utils)))
28127 (snippet
28128 '(for-each delete-file (find-files "cytoolz" "\\.c$")))))
28129 (build-system pyproject-build-system)
28130 (arguments
28131 (list #:test-flags #~(list "--pyargs" "cytoolz")))
28132 (native-inputs
28133 (list python-cython
28134 python-pytest
28135 python-setuptools
28136 python-wheel))
28137 (propagated-inputs
28138 (list python-toolz))
28139 (home-page "https://github.com/pytoolz/cytoolz")
28140 (synopsis "High performance functional utilities")
28141 (description
28142 "The cytoolz package implements the same API as provided by toolz. The
28143main differences are that @code{cytoolz} is faster and cytoolz offers a C API
28144that is accessible to other projects developed in Cython.")
28145 (license license:bsd-3)))
28146
28147(define-public python-cloudpickle
28148 (package
28149 (name "python-cloudpickle")
28150 (version "3.1.0")
28151 (source
28152 (origin
28153 ;; Archive on pypi does not include test infrastructure.
28154 (method git-fetch)
28155 (uri (git-reference
28156 (url "https://github.com/cloudpipe/cloudpickle")
28157 (commit (string-append "v" version))))
28158 (file-name (git-file-name name version))
28159 (sha256
28160 (base32 "16z0jdg5b1r23vw1l0bwsg40zcmnrbznr4frjac9kq5j6jm4fw6d"))))
28161 (build-system pyproject-build-system)
28162 (native-inputs
28163 (list python-flit-core
28164 python-psutil
28165 python-pytest))
28166 (home-page "https://github.com/cloudpipe/cloudpickle")
28167 (synopsis "Extended pickling support for Python objects")
28168 (description
28169 "Cloudpickle makes it possible to serialize Python constructs not
28170supported by the default pickle module from the Python standard library. It
28171is especially useful for cluster computing where Python expressions are
28172shipped over the network to execute on remote hosts, possibly close to the
28173data.")
28174 (license license:bsd-3)))
28175
28176(define-public python-locket
28177 (package
28178 (name "python-locket")
28179 (version "1.0.0")
28180 (source
28181 (origin
28182 (method git-fetch)
28183 (uri (git-reference
28184 (url "https://github.com/mwilliamson/locket.py")
28185 (commit version)))
28186 (file-name (git-file-name name version))
28187 (sha256
28188 (base32 "0xx57gq5r7x58yd2mq6zxlr2kpzbyb0b5y5hiprgvkib948jxx0p"))))
28189 (build-system pyproject-build-system)
28190 ;; XXX: Requires python-spur, which requires another version of
28191 ;; python-paramiko.
28192 (arguments (list #:tests? #f))
28193 (native-inputs (list python-setuptools))
28194 (home-page "https://github.com/mwilliamson/locket.py")
28195 (synopsis "File-based locks for Python")
28196 (description
28197 "Locket implements a lock that can be used by multiple processes provided
28198they use the same path.")
28199 (license license:bsd-2)))
28200
28201(define-public python-loky
28202 (package
28203 (name "python-loky")
28204 (version "3.5.6")
28205 (source
28206 (origin
28207 (method git-fetch)
28208 (uri (git-reference
28209 (url "https://github.com/joblib/loky")
28210 (commit version)))
28211 (file-name (git-file-name name version))
28212 (sha256
28213 (base32 "02za5z0hcy2mhinl1449ws6z475ydgm1mjxwj345f4kc7x7hj9jz"))))
28214 (build-system pyproject-build-system)
28215 (arguments
28216 (list
28217 #:test-flags
28218 #~(list "-k" (string-join
28219 (list
28220 ;; Requires process control.
28221 "not (test_kill_process_tree"
28222 ;; Hardware dependent tests.
28223 "test_only_physical_cores_error"
28224 ;; Depends on previous results.
28225 "test_wait_result)")
28226 " or "))))
28227 (native-inputs
28228 (list python-packaging
28229 python-psutil
28230 python-pytest
28231 python-setuptools))
28232 (propagated-inputs
28233 (list python-cloudpickle))
28234 (home-page "https://loky.readthedocs.io")
28235 (synopsis "Robust and reusable Executor for joblib")
28236 (description
28237 "This package provides a robust implementation of
28238@code{concurrent.futures.ProcessPoolExecutor}.")
28239 (license license:bsd-3)))
28240
28241(define-public python-partd
28242 (package
28243 (name "python-partd")
28244 (version "1.4.2")
28245 (source
28246 (origin
28247 (method url-fetch)
28248 (uri (pypi-uri "partd" version))
28249 (sha256
28250 (base32 "0b7h42dfvbrwpg75wzszv1rq3237h1g026v24v10b16wzcxc68nh"))))
28251 (build-system pyproject-build-system)
28252 (native-inputs
28253 (list python-pytest
28254 python-setuptools
28255 python-versioneer))
28256 (propagated-inputs
28257 (list python-locket
28258 python-toolz
28259 ;; [complete]
28260 python-blosc
28261 python-numpy
28262 python-pandas
28263 python-pyzmq))
28264 (home-page "https://github.com/dask/partd/")
28265 (synopsis "Appendable key-value storage")
28266 (description
28267 "Partd stores key-value pairs. Values are raw bytes. We append on old
28268values. Partd excels at shuffling operations.")
28269 (license license:bsd-3)))
28270
28271(define-public python-fsspec
28272 (package
28273 (name "python-fsspec")
28274 (version "2026.1.0")
28275 (source
28276 (origin
28277 (method git-fetch)
28278 (uri (git-reference
28279 (url "https://github.com/fsspec/filesystem_spec")
28280 (commit version)))
28281 (file-name (git-file-name name version))
28282 (sha256
28283 (base32 "049ybsinlvaa0br8ijm58jbrwbvaffbdv4gpxjcb2rc06qb4a2wg"))))
28284 (build-system pyproject-build-system)
28285 (arguments
28286 (list
28287 ;; tests: 1500 passed, 267 skipped, 3 deselected, 2 xfailed, 2 warnings
28288 #:test-flags
28289 #~(list "--ignore=fsspec/implementations/tests/test_github.py"
28290 "-k" (string-join
28291 ;; Test requires nentwork access
28292 (list "not test_async_cat_file_ranges"
28293 "test_gist_public_all_files"
28294 "test_gist_public_missing_file"
28295 "test_gist_public_one_file"
28296 ;; Test hangs
28297 "test_processes")
28298 " and not "))))
28299 ;; The most of the inputs are optional, project does not force to include
28300 ;; any dependencies according to pyproject.toml.
28301 (propagated-inputs
28302 (list python-aiohttp python-libarchive-c python-requests python-tqdm))
28303 (native-inputs
28304 (list nss-certs-for-test
28305 python-hatch-vcs
28306 python-hatchling
28307 python-numpy
28308 python-pytest
28309 python-pytest-asyncio
28310 python-pytest-mock
28311 python-pytest-rerunfailures))
28312 (home-page "https://github.com/fsspec/filesystem_spec")
28313 (synopsis "File-system specification")
28314 (description "The purpose of this package is to produce a template or
28315specification for a file-system interface, that specific implementations
28316should follow, so that applications making use of them can rely on a common
28317behavior and not have to worry about the specific internal implementation
28318decisions with any given backend.")
28319 (license license:bsd-3)))
28320
28321(define-public python-ilinkedlist
28322 (package
28323 (name "python-ilinkedlist")
28324 (properties '((commit . "b5ea3f67833071c2e0aba2eac35e82496f469238")
28325 (revision . "0")))
28326 (version (git-version "0.4.0"
28327 (assoc-ref properties 'revision)
28328 (assoc-ref properties 'commit)))
28329 (home-page "https://github.com/luther9/ilinkedlist-py")
28330 (source
28331 (origin
28332 (method git-fetch)
28333 (uri (git-reference
28334 (url home-page)
28335 (commit (assoc-ref properties 'commit))))
28336 (file-name (git-file-name name version))
28337 (sha256
28338 (base32 "0lrs6arzm7dg70ny4ri06alhi40s03n71jsx5hsi0fimvwyvfhch"))))
28339 (build-system pyproject-build-system)
28340 (native-inputs (list python-pytest python-setuptools))
28341 (synopsis "Immutable linked list library")
28342 (description
28343 "This is a implementation of immutable linked lists for Python. It
28344contains @code{nil} (the empty linked list) and a @code{Pair} class for nodes.
28345Since a linked list is treated as immutable, it is hashable, and its length
28346can be retrieved in constant time. Some of the terminology is inspired by
28347LISP. It is possible to create an improper list by creating a @code{Pair}
28348with a non-list @code{cdr}.")
28349 (license license:gpl3+)))
28350
28351(define-public python-readlike
28352 (package
28353 (name "python-readlike")
28354 (version "0.1.3")
28355 (source
28356 (origin
28357 (method git-fetch)
28358 (uri (git-reference
28359 (url "https://github.com/jangler/readlike")
28360 (commit version)))
28361 (file-name (git-file-name name version))
28362 (sha256
28363 (base32 "1mw8j8ads8hqdbz42siwpffi4wi5s33z9g14a5c2i7vxp8m68qc1"))))
28364 (build-system pyproject-build-system)
28365 (native-inputs (list python-pytest python-setuptools))
28366 (home-page "https://github.com/jangler/readlike")
28367 (synopsis "GNU Readline-like line editing module")
28368 (description
28369 "This Python module provides line editing functions similar to the default
28370Emacs-style ones of GNU Readline. Unlike the Python standard library's
28371@code{readline} package, this one allows access to those capabilities in settings
28372outside of a standard command-line interface. It is especially well-suited to
28373interfacing with Urwid, due to a shared syntax for describing key inputs.
28374
28375Currently, all stateless Readline commands are implemented. Yanking and history
28376are not supported.")
28377 (license license:expat)))
28378
28379(define-public python-reparser
28380 (package
28381 (name "python-reparser")
28382 (version "1.4.3")
28383 (source
28384 (origin
28385 (method git-fetch)
28386 (uri (git-reference
28387 (url "https://github.com/xmikos/reparser")
28388 (commit (string-append "v" version))))
28389 (file-name (git-file-name name version))
28390 (sha256
28391 (base32 "04v7h52wny0j2qj37501nk33j0s4amm134kagdicx2is49zylzq1"))))
28392 (build-system pyproject-build-system)
28393 (arguments (list #:tests? #f)) ; No tests.
28394 (native-inputs (list python-setuptools))
28395 (home-page "https://github.com/xmikos/reparser")
28396 (synopsis "Lexer/parser for inline markup based on regular expressions")
28397 (description
28398 "This Python library provides a simple lexer/parser for inline markup based
28399on regular expressions.")
28400 (license license:expat)))
28401
28402(define-public python-retrying
28403 (package
28404 (name "python-retrying")
28405 (version "1.4.1")
28406 (source
28407 (origin
28408 (method git-fetch)
28409 (uri (git-reference
28410 (url "https://github.com/groodt/retrying")
28411 (commit (string-append "v" version))))
28412 (file-name (git-file-name name version))
28413 (sha256
28414 (base32 "0m1kf6mxmxzlf3sldzm50c3hq1hkh6fz1g97pdwyvbwdazb7blw9"))))
28415 (build-system pyproject-build-system)
28416 (native-inputs (list python-pytest python-setuptools))
28417 (home-page "https://github.com/groodt/retrying")
28418 (synopsis "Library for adding retry behavior")
28419 (description "Retrying is a general-purpose retrying library to simplify
28420the task of adding retry behavior to just about anything.
28421
28422Features:
28423
28424@itemize
28425@item Generic Decorator API.
28426@item Specify stop condition (i.e. limit by number of attempts).
28427@item Specify wait condition (i.e. exponential backoff sleeping between attempts).
28428@item Customize retrying on Exceptions.
28429@item Customize retrying on expected returned result.
28430@end itemize")
28431 (license license:asl2.0)))
28432
28433(define-public python-precis-i18n
28434 (package
28435 (name "python-precis-i18n")
28436 (version "1.1.1")
28437 (source
28438 (origin
28439 (method url-fetch)
28440 (uri (pypi-uri "precis_i18n" version))
28441 (sha256
28442 (base32 "0cdv2vbn0kwfq0pxj4l52s2xiaqablb2cgk0nph6r9cyqayf77rn"))))
28443 (build-system pyproject-build-system)
28444 (native-inputs
28445 (list python-pytest
28446 python-setuptools
28447 python-wheel))
28448 (home-page "https://github.com/byllyfish/precis_i18n")
28449 (synopsis "Implementation of the PRECIS framework")
28450 (description
28451 "This module implements the PRECIS Framework as described in RFC 8264,
28452RFC 8265 and RFC 8266.")
28453 (license license:expat)))
28454
28455(define-public python-absl-py
28456 (package
28457 (name "python-absl-py")
28458 (version "2.3.1")
28459 (source
28460 (origin
28461 (method url-fetch)
28462 (uri (pypi-uri "absl_py" version))
28463 (sha256
28464 (base32 "1jbzyyrmvmqwnyh053hdmh6q851sbvrg70yf3gnd5gvzdx920y59"))))
28465 (build-system pyproject-build-system)
28466 (arguments
28467 (list #:tests? #f)) ;tests require bazel
28468 (native-inputs
28469 (list python-hatchling))
28470 (home-page "https://github.com/abseil/abseil-py")
28471 (synopsis "Abseil Python common libraries")
28472 (description
28473 "This package provides the Abseil Python Common Libraries, a collection
28474of Python libraries for building Python applications.")
28475 (license license:asl2.0)))
28476
28477(define-public python-astor
28478 (package
28479 (name "python-astor")
28480 (properties '((commit . "df09001112f079db54e7c5358fa143e1e63e74c4")
28481 (revision . "0")))
28482 (version (git-version "0.8.1"
28483 (assoc-ref properties 'revision)
28484 (assoc-ref properties 'commit)))
28485 (source
28486 (origin
28487 (method git-fetch)
28488 (uri (git-reference
28489 (url "https://github.com/berkerpeksag/astor")
28490 (commit (assoc-ref properties 'commit))))
28491 (file-name (git-file-name name version))
28492 (sha256
28493 (base32 "0ymj0n23b6b4qc6x8ycysh2dipdry5a3gakcaf8nravzp5ma2psl"))))
28494 (build-system pyproject-build-system)
28495 (arguments
28496 (list
28497 ;; FIXME: Unclear why this test fails.
28498 #:test-flags #~(list "--deselect=\
28499tests/test_rtrip.py::RtripTestCase::test_convert_stdlib")))
28500 (native-inputs (list python-pytest python-setuptools))
28501 (home-page "https://github.com/berkerpeksag/astor")
28502 (synopsis "Read and write Python ASTs")
28503 (description
28504 "Astor is designed to allow easy manipulation of Python source via the
28505Abstract Syntax Tree.")
28506 (license license:bsd-3)))
28507
28508(define-public python-astunparse
28509 ;; XXX: No updates since 2019, consider to remove when python-pytorch is
28510 ;; updated.
28511 (package
28512 (name "python-astunparse")
28513 (version "1.6.3")
28514 (source
28515 (origin
28516 (method url-fetch)
28517 (uri (pypi-uri "astunparse" version))
28518 (sha256
28519 (base32 "0wh8jjvwafxc7rvbyb13cdwndkicm7cry1bd8p1q9l7has23mnas"))))
28520 (build-system pyproject-build-system)
28521 (arguments '(#:tests? #f)) ; there are none
28522 (native-inputs
28523 (list python-setuptools))
28524 (propagated-inputs
28525 (list python-six))
28526 (home-page "https://github.com/simonpercivall/astunparse")
28527 (synopsis "AST unparser for Python")
28528 (description "This package provides an AST unparser for Python. It is a
28529factored out version of @code{unparse} found in the Python source
28530distribution.")
28531 (license license:bsd-3)))
28532
28533(define-public python-gast
28534 (package
28535 (name "python-gast")
28536 (version "0.6.0")
28537 (source
28538 (origin
28539 (method url-fetch)
28540 (uri (pypi-uri "gast" version))
28541 (sha256
28542 (base32 "1yxinr3xvxf0cryfrfr9q3rgvrki5y310lsigg5ccyicsc057z48"))))
28543 (build-system pyproject-build-system)
28544 (native-inputs
28545 (list python-pytest python-setuptools python-wheel))
28546 (home-page "https://github.com/serge-sans-paille/gast/")
28547 (synopsis "Generic Python AST that abstracts the underlying Python version")
28548 (description
28549 "GAST provides a compatibility layer between the AST of various Python
28550versions, as produced by @code{ast.parse} from the standard @code{ast}
28551module.")
28552 (license license:bsd-3)))
28553
28554;; XXX: Not maintained since 2022, leaf package.
28555(define-public python-attr
28556 (package
28557 (name "python-attr")
28558 (version "0.3.2")
28559 (source
28560 (origin
28561 (method url-fetch)
28562 (uri (pypi-uri "attr" version))
28563 (sha256
28564 (base32 "1x2627x0n2rxx8wib4cksbjjnncff8finq97k37dq70qd2kvrvhw"))))
28565 (build-system pyproject-build-system)
28566 (arguments
28567 (list #:test-backend #~'custom
28568 #:test-flags #~(list "-c" "import dry_attr; dry_attr.test()")))
28569 (native-inputs
28570 (list python-setuptools))
28571 (home-page "https://github.com/denis-ryzhkov/attr")
28572 (synopsis "Decorator for attributes of target function or class")
28573 (description "Simple decorator to set attributes of target function or
28574class in a @acronym{DRY, Don't Repeat Yourself} way.")
28575 (license license:expat)))
28576
28577(define-public python-construct
28578 ;; Fixes not in a release yet.
28579 (let ((commit "c1171b16bda1d213ba4858f3e0e4d4003e4aae90")
28580 (revision "1"))
28581 (package
28582 (name "python-construct")
28583 (version (git-version "2.10.70" revision commit))
28584 (source
28585 (origin
28586 (method git-fetch)
28587 (uri (git-reference
28588 (url "https://github.com/construct/construct")
28589 (commit commit)))
28590 (file-name (git-file-name name version))
28591 (sha256
28592 (base32 "03f6nvyzrq50nhqqwmmws983wwjg78yd9j09pl94vkmyjph33da5"))))
28593 (build-system pyproject-build-system)
28594 (arguments
28595 (list
28596 #:test-flags #~(list "--ignore=tests/test_benchmarks.py")))
28597 (native-inputs
28598 (list python-pytest python-setuptools))
28599 (propagated-inputs
28600 (list python-arrow
28601 python-cloudpickle
28602 python-cryptography
28603 python-lz4
28604 python-numpy
28605 python-ruamel.yaml))
28606 (home-page "https://construct.readthedocs.io")
28607 (synopsis "Declarative and symmetrical parser and builder for binary data")
28608 (description
28609 "This package provides both simple, atomic constructs (such as
28610integers of various sizes), as well as composite ones which allow you
28611form hierarchical and sequential structures of increasing complexity.
28612It features bit and byte granularity, easy debugging and testing, an
28613easy-to-extend subclass system, and lots of primitive constructs to
28614make your work easier.")
28615 (license license:expat))))
28616
28617(define-public python-outcome
28618 (package
28619 (name "python-outcome")
28620 (version "1.3.0.post0")
28621 (source
28622 (origin
28623 (method url-fetch)
28624 (uri (pypi-uri "outcome" version))
28625 (sha256
28626 (base32 "1f2327wzf57zwqw15kzk19ff2s52fa74cxxk8w0bhw99bzk05kwx"))))
28627 (build-system pyproject-build-system)
28628 (native-inputs
28629 (list python-pytest
28630 python-pytest-asyncio
28631 python-setuptools))
28632 (propagated-inputs
28633 (list python-attrs))
28634 (home-page "https://github.com/python-trio/outcome")
28635 (synopsis "Capture the outcome of Python function calls")
28636 (description
28637 "Capture the outcome of Python function calls. Extracted from the Trio
28638project.")
28639 ;; Either license applies.
28640 (license (list license:expat license:asl2.0))))
28641
28642(define-public python-humanize
28643 (package
28644 (name "python-humanize")
28645 (version "4.14.0")
28646 (source
28647 (origin
28648 (method url-fetch)
28649 (uri (pypi-uri "humanize" version))
28650 (sha256
28651 (base32
28652 "03d9xdashy8bsxvg15nz3ih1nsl6na1cmc9mqh2xch56brq9581g"))))
28653 (build-system pyproject-build-system)
28654 (native-inputs
28655 (list python-freezegun
28656 python-hatch-vcs
28657 python-hatchling
28658 python-pytest))
28659 (home-page "https://github.com/jmoiron/humanize")
28660 (synopsis "Print numerical information in a human-readable form")
28661 (description "This package provides a Python module that displays numbers
28662and dates in \"human readable\" forms. For example, it would display
28663\"12345591313\" as \"12.3 billion\".")
28664 (license license:expat)))
28665
28666(define-public python-annoy
28667 (package
28668 (name "python-annoy")
28669 (version "1.17.3")
28670 (source
28671 (origin
28672 (method git-fetch)
28673 (uri (git-reference
28674 (url "https://github.com/spotify/annoy")
28675 (commit (string-append "v" version))))
28676 (file-name (git-file-name name version))
28677 (sha256
28678 (base32 "1zmdp1dws3i35a0psb10k6rkh3iaiq8s9ybxibvfjihbapidd4d0"))))
28679 (build-system pyproject-build-system)
28680 (arguments
28681 (list
28682 #:test-flags
28683 ;; urllib.error.URLError: <urlopen error [Errno -3] Temporary failure in
28684 ;; name resolution>
28685 #~(list "--deselect=test/accuracy_test.py::test_glove_25"
28686 "--deselect=test/accuracy_test.py::test_nytimes_16"
28687 "--deselect=test/accuracy_test.py::test_fashion_mnist")))
28688 (native-inputs
28689 (list python-h5py
28690 python-numpy
28691 python-pytest
28692 python-setuptools))
28693 (home-page "https://github.com/spotify/annoy/")
28694 (synopsis "Approximate nearest neighbors library")
28695 (description
28696 "Annoy is a C++ library with Python bindings to search for points in
28697space that are close to a given query point. It also creates large read-only
28698file-based data structures that are @code{mmap}ped into memory so that many
28699processes may share the same data.")
28700 (license license:asl2.0)))
28701
28702(define-public python-croniter
28703 (package
28704 (name "python-croniter")
28705 (version "5.0.1")
28706 (source
28707 (origin
28708 (method git-fetch)
28709 (uri (git-reference
28710 (url "https://github.com/kiorky/croniter")
28711 (commit version)))
28712 (file-name (git-file-name name version))
28713 (sha256
28714 (base32 "146v641wicx2ipfdpqg1vysikbbhrhndmrnjj1hnv03fjvhqknq9"))))
28715 (build-system pyproject-build-system)
28716 (native-inputs (list python-pytest python-setuptools))
28717 (propagated-inputs (list python-dateutil python-pytz))
28718 (home-page "https://github.com/kiorky/croniter")
28719 (synopsis "Iterate datetime objects with cron-like syntax")
28720 (description
28721 "@code{croniter} provides iteration for datetime object with cron-like
28722format.")
28723 (license license:expat)))
28724
28725(define-public python-crontab
28726 (package
28727 (name "python-crontab")
28728 (version "3.3.0")
28729 (source
28730 (origin
28731 (method url-fetch)
28732 (uri (pypi-uri "python_crontab" version))
28733 (sha256
28734 (base32 "06r9vqaplqd9saazqw3lprlbv4sb2an0zkjdxh23xpyxd3p8lz00"))))
28735 (build-system pyproject-build-system)
28736 (arguments
28737 (list #:test-flags
28738 ;; This test is made for Windows.
28739 #~(list "-k" "not test_07_non_posix_shell")
28740 #:phases
28741 #~(modify-phases %standard-phases
28742 (add-after 'unpack 'defaults-to-mcron
28743 (lambda* (#:key inputs #:allow-other-keys)
28744 (substitute* "crontab.py"
28745 (("/usr/bin/crontab")
28746 (search-input-file inputs "bin/crontab"))))))))
28747 (inputs
28748 (list mcron python-dateutil))
28749 (native-inputs
28750 (list python-pytest python-setuptools))
28751 (home-page "https://gitlab.com/doctormo/python-crontab/")
28752 (synopsis "Module for reading and writing crontab files")
28753 (description "This Python module can read, write crontab files, and
28754access the system cron automatically and simply using a direct API.")
28755 (license license:lgpl3+)))
28756
28757(define-public python-apscheduler
28758 (package
28759 (name "python-apscheduler")
28760 (version "3.11.2")
28761 (source (origin
28762 (method url-fetch)
28763 (uri (pypi-uri "apscheduler" version))
28764 (sha256
28765 (base32
28766 "0hgg7r3s1k6qj4fy3whrpyqj8vm0wvk3lk4c1h15z07caaq6d69a"))))
28767 (build-system pyproject-build-system)
28768 (arguments
28769 (list
28770 ;; tests: 701 passed, 252 skipped, 13 deselected, 201 warnings
28771 #:test-flags
28772 ;; XXX: Some tests hang or fail with verity of errors:
28773 ;; E RuntimeError: There is no current event loop in thread 'MainThread'.
28774 #~(list #$@(map (lambda (test) (string-append "--deselect="
28775 "tests/test_executors.py::"
28776 test))
28777 (list "test_broken_pool"
28778 "test_max_instances[processpool-pytz]"
28779 "test_max_instances[processpool-zoneinfo]"
28780 "test_run_coroutine_job_tornado"
28781 "test_run_job_error[processpool-pytz]"
28782 "test_run_job_error[processpool-zoneinfo]"
28783 "test_submit_job[processpool-pytz-error]"
28784 "test_submit_job[processpool-pytz-executed]"
28785 "test_submit_job[processpool-pytz-missed]"
28786 "test_submit_job[processpool-zoneinfo-error]"
28787 "test_submit_job[processpool-zoneinfo-executed]"
28788 "test_submit_job[processpool-zoneinfo-missed]")))))
28789 (native-inputs
28790 (list python-anyio
28791 python-gevent
28792 python-pyside-6
28793 python-pytest
28794 python-pytest-asyncio
28795 python-pytz
28796 python-setuptools
28797 python-setuptools-scm
28798 python-sqlalchemy
28799 python-tornado
28800 python-twisted))
28801 (propagated-inputs
28802 (list python-tzlocal))
28803 (home-page "https://github.com/agronholm/apscheduler")
28804 (synopsis "Task scheduling library for Python")
28805 (description "Advanced Python Scheduler (APScheduler) is a Python library
28806that lets you schedule your Python code to be executed later, either just once
28807or periodically.
28808
28809You can add new jobs or remove old ones on the fly as you please. If you store
28810your jobs in a database, they will also survive scheduler restarts and maintain
28811their state. When the scheduler is restarted, it will then run all the jobs it
28812should have run while it was offline.")
28813 (license license:expat)))
28814
28815(define-public python-ifaddr
28816 (package
28817 (name "python-ifaddr")
28818 (version "0.2.0")
28819 (source
28820 (origin
28821 (method url-fetch)
28822 (uri (pypi-uri "ifaddr" version))
28823 (sha256
28824 (base32 "1m5fqjqf53m31qrl8fxp2sbwf4mvk5mbjpw2jm2x8rgpmg5by36c"))
28825 (snippet #~(delete-file "ifaddr/_win32.py"))))
28826 (build-system pyproject-build-system)
28827 (native-inputs
28828 (list python-pytest python-setuptools python-wheel))
28829 (home-page "https://github.com/pydron/ifaddr")
28830 (synopsis "Network interface and IP address enumeration library")
28831 (description
28832 "This package provides a network interface and IP address enumeration
28833library in Python.")
28834 (license license:expat)))
28835
28836(define-public python-berkeleydb
28837 (package
28838 (name "python-berkeleydb")
28839 (version "18.1.15")
28840 (source
28841 (origin
28842 (method url-fetch)
28843 (uri (pypi-uri "berkeleydb" version))
28844 (sha256
28845 (base32 "13kmvy6viay27khmj6ydryniirdsbqrc2mjnr2r6nk3m7la57yks"))))
28846 (build-system pyproject-build-system)
28847 (arguments
28848 (list
28849 #:test-backend #~'custom
28850 #:test-flags #~(list "test.py" "-v")
28851 #:phases
28852 #~(modify-phases %standard-phases
28853 (add-after 'unpack 'configure-locations
28854 (lambda* (#:key inputs #:allow-other-keys)
28855 (setenv "BERKELEYDB_DIR"
28856 (assoc-ref inputs "bdb"))
28857 (setenv "YES_I_HAVE_THE_RIGHT_TO_USE_THIS_BERKELEY_DB_VERSION"
28858 "1")))
28859 (add-after 'unpack 'remove-legacy
28860 (lambda _
28861 (substitute* "pyproject.toml"
28862 ((":__legacy__") "")))))))
28863 (native-inputs (list python-setuptools))
28864 (inputs (list bdb))
28865 (home-page "https://www.jcea.es/programacion/pybsddb.htm")
28866 (synopsis "Python bindings for Oracle Berkeley DB")
28867 (description
28868 "This module provides a nearly complete wrapping of the Oracle/Sleepycat
28869C API for the Database Environment, Database, Cursor, Log Cursor, Sequence and
28870Transaction objects, and each of these is exposed as a Python type in the
28871bsddb3.db module. The database objects can use various access methods: btree,
28872hash, recno, and queue. Complete support of Berkeley DB distributed
28873transactions. Complete support for Berkeley DB Replication Manager.
28874Complete support for Berkeley DB Base Replication. Support for RPC.")
28875 (license license:bsd-3)))
28876
28877;; Last version before rename to python-berkeleydb.
28878;; This package is close to deprecation.
28879(define-public python-bsddb3
28880 (package
28881 (inherit python-berkeleydb)
28882 (name "python-bsddb3")
28883 (version "6.2.9")
28884 (source
28885 (origin
28886 (method url-fetch)
28887 (uri (pypi-uri "bsddb3" version))
28888 (sha256
28889 (base32 "00bqdsfx8jgmfz5bgkx10nlw5bfsw11a86f91zkl53snvk45xl3h"))))
28890 (arguments
28891 (substitute-keyword-arguments arguments
28892 ;; Tests started failing from [email protected].
28893 ;; The package is in a pre-deprecation phase, so I didn't bother
28894 ;; to try and patch them, but sanity-check passes so the package
28895 ;; itself is likely fine.
28896 ((#:tests? tests? #t)
28897 #f)
28898 ((#:phases phases #~%standard-phases)
28899 #~(modify-phases #$phases
28900 (delete 'remove-legacy)))
28901 ((#:test-flags test-flags #~(list))
28902 #~(list "test3.py" "-v"))))))
28903
28904(define-public python-dbfread
28905 (package
28906 (name "python-dbfread")
28907 (properties '((commit . "dce544641065d966c76a97864b4e9908ec922ce8")
28908 (revision . "0")))
28909 (version (git-version "2.0.7"
28910 (assoc-ref properties 'revision)
28911 (assoc-ref properties 'commit)))
28912 (source
28913 (origin
28914 (method git-fetch)
28915 (uri (git-reference
28916 (url "https://github.com/olemb/dbfread")
28917 (commit (assoc-ref properties 'commit))))
28918 (file-name (git-file-name name version))
28919 (sha256
28920 (base32 "1m7dbgyf8yl6qhilzx41vzhcmkqmc36897wfqs2jngp4bnda64vd"))))
28921 (build-system pyproject-build-system)
28922 (arguments
28923 (list
28924 #:phases
28925 #~(modify-phases %standard-phases
28926 (add-after 'unpack 'relax-setup.py
28927 (lambda _
28928 (substitute* "setup.py"
28929 (("python_requires.*")
28930 "")))))))
28931 (native-inputs (list python-pytest python-setuptools))
28932 (home-page "https://dbfread.readthedocs.io")
28933 (synopsis "Read DBF Files with Python")
28934 (description
28935 "This library reads DBF files and returns the data as native Python data
28936types for further processing. It is primarily intended for batch jobs and
28937one-off scripts.")
28938 (license license:expat)))
28939
28940(define-public python-cached-property
28941 (package
28942 (name "python-cached-property")
28943 (version "2.0.1")
28944 (source
28945 (origin
28946 (method url-fetch)
28947 (uri (pypi-uri "cached_property" version))
28948 (sha256
28949 (base32 "0hbni4q15n8wspdj48j6xvg977pgm1r5wwjq3x7hxvp30mqn2ka8"))))
28950 (build-system pyproject-build-system)
28951 (native-inputs
28952 (list python-freezegun
28953 python-pytest
28954 python-setuptools
28955 python-wheel))
28956 (home-page "https://github.com/pydanny/cached-property")
28957 (synopsis "Decorator for caching properties in classes")
28958 (description
28959 "This package provides a decorator which makes caching
28960time-or-computationally-expensive properties quick and easy and works in
28961Python 2 or 3.")
28962 (license license:bsd-3)))
28963
28964(define-public python-folium
28965 (package
28966 (name "python-folium")
28967 (version "0.19.4")
28968 (source
28969 (origin
28970 ;; PyPI has a ".whl" file but not a proper source release.
28971 ;; Thus, fetch code from Git.
28972 (method git-fetch)
28973 (uri (git-reference
28974 (url "https://github.com/python-visualization/folium")
28975 (commit (string-append "v" version))))
28976 (file-name (git-file-name name version))
28977 (sha256
28978 (base32 "1659hvvraax7npgsfi93l7vsd191ysvf5vj369f8h757blmwjd59"))))
28979 (build-system pyproject-build-system)
28980 (arguments
28981 (list #:test-flags
28982 ;; This file requires Selenium.
28983 #~(list "--ignore" "tests/selenium/test_selenium.py"
28984 "-k" (string-append
28985 ;; The tests below also require Selenium.
28986 "not test__repr_png_is_bytes"
28987 " and not test_valid_png"
28988 " and not test_valid_png_size"
28989 " and not test_geojson"
28990 " and not test_heat_map_with_weights"
28991 ;; This performs an online request.
28992 " and not test_json_request"
28993 ;; Requires geodatasets package.
28994 " and not test_timedynamic_geo_json"
28995 ;; AssertionError.
28996 " and not test_minimap"))))
28997 (propagated-inputs
28998 (list python-branca
28999 python-jinja2
29000 python-numpy
29001 python-requests
29002 python-xyzservices))
29003 (native-inputs
29004 (list python-geopandas
29005 python-nbconvert
29006 python-pandas
29007 python-pillow
29008 python-pytest
29009 python-selenium
29010 python-setuptools
29011 python-setuptools-scm
29012 python-wheel))
29013 (home-page "https://github.com/python-visualization/folium")
29014 (synopsis "Make beautiful maps with Leaflet.js & Python")
29015 (description "@code{folium} makes it easy to visualize data that’s been
29016manipulated in Python on an interactive leaflet map. It enables both the
29017binding of data to a map for @code{choropleth} visualizations as well as
29018passing rich vector/raster/HTML visualizations as markers on the map.
29019
29020The library has a number of built-in tilesets from OpenStreetMap, Mapbox, and
29021Stamen, and supports custom tilesets with Mapbox or Cloudmade API keys. It
29022supports Image, Video, GeoJSON and TopoJSON overlays.")
29023 (license license:expat)))
29024
29025(define-public python-mercantile
29026 (package
29027 (name "python-mercantile")
29028 (version "1.2.1")
29029 (source
29030 (origin
29031 (method git-fetch)
29032 (uri (git-reference
29033 (url "https://github.com/mapbox/mercantile")
29034 (commit version)))
29035 (file-name (git-file-name name version))
29036 (sha256
29037 (base32 "1b7kglzkjz1gmgjgk2y3n4gg70b8zdfg6kyqx2g7a3z7clxxf80f"))))
29038 (build-system pyproject-build-system)
29039 (propagated-inputs (list python-click))
29040 (native-inputs (list python-check-manifest python-hypothesis python-pytest
29041 python-setuptools))
29042 (home-page "https://github.com/mapbox/mercantile")
29043 (synopsis "Web mercator XYZ tile utilities")
29044 (description
29045 "The mercantile module provides @code{ul(xtile, ytile, zoom)} and
29046@code{bounds(xtile, ytile, zoom)} functions that respectively return the upper
29047left corner and bounding longitudes and latitudes for XYZ tiles, a
29048@code{xy(lng, lat)} function that returns spherical mercator x and y
29049coordinates, a @code{tile(lng, lat, zoom)} function that returns the tile
29050containing a given point, and quadkey conversion functions
29051@code{quadkey(xtile, ytile, zoom)} and @code{quadkey_to_tile(quadkey)} for
29052translating between quadkey and tile coordinates.")
29053 (license license:bsd-3)))
29054
29055(define-public jube
29056 (package
29057 ;; This is a command-line tool, so no "python-" prefix.
29058 (name "jube")
29059 (version "2.6.1")
29060 (source
29061 (origin
29062 (method url-fetch)
29063 (uri (string-append
29064 "http://apps.fz-juelich.de/jsc/jube/jube2/download.php?version="
29065 version))
29066 (sha256
29067 (base32 "0r5d2gdqa0f4c468q3k25ycw1k2g76gg8fyiln4ni98fvfsbx3il"))
29068 (file-name (string-append "jube-" version ".tar.gz"))))
29069 (build-system pyproject-build-system)
29070 (arguments
29071 (list
29072 #:tests? #f)) ; No tests.
29073 (propagated-inputs (list python-pyyaml))
29074 (native-inputs (list python-setuptools))
29075 (home-page "https://apps.fz-juelich.de/jsc/jube/jube2/docu/index.html")
29076 (synopsis "Benchmarking environment")
29077 (description
29078 "JUBE helps perform and analyze benchmarks in a systematic way. For each
29079benchmarked application, benchmark data is stored in a format that allows JUBE
29080to deduct the desired information. This data can be parsed by automatic pre-
29081and post-processing scripts that draw information and store it more densely
29082for manual interpretation.")
29083 (license license:gpl3+)))
29084
29085(define-public python-pyroutelib3
29086 (package
29087 (name "python-pyroutelib3")
29088 (version "2.0.0")
29089 (source
29090 (origin
29091 (method git-fetch)
29092 (uri (git-reference
29093 (url "https://github.com/MKuranowski/pyroutelib3")
29094 (commit (string-append "v" version))))
29095 (file-name (git-file-name name version))
29096 (sha256
29097 (base32 "18a86fggs9pjib97x47acqgccrsra1h7dkz21r94vsyrdindchns"))))
29098 (build-system pyproject-build-system)
29099 (propagated-inputs (list python-dateutil python-protobuf-5))
29100 (native-inputs (list python-filelock python-flit-core python-pytest))
29101 (home-page "https://github.com/MKuranowski/pyroutelib3")
29102 (synopsis "Library for simple routing on OSM data")
29103 (description "Library for simple routing on OSM data")
29104 (license license:gpl3+)))
29105
29106(define-public python-bibtexparser
29107 (package
29108 (name "python-bibtexparser")
29109 (version "2.0.0b9")
29110 (source
29111 (origin
29112 (method git-fetch)
29113 (uri (git-reference
29114 (url "https://github.com/sciunto-org/python-bibtexparser")
29115 (commit (string-append "v" version))))
29116 (file-name (git-file-name name version))
29117 (sha256
29118 (base32 "1ym3lnvm02j2qxvm3qwbw8a10b6wc70wrfwqiqgppcap2vd5h85y"))))
29119 (build-system pyproject-build-system)
29120 (propagated-inputs (list python-pylatexenc python-pyparsing))
29121 (native-inputs
29122 (list python-pylatexenc python-pytest python-setuptools))
29123 (home-page "https://github.com/sciunto-org/python-bibtexparser")
29124 (synopsis "Python library to parse BibTeX files")
29125 (description "BibtexParser is a Python library to parse BibTeX files.")
29126 (license (list license:bsd-3 license:lgpl3))))
29127
29128(define-public python-bibtexparser-for-cobib
29129 (hidden-package
29130 (package
29131 (inherit python-bibtexparser)
29132 (name "python-bibtexparser")
29133 (version "1.4.0")
29134 (source
29135 (origin
29136 (method git-fetch)
29137 (uri (git-reference
29138 (url "https://github.com/sciunto-org/python-bibtexparser")
29139 (commit (string-append "v" version))))
29140 (file-name (git-file-name name version))
29141 (sha256
29142 (base32 "0zrgfgmh37m9frq528vy66p2fhlxzrxyhj0inc6qwg0m717w9zbl")))))))
29143
29144(define-public python-distro
29145 (package
29146 (name "python-distro")
29147 (version "1.9.0")
29148 (source
29149 (origin
29150 (method url-fetch)
29151 (uri (pypi-uri "distro" version))
29152 (sha256
29153 (base32 "1vfvkgfvrjpxpb48pf8rs2l5wfxij0plmffnw5p123wlv1ppr9rg"))))
29154 (build-system pyproject-build-system)
29155 (arguments
29156 (list
29157 #:test-flags
29158 #~(list "-k" (string-join
29159 ;; We are not on Ubunto distro:
29160 ;; AssertionError: assert '' == 'ubuntu'.
29161 (list "not test_ubuntu14normal_lsb_release"
29162 "test_trailingblanks_lsb_release"
29163 "test_ubuntu14nomodules_lsb_release")
29164 " and not "))))
29165 (native-inputs
29166 (list python-pytest
29167 python-setuptools))
29168 (home-page "https://github.com/python-distro/distro")
29169 (synopsis "OS platform information API")
29170 (description
29171 "@code{distro} provides information about the OS distribution it runs on,
29172such as a reliable machine-readable ID, or version information.
29173
29174It is the recommended replacement for Python's original
29175`platform.linux_distribution` function (which will be removed in Python 3.8).
29176@code{distro} also provides a command-line interface to output the platform
29177information in various formats.")
29178 (license license:asl2.0)))
29179
29180(define-public python-cairosvg
29181 (package
29182 (name "python-cairosvg")
29183 (version "2.8.2")
29184 (source
29185 (origin
29186 (method url-fetch)
29187 (uri (pypi-uri "cairosvg" version))
29188 (sha256
29189 (base32 "17zgbgw24jw70rfka9wa3ff5wymk9cmaqk4a6697mchpcglg9jq7"))))
29190 (build-system pyproject-build-system)
29191 (arguments
29192 (list #:test-flags #~(list "cairosvg/test_api.py")))
29193 (native-inputs
29194 (list python-pytest
29195 python-setuptools))
29196 (propagated-inputs
29197 (list python-cairocffi
29198 python-cssselect2
29199 python-defusedxml
29200 python-pillow
29201 python-tinycss2))
29202 (home-page "https://cairosvg.org/")
29203 (synopsis "SVG to PDF/PS/PNG converter based on Cairo")
29204 (description "CairoSVG is a SVG converter based on Cairo. It can export
29205SVG files to PDF, PostScript and PNG files. The main part of CairoSVG is a
29206SVG parser, trying to follow the SVG 1.1 recommendation from the W3C. Once
29207parsed, the result is drawn to a Cairo surface that can be exported to
29208qvarious formats: PDF, PostScript, PNG and even SVG.")
29209 (license license:lgpl3+)))
29210
29211(define-public python-pyphen
29212 (package
29213 (name "python-pyphen")
29214 (version "0.17.2")
29215 (source
29216 (origin
29217 (method git-fetch)
29218 (uri (git-reference
29219 (url "https://github.com/Kozea/Pyphen")
29220 (commit version)))
29221 (file-name (git-file-name name version))
29222 (sha256
29223 (base32 "1fqxc50vqj884b7f6d8qfvnvw34477lhsdznvpxsljjg9j2v4ipv"))))
29224 (build-system pyproject-build-system)
29225 (native-inputs (list python-flit-core python-pytest))
29226 ;; TODO: Use the Guix system hyphenation packages hyphen-* rather than the
29227 ;; embedded set provided by upstream - like Debian does.
29228 (home-page "https://github.com/Kozea/Pyphen")
29229 (synopsis "Pure Python module to hyphenate text")
29230 (description "Pyphen is a pure Python module to hyphenate text using
29231existing Hunspell hyphenation dictionaries.")
29232 (license (list license:gpl2 license:lgpl2.1 license:mpl1.1))))
29233
29234(define-public python-intelhex
29235 (package
29236 (name "python-intelhex")
29237 (version "2.3.0")
29238 (source
29239 (origin
29240 (method git-fetch)
29241 (uri (git-reference
29242 (url "https://github.com/python-intelhex/intelhex")
29243 (commit version)))
29244 (file-name (git-file-name name version))
29245 (sha256
29246 (base32 "13p7x4ygfgqn27q3c8lam7a0z09764iymgs7lcvjvxgq52nqwf9c"))))
29247 (build-system pyproject-build-system)
29248 (arguments (list #:test-backend #~'unittest))
29249 (native-inputs (list python-setuptools))
29250 (home-page "https://github.com/python-intelhex/intelhex")
29251 (synopsis "Python library for Intel HEX files manipulations")
29252 (description
29253 "The Intel HEX file format is widely used in microprocessors and
29254microcontrollers area (embedded systems etc.) as the de facto standard for
29255representation of code to be programmed into microelectronic devices. This
29256package provides an intelhex Python library to read, write, create from
29257scratch and manipulate data from Intel HEX file format. It also includes
29258several convenience Python scripts, including \"classic\" hex2bin and bin2hex
29259converters and more, those based on the library itself.")
29260 (license license:bsd-3)))
29261
29262(define-public python-interlap
29263 (package
29264 (name "python-interlap")
29265 (version "0.2.7")
29266 (source
29267 (origin
29268 (method git-fetch)
29269 (uri (git-reference
29270 (url "https://github.com/brentp/interlap")
29271 (commit (string-append "v" version))))
29272 (file-name (git-file-name name version))
29273 (sha256
29274 (base32 "0kmw72ilhsfx7piikl92b1s0rnax49qc7idjxsbwhvpklyjiylfm"))))
29275 (build-system pyproject-build-system)
29276 (arguments
29277 (list
29278 #:test-backend #~'custom
29279 #:test-flags #~(list "interlap.py")))
29280 (native-inputs (list python-setuptools))
29281 (home-page "https://brentp.github.io/interlap")
29282 (synopsis "Fast, simple interval overlap testing")
29283 (description
29284 "InterLap does fast interval overlap testing with a simple Python data
29285structure.")
29286 (license license:expat)))
29287
29288(define-public python-pykwalify
29289 (package
29290 (name "python-pykwalify")
29291 (version "1.8.0")
29292 (source
29293 (origin
29294 (method git-fetch)
29295 (uri (git-reference
29296 (url "https://github.com/grokzen/pykwalify")
29297 (commit version)))
29298 (file-name (git-file-name name version))
29299 (sha256
29300 (base32 "1x46ray74hzqmsicq2qikxhdihyyz9himjmc5gvlvd8vzqr1gi8p"))))
29301 (build-system pyproject-build-system)
29302 (arguments
29303 (list
29304 #:test-flags
29305 ;; XXX: yaml safe_dump() has been removed.
29306 #~(list "--ignore=tests/test_unicode.py"
29307 "--deselect=tests/test_core.py::TestCore::test_core_files")))
29308 (native-inputs
29309 (list python-pytest python-setuptools python-testfixtures))
29310 (propagated-inputs
29311 (list python-dateutil python-docopt python-pyyaml python-ruamel.yaml))
29312 (home-page "https://github.com/grokzen/pykwalify")
29313 (synopsis "Python lib/cli for JSON/YAML schema validation")
29314 (description
29315 "This package provides a parser, schema validator, and data binding tool
29316for YAML and JSON.")
29317 (license license:expat)))
29318
29319(define-public python-pykakasi
29320 (package
29321 (name "python-pykakasi")
29322 (version "2.3.0")
29323 (source
29324 (origin
29325 (method url-fetch)
29326 (uri (pypi-uri "pykakasi" version))
29327 (sha256
29328 (base32 "18dhcw7myw5idajnfynjbvqxmyf9m0cygfwsavbbi7zmcf72l1gs"))))
29329 (build-system pyproject-build-system)
29330 (arguments (list #:test-flags ''("-k" "not test_aozora")))
29331 (propagated-inputs (list python-deprecated python-importlib-resources
29332 python-jaconv))
29333 (native-inputs (list python-coverage
29334 python-py-cpuinfo
29335 python-pytest
29336 python-pytest-benchmark
29337 python-setuptools
29338 python-setuptools-scm
29339 python-wheel))
29340 (home-page "https://codeberg.org/miurahr/pykakasi")
29341 (synopsis "Kana kanji simple inversion library")
29342 (description
29343 "pykakasi is a Python Natural Language Processing @acronym{NLP, Natural
29344Language Processing} library to transliterate hiragana, katakana and
29345kanji (Japanese text) into rōmaji (Latin/Roman alphabet). It can handle
29346characters in NFC form.
29347
29348Its algorithms are based on the kakasi library, which is written in C.")
29349 (license license:gpl3+)))
29350
29351(define-public python-dbus
29352 (package
29353 (name "python-dbus")
29354 (version "1.3.2")
29355 (source
29356 (origin
29357 (method url-fetch)
29358 (uri (pypi-uri "dbus-python" version))
29359 (sha256
29360 (base32 "1y28h90v2ib8zqhs3r2yr7ycg8ccwvw3gqkvadlm12v1129q2rxd"))))
29361 (build-system pyproject-build-system)
29362 (arguments
29363 (list
29364 #:tests? #f ;XXX: Tests require setup
29365 #:phases
29366 #~(modify-phases %standard-phases
29367 (add-after 'unpack 'patch-requirements
29368 (lambda _
29369 (substitute* (list "pyproject.toml" "setup.py")
29370 (("'(ninja|patchelf)',?") ""))
29371 (substitute* "setup.cfg"
29372 (("(ninja|patchelf)") "")))))))
29373 (native-inputs
29374 (list pkg-config
29375 meson
29376 ninja/pinned
29377 patchelf
29378 python-meson
29379 python-setuptools
29380 python-tappy))
29381 (inputs
29382 (list dbus glib))
29383 (propagated-inputs
29384 (list python-pygobject))
29385 (home-page "https://dbus.freedesktop.org/doc/dbus-python/")
29386 (synopsis "Python bindings for libdbus")
29387 (description
29388 "This package provides Python bindings to libdbus, the reference
29389implementation of the D-Bus protocol.")
29390 (license license:expat)))
29391
29392;; Added on 2026-01-05
29393(define-deprecated-package python-dbus-python python-dbus)
29394
29395(define python-dbusmock-patch-paths-phase
29396 #~(lambda* (#:key inputs #:allow-other-keys)
29397 (substitute* "tests/test_api.py"
29398 (("/usr/bin/python3")
29399 (which "python3")))
29400 (substitute* "dbusmock/testcase.py"
29401 (("\"dbus-daemon\"")
29402 (object->string
29403 (search-input-file inputs "/bin/dbus-daemon"))))))
29404
29405(define-public python-dbusmock
29406 (package
29407 (name "python-dbusmock")
29408 (version "0.37.2")
29409 (source
29410 (origin
29411 (method git-fetch)
29412 (uri (git-reference
29413 (url "https://github.com/martinpitt/python-dbusmock")
29414 (commit version)))
29415 (file-name (git-file-name name version))
29416 (sha256
29417 (base32 "1a70gi3qgjblg9z9id9z0fy3vlhb1cqbmmny14bqhv79qqskspj3"))))
29418 (build-system pyproject-build-system)
29419 (arguments
29420 (list
29421 #:modules `((guix build pyproject-build-system)
29422 (guix build utils)
29423 (ice-9 match))
29424 #:phases
29425 #~(modify-phases %standard-phases
29426 (add-after 'unpack 'patch-paths
29427 #$python-dbusmock-patch-paths-phase)
29428 (replace 'check
29429 (lambda* (#:key tests? #:allow-other-keys)
29430 (when tests?
29431 (match (primitive-fork)
29432 (0 ;child process
29433 (execlp "pytest" "pytest" "-vv"))
29434 (pytest-pid
29435 (let loop ()
29436 ;; Reap child processes; otherwise, python-dbusmock
29437 ;; would waste time polling for the dbus processes
29438 ;; it spawns to be reaped, in vain.
29439 (match (waitpid WAIT_ANY)
29440 ((pid . status)
29441 (if (= pid pytest-pid)
29442 (unless (zero? status)
29443 (error "`pytest' exited with status"
29444 status))
29445 (loop)))))))))))))
29446 (native-inputs (list python-pytest python-setuptools upower which))
29447 (inputs (list dbus))
29448 (propagated-inputs (list python-dbus python-pygobject))
29449 (home-page "https://github.com/martinpitt/python-dbusmock")
29450 (synopsis "Python library for mock D-Bus objects")
29451 (description
29452 "python-dbusmock allows for the easy creation of mock objects on D-Bus.
29453This is useful for writing tests for software which talks to D-Bus services
29454such as upower, systemd, logind, gnome-session or others, and it is hard (or
29455impossible without root privileges) to set the state of the real services to
29456what you expect in your tests.")
29457 (license license:lgpl3+)))
29458
29459(define-public python-dbusmock-for-tests
29460 (package
29461 (inherit python-dbusmock)
29462 (name "python-dbusmock-for-tests")
29463 (version "0.37.2")
29464 (source
29465 (origin
29466 (method git-fetch)
29467 (uri (git-reference
29468 (url "https://github.com/martinpitt/python-dbusmock")
29469 (commit version)))
29470 (file-name (git-file-name name version))
29471 (sha256
29472 (base32 "1a70gi3qgjblg9z9id9z0fy3vlhb1cqbmmny14bqhv79qqskspj3"))))
29473 (arguments
29474 (list
29475 #:tests? #f
29476 #:phases
29477 #~(modify-phases %standard-phases
29478 (add-after 'unpack 'patch-paths
29479 #$python-dbusmock-patch-paths-phase))))
29480 (native-inputs (list python-setuptools which))
29481 (properties '((hidden? . #t)))))
29482
29483;; XXX: Deprecated on <2026-01-21>.
29484(define-deprecated/public-alias python-dbusmock-minimal
29485 python-dbusmock-for-tests)
29486
29487(define-public python-jsonplus
29488 (package
29489 (name "python-jsonplus")
29490 (home-page "https://github.com/randomir/jsonplus")
29491 (properties '((commit . "a4450ce73a4464fcee9b08d96be3e13152b0cb3b")
29492 (revision . "0")))
29493 (version (git-version "0.8.0"
29494 (assoc-ref properties 'revision)
29495 (assoc-ref properties 'commit)))
29496 (source
29497 (origin
29498 (method git-fetch)
29499 (uri (git-reference
29500 (url home-page)
29501 (commit (assoc-ref properties 'commit))))
29502 (file-name (git-file-name name version))
29503 (sha256
29504 (base32 "1n7rr7fgy2g972si6zhindia362w34d696xjdicx25f39n88jcvk"))))
29505 (build-system pyproject-build-system)
29506 (arguments
29507 (list
29508 ;; XXX: Tests require the additional package moneyed.
29509 #:tests? #f
29510 #:phases
29511 #~(modify-phases %standard-phases
29512 (add-after 'unpack 'chdir
29513 (lambda _
29514 (chdir "python"))))))
29515 (native-inputs (list python-setuptools))
29516 (propagated-inputs
29517 (list python-dateutil python-simplejson python-sortedcontainers))
29518 (synopsis "Serialize Python types to/from JSON")
29519 (description
29520 "This package provides functionality to serialize arbitrary data types
29521to and from JSON. Common data types are implemented and it is easy to
29522register custom encoders and decoders.")
29523 (license license:expat)))
29524
29525(define-public python-ioctl-opt
29526 (package
29527 (name "python-ioctl-opt")
29528 (version "1.3")
29529 (source
29530 (origin
29531 (method url-fetch)
29532 (uri (pypi-uri "ioctl-opt" version))
29533 (sha256
29534 (base32 "1ygjgkzn0i61zk2yr27aqnma08c8xpblhdixli9f20if1nlgkm2y"))))
29535 (build-system pyproject-build-system)
29536 (arguments
29537 (list #:tests? #f)) ;no tests
29538 (native-inputs (list python-setuptools))
29539 (home-page "http://github.com/vpelletier/python-ioctl-opt")
29540 (synopsis "Functions to compute fnctl.ioctl's opt argument")
29541 (description
29542 "This package provides functions to compute fnctl.ioctl's opt argument.")
29543 (license license:gpl2+)))
29544
29545(define-public python-anyio
29546 (package
29547 (name "python-anyio")
29548 (version "4.12.1")
29549 (source
29550 (origin
29551 (method url-fetch)
29552 (uri (pypi-uri "anyio" version))
29553 (sha256
29554 (base32
29555 "00ypzqzllinhj2x3ai5x5bvkdb0109nw59rdjdfg1lw59hxcrks1"))
29556 (patches
29557 ;; Patch uses Python 3.11 except* syntax so can yet be upstreamed.
29558 (search-patches "python-anyio-unuse-exceptiongroup-in-test.patch"))))
29559 (build-system pyproject-build-system)
29560 (arguments
29561 (list
29562 ;; tests:
29563 ;; - x86_64-linux: 1393 passed, 70 skipped, 2 deselected, 4 xfailed
29564 ;; - aarch64-linux: 1378 passed, 70 skipped, 17 deselected, 4 xfailed
29565 #:test-flags
29566 #~(list "-m" "not network"
29567 ;; Tests are shaky with a lot of DNS lookups.
29568 "--ignore=tests/test_sockets.py"
29569 #$@(map (lambda (ls)
29570 (string-append "--deselect=" (string-join ls "::")))
29571 (append
29572 ;; _pytest.pytester.Pytester.TimeoutExpired: 3 second
29573 ;; timeout expired running: <...>
29574 '(("tests/test_pytest_plugin.py"
29575 "test_keyboardinterrupt_during_test"))
29576 (if (target-aarch64?)
29577 ;; Assertions are not equal on ARM.
29578 '(("tests/streams/test_tls.py"
29579 "TestTLSListener"
29580 "test_handshake_fail")
29581 ("tests/test_taskgroups.py"
29582 "test_shielded_cancel_sleep_time")
29583 ("tests/test_to_thread.py"
29584 "test_run_in_custom_limiter")
29585 ("tests/test_to_thread.py"
29586 "TestBlockingPortalProvider"
29587 "test_single_thread"))
29588 '()))))))
29589 (propagated-inputs
29590 (list python-idna
29591 python-sniffio
29592 python-typing-extensions))
29593 (native-inputs
29594 (list python-blockbuster
29595 python-psutil
29596 python-pytest
29597 python-pytest-mock
29598 python-setuptools
29599 python-setuptools-scm
29600 python-trio
29601 python-trustme
29602 python-truststore
29603 python-uvloop))
29604 (home-page "https://anyio.readthedocs.io")
29605 (synopsis "Compatibility layer for multiple asynchronous event loops")
29606 (description
29607 "AnyIO is an asynchronous networking and concurrency library that works
29608on top of either asyncio or trio. It implements trio-like structured
29609concurrency on top of asyncio, and works in harmony with the native SC of trio
29610itself.")
29611 (license license:expat)))
29612
29613(define-public python-argh
29614 (package
29615 (name "python-argh")
29616 (version "0.31.3")
29617 (source
29618 (origin
29619 (method url-fetch)
29620 (uri (pypi-uri "argh" version))
29621 (sha256
29622 (base32 "1ycjb2f92iskvp27vq2a8vdbpmsij61apvmkn7k5xjhlpvc2607k"))))
29623 (build-system pyproject-build-system)
29624 (native-inputs (list python-flit-core python-pytest))
29625 (home-page "https://github.com/neithere/argh/")
29626 (synopsis "Argparse wrapper with natural syntax")
29627 (description
29628 "Argh is a small library that provides several layers of abstraction
29629on top of @code{python-argparse}. The layers can be mixed. It is always
29630possible to declare a command with the highest possible (and least flexible)
29631layer and then tune the behaviour with any of the lower layers including the
29632native API of @code{python-argparse}.")
29633 (license license:lgpl3+)))
29634
29635(define-public python-pox
29636 (package
29637 (name "python-pox")
29638 (version "0.3.6")
29639 (source
29640 (origin
29641 (method url-fetch)
29642 (uri (pypi-uri "pox" version))
29643 (sha256
29644 (base32
29645 "01gnsgz6wfmpmb57qr4cgpkampiy6l7c1kxa0hlacn81c0wyvvl4"))))
29646 (build-system pyproject-build-system)
29647 (arguments
29648 (list
29649 #:phases
29650 #~(modify-phases %standard-phases
29651 (replace 'check
29652 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
29653 (when tests?
29654 (mkdir-p "/tmp/guix")
29655 (setenv "SHELL" "bash")
29656 (setenv "USERNAME" "guix")
29657 (setenv "HOME" "/tmp/guix") ; must end on USERNAME...
29658 (invoke "python" "./pox/tests/__main__.py")))))))
29659 (native-inputs
29660 (list python-setuptools
29661 which)) ;pox/tests/test_shutils.py
29662 (home-page "https://pypi.org/project/pox/")
29663 (synopsis "Python utilities for file system exploration and automated builds")
29664 (description
29665 "Pox provides a collection of utilities for navigating and manipulating
29666file systems. This module is designed to facilitate some of the low-level
29667operating system interactions that are useful when exploring a file system on a
29668remote host. Pox provides Python equivalents of several shell commands such
29669as @command{which} and @command{find}. These commands allow automated
29670discovery of what has been installed on an operating system, and where the
29671essential tools are located.")
29672 (license license:bsd-3)))
29673
29674(define-public python-flit
29675 (package
29676 (name "python-flit")
29677 (version "3.12.0") ;same as python-flit-core
29678 (source
29679 (origin
29680 (method url-fetch)
29681 (uri (pypi-uri "flit" version))
29682 (sha256
29683 (base32 "0h1pxi2hgr95321bgl45l86693zl14l3shj0idsyg4k9v56z700w"))))
29684 (build-system pyproject-build-system)
29685 (arguments
29686 (list
29687 #:test-flags
29688 ;; These tests fail when FLIT_NO_NETWORK is set
29689 '(list "-k" "not test_invalid_classifier \
29690and not test_install_requires \
29691and not test_install_requires_extra \
29692and not test_validate_classifiers_private")
29693 #:phases
29694 #~(modify-phases %standard-phases
29695 (add-after 'unpack 'relax-pip-requirement
29696 ;; python -m pip is available by default, no need to
29697 ;; propagate pip.
29698 (lambda _
29699 (substitute* "pyproject.toml"
29700 (("\"pip\",")
29701 ""))))
29702 (add-before 'check 'pre-check
29703 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
29704 (when tests?
29705 (setenv "HOME" "/tmp")
29706 (setenv "FLIT_NO_NETWORK" "1")))))))
29707 (propagated-inputs
29708 (list python-tomli-w
29709 python-flit-core
29710 python-docutils
29711 python-requests))
29712 (native-inputs
29713 (list python-responses
29714 python-pytest
29715 python-testpath))
29716 (home-page "https://flit.readthedocs.io/")
29717 (synopsis "Simple packaging tool for simple packages")
29718 (description "Flit is a simple way to put Python packages and modules on
29719PyPI. Flit packages a single importable module or package at a time, using
29720the import name as the name on PyPI. All subpackages and data files within a
29721package are included automatically.")
29722 (license license:bsd-3)))
29723
29724(define-public python-fastentrypoints
29725 (package
29726 (name "python-fastentrypoints")
29727 (home-page "https://github.com/ninjaaron/fast-entry_points")
29728 (properties '((commit . "a3a26f320c7ae2191fde71b79d4f4bf325d162f3")
29729 (revision . "0")))
29730 (version (git-version "0.12"
29731 (assoc-ref properties 'revision)
29732 (assoc-ref properties 'commit)))
29733 (source
29734 (origin
29735 (method git-fetch)
29736 (uri (git-reference
29737 (url home-page)
29738 (commit (assoc-ref properties 'commit))))
29739 (file-name (git-file-name name version))
29740 (sha256
29741 (base32 "0d4xx9zz2xrdxgap8lbrc1mvslvdvddxk3s27zqv918iykkm70d0"))))
29742 (build-system pyproject-build-system)
29743 (arguments
29744 (list
29745 ;; XXX: Testing is non-standard and hardly configurable.
29746 #:tests? #f
29747 #:test-backend #~'custom
29748 #:test-flags #~(list "test/runtest.py")))
29749 (native-inputs (list python-setuptools))
29750 (synopsis "Makes entry_points specified in setup.py load more quickly")
29751 (description
29752 "Using entry_points in your setup.py makes scripts that start really
29753slowly because it imports pkg_resources. This package allows such setup
29754scripts to load entry points more quickly.")
29755 (license license:bsd-3)))
29756
29757(define-public python-funcparserlib
29758 (package
29759 (name "python-funcparserlib")
29760 (version "1.0.1")
29761 (source
29762 (origin
29763 ;; Source tarball on PyPi lacks tests.
29764 (method git-fetch)
29765 (uri (git-reference
29766 (url "https://github.com/vlasovskikh/funcparserlib")
29767 (commit version)))
29768 (file-name (git-file-name name version))
29769 (sha256
29770 (base32 "0dw3i4fyf3j9h1l7xfgs99fc2w2axk6xqk0sdag43k444ss4hkrc"))))
29771 (build-system pyproject-build-system)
29772 (arguments
29773 '(#:phases
29774 (modify-phases %standard-phases
29775 (replace 'check
29776 (lambda* (#:key tests? #:allow-other-keys)
29777 (when tests?
29778 (invoke "python" "-m" "unittest" "discover" "-v")))))))
29779 ;; ModuleNotFoundError: No module named 'poetry'
29780 (native-inputs (list python-poetry-core python-six))
29781 (home-page "https://github.com/vlasovskikh/funcparserlib")
29782 (synopsis
29783 "Recursive descent parsing library based on functional combinators")
29784 (description
29785 "This package is a recursive descent parsing library for Python based on
29786functional combinators. Parser combinators are just higher-order functions
29787that take parsers as their arguments and return them as result values.")
29788 (license license:expat)))
29789
29790(define-public python-cson
29791 (package
29792 (name "python-cson")
29793 (version "0.8")
29794 (source
29795 (origin
29796 (method git-fetch)
29797 (uri (git-reference
29798 (url "https://github.com/avakar/pycson")
29799 (commit version)))
29800 (file-name (git-file-name name version))
29801 (sha256
29802 (base32 "0d2zbmak0hzsl1w71dgc8x4q4vdfbpk46vwyi9vvvqv7gdqj59fn"))))
29803 (build-system pyproject-build-system)
29804 (native-inputs (list python-pytest python-setuptools python-wheel))
29805 (propagated-inputs (list python-speg))
29806 (home-page "https://github.com/avakar/pycson")
29807 (synopsis "Parser for Coffeescript Object Notation (CSON)")
29808 (description
29809 "This package is a parser for Coffeescript Object Notation (CSON).")
29810 (license license:expat)))
29811
29812(define-public python-aionotify
29813 (package
29814 (name "python-aionotify")
29815 (version "0.3.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/rbarrois/aionotify")
29822 (commit version)))
29823 (file-name (git-file-name name version))
29824 (sha256
29825 (base32 "1p08g0h4bjlra25cwysag7gifsrm35d5vkjfv845w1rig8b57q9s"))))
29826 (build-system pyproject-build-system)
29827 (native-inputs
29828 (list python-pytest
29829 python-setuptools
29830 python-wheel))
29831 (home-page "https://github.com/rbarrois/aionotify")
29832 (synopsis "inotify library for Python")
29833 (description
29834 "@code{python-aionotify} is a simple, asyncio-based inotify library.")
29835 (license license:bsd-3)))
29836
29837(define-public python-forbiddenfruit
29838 (package
29839 (name "python-forbiddenfruit")
29840 (version "0.1.4")
29841 (source
29842 (origin
29843 (method git-fetch)
29844 (uri (git-reference
29845 (url "https://github.com/clarete/forbiddenfruit")
29846 (commit version)))
29847 (file-name (git-file-name name version))
29848 (sha256
29849 (base32 "16chhrxbbmg6lfbzm532fq0v00z8qihcsj0kg2b5jlgnb6qijwn8"))))
29850 (build-system pyproject-build-system)
29851 (arguments
29852 (list
29853 #:phases
29854 #~(modify-phases %standard-phases
29855 (replace 'check
29856 (lambda* (#:key tests? #:allow-other-keys)
29857 (when tests?
29858 (invoke "make" "prepare" "SKIP_DEPS=1")
29859 (invoke "nosetests")))))))
29860 (native-inputs (list python-pynose python-setuptools))
29861 (home-page "https://github.com/clarete/forbiddenfruit")
29862 (synopsis "Patch python built-in objects")
29863 (description "This project allows Python code to extend built-in types.")
29864 (license (list license:gpl3+ license:expat))))
29865
29866(define-public python-k5test
29867 (package
29868 (name "python-k5test")
29869 (version "0.10.4")
29870 (source
29871 (origin
29872 (method url-fetch)
29873 (uri (pypi-uri "k5test" version))
29874 (sha256
29875 (base32 "0c7g9gk3vfgh1wbl4s1v15v283srsixkhgak7lxskxh2cqg4jlp1"))))
29876 (build-system pyproject-build-system)
29877 (arguments
29878 (list #:tests? #f)) ;no tests
29879 (native-inputs
29880 (list python-setuptools))
29881 (inputs
29882 (list mit-krb5))
29883 (home-page "https://github.com/pythongssapi/k5test")
29884 (synopsis "Library for setting up self-contained Kerberos 5 environments")
29885 (description
29886 "@code{k5test} is a library for setting up self-contained Kerberos 5
29887environments, and running Python unit tests inside those environments. It is
29888based on the file of the same name found alongside the MIT Kerberos 5 unit
29889tests.")
29890 (license license:isc)))
29891
29892(define-public python-gssapi
29893 (package
29894 (name "python-gssapi")
29895 (version "1.10.0")
29896 (source
29897 (origin
29898 (method url-fetch)
29899 (uri (pypi-uri "gssapi" version))
29900 (sha256
29901 (base32 "0qvpsx5kq746gixa7phxikkxmir3wy5dj94phg93mvhbq86mwjgi"))))
29902 (build-system pyproject-build-system)
29903 (arguments
29904 (list #:test-flags #~(list "--pyargs" "gssapi")))
29905 (native-inputs
29906 (list python-cython
29907 python-k5test
29908 python-parameterized
29909 python-pytest
29910 python-setuptools))
29911 (inputs
29912 (list mit-krb5))
29913 (propagated-inputs
29914 (list python-decorator))
29915 (home-page "https://github.com/pythongssapi/python-gssapi")
29916 (synopsis "Python GSSAPI Wrapper")
29917 (description
29918 "Python-GSSAPI provides both low-level and high level wrappers around the
29919GSSAPI C libraries. While it focuses on the Kerberos mechanism, it should
29920also be usable with other GSSAPI mechanisms.")
29921 (license license:isc)))
29922
29923(define-public python-check-manifest
29924 (package
29925 (name "python-check-manifest")
29926 (version "0.51")
29927 (source
29928 (origin
29929 (method url-fetch)
29930 (uri (pypi-uri "check_manifest" version))
29931 (sha256
29932 (base32 "0rvdkddnrh8hr42pqabpfrxb6ncswn7c9qrk7xb5lxbmfriwf0cq"))))
29933 (build-system pyproject-build-system)
29934 (arguments
29935 (list
29936 ;; tests: 127 passed, 20 skipped, 2 deselected
29937 #:test-flags
29938 ;; This tests requires setting up a venv which does not work
29939 ;; properly in the build environment.
29940 #~(list "--deselect=tests.py::Tests::test_build_sdist_pep517_no_isolation"
29941 "--deselect=tests.py::Tests::test_build_sdist_pep517_isolated")))
29942 (native-inputs
29943 (list git-minimal/pinned python-pytest))
29944 (propagated-inputs
29945 (list python-pypa-build python-setuptools))
29946 (home-page "https://github.com/mgedmin/check-manifest")
29947 (synopsis "Check MANIFEST.in in a Python source package for completeness")
29948 (description "Python package can include a MANIFEST.in file to help with
29949sending package files to the Python Package Index. This package checks that
29950file to ensure it completely and accurately describes your project.")
29951 (license license:expat)))
29952
29953(define-public python-android-stringslib
29954 (package
29955 (name "python-android-stringslib")
29956 (version "0.1.2")
29957 (source
29958 (origin
29959 (method git-fetch)
29960 (uri (git-reference
29961 (url "https://framagit.org/tyreunom/python-android-strings-lib")
29962 (commit (string-append "v" version))))
29963 (file-name (git-file-name name version))
29964 (sha256
29965 (base32
29966 "0gij55qzzq1h83kfpvhai1vf78kkhyvxa6l17m2nl24454lhfin4"))))
29967 (build-system pyproject-build-system)
29968 (arguments (list #:tests? #f)) ; No tests.
29969 (native-inputs (list python-setuptools))
29970 (home-page "https://framagit.org/tyreunom/python-android-strings-lib")
29971 (synopsis "Android strings.xml support")
29972 (description
29973 "Android Strings Lib provides support for android's strings.xml files.
29974These files are used to translate strings in android apps.")
29975 (license license:expat)))
29976
29977(define-public offlate
29978 (package
29979 (name "offlate")
29980 (version "0.6.1")
29981 (source
29982 (origin
29983 (method git-fetch)
29984 (uri (git-reference
29985 (url "https://framagit.org/tyreunom/offlate")
29986 (commit version)))
29987 (file-name (git-file-name name version))
29988 (sha256
29989 (base32 "1sx5cv8pamyw1m089b6x8ykaxdkx26jk9cblhbzlf0m3ckz52jik"))))
29990 (build-system pyproject-build-system)
29991 (arguments
29992 (list
29993 #:tests? #f ; No tests.
29994 #:phases
29995 #~(modify-phases %standard-phases
29996 (add-before 'build 'generate-fonts
29997 (lambda _
29998 (invoke "make" "fonts")))
29999 (add-before 'build 'generate-translations
30000 (lambda _
30001 (invoke "make" "update-langs"))))))
30002 (propagated-inputs
30003 (list python-android-stringslib
30004 python-dateutil
30005 python-gitlab
30006 python-lxml
30007 python-polib
30008 python-pycountry
30009 python-pyenchant
30010 python-pygit2
30011 python-pygithub
30012 python-pyqt
30013 python-requests
30014 python-ruamel.yaml
30015 python-translate-toolkit-for-offlate
30016 python-translation-finder
30017 python-watchdog))
30018 (native-inputs (list qttools-5 fontforge python-setuptools))
30019 (home-page "https://framagit.org/tyreunom/offlate")
30020 (synopsis "Offline translation interface for online translation tools")
30021 (description
30022 "Offlate offers a unified interface for different translation file
30023formats, as well as many different online translation platforms. You can use
30024it to get work from online platforms, specialized such as the Translation
30025Project, or not such a gitlab instance when your upstream doesn't use any
30026dedicated platform. The tool proposes a unified interface for any format and
30027an upload option to send your work back to the platform.")
30028 (license license:gpl3+)))
30029
30030(define-public python-pypng
30031 (package
30032 (name "python-pypng")
30033 (version "0.20220715.0")
30034 (source
30035 (origin
30036 (method url-fetch)
30037 (uri (pypi-uri "pypng" version))
30038 (sha256
30039 (base32 "1hg24zja235bkbny82hx7sy7qlzfbabxph2lvqaq61vgm4xl773k"))))
30040 (build-system pyproject-build-system)
30041 (arguments
30042 (list
30043 #:phases
30044 '(modify-phases %standard-phases
30045 (add-before 'check 'pre-check
30046 (lambda _
30047 (setenv "PYTHONPATH"
30048 (string-append (getcwd) "/code:"
30049 (getenv "GUIX_PYTHONPATH"))))))))
30050 (native-inputs (list python-pytest python-setuptools python-wheel))
30051 (home-page "https://github.com/drj11/pypng")
30052 (synopsis "Pure Python PNG image encoder/decoder")
30053 (description
30054 "The PyPNG module implements support for PNG images. It reads and writes
30055PNG files with all allowable bit depths (1/2/4/8/16/24/32/48/64 bits per
30056pixel) and colour combinations: greyscale (1/2/4/8/16 bit); RGB, RGBA,
30057LA (greyscale with alpha) with 8/16 bits per channel; colour mapped
30058images (1/2/4/8 bit). Adam7 interlacing is supported for reading and writing.
30059A number of optional chunks can be specified (when writing) and
30060understood (when reading): tRNS, bKGD, gAMA.
30061
30062PyPNG is not a high level toolkit for image processing (like PIL) and does not
30063aim at being a replacement or competitor. Its strength lies in fine-grained
30064extensive support of PNG features. It can also read and write Netpbm PAM
30065files, with a focus on its use as an intermediate format for implementing
30066custom PNG processing.")
30067 (license license:expat)))
30068
30069(define-public python-fuzzywuzzy
30070 (package
30071 (name "python-fuzzywuzzy")
30072 (version "0.18.0")
30073 (source
30074 (origin
30075 (method git-fetch)
30076 (uri (git-reference
30077 (url "https://github.com/seatgeek/fuzzywuzzy")
30078 (commit version)))
30079 (file-name (git-file-name name version))
30080 (sha256
30081 (base32 "0zh8xd9k95waipsdz516rn51ya9xxlxbd7ivbka4gnkqm9ah79mc"))))
30082 (build-system pyproject-build-system)
30083 (arguments
30084 (list
30085 #:test-flags
30086 #~(list "--deselect=test_fuzzywuzzy_pytest.py::test_process_warning")))
30087 (native-inputs
30088 (list python-hypothesis
30089 python-pycodestyle
30090 python-pytest
30091 python-setuptools))
30092 (propagated-inputs (list python-levenshtein))
30093 (home-page "https://github.com/seatgeek/fuzzywuzzy")
30094 (synopsis "Fuzzy string matching in Python")
30095 (description
30096 "Approximate string matching using @emph{Levenshtein Distance} to
30097calculate the differences between sequences.")
30098 (license license:gpl2)))
30099
30100(define-public python-block-tracing
30101 (package
30102 (name "python-block-tracing")
30103 (version "1.0.1")
30104 (source
30105 (origin
30106 (method url-fetch)
30107 (uri (pypi-uri "block_tracing" version))
30108 (sha256
30109 (base32 "0s2y729qr5rs7n506qfh8cssk8m2bi6k2y5vbrh2z3raf2d01alz"))))
30110 (build-system pyproject-build-system)
30111 (arguments (list #:tests? #f)) ; No tests.
30112 (native-inputs (list python-setuptools))
30113 (home-page "https://github.com/rianhunter/block_tracing")
30114 (synopsis "Protect process memory")
30115 (description
30116 "@code{block_tracing} is a tiny Python library that can be used to
30117prevent debuggers and other applications from inspecting the memory within
30118your process.")
30119 (license license:expat)))
30120
30121(define-public python-json-e
30122 (package
30123 (name "python-json-e")
30124 (version "4.8.0")
30125 (source
30126 (origin
30127 (method git-fetch) ; no tests in PyPI release
30128 (uri (git-reference
30129 (url "https://github.com/json-e/json-e")
30130 (commit (string-append "v" version))))
30131 (file-name (git-file-name name version))
30132 (sha256
30133 (base32 "1zsx17jjhvan1ziq5aaqwids3b9kzx3j8czf9qznqqqvb1n133g8"))))
30134 (build-system pyproject-build-system)
30135 (arguments
30136 (list
30137 #:phases
30138 #~(modify-phases %standard-phases
30139 ;; Git repository provides implementations for JavaScript, Golang,
30140 ;; Python and Rust, pick "py".
30141 (add-before 'build 'chdir-to-py
30142 (lambda _
30143 (chdir "py"))))))
30144 (native-inputs
30145 (list python-freezegun
30146 python-pytest
30147 python-pyyaml
30148 python-setuptools
30149 python-wheel))
30150 (home-page "https://json-e.js.org")
30151 (synopsis "Data-structure parameterizer for embedding context in JSON objects")
30152 (description
30153 "This package provides a data-structure parameterization system written
30154for embedding context in JSON objects.")
30155 (license license:mpl2.0)))
30156
30157(define-public python-json-logger
30158 (package
30159 (name "python-json-logger")
30160 (version "4.0.0")
30161 (source
30162 (origin
30163 (method git-fetch)
30164 (uri (git-reference
30165 (url "https://github.com/nhairs/python-json-logger")
30166 (commit (string-append "v" version))))
30167 (file-name (git-file-name name version))
30168 (sha256
30169 (base32 "0m64kh446q38lngw2p5rcfcx6rkq8vbrwl58lsi2c34phpwlqnv0"))))
30170 (build-system pyproject-build-system)
30171 (native-inputs
30172 (list python-freezegun
30173 python-mike
30174 python-msgspec
30175 python-orjson
30176 python-pypa-build
30177 python-pytest
30178 python-setuptools
30179 python-tzdata
30180 python-validate-pyproject
30181 python-typing-extensions))
30182 (home-page "https://github.com/nhairs/python-json-logger")
30183 (synopsis "JSON log formatter in Python")
30184 (description "This library allows standard Python logging to output log data
30185as JSON objects. With JSON we can make our logs more readable by machines and
30186we can stop writing custom parsers for syslog-type records.")
30187 (license license:bsd-3)))
30188
30189(define-public python-daiquiri
30190 (package
30191 (name "python-daiquiri")
30192 (version "3.0.1")
30193 (source
30194 (origin
30195 (method git-fetch)
30196 (uri (git-reference
30197 (url "https://github.com/jd/daiquiri")
30198 (commit version)))
30199 (file-name (git-file-name name version))
30200 (sha256
30201 (base32 "0vfakncq87s6g67mqihjf32xarphd75c03ammvgavladz0pqhlg4"))))
30202 (build-system pyproject-build-system)
30203 (propagated-inputs (list python-json-logger))
30204 (native-inputs (list python-mock python-pytest python-setuptools
30205 python-setuptools-scm))
30206 (home-page "https://github.com/jd/daiquiri")
30207 (synopsis "Library to configure Python logging easily")
30208 (description
30209 "The daiquiri library provides an easy way to configure logging in
30210Python. It also provides some custom formatters and handlers.")
30211 (license license:asl2.0)))
30212
30213(define-public python-pifpaf
30214 (package
30215 (name "python-pifpaf")
30216 (version "3.4.0")
30217 (source
30218 (origin
30219 (method git-fetch)
30220 (uri (git-reference
30221 (url "https://github.com/jd/pifpaf")
30222 (commit version)))
30223 (file-name (git-file-name name version))
30224 (sha256
30225 (base32 "1mj41h5xrkx71d7g5di3ykd4bsbgr7x432zbp63majgjci86gmm9"))))
30226 (build-system pyproject-build-system)
30227 (arguments
30228 (list
30229 #:phases
30230 #~(modify-phases %standard-phases
30231 (add-after 'install 'install-drivers
30232 (lambda* (#:key inputs outputs #:allow-other-keys)
30233 (let ((site (site-packages inputs outputs)))
30234 (copy-recursively "pifpaf/drivers"
30235 (string-append site "/pifpaf/drivers/"))))))))
30236 (propagated-inputs
30237 (list python-click
30238 python-daiquiri
30239 python-fixtures
30240 python-jinja2
30241 python-pbr
30242 python-psutil
30243 python-xattr))
30244 (native-inputs
30245 (list python-mock
30246 python-stestr
30247 python-packaging
30248 python-requests
30249 python-testrepository
30250 python-testtools
30251 python-setuptools))
30252 (home-page "https://github.com/jd/pifpaf")
30253 (synopsis "Tools and fixtures to manage daemons for testing in Python")
30254 (description
30255 "Pifpaf is a suite of fixtures and a command-line tool that starts and
30256stops daemons for a quick throw-away usage. This is typically useful when
30257needing these daemons to run integration testing. It originally evolved from
30258its precursor @code{overtest}.")
30259 (license license:asl2.0)))
30260
30261(define-public python-pytest-check-links
30262 (package
30263 (name "python-pytest-check-links")
30264 (version "0.10.1")
30265 (source
30266 (origin
30267 (method url-fetch)
30268 (uri (pypi-uri "pytest_check_links" version))
30269 (sha256
30270 (base32 "0vbp9nis2iwjz1rjc623bm2908y34xd7zj4yfk43giz6r29dsn3k"))))
30271 (build-system pyproject-build-system)
30272 (arguments
30273 (list #:tests? #f)) ;XXX: 12 failed, 4 passed, 2 skipped
30274 (native-inputs
30275 (list python-hatchling))
30276 (propagated-inputs
30277 (list python-docutils
30278 python-html5lib
30279 python-nbconvert
30280 python-nbformat
30281 python-requests))
30282 (home-page "https://github.com/jupyterlab/pytest-check-links")
30283 (synopsis "Check links in files")
30284 (description "This package provides a pytest plugin that checks URLs for
30285HTML-containing files.")
30286 (license license:bsd-3)))
30287
30288(define-public python-json5
30289 (package
30290 (name "python-json5")
30291 (version "0.9.25")
30292 (source
30293 (origin
30294 ;; sample.json5 is missing from PyPi source tarball
30295 (method git-fetch)
30296 (uri (git-reference
30297 (url "https://github.com/dpranke/pyjson5")
30298 (commit (string-append "v" version))))
30299 (file-name (git-file-name name version))
30300 (sha256
30301 (base32 "1c96dqc8hn8c82q89rr7ix8d4da07ls3iac64f8jvjlgmhfik46q"))))
30302 (build-system pyproject-build-system)
30303 (native-inputs (list python-pytest python-setuptools python-wheel))
30304 (home-page "https://github.com/dpranke/pyjson5")
30305 (synopsis "Python implementation of the JSON5 data format")
30306 (description
30307 "JSON5 extends the JSON data interchange format to make it slightly more
30308usable as a configuration language. This Python package implements parsing and
30309dumping of JSON5 data structures.")
30310 (license license:asl2.0)))
30311
30312(define-public python-farama-notifications
30313 (package
30314 (name "python-farama-notifications")
30315 (version "0.0.4")
30316 (source
30317 ;; The version on pypi does not include tests.
30318 (origin
30319 (method git-fetch)
30320 (uri (git-reference
30321 (url "https://github.com/Farama-Foundation/Farama-Notifications")
30322 (commit version)))
30323 (file-name (git-file-name name version))
30324 (sha256
30325 (base32 "1k1x48xpvhankw7vbjp20ljwran247aphc2qncqrxivrkgzwjjji"))))
30326 (build-system pyproject-build-system)
30327 (arguments
30328 (list
30329 #:phases
30330 '(modify-phases %standard-phases
30331 (replace 'check
30332 (lambda* (#:key tests? #:allow-other-keys)
30333 (when tests?
30334 (invoke "python3" "tests/ci-test.py")))))))
30335 (native-inputs (list python-pytest python-setuptools python-wheel))
30336 (home-page "https://github.com/Farama-Foundation/Farama-Notifications")
30337 (synopsis "Notifications for all Farama Foundation maintained libraries")
30338 (description
30339 "This package allows for providing notifications for all Farama
30340Foundation maintained libraries.")
30341 (license license:expat)))
30342
30343(define-public python-frozendict
30344 (package
30345 (name "python-frozendict")
30346 (version "2.4.6")
30347 (source
30348 (origin
30349 (method url-fetch)
30350 (uri (pypi-uri "frozendict" version))
30351 (sha256
30352 (base32 "13ib358v66c9ykfz3plpxcs96ca6vkx8w84sjv26zlpvf1jd2z6z"))))
30353 (build-system pyproject-build-system)
30354 (native-inputs
30355 (list python-pytest
30356 python-setuptools
30357 python-wheel))
30358 (home-page "https://github.com/Marco-Sulla/python-frozendict")
30359 (synopsis "Simple immutable mapping for Python")
30360 (description
30361 "@dfn{frozendict} is an immutable wrapper around dictionaries that
30362implements the complete mapping interface. It can be used as a drop-in
30363replacement for dictionaries where immutability is desired.")
30364 (license license:expat)))
30365
30366(define-public python-py-cpuinfo
30367 (package
30368 (name "python-py-cpuinfo")
30369 (version "9.0.0")
30370 (source
30371 (origin
30372 (method git-fetch)
30373 (uri (git-reference
30374 (url "https://github.com/workhorsy/py-cpuinfo")
30375 (commit (string-append "v" version))))
30376 (file-name (git-file-name name version))
30377 (sha256
30378 (base32
30379 "112gzmwbj3ndxv20ii7i70irp58adwrlzjdvx5gmh39aw21b96s3"))))
30380 (build-system pyproject-build-system)
30381 (arguments
30382 (list #:test-backend #~'custom
30383 #:test-flags #~(list "test_suite.py")))
30384 (native-inputs
30385 (list python-setuptools))
30386 (home-page "https://github.com/workhorsy/py-cpuinfo")
30387 (synopsis "Get CPU info with Python")
30388 (description
30389 "This Python module returns the CPU info by using the best sources of
30390information for your operating system.")
30391 (license license:expat)))
30392
30393(define-public python-canonicaljson
30394 (package
30395 (name "python-canonicaljson")
30396 (version "2.0.0")
30397 (source
30398 (origin
30399 (method url-fetch)
30400 (uri (pypi-uri "canonicaljson" version))
30401 (sha256
30402 (base32 "0gqi5z8j3myfblrc96l0jykdsk863gad1lwvnnf5vp7sszqsxzg2"))))
30403 (build-system pyproject-build-system)
30404 (arguments
30405 (list #:test-backend #~'unittest))
30406 (native-inputs
30407 (list python-setuptools))
30408 (home-page "https://github.com/matrix-org/python-canonicaljson")
30409 (synopsis "Canonical JSON")
30410 (description
30411 "Deterministically encode JSON.
30412
30413@itemize
30414@item Encodes objects and arrays as RFC 7159 JSON.
30415@item Sorts object keys so that you get the same result each time.
30416@item Has no insignificant whitespace to make the output as small as possible.
30417@item Escapes only the characters that must be escaped, U+0000 to
30418 U+0019 / U+0022 / U+0056, to keep the output as small as possible.
30419@item Uses the shortest escape sequence for each escaped character.
30420@item Encodes the JSON as UTF-8.
30421@item Can encode frozendict immutable dictionaries.
30422@end itemize")
30423 (license license:asl2.0)))
30424
30425(define-public python-signedjson
30426 (package
30427 (name "python-signedjson")
30428 (version "1.1.4")
30429 (source
30430 (origin
30431 (method git-fetch)
30432 (uri (git-reference
30433 (url "https://github.com/matrix-org/python-signedjson")
30434 (commit (string-append "v" version))))
30435 (file-name (git-file-name name version))
30436 (sha256
30437 (base32 "1wkgbwr0hdvafbhbqjibca06rxqbp95gg6rfd3ba6rkgl4g85i5z"))))
30438 (build-system pyproject-build-system)
30439 (propagated-inputs
30440 (list python-canonicaljson
30441 python-pynacl
30442 python-typing-extensions
30443 python-unpaddedbase64))
30444 (native-inputs
30445 (list python-pytest python-setuptools-scm python-setuptools))
30446 (home-page "https://github.com/matrix-org/python-signedjson")
30447 (synopsis "Sign JSON objects with ED25519 signatures")
30448 (description
30449 "Sign JSON objects with ED25519 signatures.
30450
30451@itemize
30452@item More than one entity can sign the same object.
30453@item Each entity can sign the object with more than one key making it easier to
30454rotate keys
30455@item ED25519 can be replaced with a different algorithm.
30456@item Unprotected data can be added to the object under the @dfn{\"unsigned\"}
30457key.
30458@end itemize")
30459 (license license:asl2.0)))
30460
30461(define-public python-daemonize
30462 (package
30463 (name "python-daemonize")
30464 (version "2.5.0")
30465 (source
30466 (origin
30467 (method git-fetch)
30468 (uri (git-reference
30469 (url "https://github.com/thesharp/daemonize")
30470 (commit (string-append "v" version))))
30471 (file-name (git-file-name name version))
30472 (sha256
30473 (base32 "0pz914x6dfq133nfv0y8q8fss4zr52ip8mq3ds50rx0ddlbb0k2x"))))
30474 (build-system pyproject-build-system)
30475 (arguments
30476 (list
30477 #:test-backend #~'custom
30478 #:test-flags #~(list "tests/test.py")
30479 #:phases
30480 #~(modify-phases %standard-phases
30481 (add-before 'check 'fix-tests
30482 (lambda _
30483 ;; XXX: nobody has group nogroup on Guix.
30484 (substitute* "tests/test.py"
30485 (("grp\\.getgrnam\\(\"nobody\"\\)\\.gr_gid")
30486 (number->string (passwd:gid (getpw "nobody"))))))))))
30487 (native-inputs (list coreutils-minimal procps python-setuptools))
30488 (home-page "https://github.com/thesharp/daemonize")
30489 (synopsis "Library for writing system daemons in Python")
30490 (description
30491 "Daemonize is a library for writing system daemons in Python.")
30492 (license license:expat)))
30493
30494(define-public python-pymacaroons
30495 (package
30496 (name "python-pymacaroons")
30497 (properties '((commit . "78c55c1d33a0b23ddc71140a9c999f957d79e9dd")
30498 (revision . "0")))
30499 (version (git-version "0.13.0"
30500 (assoc-ref properties 'revision)
30501 (assoc-ref properties 'commit)))
30502 (source
30503 (origin
30504 (method git-fetch)
30505 (uri (git-reference
30506 (url "https://github.com/ecordell/pymacaroons")
30507 (commit (assoc-ref properties 'commit))))
30508 (file-name (git-file-name name version))
30509 (sha256
30510 (base32 "0ybdxlx6crb7l850dzz50arqrm4d4dl5dvzlf8f7sdhdcn2lgr7m"))))
30511 (build-system pyproject-build-system)
30512 (arguments
30513 (list
30514 #:test-flags
30515 ;; XXX: Despite python-hypothesis, ModuleNotFoundError:
30516 ;; No module named 'hypothesis.specifiers'
30517 #~(list "--ignore=tests/property_tests/macaroon_property_tests.py")))
30518 (native-inputs
30519 (list python-hypothesis
30520 python-mock
30521 python-pytest
30522 python-setuptools))
30523 (propagated-inputs (list python-pynacl))
30524 (home-page "https://github.com/ecordell/pymacaroons")
30525 (synopsis "Python Macaroon Library")
30526 (description
30527 "Macaroons, like cookies, are a form of bearer credential. Unlike opaque
30528tokens, macaroons embed caveats that define specific authorization
30529requirements for the target service, the service that issued the root macaroon
30530and which is capable of verifying the integrity of macaroons it receives.
30531
30532Macaroons allow for delegation and attenuation of authorization. They are
30533simple and fast to verify, and decouple authorization policy from the
30534enforcement of that policy.")
30535 (license license:expat)))
30536
30537(define-public python-ldap3
30538 (package
30539 (name "python-ldap3")
30540 (version "2.9.1")
30541 (home-page "https://github.com/cannatag/ldap3")
30542 (source
30543 (origin
30544 (method git-fetch)
30545 (uri (git-reference (url home-page)
30546 (commit (string-append "v" version))))
30547 (file-name (git-file-name name version))
30548 (sha256
30549 (base32 "07nxbv41wpg5567r07yvm4chgs761drsvn53gn548zi26gmrpr07"))))
30550 (build-system pyproject-build-system)
30551 (arguments
30552 (list
30553 #:tests? #f ;TODO: Tests need a real LDAP server to run
30554 #:test-backend #~'nose))
30555 (native-inputs
30556 (list python-pynose python-setuptools))
30557 (propagated-inputs
30558 (list python-gssapi python-pyasn1))
30559 (synopsis "Python LDAP client")
30560 (description
30561 "LDAP3 is a strictly RFC 4510 conforming LDAP V3 pure Python client
30562library.")
30563 (license license:lgpl3+)))
30564
30565(define-public python-boltons
30566 (package
30567 (name "python-boltons")
30568 (version "25.0.0")
30569 (source
30570 (origin
30571 (method git-fetch)
30572 (uri (git-reference
30573 (url "https://github.com/mahmoud/boltons")
30574 (commit version)))
30575 (file-name (git-file-name name version))
30576 (sha256
30577 (base32 "0j061hd1iwcyz1rvasprjwwgb39x6h36n1l3dw310ig3pzbr84wh"))))
30578 (build-system pyproject-build-system)
30579 (native-inputs (list python-flit-core python-pytest-8 python-setuptools))
30580 (home-page "https://github.com/mahmoud/boltons")
30581 (synopsis "Extensions to the Python standard library")
30582 (description
30583 "Boltons is a set of over 230 pure-Python utilities in the same spirit
30584as — and yet conspicuously missing from — the standard library, including:
30585
30586@itemize
30587@item Atomic file saving, bolted on with fileutils
30588@item A highly-optimized OrderedMultiDict, in dictutils
30589@item Two types of PriorityQueue, in queueutils
30590@item Chunked and windowed iteration, in iterutils
30591@item Recursive data structure iteration and merging, with iterutils.remap
30592@item Exponential backoff functionality, including jitter, through
30593iterutils.backoff
30594@item A full-featured TracebackInfo type, for representing stack traces, in
30595tbutils
30596@end itemize")
30597 (license license:bsd-3)))
30598
30599(define-public python-eliot
30600 (package
30601 (name "python-eliot")
30602 (version "1.17.5")
30603 (source
30604 (origin
30605 (method url-fetch)
30606 (uri (pypi-uri "eliot" version))
30607 (sha256
30608 (base32 "0rx7isb3h5fvraycfgqm781asjjmqldn0qcv6s2r5fwc1p31ffvb"))))
30609 (build-system pyproject-build-system)
30610 (arguments
30611 (list
30612 ;; tests: 407 passed, 21 skipped, 2 deselected, 5479 warnings
30613 ;; Two tests fail with error: TypeError: Unsupported type.
30614 #:test-flags #~(list "-k" "not test_basic_types and not test_dataclass")
30615 #:phases
30616 #~(modify-phases %standard-phases
30617 (add-after 'unpack 'remove-journald-support
30618 (lambda _
30619 (for-each delete-file
30620 '("eliot/tests/test_journald.py"
30621 "eliot/journald.py")))))))
30622 (native-inputs
30623 (list python-pytest
30624 python-setuptools
30625 python-testtools))
30626 (propagated-inputs
30627 (list python-boltons
30628 python-orjson
30629 python-pyrsistent
30630 python-zope-interface))
30631 (home-page "https://github.com/itamarst/eliot/")
30632 (synopsis "Eliot: the logging system that tells you why it happened")
30633 (description
30634 "@dfn{eliot} is a Python logging system that outputs causal chains of
30635actions: actions can spawn other actions, and eventually they either succeed
30636or fail. The resulting logs tell you the story of what your software did: what
30637happened, and what caused it.")
30638 (license license:asl2.0)))
30639
30640(define-public python-pem
30641 (package
30642 (name "python-pem")
30643 (version "23.1.0")
30644 (source
30645 (origin
30646 (method git-fetch)
30647 (uri (git-reference
30648 (url "https://github.com/hynek/pem")
30649 (commit version)))
30650 (file-name (git-file-name name version))
30651 (sha256
30652 (base32 "01x14j1pliyxvcx8hlwlwfchn893ddkxxpxbyqhyh6hjyag2ammd"))))
30653 (build-system pyproject-build-system)
30654 (native-inputs
30655 (list nss-certs-for-test
30656 python-certifi
30657 python-hatch-fancy-pypi-readme
30658 python-hatch-vcs
30659 python-hatchling
30660 python-pretend
30661 python-pyopenssl
30662 python-pytest
30663 python-twisted))
30664 (home-page "https://pem.readthedocs.io/")
30665 (synopsis "Easy PEM file parsing in Python")
30666 (description
30667 "This package provides a Python module for parsing and splitting PEM files.")
30668 (license license:expat)))
30669
30670(define-public python-pysaml2
30671 (package
30672 (name "python-pysaml2")
30673 (version "7.5.4")
30674 (source
30675 (origin
30676 (method git-fetch)
30677 (uri (git-reference
30678 (url "https://github.com/IdentityPython/pysaml2")
30679 (commit (string-append "v" version))))
30680 (file-name (git-file-name name version))
30681 (sha256
30682 (base32 "1vxi6kmckaj0djn79xw8f0gdd569i2y6sywsywyvyrwdcf6k8fqc"))))
30683 (build-system pyproject-build-system)
30684 (arguments
30685 (list
30686 #:test-flags
30687 #~(list "-k"
30688 (string-join
30689 ;; XXX: encryption failures
30690 (list "not test_encrypted_response_6"
30691 "test_validate_cert_chains"
30692 "test_validate_with_root_cert"
30693 ;; XXX: xml parsing error
30694 "test_namespace_processing") " and not "))
30695 #:phases
30696 #~(modify-phases %standard-phases
30697 (add-after 'unpack 'relax-requirements
30698 (lambda _
30699 (substitute* "pyproject.toml"
30700 (("\"(pyopenssl|xmlschema).*\"" _ dep)
30701 (format #f "~s" dep))))))))
30702 (native-inputs (list python-poetry-core python-pytest))
30703 (propagated-inputs
30704 (list python-cryptography
30705 python-dateutil
30706 python-defusedxml
30707 python-pymongo
30708 python-pyopenssl
30709 python-responses
30710 python-requests
30711 python-xmlschema
30712 python-xmlsec))
30713 (home-page "https://idpy.org")
30714 (synopsis "Python implementation of SAML Version 2 Standard")
30715 (description
30716 "PySAML2 is a pure python implementation of SAML Version 2 Standard.
30717It contains all necessary pieces for building a SAML2 service provider or
30718an identity provider. The distribution contains examples of both.
30719
30720This package was originally written to work in a WSGI environment, but
30721there are extensions that allow you to use it with other frameworks.")
30722 (license license:asl2.0)))
30723
30724;; XXX: Upstream note: Final PyPI release to mark the project as inactive.
30725;; This PyPI package is no longer actively maintained, but the underlying
30726;; library can be vendored.
30727;;
30728;; Version 2.0 lacks packaging instructions (setup.py, setup.pkg or
30729;; pyproject.toml) and can't be used as a common input, do not update this
30730;; package.
30731(define-public python-click-plugins
30732 (package
30733 (name "python-click-plugins")
30734 (version "1.1.1.2")
30735 (source
30736 (origin
30737 (method git-fetch)
30738 (uri (git-reference
30739 (url "https://github.com/click-contrib/click-plugins")
30740 (commit version)))
30741 (file-name (git-file-name name version))
30742 (sha256
30743 (base32 "11i93dxb6vvlqb79p8qdbcxvcsb2bb2b9lbkqhv5hs93nry02gxl"))))
30744 (build-system pyproject-build-system)
30745 (arguments
30746 (list #:tests? #f)) ;5 failed, 2 passed, 1 warning
30747 (native-inputs
30748 (list python-setuptools))
30749 (propagated-inputs
30750 (list python-click))
30751 (synopsis "Extension for Click to register external CLI commands")
30752 (description
30753 "This package provides n extension module for Click to register external
30754CLI commands via setuptools entry-points.")
30755 (home-page "https://github.com/click-contrib/click-plugins")
30756 (license license:bsd-3)))
30757
30758;; XXX: Deprecated on <2026-03-23>.
30759(define-deprecated-package python-click-plugins-1 python-click-plugins)
30760
30761(define-public python-diceware
30762 (package
30763 (name "python-diceware")
30764 (version "1.0.1")
30765 (source
30766 (origin
30767 (method url-fetch)
30768 (uri (pypi-uri "diceware" version))
30769 (sha256
30770 (base32
30771 "0fb61yfqapygnpqawf3z286llkc0qfh1b3m1hlqanmhcky091djl"))))
30772 (build-system pyproject-build-system)
30773 (native-inputs
30774 (list python-pytest python-setuptools python-wheel))
30775 (home-page "https://github.com/ulif/diceware/")
30776 (synopsis "Generates memorable passphrases")
30777 (description "This package generates passphrases by concatenating words
30778randomly picked from wordlists. It supports several sources of
30779randomness (including real life dice) and different wordlists (including
30780cryptographically signed ones).")
30781 (license license:gpl3+)))
30782
30783(define-public python-dictdiffer
30784 (package
30785 (name "python-dictdiffer")
30786 (version "0.9.0")
30787 (source
30788 (origin
30789 (method git-fetch)
30790 (uri (git-reference
30791 (url "https://github.com/inveniosoftware/dictdiffer")
30792 (commit (string-append "v" version))))
30793 (file-name (git-file-name name version))
30794 (sha256
30795 (base32 "1rc5jhjxzphip43frrlplcayng2cah1bzbzv6hpxnnjhg6rqy34m"))))
30796 (build-system pyproject-build-system)
30797 (arguments
30798 (list
30799 #:phases
30800 #~(modify-phases %standard-phases
30801 (add-after 'unpack 'relax-requirements
30802 (lambda _
30803 (delete-file "pytest.ini")
30804 (substitute* "setup.py"
30805 (("'pytest-runner.*',")
30806 "'pytest',")))))))
30807 (native-inputs
30808 (list python-pytest python-setuptools python-setuptools-scm))
30809 (home-page "https://github.com/inveniosoftware/dictdiffer")
30810 (synopsis "Diff and patch Python dictionary objects")
30811 (description
30812 "Dictdiffer is a Python module that helps you to diff and patch
30813dictionaries.")
30814 (license license:expat)))
30815
30816(define-public python-osc
30817 (package
30818 (name "python-osc")
30819 (version "1.9.3")
30820 (source
30821 (origin
30822 (method git-fetch)
30823 (uri (git-reference
30824 (url "https://github.com/attwad/python-osc")
30825 (commit (string-append "v" version))))
30826 (file-name (git-file-name name version))
30827 (sha256
30828 (base32 "1d99q9ww278cjqbfdzahg17rhbkgk2rw6ixxm5z5iwnxnsrhfdwa"))))
30829 (build-system pyproject-build-system)
30830 (native-inputs (list python-setuptools))
30831 (home-page "https://github.com/attwad/python-osc")
30832 (synopsis "Open Sound Control server and client implementations")
30833 (description
30834 "@code{python-osc} is a pure Python library with no external
30835dependencies. It implements the @uref{http://opensoundcontrol.org/spec-1_0,
30836Open Sound Control 1.0} specification.")
30837 (license license:unlicense)))
30838
30839(define-public python-cmd2
30840 (package
30841 (name "python-cmd2")
30842 (version "2.5.11")
30843 (source
30844 (origin
30845 (method url-fetch)
30846 (uri (pypi-uri "cmd2" version))
30847 (sha256
30848 (base32
30849 "0abl9aalyfbncw39d41gd3mmdgjvd7jlaa372r0lmghz0a2x781h"))))
30850 (build-system pyproject-build-system)
30851 (arguments
30852 (list #:test-flags '(list "-k" "not test_find_editor_not_specified \
30853and not test_transcript")))
30854 (propagated-inputs
30855 (list python-pyperclip python-wcwidth))
30856 (native-inputs
30857 (list python-pytest
30858 python-pytest-mock
30859 python-setuptools
30860 python-setuptools-scm
30861 python-wheel))
30862 (home-page "https://github.com/python-cmd2/cmd2")
30863 (synopsis "Tool for building interactive command line applications")
30864 (description
30865 "Cmd2 is a tool for building interactive command line applications in
30866Python. Its goal is to make it quick and easy for developers to build
30867feature-rich and user-friendly interactive command line applications. It
30868provides a simple API which is an extension of Python's built-in @code{cmd}
30869module. @code{cmd2} provides a wealth of features on top of @code{cmd} to
30870make your life easier and eliminates much of the boilerplate code which would
30871be necessary when using @code{cmd}.")
30872 (license license:expat)))
30873
30874(define-public python-pytidylib
30875 (package
30876 (name "python-pytidylib")
30877 (version "0.3.2")
30878 (source
30879 (origin
30880 (method git-fetch)
30881 (uri (git-reference
30882 (url "https://github.com/countergram/pytidylib")
30883 (commit version)))
30884 (file-name (git-file-name name version))
30885 (sha256
30886 (base32 "0h5kx99ka47yan9xsh2pyi19mhhbixqpbqn6rgciskfr5m1csji0"))))
30887 (build-system pyproject-build-system)
30888 (arguments
30889 (list
30890 #:phases
30891 #~(modify-phases %standard-phases
30892 (add-after 'unpack 'fix-queue-import
30893 (lambda _
30894 ;; Adjust Queue import for Python 3. Remove for versions >=0.4.0.
30895 (substitute* "tests/threadsafety.py"
30896 (("from Queue import Queue")
30897 "from queue import Queue"))))
30898 (add-before 'build 'qualify-libtidy
30899 (lambda* (#:key inputs #:allow-other-keys)
30900 (let ((libtidy (search-input-file inputs "/lib/libtidy.so")))
30901 (substitute* "tidylib/tidy.py"
30902 (("ctypes\\.util\\.find_library\\('tidy'\\)")
30903 (format #f "'~a'" libtidy)))))))))
30904 (native-inputs (list python-pytest python-setuptools))
30905 (inputs (list tidy-html))
30906 (home-page "https://github.com/countergram/pytidylib")
30907 (synopsis "Python wrapper for HTML Tidy library")
30908 (description
30909 "PyTidyLib is a Python package that wraps the HTML Tidy library. This
30910allows you, from Python code, to “fix” invalid (X)HTML markup.")
30911 (license license:expat)))
30912
30913(define-public python-mujson
30914 (package
30915 (name "python-mujson")
30916 (version "1.4")
30917 (source
30918 (origin
30919 (method git-fetch)
30920 (uri (git-reference
30921 (url "https://github.com/mattgiles/mujson")
30922 (commit version)))
30923 (file-name (git-file-name name version))
30924 (sha256
30925 (base32 "1j0pcqyxpivk8nn7xx5d0pj40g22psd6v2r7l4m8b6h4hrdn9cij"))))
30926 (build-system pyproject-build-system)
30927 (arguments (list #:tests? #f)) ;No tests.
30928 (native-inputs (list python-setuptools))
30929 (home-page "https://github.com/mattgiles/mujson")
30930 (synopsis "Use the fastest JSON functions available at import time")
30931 (description
30932 "This module selects the fastest JSON functions available at import time
30933in Python.")
30934 (license license:expat)))
30935
30936(define-public python-bashlex
30937 (package
30938 (name "python-bashlex")
30939 (version "0.18")
30940 (source
30941 (origin
30942 (method git-fetch)
30943 (uri (git-reference
30944 (url "https://github.com/idank/bashlex")
30945 (commit version)))
30946 (file-name (git-file-name name version))
30947 (sha256
30948 (base32 "00idgf9153jvp0g5ajbcfgpb6ffl2a8rcy3w5n9iirgxa7vlvmkm"))))
30949 (build-system pyproject-build-system)
30950 (arguments
30951 (list
30952 #:phases
30953 #~(modify-phases %standard-phases
30954 (add-before 'build 'pregenerate-yacc-tables
30955 (lambda _
30956 ;; parser.py caches tables, which attempts to write to site lib
30957 ;; see https://github.com/idank/bashlex/issues/51
30958 (invoke "python" "-c" "import bashlex"))))))
30959 (native-inputs (list python-pytest python-setuptools))
30960 (home-page "https://github.com/idank/bashlex")
30961 (synopsis "Python parser for bash")
30962 (description
30963 "@code{bashlex} is a Python port of the parser used internally by GNU
30964bash.
30965
30966For the most part it's transliterated from C, the major differences are:
30967
30968@itemize
30969@item it does not execute anything
30970@item it is reentrant
30971@item it generates a complete AST
30972@end itemize
30973")
30974 (license license:gpl3+)))
30975
30976(define-public python-jinxed
30977 (package
30978 (name "python-jinxed")
30979 (version "1.3.0")
30980 (source
30981 (origin
30982 (method git-fetch)
30983 (uri (git-reference
30984 (url "https://github.com/Rockhopper-Technologies/jinxed")
30985 (commit version)))
30986 (file-name (git-file-name name version))
30987 (sha256
30988 (base32 "1cssqc5fvy3nx0q94ia79vhldfi0r2pq5nkagdvnkhmlnz26a3n8"))))
30989 (build-system pyproject-build-system)
30990 (arguments
30991 (list
30992 #:tests? #f ;_curses.error: setupterm: could not find terminal
30993 #:phases
30994 #~(modify-phases %standard-phases
30995 (add-before 'check 'set-environment-variables
30996 (lambda* (#:key inputs #:allow-other-keys)
30997 (setenv "TERM" "LINUX")
30998 (setenv "TERMINFO"
30999 (search-input-directory inputs "share/terminfo")))))))
31000 (native-inputs (list ncurses python-setuptools))
31001 (home-page "https://github.com/Rockhopper-Technologies/jinxed")
31002 (synopsis "Jinxed Terminal Library")
31003 (description
31004 "Jinxed is an implementation of a subset of the Python curses library.")
31005 (license license:mpl2.0)))
31006
31007(define-public python-blessed
31008 (package
31009 (name "python-blessed")
31010 (version "1.20.0")
31011 (source
31012 (origin
31013 (method url-fetch)
31014 (uri (pypi-uri "blessed" version))
31015 (sha256
31016 (base32
31017 "103ng3ap33xs6i7606q3k6rwvjva9l7qi8j7vw08y13ffkw6gp9c"))
31018 (snippet
31019 ;; Don't get hung up on Windows test failures.
31020 '(delete-file "blessed/win_terminal.py"))))
31021 (build-system pyproject-build-system)
31022 (propagated-inputs (list python-six python-wcwidth))
31023 (native-inputs (list python-pytest python-setuptools python-wheel))
31024 (home-page "https://github.com/jquast/blessed")
31025 (synopsis "Wrapper around terminal capabilities")
31026 (description
31027 "Blessed is a thin, practical wrapper around terminal styling, screen
31028positioning, and keyboard input.")
31029 (license license:expat)))
31030
31031(define-public python-readme-renderer
31032 (package
31033 (name "python-readme-renderer")
31034 (version "44.0")
31035 (source
31036 (origin
31037 (method url-fetch)
31038 (uri (pypi-uri "readme_renderer" version))
31039 (sha256
31040 (base32
31041 "1qfiqm3w1ydpbipns5nifa7h4wraxd72nh7imif819mzmd7064l7"))))
31042 (build-system pyproject-build-system)
31043 (arguments
31044 (list
31045 #:test-flags
31046 '(list "-k"
31047 (string-append
31048 ;; These tests fail due to slight differences in the generated
31049 ;; vs expected HTML, e.g. because of difference in whitespace or
31050 ;; line breaks. (See also
31051 ;; https://github.com/pypa/readme_renderer/issues/234).
31052 "not test_md_fixtures[test_CommonMark_008.md]"
31053 " and not test_rst_fixtures[test_rst_008.rst]"
31054 " and not GFM"))))
31055 (propagated-inputs
31056 (list python-cmarkgfm
31057 python-docutils
31058 python-nh3
31059 python-pygments))
31060 (native-inputs
31061 (list python-pytest
31062 python-setuptools
31063 python-wheel))
31064 (home-page "https://github.com/pypa/readme_renderer")
31065 (synopsis "Render README files in Warehouse")
31066 (description
31067 "Readme Renderer is a library that will safely render arbitrary README
31068files into HTML. It is designed to be used in Warehouse to render the
31069@code{long_description} for packages. It can handle Markdown,
31070reStructuredText, and plain text.")
31071 (license license:asl2.0)))
31072
31073(define-public python-lazr-delegates
31074 (package
31075 (name "python-lazr-delegates")
31076 (version "2.1.1")
31077 (source
31078 (origin
31079 (method url-fetch)
31080 (uri (pypi-uri "lazr_delegates" version))
31081 (sha256
31082 (base32 "1p02diwzn58jhpvf9m8bhb5p0xkx5gnc84mzgwr3zdsidrhv5kmf"))))
31083 (build-system pyproject-build-system)
31084 (arguments
31085 (list
31086 #:test-flags #~(list "-v" #$output)
31087 #:phases
31088 #~(modify-phases %standard-phases
31089 (add-after 'check 'check-cleanup
31090 (lambda* (#:key tests? #:allow-other-keys)
31091 (when tests?
31092 (for-each
31093 delete-file-recursively
31094 (find-files #$output
31095 (lambda (file stat)
31096 (or (member (basename file)
31097 '("tests" ".pytest_cache"))))
31098 #:directories? #t))))))))
31099 (native-inputs
31100 (list python-pytest python-setuptools python-wheel))
31101 (propagated-inputs
31102 (list python-zope-interface))
31103 (home-page "https://launchpad.net/lazr.delegates")
31104 (synopsis "Easily write objects that delegate behavior")
31105 (description
31106 "The @code{lazr.delegates} package makes it easy to write objects that
31107delegate behavior to another object. The new object adds some property or
31108behavior on to the other object, while still providing the underlying interface,
31109and delegating behavior.")
31110 (license license:lgpl3)))
31111
31112(define-public python-lazr-config
31113 (package
31114 (name "python-lazr-config")
31115 (version "3.1")
31116 (source
31117 (origin
31118 (method url-fetch)
31119 (uri (pypi-uri "lazr_config" version))
31120 (sha256
31121 (base32 "02xb4fs9rm6bf3f00qkq8pihgqvrvn2wfnvydn2vg9p73ddhcmvw"))))
31122 (build-system pyproject-build-system)
31123 (arguments
31124 (list
31125 #:test-flags #~(list "-v" #$output)
31126 #:phases
31127 #~(modify-phases %standard-phases
31128 (add-after 'check 'check-cleanup
31129 (lambda* (#:key tests? #:allow-other-keys)
31130 (when tests?
31131 (for-each
31132 delete-file-recursively
31133 (find-files #$output
31134 (lambda (file stat)
31135 (or (member (basename file)
31136 '("tests" ".pytest_cache"))))
31137 #:directories? #t))))))))
31138 (native-inputs
31139 (list python-pytest python-setuptools python-wheel))
31140 (propagated-inputs
31141 (list python-lazr-delegates python-zope-interface))
31142 (home-page "https://launchpad.net/lazr.config")
31143 (synopsis "Create configuration schemas and process and validate configurations")
31144 (description
31145 "The LAZR config system is typically used to manage process configuration.
31146Process configuration is for saying how things change when we run systems on
31147different machines, or under different circumstances. This system uses ini-like
31148file format of section, keys, and values. The config file supports inheritance
31149to minimize duplication of information across files. The format supports schema
31150validation.")
31151 (license license:lgpl3)))
31152
31153(define-public python-flufl-bounce
31154 (package
31155 (name "python-flufl-bounce")
31156 (properties '((commit . "e7d37db46149795f355eab4dca68e670267885f6")
31157 (revision . "0")))
31158 (version (git-version "4.0"
31159 (assoc-ref properties 'revision)
31160 (assoc-ref properties 'commit)))
31161 (source
31162 (origin
31163 (method git-fetch)
31164 (uri (git-reference
31165 (url "https://gitlab.com/flufl/flufl.bounce")
31166 (commit (assoc-ref properties 'commit))))
31167 (file-name (git-file-name name version))
31168 (sha256
31169 (base32 "0i1a2jns0ahls23m0261v1wd429b37xrqdv5pxdlmpyd7if0r1mi"))))
31170 (build-system pyproject-build-system)
31171 (arguments
31172 (list
31173 #:phases
31174 #~(modify-phases %standard-phases
31175 (replace 'check
31176 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
31177 (when tests?
31178 (with-directory-excursion
31179 (string-append (site-packages inputs outputs) "/flufl")
31180 (invoke "python" "-m" "nose2" "-v"))))))))
31181 (propagated-inputs
31182 (list python-atpublic python-zope-interface))
31183 (native-inputs
31184 (list python-flufl-testing python-nose2 python-setuptools))
31185 (home-page "https://fluflbounce.readthedocs.io/en/latest/")
31186 (synopsis "Email bounce detectors")
31187 (description "The @code{flufl.bounce} library provides a set of heuristics
31188and an API for detecting the original bouncing email addresses from a bounce
31189message. Many formats found in the wild are supported, as are VERP and
31190RFC 3464.")
31191 (license (list license:asl2.0
31192 license:lgpl3)))) ; only for setup_headers.py
31193
31194(define-public python-flufl-i18n
31195 (package
31196 (name "python-flufl-i18n")
31197 (version "5.1.0")
31198 (source
31199 (origin
31200 (method url-fetch)
31201 (uri (pypi-uri "flufl_i18n" version))
31202 (sha256
31203 (base32
31204 "0bm4kmi04gm164y5nmadmrg79y1l1cs9iwxcv9y7gq0dgyr20xms"))))
31205 (build-system pyproject-build-system)
31206 (arguments
31207 (list #:test-flags
31208 #~(list "--no-cov" "--ignore-glob=docs/*")
31209 #:phases
31210 #~(modify-phases %standard-phases
31211 ;; This phase add a symlink of dist-info dir for packages
31212 ;; expecting flufl.i18n rather than flufl_i18n (mailman).
31213 (add-after 'install 'add-custom-dist-info
31214 (lambda _
31215 (for-each
31216 (lambda (dir)
31217 (with-directory-excursion (dirname dir)
31218 (let ((base (basename dir)))
31219 (symlink base
31220 (string-join (string-split base #\_) ".")))))
31221 (find-files #$output
31222 (lambda (file stat)
31223 (string-suffix? ".dist-info" file))
31224 #:directories? #t)))))))
31225 (propagated-inputs
31226 (list python-atpublic))
31227 (native-inputs
31228 (list python-hatchling python-pytest python-sybil))
31229 (home-page "https://flufli18n.readthedocs.io")
31230 (synopsis "API for Python internationalization")
31231 (description
31232 "This package provides a high-level, convenient API for managing
31233internationalization/translation contexts in Python applications. There is a
31234simple API for single-context applications, such as command line scripts which
31235only need to translate into one language during the entire course of their
31236execution. There is a more flexible, but still convenient API for multi-context
31237applications, such as servers, which may need to switch language contexts for
31238different tasks.")
31239 (license license:asl2.0)))
31240
31241(define-public python-flufl-lock
31242 (package
31243 (name "python-flufl-lock")
31244 (version "8.1.0")
31245 (source
31246 (origin
31247 (method url-fetch)
31248 (uri (pypi-uri "flufl.lock" version))
31249 (sha256
31250 (base32 "1jz7vipjga4x803gfsb9mvnfb6q8my7ib000nsc3v9ljaq0050yq"))))
31251 (build-system pyproject-build-system)
31252 (arguments
31253 (list #:test-flags
31254 #~(list "--no-cov" "--ignore-glob=docs/*")
31255 #:phases
31256 #~(modify-phases %standard-phases
31257 ;; This phase add a symlink of dist-info dir for packages
31258 ;; expecting flufl.lock rather than flufl_lock (mailman).
31259 (add-after 'install 'add-custom-dist-info
31260 (lambda _
31261 (for-each
31262 (lambda (dir)
31263 (with-directory-excursion (dirname dir)
31264 (let ((base (basename dir)))
31265 (symlink base
31266 (string-join (string-split base #\_) ".")))))
31267 (find-files #$output
31268 (lambda (file stat)
31269 (string-suffix? ".dist-info" file))
31270 #:directories? #t)))))))
31271 (native-inputs
31272 (list python-hatchling python-pytest python-sybil))
31273 (propagated-inputs
31274 (list python-atpublic python-psutil))
31275 (home-page "https://flufllock.readthedocs.io")
31276 (synopsis "NFS-safe file locking with timeouts for POSIX systems")
31277 (description
31278 "The @dfn{flufl.lock} package provides NFS-safe file locking with
31279timeouts for POSIX systems. It is similar to the @code{O_EXCL} option of the
31280@code{open} system call but uses a lockfile. Lock objects support lock-breaking
31281and have a maximum lifetime built-in.")
31282 (license (list license:asl2.0
31283 license:lgpl3)))) ; only for setup_helpers.py
31284
31285(define-public python-flufl-testing
31286 (package
31287 (name "python-flufl-testing")
31288 (version "0.8")
31289 (source
31290 (origin
31291 (method git-fetch)
31292 (uri (git-reference
31293 (url "https://gitlab.com/warsaw/flufl.testing")
31294 (commit version)))
31295 (file-name (git-file-name name version))
31296 (sha256
31297 (base32 "0dl2dl4wdrqklkhqcdbwchpqrpm6lwic4qk961zi6b2f8agis35i"))))
31298 (build-system pyproject-build-system)
31299 (arguments (list #:tests? #f)) ;no tests
31300 (native-inputs (list python-setuptools))
31301 (home-page "https://gitlab.com/warsaw/flufl.testing")
31302 (synopsis "Collection of test tool plugins")
31303 (description
31304 "This package contains a small collection of test tool plugins for
31305@code{nose2} and @code{flake8}.")
31306 (license license:asl2.0)))
31307
31308(define-public python-devtools
31309 (package
31310 (name "python-devtools")
31311 (version "0.12.2")
31312 (source
31313 (origin
31314 (method git-fetch)
31315 (uri (git-reference
31316 (url "https://github.com/samuelcolvin/python-devtools")
31317 (commit (string-append "v" version))))
31318 (file-name (git-file-name name version))
31319 (sha256
31320 (base32 "0snmx7f0s44rzzx8advzmgj5av9dlpz1kx05f7ysya8xrhv5nwfl"))))
31321 (build-system pyproject-build-system)
31322 (arguments
31323 (list
31324 #:test-flags
31325 ;; Disable some failing tests.
31326 ;;
31327 ;; test_print_subprocess seems to inherit wrong environment, fails with
31328 ;; E + ModuleNotFoundError: No module named 'executing'
31329 ;; Test runs fine from local clone.
31330 ;;
31331 ;; test_executing_failure fails with
31332 ;; E - [1, 2] (list) len=2
31333 ;; E + [x, y]: [1, 2] (list) len=2
31334 ;; unclear why, probably due to a dependency.
31335 '(list "-k" "not test_print_subprocess and not test_executing_failure"
31336 ;; test_insert_assert.py also seems to inherit a bad environment:
31337 ;; E fixture 'pytester_pretty' not found
31338 ;; Test runs fine from local clone.
31339 "--ignore=tests/test_insert_assert.py")))
31340 (native-inputs
31341 (list python-hatchling python-pytest python-pytest-mock))
31342 (propagated-inputs
31343 (list python-asttokens python-executing python-pygments))
31344 (home-page "https://github.com/samuelcolvin/python-devtools")
31345 (synopsis "Debug command and development tools")
31346 (description
31347 "This package provides a debug print command and other development tools.
31348It adds a simple and readable way to print stuff during development.")
31349 (license license:expat)))
31350
31351(define-public python-dateparser
31352 (package
31353 (name "python-dateparser")
31354 (version "1.2.2")
31355 (source
31356 (origin
31357 (method url-fetch)
31358 (uri (pypi-uri "dateparser" version))
31359 (sha256
31360 (base32
31361 "1xzcqmvqg82cq4vx3cbgbdrgq4pgqlkk0mnfm0zc5kdqgkqicqwq"))))
31362 (build-system pyproject-build-system)
31363 (arguments
31364 (list
31365 ;; tests: 23811 passed, 18 skipped, 1 deselected, 1 warning
31366 #:test-flags
31367 #~(list (string-join '("--deselect=tests/test_search.py"
31368 "TestTranslateSearch"
31369 "test_search_dates_with_prepositions")
31370 "::"))))
31371 (propagated-inputs
31372 (list python-dateutil
31373 python-pytz
31374 python-regex
31375 python-tzlocal))
31376 (native-inputs
31377 (list python-parameterized
31378 python-pytest
31379 python-setuptools
31380 tzdata-for-tests))
31381 (home-page "https://github.com/scrapinghub/dateparser")
31382 (synopsis
31383 "Date parsing library designed to parse dates from HTML pages")
31384 (description
31385 "@code{python-dateparser} provides modules to easily parse localized
31386dates in almost any string formats commonly found on web pages.")
31387 (license license:bsd-3)))
31388
31389(define-public python-dparse
31390 (package
31391 (name "python-dparse")
31392 (version "0.6.4")
31393 (source
31394 (origin
31395 (method url-fetch)
31396 (uri (pypi-uri "dparse" version))
31397 (sha256
31398 (base32 "06i069hij4i53hikrsv332h2ibwfchr42b68hii6rhzdwcwrrclh"))))
31399 (build-system pyproject-build-system)
31400 (native-inputs (list python-hatchling python-pytest))
31401 (propagated-inputs (list python-packaging python-toml))
31402 (home-page "https://github.com/pyupio/dparse")
31403 (synopsis "Parser for Python dependency files")
31404 (description "This package provides a parser for Python dependency files.")
31405 (license license:expat)))
31406
31407(define-public python-dpath
31408 (package
31409 (name "python-dpath")
31410 (version "2.2.0")
31411 (source
31412 (origin
31413 (method url-fetch)
31414 (uri (pypi-uri "dpath" version))
31415 (sha256
31416 (base32
31417 "0gkavmc44f9cj3kch68343r2ajsbvbsjcmsmkqhkzsjmvhqfdxrl"))))
31418 (build-system pyproject-build-system)
31419 (native-inputs
31420 (list python-hypothesis python-nose2 python-setuptools python-wheel))
31421 (home-page "https://github.com/akesterson/dpath-python")
31422 (synopsis "File-system-like pathing and searching for dictionaries")
31423 (description
31424 "@code{python-dpath} is a library for accessing and searching
31425dictionaries via /slashed/paths ala xpath.
31426
31427Basically it lets you glob over a dictionary as if it were a file system. It
31428allows you to specify globs (ala the bash eglob syntax, through some advanced
31429fnmatch.fnmatch magic) to access dictionary elements, and provides some
31430facility for filtering those results.")
31431 (license license:expat)))
31432
31433(define-public python-safety
31434 (package
31435 (name "python-safety")
31436 (version "3.6.2")
31437 (source
31438 (origin
31439 (method url-fetch)
31440 (uri (pypi-uri "safety" version))
31441 (sha256
31442 (base32 "1gijl0ip1fm1z91p05iqcngcpad3nnvpha0l5iykhbmdlkcqq51f"))))
31443 (build-system pyproject-build-system)
31444 (arguments
31445 (list
31446 #:test-flags
31447 #~(list "-k" (string-join
31448 ;; test_announcements fails with AssertionError.
31449 (list "not test_announcements_if_is_not_tty"
31450 ;; Tests below need a network connection.
31451 "test_check_live"
31452 "test_check_live_cached"
31453 "test_get_packages_licenses_without_api_key"
31454 ;; AttributeError: 'PackageInstalledPayload' object
31455 ;; has no attribute 'tool_path'
31456 "test_emit_diff_operations_with_multiple_operations"
31457 "test_emit_diff_operations_with_empty_locations"
31458 "test_emit_diff_operations_with_different_tools"
31459 "test_emit_diff_operations_creates_correct_payload_structure")
31460 " and not "))
31461 #:phases #~(modify-phases %standard-phases
31462 (add-after 'unpack 'disable-telemetry
31463 (lambda _
31464 (substitute* (find-files "." "\\.py$")
31465 (("telemetry: bool = True")
31466 "telemetry: bool = False")
31467 (("telemetry=True")
31468 "telemetry=False"))))
31469 (add-before 'check 'set-home ; some tests run mkdir
31470 (lambda _
31471 (setenv "HOME" "/tmp"))))))
31472 (native-inputs (list nss-certs-for-test python-hatchling python-pytest))
31473 (propagated-inputs (list python-authlib
31474 python-click
31475 python-dparse
31476 python-filelock
31477 python-httpx
31478 python-jinja2
31479 python-marshmallow
31480 python-nltk
31481 python-packaging
31482 python-psutil
31483 python-pydantic
31484 python-requests
31485 python-ruamel.yaml
31486 python-safety-schemas
31487 python-tenacity
31488 python-tomli
31489 python-tomlkit
31490 python-typer
31491 python-typing-extensions))
31492 (home-page "https://github.com/pyupio/safety")
31493 (synopsis "Check installed dependencies for known vulnerabilities")
31494 (description
31495 "Safety checks installed dependencies for known vulnerabilities.
31496By default it uses the open Python vulnerability database Safety DB.")
31497 (license license:expat)))
31498
31499(define-public python-pypandoc
31500 (package
31501 (name "python-pypandoc")
31502 (version "1.15")
31503 (source
31504 (origin
31505 (method git-fetch)
31506 (uri (git-reference
31507 (url "https://github.com/JessicaTegner/pypandoc")
31508 (commit (string-append "v" version))))
31509 (file-name (git-file-name name version))
31510 (sha256
31511 (base32 "0jqr380xpg1n93dagxv7zfakhdravw0nc81rc4pnmjzkj360l5nr"))))
31512 (build-system pyproject-build-system)
31513 (arguments
31514 (list
31515 #:test-backend #~'unittest
31516 #:phases
31517 #~(modify-phases %standard-phases
31518 (add-before 'check 'disable-tests
31519 (lambda _
31520 (substitute* "tests.py"
31521 ;; Disable test requiring network access
31522 (("test_basic_conversion_from_http_url")
31523 "skip_test_basic_conversion_from_http_url")
31524 ;; Disable tests with missing files
31525 (("test_basic_conversion_from_file_pattern")
31526 "skip_test_basic_conversion_from_file_pattern")
31527 (("test_conversion_with_data_files")
31528 "skip_test_conversion_with_data_files")))))))
31529 ;; Ideally, we would supersede texlive-xpatch with texlive-regexpatch once
31530 ;; the missing etoolbox.sty file is added
31531 (native-inputs
31532 (list (texlive-local-tree
31533 (list texlive-etoolbox
31534 texlive-lm
31535 texlive-regexpatch
31536 texlive-xcolor))
31537 python-poetry-core
31538 python-setuptools))
31539 (inputs (list pandoc python-pandocfilters))
31540 (propagated-inputs (list python-wheel))
31541 (home-page "https://github.com/JessicaTegner/pypandoc")
31542 (synopsis "Python wrapper for pandoc")
31543 (description
31544 "pypandoc is a thin Python wrapper around pandoc and pandoc-citeproc.")
31545 (license license:expat)))
31546
31547(define-public python-rnc2rng
31548 (package
31549 (name "python-rnc2rng")
31550 (version "2.7.0")
31551 (source
31552 (origin
31553 (method git-fetch)
31554 (uri (git-reference
31555 (url "https://github.com/djc/rnc2rng")
31556 (commit version)))
31557 (file-name (git-file-name name version))
31558 (sha256
31559 (base32 "1wbd8936vs4rinjfmjd8dav6sdz6wrsc0jppqidzzcnzwfp146pf"))))
31560 (build-system pyproject-build-system)
31561 (arguments
31562 (list
31563 #:test-backend #~'custom
31564 #:test-flags #~(list "test.py")))
31565 (native-inputs (list python-setuptools))
31566 (propagated-inputs (list python-rply))
31567 (home-page "https://github.com/djc/rnc2rng")
31568 (synopsis "Convert RELAX NG Compact to regular syntax")
31569 (description
31570 "This package provides the @command{rnc2rng} command-line tool as well as
31571a Python library to convert RELAX NG schemata in Compact syntax (rnc) to
31572equivalent schemata in the XML-based default RELAX NG syntax.")
31573 (license license:expat)))
31574
31575(define-public python-citeproc-py
31576 (package
31577 (name "python-citeproc-py")
31578 (version "0.9.0")
31579 (source
31580 (origin
31581 (method git-fetch)
31582 (uri (git-reference
31583 (url "https://github.com/brechtm/citeproc-py")
31584 (commit (string-append "v" version))
31585 (recursive? #t))) ; TODO Unbundle.
31586 (file-name (git-file-name name version))
31587 (sha256
31588 (base32 "0wn1mfn7r4ffbmh529baqa4a798xwa34z0ij1jkmzal9i1na1i61"))))
31589 (build-system pyproject-build-system)
31590 (arguments
31591 (list
31592 #:phases
31593 #~(modify-phases %standard-phases
31594 (add-after 'unpack 'set-version
31595 (lambda _
31596 (delete-file "citeproc/_version.py")
31597 (substitute* "citeproc/__init__.py"
31598 (("from \\. import version")
31599 "")
31600 (("__version__ =.*")
31601 (format #f "__version__ = ~s" #$version))))))))
31602 (native-inputs (list python-pytest python-setuptools))
31603 (propagated-inputs (list python-lxml python-rnc2rng))
31604 (home-page "https://github.com/brechtm/citeproc-py")
31605 (synopsis "Citations and bibliography formatter")
31606 (description
31607 "Citeproc-py is a CSL processor for Python. It aims to implement the
31608CSL 1.0.1 specification. citeproc-py can output styled citations and
31609bibliographies in a number of different output formats. Currently supported
31610are plain text, reStructuredText and HTML.")
31611 (license license:bsd-2)))
31612
31613(define-public python-inform
31614 (package
31615 (name "python-inform")
31616 (version "1.34")
31617 (source
31618 (origin
31619 (method git-fetch) ; no tests in PyPI release
31620 (uri (git-reference
31621 (url "https://github.com/kenkundert/inform")
31622 (commit (string-append "v" version))))
31623 (file-name (git-file-name name version))
31624 (sha256
31625 (base32 "19ck1x8jplgq1lsy8cdv6hsygdbx310k92w4mkzl40bh4h49m1mk"))))
31626 (build-system pyproject-build-system)
31627 (arguments
31628 (list
31629 #:test-flags #~(list "-k" (string-append
31630 ;; Test below needs the num2words package
31631 "not test_plural_words"
31632 ;; These last two failed with AssertionError
31633 " and not test_inform"
31634 " and not test_manual"))))
31635 (native-inputs
31636 (list python-flit-core python-pytest))
31637 (propagated-inputs
31638 (list python-arrow))
31639 (home-page "https://inform.readthedocs.io")
31640 (synopsis "Print & logging utilities for communicating with user")
31641 (description
31642 "Inform is designed to display messages from programs that are typically run from
31643a console. It provides a collection of ‘print’ functions that allow you to simply and
31644cleanly print different types of messages.")
31645 (license license:gpl3+)))
31646
31647(define-public python-nestedtext
31648 (package
31649 (name "python-nestedtext")
31650 (version "3.7")
31651 (source
31652 (origin
31653 (method git-fetch) ; no tests in PyPI release
31654 (uri (git-reference
31655 (url "https://github.com/KenKundert/nestedtext")
31656 (commit (string-append "v" version))))
31657 (file-name (git-file-name name version))
31658 (sha256
31659 (base32 "0yqarfv6jzl41i44mjn0g4c87g47j819py6gbsfi3fdk96c95nll"))))
31660 (build-system pyproject-build-system)
31661 (arguments
31662 (list
31663 ;; XXX: Tests below need some not yet packaged Python libraries.
31664 #:test-flags #~(list "--ignore" "examples/"
31665 "--ignore" "tests/test_nestedtext.py"
31666 "-k" (string-append
31667 "not techniques.rst"
31668 " and not nestedtext.nestedtext.dumps"))))
31669 (native-inputs (list python-flit-core python-pytest))
31670 (propagated-inputs
31671 (list python-inform))
31672 (home-page "https://nestedtext.org")
31673 (synopsis "Human readable and writable data interchange format")
31674 (description
31675 "NestedText is a file format for holding data that is to be entered, edited, or
31676viewed by people. It allows data to be organized into a nested collection of
31677dictionaries, lists, and strings. In this way it is similar to JSON and YAML, but
31678without the complexity and risk of YAML and without the syntactic clutter of JSON.
31679NestedText is both simple and natural. Only a small number of concepts and rules must
31680be kept in mind when creating it. It is easily created, modified, or viewed with
31681a text editor and easily understood and used by both programmers and non-programmers.")
31682 (license license:expat))) ; MIT license
31683
31684(define-public python-nest-asyncio
31685 (package
31686 (name "python-nest-asyncio")
31687 (version "1.6.0")
31688 (source
31689 (origin
31690 (method url-fetch)
31691 (uri (pypi-uri "nest_asyncio" version))
31692 (sha256
31693 (base32
31694 "1zjmxk7rgadgiking9jksncca0hywgs52s34dkymm8dc95a2s5vg"))))
31695 (build-system pyproject-build-system)
31696 (native-inputs
31697 (list python-pytest python-setuptools))
31698 (home-page "https://github.com/erdewit/nest_asyncio")
31699 (synopsis "Patch asyncio to allow nested event loops")
31700 (description
31701 "By design @code{asyncio} does not allow its event loop to be nested.
31702This presents a practical problem: when in an environment where the event loop
31703is already running it's impossible to run tasks and wait for the result. This
31704module patches @code{asyncio} to allow nested use of @code{asyncio.run} and
31705@code{loop.run_until_complete}.")
31706 (license license:bsd-3)))
31707
31708(define-public python-simpervisor
31709 (package
31710 (name "python-simpervisor")
31711 (version "1.0.0")
31712 (source
31713 (origin
31714 ;; Tests not included in release.
31715 (method git-fetch)
31716 (uri (git-reference
31717 (url "https://github.com/yuvipanda/simpervisor")
31718 (commit (string-append "v" version))))
31719 (file-name (git-file-name name version))
31720 (sha256
31721 (base32 "0drvqxbr6fpydb4d7z5dhn97d578gf39sd8cawyl6ksf1f4y8yzg"))))
31722 (build-system pyproject-build-system)
31723 (arguments
31724 ;; See <https://github.com/jupyterhub/simpervisor/issues/57>
31725 (list #:test-flags #~(list "--deselect=tests/test_ready.py::test_ready")))
31726 (native-inputs
31727 (list python-aiohttp
31728 python-hatchling
31729 python-psutil
31730 python-pytest
31731 python-pytest-asyncio))
31732 (home-page "https://github.com/yuvipanda/simpervisor")
31733 (synopsis "Simple async process supervisor")
31734 (description
31735 "This package provides a simple async process supervisor in Python.")
31736 (license license:bsd-3)))
31737
31738(define-public python-parallel
31739 (package
31740 (name "python-parallel")
31741 (version "1.6.4.4")
31742 (source
31743 (origin
31744 (method url-fetch)
31745 (uri (string-append "https://www.parallelpython.com/downloads/pp/pp-"
31746 version ".zip"))
31747 (sha256
31748 (base32 "1mzk4yabxj6r149fswhis18hd8dnag5sj8i4wb06450zq3pi8dh7"))))
31749 (build-system pyproject-build-system)
31750 (arguments (list #:tests? #f)) ;No test suite.
31751 (native-inputs (list python-setuptools unzip))
31752 (propagated-inputs (list python-six))
31753 (home-page "https://www.parallelpython.com")
31754 (synopsis "Parallel and distributed programming for Python")
31755 (description
31756 "Parallel Python module (PP) provides an easy and efficient way to create
31757parallel-enabled applications for SMP computers and clusters. PP module
31758features cross-platform portability and dynamic load balancing. Thus
31759applications written with PP will parallelize efficiently even on
31760heterogeneous and multi-platform clusters (including clusters running other
31761applications with variable CPU loads).")
31762 (license license:bsd-3)))
31763
31764(define-public python-param
31765 (package
31766 (name "python-param")
31767 (version "2.3.3")
31768 (source
31769 (origin
31770 (method git-fetch)
31771 (uri (git-reference
31772 (url "https://github.com/holoviz/param")
31773 (commit (string-append "v" version))))
31774 (file-name (git-file-name name version))
31775 (sha256
31776 (base32 "0cs550plb10ghhn0w5bdnq0i0bkh12996kv3lfibsbzy4dcc7qc7"))))
31777 (build-system pyproject-build-system)
31778 ;; tests: 1448 passed, 5 skipped, 2 xfailed
31779 (native-inputs
31780 ;; Project does not require any dependencies, all of the listed
31781 ;; native-inputs are for build/test only.
31782 (list python-cloudpickle
31783 python-hatch-vcs
31784 python-hatchling
31785 python-ipython-minimal
31786 python-jsonschema
31787 python-nbval
31788 python-nest-asyncio
31789 python-numpy
31790 python-odfpy
31791 python-openpyxl
31792 python-pandas
31793 python-pyarrow
31794 python-pytest
31795 python-pytest-asyncio
31796 python-tables
31797 python-xlrd))
31798 (home-page "https://param.holoviz.org/")
31799 (synopsis
31800 "Make your Python code clearer and more reliable by declaring Parameters")
31801 (description
31802 "Param is a library for handling all the user-modifiable parameters,
31803arguments, and attributes that control your code. It provides automatic,
31804robust error-checking while dramatically reducing boilerplate code, letting
31805you focus on what you want your code to do rather than on checking for all the
31806possible ways users could supply inappropriate values to a function or
31807class.")
31808 (license license:bsd-3)))
31809
31810(define-public python-djitellopy
31811 (package
31812 (name "python-djitellopy")
31813 (version "2.5.0")
31814 (source
31815 (origin
31816 (method url-fetch)
31817 (uri (pypi-uri "djitellopy" version))
31818 (sha256
31819 (base32 "1kc0syb4hpn7fay0rxpazmczag6jw3pncrrc6v762jj0afiwkrps"))))
31820 (build-system pyproject-build-system)
31821 (arguments
31822 (list
31823 #:tests? #f ;no test suite
31824 #:phases
31825 #~(modify-phases %standard-phases
31826 ;; OpenCV does not ship metadata files for its Python library, which
31827 ;; makes it invisible to the sanity_check script (see:
31828 ;; https://github.com/opencv/opencv/issues/24810).
31829 (delete 'sanity-check))))
31830 (propagated-inputs
31831 (list opencv ;for opencv-python
31832 python-av
31833 python-numpy
31834 python-pillow))
31835 (native-inputs (list python-setuptools python-wheel))
31836 (home-page "https://github.com/damiafuentes/DJITelloPy")
31837 (synopsis
31838 "DJI Tello drone video streaming, swarms and state packets library")
31839 (description
31840 "DJI Tello drone Python interface using the official Tello SDK and Tello
31841EDU SDK. This library has the following features:
31842@itemize
31843@item Implementation of all tello commands
31844@item Retrieve a video stream easily
31845@item Receive and parse state packets
31846@item Control a swarm of drones.
31847@end itemize")
31848 (license license:expat)))
31849
31850(define-public python-djvulibre
31851 ;; The original git repository of python-djvulibre is hosted at
31852 ;; <https://jwilk.net/software/python-djvulibre>. However, that repository
31853 ;; has been archived by its owner in 2022. The most active fork is
31854 ;; <https://github.com/FriedrichFroebel/python-djvulibre>, and that is the
31855 ;; version packaged here (its "python3" branch, the default).
31856 ;;
31857 ;; However, the python-djvulibre PyPI project still refers to the old
31858 ;; repository. The new repository is published as djvulibre-python on PyPI;
31859 ;; that is, with the name in reversed order.The original package name is
31860 ;; used in Guix because it best adheres to the Guix naming scheme.
31861 (package
31862 (name "python-djvulibre")
31863 (version "0.9.3")
31864 (source
31865 (origin
31866 (method git-fetch)
31867 (uri (git-reference
31868 (url "https://github.com/FriedrichFroebel/python-djvulibre")
31869 (commit version)))
31870 (file-name (git-file-name name version))
31871 (sha256
31872 (base32 "0cwda210dgkqyjkwha2if80wfmv6w8baigp8kdcwhmbisfgd3l4y"))))
31873 (build-system pyproject-build-system)
31874 (arguments
31875 (list
31876 #:phases
31877 #~(modify-phases %standard-phases
31878 (replace 'check
31879 (lambda* (#:key tests? #:allow-other-keys)
31880 (when tests?
31881 ;; The tests get confused by the djvu directory.
31882 (delete-file-recursively "djvu")
31883 ;; Tests can't find tools.py otherwise.
31884 (with-directory-excursion "tests"
31885 (invoke "python" "-m" "pytest"))))))))
31886 (native-inputs
31887 (list ghostscript
31888 pkg-config
31889 python-cython
31890 python-pytest
31891 python-setuptools))
31892 (inputs
31893 (list djvulibre))
31894 (synopsis "Python bindings for DjVuLibre")
31895 (description "This is a set of Python bindings for the DjVuLibre library.")
31896 (home-page "https://github.com/FriedrichFroebel/python-djvulibre")
31897 (license license:gpl2)))
31898
31899(define-public python-gamera
31900 (package
31901 (name "python-gamera")
31902 (version "4.1.0")
31903 (source
31904 (origin
31905 (method git-fetch)
31906 (uri (git-reference
31907 (url "https://github.com/hsnr-gamera/gamera-4")
31908 (commit (string-append "v" version))))
31909 (file-name (git-file-name name version))
31910 (sha256
31911 (base32 "0l3w3wvi1ina6r3adc4wikz47wai8cjci0i5k8dxqv8p629dihrn"))))
31912 (build-system pyproject-build-system)
31913 (arguments
31914 (list
31915 #:phases
31916 #~(modify-phases %standard-phases
31917 (add-after 'unpack 'fix-build
31918 (lambda _
31919 ;; The script to make daily build artifacts fails to compile,
31920 ;; but users don't need that, so ignore it.
31921 (delete-file "misc/daily_build.py")
31922 ;; Prepare tests
31923 (mkdir-p "tmp")
31924 (setenv "HOME" (string-append (getcwd) "/tmp")))))))
31925 (native-inputs (list python-docutils python-pytest python-setuptools))
31926 (inputs (list libpng libtiff zlib))
31927 (synopsis "Framework for building document analysis applications")
31928 (description
31929 "Gamera is a toolkit for building document image recognition systems.")
31930 (home-page "https://gamera.informatik.hsnr.de/")
31931 (license license:gpl2+)))
31932
31933(define-public python-aiofiles
31934 (package
31935 (name "python-aiofiles")
31936 (version "24.1.0")
31937 (source
31938 (origin
31939 (method url-fetch)
31940 (uri (pypi-uri "aiofiles" version))
31941 (sha256
31942 (base32 "0v0namryb6acj9bkic5rcgbnb36njj601ws85q60z0d3wp4pb812"))))
31943 (build-system pyproject-build-system)
31944 (native-inputs
31945 (list python-hatch-vcs
31946 python-hatchling
31947 python-pytest
31948 python-pytest-asyncio))
31949 (home-page "https://github.com/Tinche/aiofiles")
31950 (synopsis "File support for @code{asyncio}")
31951 (description
31952 "@code{python-aiofiles} is a library for handling local disk files in
31953asyncio applications.")
31954 (license license:asl2.0)))
31955
31956(define-public python-pyre-extensions
31957 (package
31958 (name "python-pyre-extensions")
31959 (version "0.0.32")
31960 (source
31961 (origin
31962 (method url-fetch)
31963 (uri (pypi-uri "pyre_extensions" version))
31964 (sha256
31965 (base32
31966 "0mayv07djjnysznhjnchix3alkz4lxycb20azpaw8mpa2igp35jk"))))
31967 (build-system pyproject-build-system)
31968 (native-inputs (list python-pytest python-setuptools python-wheel))
31969 (propagated-inputs
31970 (list python-typing-extensions python-typing-inspect))
31971 (home-page "https://pyre-check.org")
31972 (synopsis
31973 "Type system extensions for use with @code{python-pyre}")
31974 (description
31975 "@code{python-pyre-extensions} defines extensions to the standard
31976@code{typing} module that are supported by the Pyre typechecker.")
31977 (license license:expat)))
31978
31979(define-public python-pywatchman
31980 (package
31981 (name "python-pywatchman")
31982 (version "3.0.0")
31983 (source
31984 (origin
31985 (method url-fetch)
31986 (uri (pypi-uri "pywatchman" version))
31987 (sha256
31988 (base32 "07lix9z2ib7g4h648wsbp930x5i03akis12mih8p4n0s74bjmlzg"))))
31989 (build-system pyproject-build-system)
31990 (arguments
31991 (list
31992 #:test-backend #~'custom
31993 #:test-flags #~(list "tests/tests.py")))
31994 (native-inputs (list python-setuptools))
31995 (home-page "https://facebook.github.io/watchman/")
31996 (synopsis "Watchman client for python")
31997 (description
31998 "@code{python-pywatchman} is a library to connect and query Watchman to
31999discover file changes.")
32000 (license license:bsd-3)))
32001
32002(define-public python-roundrobin
32003 (package
32004 (name "python-roundrobin")
32005 (version "0.0.4")
32006 (source
32007 (origin
32008 (method git-fetch)
32009 (uri (git-reference
32010 (url "https://github.com/linnik/roundrobin")
32011 (commit version)))
32012 (file-name (git-file-name name version))
32013 (sha256
32014 (base32 "0hdgwavrfj23c61142mnlxz5sd9ayp6svbgj2g4wdpiqy7h49rvr"))))
32015 (build-system pyproject-build-system)
32016 (arguments
32017 (list #:test-backend #~'unittest))
32018 (native-inputs (list python-setuptools))
32019 (home-page "https://github.com/linnik/roundrobin")
32020 (synopsis "Collection of roundrobin utilities")
32021 (description
32022 "This package provides a collection of utilities for round-robin
32023distribution in Python.")
32024 (license license:expat)))
32025
32026(define-public python-helpdev
32027 (package
32028 (name "python-helpdev")
32029 (version "0.7.1")
32030 (source
32031 (origin
32032 (method git-fetch)
32033 (uri (git-reference
32034 (url "https://gitlab.com/dpizetta/helpdev")
32035 (commit (string-append "v" version))))
32036 (file-name (git-file-name name version))
32037 (sha256
32038 (base32 "0mzf0sdgxzn3x56qxgi6kbsx3cydl8h0bdpyn4xyfkw6pyi9g2bd"))))
32039 (build-system pyproject-build-system)
32040 (native-inputs (list python-pip python-pytest python-setuptools))
32041 (home-page "https://gitlab.com/dpizetta/helpdev")
32042 (synopsis "Extract information about the Python environment easily")
32043 (description
32044 "Helpdev is a library to easily extract information about the Python
32045environment.")
32046 (license license:expat)))
32047
32048(define-public python-loguru
32049 (package
32050 (name "python-loguru")
32051 ;; 0.7.3 (2024-12-06); latest changes provide test clean up for MyPy,
32052 ;; covert to git tag when released.
32053 (properties '((commit . "75b920160d0655c1631a2739b4470fc12317a155")
32054 (revision . "0")))
32055 (version (git-version "0.7.3"
32056 (assoc-ref properties 'revision)
32057 (assoc-ref properties 'commit)))
32058 (source
32059 (origin
32060 (method git-fetch)
32061 (uri (git-reference
32062 (url "https://github.com/Delgan/loguru")
32063 (commit (assoc-ref properties 'commit))))
32064 (file-name (git-file-name name version))
32065 (sha256
32066 (base32 "1ypx3dgdfi6fpr7mmg8bqg7bgbwaqrm13l9d50xmd8j2b7zb13bi"))))
32067 (build-system pyproject-build-system)
32068 ;; tests: x86_64-linux 1598 passed, 28 skipped
32069 ;; i686-linux 1562 passed, 28 skipped, 36 deselected
32070 (arguments
32071 (list
32072 #:test-flags
32073 #~(list #$@(if (target-64bit?)
32074 '()
32075 ;; OverflowError
32076 '("--deselect=tests/test_datetime.py::test_formatting"
32077 (string-append "--deselect=tests/test_datetime.py"
32078 "::test_value_of_gmtoff_is_invalid"))))))
32079 (native-inputs
32080 (list python-flit-core
32081 python-freezegun
32082 python-mypy-for-tests
32083 python-pytest
32084 python-setuptools
32085 tzdata-for-tests))
32086 (propagated-inputs
32087 (list python-colorama))
32088 (home-page "https://github.com/Delgan/loguru")
32089 (synopsis "Python logging made (stupidly) simple")
32090 (description "Python logging made (stupidly) simple.")
32091 (license license:expat)))
32092
32093(define-public python-qtsass
32094 (package
32095 (name "python-qtsass")
32096 (version "0.4.0")
32097 (source
32098 (origin
32099 ;; There are no tests in the PyPI tarball.
32100 (method git-fetch)
32101 (uri (git-reference
32102 (url "https://github.com/spyder-ide/qtsass/")
32103 (commit (string-append "v" version))))
32104 (file-name (git-file-name name version))
32105 (sha256
32106 (base32 "1skdihfby2f41zxgwa5zv44vdxjrw301rh88rjmzj4xbdlix6cig"))))
32107 (build-system pyproject-build-system)
32108 (native-inputs
32109 (list python-flaky python-pytest python-setuptools python-wheel))
32110 (propagated-inputs
32111 (list python-libsass))
32112 (home-page "https://github.com/spyder-ide/qtsass")
32113 (synopsis "Compile SCSS files to valid Qt stylesheets")
32114 (description
32115 "Besides being used in web development, CSS is also the way to stylize
32116Qt-based desktop applications. However, Qt's CSS has a few variations that
32117prevent the direct use of SASS compiler.
32118
32119The purpose of this tool is to fill the gap between SASS and Qt-CSS by
32120handling those variations.")
32121 (license license:expat)))
32122
32123(define-public python-qdarkstyle
32124 (package
32125 (name "python-qdarkstyle")
32126 (version "3.2.3")
32127 (source
32128 (origin
32129 (method url-fetch)
32130 (uri (pypi-uri "QDarkStyle" version))
32131 (sha256
32132 (base32
32133 "1bpi0asa7sd5ch6x6b60n5yias04nsx6kcwji40228g9lrs7y2qc"))))
32134 (build-system pyproject-build-system)
32135 (native-inputs (list python-pytest
32136 python-qtsass
32137 python-setuptools
32138 python-watchdog
32139 python-wheel))
32140 (propagated-inputs
32141 (list python-qtpy python-pyqt-6))
32142 (home-page "https://github.com/ColinDuquesnoy/QDarkStyleSheet")
32143 (synopsis
32144 "Complete dark stylesheet for Python and Qt applications")
32145 (description "QDarkStyle is the most complete dark stylesheet for Python and
32146Qt applications.")
32147 (license license:expat)))
32148
32149(define-public python-pystray
32150 (package
32151 (name "python-pystray")
32152 (version "0.19.5")
32153 (source
32154 (origin
32155 (method git-fetch)
32156 (uri (git-reference
32157 (url "https://github.com/moses-palmer/pystray")
32158 (commit "1907f8681d6d421517c63d94f425f9cdd74d0034")))
32159 (file-name (git-file-name name version))
32160 (sha256
32161 (base32 "1vj6c8s7rbc7xc4bi5brx5629ls1ri9prcw9290v85hagilmp609"))))
32162 (build-system pyproject-build-system)
32163 (arguments
32164 (list
32165 ;; The test suite requires user interaction, there are no automated
32166 ;; tests.
32167 #:tests? #false
32168 #:phases #~(modify-phases %standard-phases
32169 (add-before 'sanity-check 'use-dummy-backend
32170 (lambda _
32171 ;; Without setting this, pystray tries to connect to
32172 ;; X11 on import.
32173 (setenv "PYSTRAY_BACKEND" "dummy"))))))
32174 (native-inputs (list python-sphinx python-setuptools))
32175 (propagated-inputs (list python-pillow python-six python-xlib))
32176 (home-page "https://github.com/moses-palmer/pystray")
32177 (synopsis "Create a system tray icon")
32178 (description "This library allows you to create a system tray icon.
32179It makes it possible to specify an icon, a title and a callback for when
32180the icon is activated. The icon and title can be changed after the icon
32181has been created, and the visibility of the icon can be toggled.")
32182 (license license:lgpl3+)))
32183
32184(define-public python-bitstring
32185 (package
32186 (name "python-bitstring")
32187 (version "4.3.1")
32188 (source
32189 (origin
32190 (method url-fetch)
32191 (uri (pypi-uri "bitstring" version))
32192 (sha256
32193 (base32 "0nm9l77sgyqai8ggnm6j9yvc473g0l8icaj11x66s8ap72fw12x0"))))
32194 (build-system pyproject-build-system)
32195 (arguments
32196 (list
32197 #:test-flags #~(list "--ignore=tests/test_benchmarks.py"
32198 "--ignore=tests/test_fp8.py"
32199 "--ignore=tests/test_mxfp.py")))
32200 (native-inputs
32201 (list python-gfloat python-pytest python-setuptools python-wheel))
32202 (propagated-inputs
32203 (list python-bitarray))
32204 (home-page "https://github.com/scott-griffiths/bitstring")
32205 (synopsis
32206 "Simple construction, analysis and modification of binary data")
32207 (description
32208 "Bitstring is a library for simple construction, analysis and modification
32209 of binary data.")
32210 (license license:expat)))
32211
32212(define-public python-confuse
32213 (package
32214 (name "python-confuse")
32215 (version "2.0.1")
32216 (source
32217 (origin
32218 (method url-fetch)
32219 (uri (pypi-uri "confuse" version))
32220 (sha256
32221 (base32
32222 "07v1s16nryls3zhaakwz6i6rgdy1c010gk00jsvn5a5a96ns4ybk"))))
32223 (build-system pyproject-build-system)
32224 (native-inputs (list python-flit-core python-pytest))
32225 (propagated-inputs (list python-pyyaml))
32226 (home-page "https://github.com/beetbox/confuse")
32227 (synopsis "Painless YAML configuration")
32228 (description "Confuse is a configuration library for Python that uses
32229YAML. It takes care of defaults, overrides, type checking, command-line
32230integration, human-readable errors, and standard OS-specific locations.")
32231 (license license:expat)))
32232
32233(define-public python-referencing
32234 (package
32235 (name "python-referencing")
32236 (version "0.35.1")
32237 (source
32238 (origin
32239 (method url-fetch)
32240 (uri (pypi-uri "referencing" version))
32241 (sha256
32242 (base32 "0g3hvzz6ci6dcf701q7ilr4b7vw3fw428kqp4nj35dn8lqj23d15"))))
32243 (build-system pyproject-build-system)
32244 (arguments
32245 (list
32246 #:test-flags
32247 '(list "--pyargs" "referencing/tests")
32248 #:phases
32249 '(modify-phases %standard-phases
32250 (add-after 'unpack 'patch-pyproject
32251 (lambda _
32252 ;; The build system does not like this.
32253 (substitute* "pyproject.toml"
32254 ((" \"Topic :: File Formats.*") "")))))))
32255 (propagated-inputs (list python-attrs python-rpds-py))
32256 (native-inputs
32257 (list python-hatchling
32258 python-hatch-vcs
32259 python-jsonschema
32260 python-pytest
32261 python-pytest-subtests))
32262 (home-page "https://github.com/python-jsonschema/referencing")
32263 (synopsis "JSON Referencing + Python")
32264 (description "This package provides an implementation-agnostic
32265implementation of JSON reference resolution.")
32266 (license license:expat)))
32267
32268(define-public python-referencing-bootstrap
32269 (package
32270 (inherit python-referencing)
32271 (name "python-referencing-bootstrap")
32272 (arguments
32273 (list
32274 #:tests? #false
32275 #:phases
32276 '(modify-phases %standard-phases
32277 (add-after 'unpack 'patch-pyproject
32278 (lambda _
32279 ;; The build system does not like this.
32280 (substitute* "pyproject.toml"
32281 ((" \"Topic :: File Formats.*") "")))))))
32282 (native-inputs (list python-hatchling python-hatch-vcs))))
32283
32284(define-public python-reflink
32285 (package
32286 (name "python-reflink")
32287 (version "0.2.2")
32288 (source
32289 (origin
32290 (method git-fetch)
32291 (uri (git-reference
32292 (url "https://gitlab.com/rubdos/pyreflink")
32293 (commit version)))
32294 (file-name (git-file-name name version))
32295 (sha256
32296 (base32 "1ch3n7m1f5nvx9i0jv1fj1i5w1jsl1ga8dxzixg71m34gf4kg3s6"))))
32297 (build-system pyproject-build-system)
32298 (arguments
32299 (list #:tests? #f)) ;almost all tests want to run mkfs.btrfs
32300 (propagated-inputs (list python-cffi))
32301 (native-inputs (list python-pytest python-setuptools))
32302 (home-page "https://gitlab.com/rubdos/pyreflink")
32303 (synopsis "Python wrapper around reflink system call")
32304 (description
32305 "Python reflink wraps around platform specific @code{reflink}
32306implementations.")
32307 (license license:expat)))
32308
32309(define-public python-retry
32310 (package
32311 (name "python-retry")
32312 (version "0.9.2")
32313 (source
32314 (origin
32315 (method git-fetch)
32316 (uri (git-reference
32317 (url "https://github.com/invl/retry")
32318 (commit version)))
32319 (file-name (git-file-name name version))
32320 (sha256
32321 (base32 "1a35ihsn082626592bkjc41fywylzp603j0cxpkbm2f7l1k332xv"))))
32322 (build-system pyproject-build-system)
32323 (native-inputs (list python-pbr python-pytest))
32324 (propagated-inputs (list python-decorator python-py))
32325 (home-page "https://github.com/invl/retry")
32326 (synopsis "Retry decorator")
32327 (description
32328 "@code{retry} is an easy to use retry decorator for Python. It can be
32329used to retry a function a given number of times.")
32330 (license license:asl2.0)))
32331
32332(define-public python-crayons
32333 (package
32334 (name "python-crayons")
32335 (version "0.4.0")
32336 (source
32337 (origin
32338 (method git-fetch)
32339 (uri (git-reference
32340 (url "https://github.com/MasterOdin/crayons")
32341 (commit (string-append "v" version))))
32342 (file-name (git-file-name name version))
32343 (sha256
32344 (base32 "0zmls5c67mxyxzlwvagiidlrxy1f6f8kwm5afjsydhn19h4rd7za"))))
32345 (build-system pyproject-build-system)
32346 (arguments
32347 (list
32348 #:test-backend #~'custom
32349 #:test-flags #~(list "test_crayons.py")))
32350 (native-inputs (list python-setuptools))
32351 (propagated-inputs (list python-colorama))
32352 (home-page "https://github.com/MasterOdin/crayons")
32353 (synopsis "TextUI colors for Python")
32354 (description
32355 "This package gives you colored strings for the terminal. Crayons
32356automatically wraps a given string in the foreground color and restores the
32357original state after the string is printed.")
32358 (license license:expat)))
32359
32360(define-public python-sane
32361 (package
32362 (name "python-sane")
32363 (version "2.9.2")
32364 (source
32365 (origin
32366 (method git-fetch)
32367 (uri (git-reference
32368 (url "https://github.com/python-pillow/Sane")
32369 (commit (string-append "v" version))))
32370 (file-name (git-file-name name version))
32371 (sha256
32372 (base32 "0ldc17n1h8awd0flhwhvb5fj0izy5vy18c128saqnm5isq273y9r"))))
32373 (build-system pyproject-build-system)
32374 (arguments (list #:tests? #f)) ; No tests.
32375 (native-inputs (list python-setuptools))
32376 (inputs (list sane))
32377 (home-page "https://github.com/python-pillow/Sane")
32378 (synopsis "Python interface to the SANE scanner")
32379 (description
32380 "This package provides Python interface to the SANE scanner and frame
32381grabber interface.")
32382 (license (license:non-copyleft
32383 ;; Yet another variant of the X/MIT license.
32384 "https://github.com/python-pillow/Sane/blob/master/COPYING"))))
32385
32386(define-public python-scikit-build
32387 (package
32388 (name "python-scikit-build")
32389 (version "0.18.1")
32390 (source
32391 (origin
32392 (method url-fetch)
32393 (uri (pypi-uri "scikit_build" version))
32394 (sha256
32395 (base32 "1rxqzigfacpbcfhf3c1gdqrnqdnq503bx5vpib19km44l32jl5d4"))
32396 (patches
32397 (search-patches "python-scikit-build-setuptools-compat.patch"))))
32398 (build-system pyproject-build-system)
32399 (arguments
32400 (list
32401 #:phases
32402 #~(modify-phases %standard-phases
32403 (add-after 'unpack 'patch-cmake-executable
32404 (lambda* (#:key inputs #:allow-other-keys)
32405 (substitute* "skbuild/constants.py"
32406 (("^(CMAKE_DEFAULT_EXECUTABLE = ).*" _ head)
32407 (format #f "~a ~s~%" head
32408 (search-input-file inputs "bin/cmake"))))))
32409 (add-before 'check 'pre-check
32410 (lambda _
32411 ;; Some tests try to access the network before being skipped.
32412 ;; Skip them by default.
32413 (substitute* "tests/test_setup.py"
32414 (("pytest\\.mark\\.skipif\\(not is_site_reachable.*")
32415 "pytest.mark.isolated()\n"))))
32416 (replace 'check
32417 (lambda* (#:key tests? #:allow-other-keys)
32418 (when tests?
32419 ;; These tests attempt to pull dependencies from the Internet.
32420 (delete-file "tests/test_distribution.py")
32421 (delete-file "tests/test_pep518.py")
32422 ;; The tests marked as "isolate" are tests that require access
32423 ;; to the network.
32424 (invoke "pytest" "-vv" "-m" "not isolated"
32425 "-n" (number->string (parallel-job-count))
32426 "-k" (string-append
32427 ;; These tests attempt to write to read-only
32428 ;; Python install directory.
32429 "not test_install_command "
32430 "and not test_test_command "
32431 "and not test_hello_develop "
32432 ;; These sdist-related tests fail for unknown
32433 ;; reasons (see:
32434 ;; https://github.com/scikit-build/scikit-build/issues/689).
32435 "and not test_hello_sdist_with_base "
32436 "and not test_manifest_in_sdist "
32437 "and not test_hello_sdist "
32438 "and not test_sdist_with_symlinks "
32439 ;; These are not parallel safe and fail
32440 ;; nondeterministically (see:
32441 ;; https://github.com/scikit-build/scikit-build/issues/711).
32442 "and not test_generator_cleanup "
32443 "and not test_generator_selection "
32444 ;; … and there's more of them
32445 "and not test_cxx_compiler "
32446 "and not test_fortran_compiler ")))))
32447 (add-after 'install 'install-cmake
32448 (lambda* (#:key outputs #:allow-other-keys)
32449 (let ((lib (string-append (assoc-ref outputs "out")
32450 "/lib/cmake/modules")))
32451 (mkdir-p lib)
32452 (with-directory-excursion "skbuild/resources/cmake"
32453 (for-each (lambda (file) (install-file file lib))
32454 (find-files "." "\\.cmake")))))))))
32455 (native-inputs
32456 (list cmake-minimal
32457 gfortran
32458 git-minimal/pinned ;for tests
32459 ninja/pinned
32460 python-cython
32461 python-hatch-fancy-pypi-readme
32462 python-hatch-vcs
32463 python-hatchling
32464 python-pytest
32465 python-pytest-mock
32466 python-pytest-xdist
32467 python-requests
32468 python-virtualenv))
32469 (propagated-inputs
32470 (list python-distro
32471 python-packaging
32472 python-wheel))
32473 (home-page "https://github.com/scikit-build/scikit-build")
32474 (synopsis "Build system generator for Python C/C++/Fortran/Cython extensions")
32475 (description "Scikit-build is an improved build system generator for
32476CPython C/C++/Fortran/Cython extensions. It has support for additional
32477compilers, build systems, cross compilation, and locating dependencies and
32478determining their build requirements. The scikit-build package is
32479fundamentally just glue between the @code{setuptools} Python module and
32480CMake.")
32481 (license license:expat)))
32482
32483(define-public python-screenkey
32484 (package
32485 (name "python-screenkey")
32486 (version "1.5")
32487 (source
32488 (origin
32489 (method git-fetch)
32490 (uri (git-reference
32491 (url "https://gitlab.com/screenkey/screenkey")
32492 (commit (string-append "v" version))))
32493 (file-name (git-file-name name version))
32494 (sha256
32495 (base32 "0j719kld4dr85d9lxn0d0b6156mcy09jm7arssfp2n3j6hmjssci"))))
32496 (build-system pyproject-build-system)
32497 (arguments
32498 (list
32499 #:tests? #f ; No tests.
32500 #:phases
32501 #~(modify-phases %standard-phases
32502 (add-after 'unpack 'fix-dlopen-paths
32503 (lambda* (#:key inputs #:allow-other-keys)
32504 (substitute* "Screenkey/xlib.py"
32505 (("(libXtst.so.6|libX11.so.6)" lib)
32506 (search-input-file inputs (string-append "/lib/" lib))))))
32507 (add-after 'install 'wrap-screenkey
32508 (lambda _
32509 (wrap-program (string-append #$output "/bin/screenkey")
32510 `("GUIX_PYTHONPATH" ":" prefix
32511 (,(getenv "GUIX_PYTHONPATH")))
32512 `("GI_TYPELIB_PATH" ":" prefix
32513 (,(getenv "GI_TYPELIB_PATH")))))))))
32514 (inputs (list bash-minimal
32515 gtk+
32516 libx11
32517 libxtst
32518 python-babel
32519 python-dbus
32520 python-pycairo
32521 python-pygobject
32522 slop))
32523 (native-inputs (list python-setuptools))
32524 (home-page "https://www.thregr.org/~wavexx/software/screenkey/")
32525 (synopsis "Screencast tool to display pressed keys")
32526 (description
32527 "Screenkey is a screencast tool to display your keys inspired by
32528Screenflick.")
32529 (license license:gpl3+)))
32530
32531(define-public python-jinja2-cli
32532 (package
32533 (name "python-jinja2-cli")
32534 (version "0.8.2")
32535 (source
32536 (origin
32537 (method git-fetch)
32538 (uri (git-reference
32539 (url "https://github.com/mattrobenolt/jinja2-cli")
32540 (commit version)))
32541 (file-name (git-file-name name version))
32542 (sha256
32543 (base32
32544 "03ap7rxc1g302m0wacn47rf65d6dqrawa4maam9yapyr96viif7b"))))
32545 (build-system pyproject-build-system)
32546 (propagated-inputs
32547 (list python-jinja2))
32548 (native-inputs
32549 (list python-jinja2
32550 python-pytest
32551 python-setuptools
32552 python-wheel))
32553 (home-page "https://github.com/mattrobenolt/jinja2-cli")
32554 (synopsis "Command-line interface to Jinja2")
32555 (description
32556 "This package provides a command-line interface (CLI) to the Jinja2
32557template engine.")
32558 (license license:bsd-3)))
32559
32560(define-public python-readability
32561 (package
32562 (name "python-readability")
32563 (version "0.3.1")
32564 (source
32565 (origin
32566 (method git-fetch)
32567 (uri (git-reference
32568 (url "https://github.com/andreasvc/readability/")
32569 (commit (string-append "v" version))))
32570 (file-name (git-file-name name version))
32571 (sha256
32572 (base32 "0m2v4ysy2a7k6j9d85i4n9z6k48rmgmbj1v7r6l2cb5qpa3pwrj5"))))
32573 (build-system pyproject-build-system)
32574 (arguments (list #:tests? #f)) ; No tests.
32575 (native-inputs (list python-setuptools))
32576 (home-page "https://github.com/andreasvc/readability/")
32577 (synopsis "Measure text readability using surface characteristics")
32578 (description
32579 "This package provides a Python library that is an implementation of
32580traditional readability measures based on simple surface characteristics.
32581These measures are basically linear regressions based on the number of words,
32582syllables, and sentences.")
32583 (license license:asl2.0)))
32584
32585(define-public python-readability-lxml
32586 ;; No releases since 2020, see:
32587 ;; <https://github.com/buriy/python-readability/issues/196>.
32588 (package
32589 (name "python-readability-lxml")
32590 (version "0.8.4.1")
32591 (source
32592 (origin
32593 (method git-fetch)
32594 (uri (git-reference
32595 (url "http://github.com/buriy/python-readability")
32596 (commit version)))
32597 (file-name (git-file-name name version))
32598 (sha256
32599 (base32 "1dr567k03ljhwx9pacmynrv47w5vgq9fkgncpm0vlvmby2g0xgdl"))))
32600 (build-system pyproject-build-system)
32601 (native-inputs
32602 (list python-poetry-core
32603 python-pytest))
32604 (propagated-inputs
32605 (list python-chardet
32606 python-cssselect
32607 python-lxml
32608 python-lxml-html-clean)) ;XXX: it should be part of python-lxml lib
32609 (home-page "http://github.com/buriy/python-readability")
32610 (synopsis "HTML to text parser")
32611 (description
32612 "This package provides classes and function that strip gratuitous markup
32613from web pages to make them easier to read.")
32614 (license license:asl2.0)))
32615
32616(define-public python-listparser
32617 (package
32618 (name "python-listparser")
32619 (version "0.20")
32620 (source
32621 (origin
32622 (method git-fetch)
32623 (uri (git-reference
32624 (url "https://github.com/kurtmckee/listparser")
32625 (commit (string-append "v" version))))
32626 (file-name (git-file-name name version))
32627 (sha256
32628 (base32 "0a69cm0inwqwipvnmf5plbf9rqgy1arl62gxnwc7pg7062p563vs"))))
32629 (build-system pyproject-build-system)
32630 (native-inputs (list python-pytest python-poetry-core))
32631 (home-page "https://github.com/kurtmckee/listparser")
32632 (synopsis "Parse subscription lists in Python")
32633 (description
32634 "This package provides a Python library that can parse OPML, FOAF, and
32635iGoogle subscription lists.")
32636 (license license:expat)))
32637
32638(define-public python-smartypants
32639 (package
32640 (name "python-smartypants")
32641 (version "2.0.2")
32642 (source
32643 (origin
32644 (method url-fetch)
32645 (uri (pypi-uri "smartypants" version))
32646 (sha256
32647 (base32 "1ih0z32xfz45bpjyc27nnx8k4b613cwxyyr9k2v68sfcszhlrmir"))))
32648 (build-system pyproject-build-system)
32649 (native-inputs
32650 (list python-docutils python-pygments python-setuptools))
32651 (home-page "https://github.com/justinmayer/smartypants.py")
32652 (synopsis "Translate punctuation characters into smart quotes")
32653 (description
32654 "@command{smartpants} can perform the following transformations:
32655@enumerate
32656@item Straight quotes ( \" and ' ) into \"curly\" quote HTML entities
32657@item Backticks-style quotes (``like this'') into \"curly\" quote HTML
32658entities
32659@item Dashes (-- and ---) into en- and em-dash entities
32660@item Three consecutive dots (... or . . .) into an ellipsis entity
32661@end enumerate")
32662 (license license:bsd-3)))
32663
32664(define-public python-ld
32665 (package
32666 (name "python-ld")
32667 (version "1.9.0")
32668 (source
32669 (origin
32670 (method git-fetch)
32671 (uri (git-reference
32672 (url "https://github.com/nir0s/ld")
32673 (commit (string-append "v" version))))
32674 (file-name (git-file-name name version))
32675 (sha256
32676 (base32 "16yacjfw701n8dhyi26hps3i7fchbvnq9gcrx7v0fn2lbfzzvq00"))))
32677 (build-system pyproject-build-system)
32678 (arguments
32679 (list
32680 ;; XXX: These tests expect ubuntu distro.
32681 #:test-flags
32682 #~(list "-k" (string-join (list "not test_ubuntu14normal_lsb_release"
32683 "test_ubuntu14nomodules_lsb_release"
32684 "test_trailingblanks_lsb_release")
32685 " and not "))))
32686 (native-inputs (list python-pytest python-setuptools))
32687 (home-page "https://github.com/nir0s/ld")
32688 (synopsis "OS platform information API")
32689 (description
32690 "The ld package provides information about the GNU/Linux distribution it
32691runs on, such as a reliable machine-readable ID, or version information.")
32692 (license license:asl2.0)))
32693
32694(define-public python-quicktions
32695 (package
32696 (name "python-quicktions")
32697 (version "1.22")
32698 (source
32699 (origin
32700 (method git-fetch)
32701 (uri (git-reference
32702 (url "https://github.com/scoder/quicktions")
32703 (commit version)))
32704 (file-name (git-file-name name version))
32705 (sha256
32706 (base32
32707 "0kmbhbmz8cjsjp0lqmsi6a2imr4g9wy8rpfdwzghhs8hb6wj5gwy"))))
32708 (build-system pyproject-build-system)
32709 (native-inputs
32710 (list python-cython python-pytest python-setuptools))
32711 (home-page "https://github.com/scoder/quicktions")
32712 (synopsis "Fast fractions data type for rational numbers")
32713 (description
32714 "This package provides fast fractions data type for rational numbers. It
32715is the cythonized version of @code{fractions.Fraction}.")
32716 (license license:psfl)))
32717
32718(define-public python-pathvalidate
32719 (package
32720 (name "python-pathvalidate")
32721 (version "2.4.1")
32722 (source
32723 (origin
32724 (method git-fetch)
32725 (uri (git-reference
32726 (url "https://github.com/thombashi/pathvalidate")
32727 (commit (string-append "v" version))))
32728 (file-name (git-file-name name version))
32729 (sha256
32730 (base32 "17s9vqmws4sfji4bw6qd4rn7ahzkpj6yp2ia5p6vd8kva8n05h37"))))
32731 (build-system pyproject-build-system)
32732 (native-inputs (list python-allpairspy python-click python-faker
32733 python-pytest python-setuptools))
32734 (home-page "https://github.com/thombashi/pathvalidate")
32735 (synopsis "Sanitize strings representing paths")
32736 (description
32737 "@code{pathvalidate} is a Python library to sanitize/validate strings
32738representing paths or filenames.")
32739 (license license:expat)))
32740
32741(define-public python-escapism
32742 (package
32743 (name "python-escapism")
32744 (version "1.0.1")
32745 (source
32746 (origin
32747 (method git-fetch)
32748 (uri (git-reference
32749 (url "https://github.com/jupyterhub/escapism")
32750 (commit version)))
32751 (file-name (git-file-name name version))
32752 (sha256
32753 (base32 "1447mamrdbyv9v47f9wrc4fyvbwz5qrwl8qrdzqdq3q62q4xrawj"))))
32754 (build-system pyproject-build-system)
32755 (native-inputs (list python-pytest python-setuptools))
32756 (home-page "https://github.com/jupyterhub/escapism")
32757 (synopsis "Simple, generic library for escaping strings")
32758 (description
32759 "This Python library provides a programming interface to, given a set of
32760safe characters and an escape character, escape safe strings and unescape the
32761result.")
32762 (license license:expat)))
32763
32764(define-public python-recommonmark
32765 (package
32766 (name "python-recommonmark")
32767 (version "0.7.1")
32768 (source
32769 (origin
32770 (method url-fetch)
32771 (uri (pypi-uri "recommonmark" version))
32772 (sha256
32773 (base32
32774 "0rvdd2ikdr0yg6cx6594fdzn53cmdc0g0i6qsbcdq8i2kxjdpd5x"))))
32775 (build-system pyproject-build-system)
32776 (arguments
32777 (list
32778 ;; XXX: Some of those fail for no good reason.
32779 #:test-flags #~(list "--ignore=tests/test_sphinx.py")))
32780 (native-inputs (list python-pytest python-setuptools python-wheel))
32781 (propagated-inputs (list python-commonmark python-docutils python-sphinx))
32782 (home-page "https://github.com/readthedocs/recommonmark")
32783 (synopsis "Docutils-compatibility bridge to CommonMark")
32784 (description
32785 "This package provides a docutils-compatibility bridge to CommonMark that
32786lets you write CommonMark inside of Docutils & Sphinx projects.")
32787 (license license:expat)))
32788
32789(define-public python-redo
32790 (package
32791 (name "python-redo")
32792 (version "3.0.0")
32793 (source
32794 (origin
32795 (method git-fetch)
32796 (uri (git-reference
32797 (url "https://github.com/mozilla-releng/redo")
32798 (commit version)))
32799 (file-name (git-file-name name version))
32800 (sha256
32801 (base32 "1sh12f1zbdcafmnqlw25pyirhg78linbb7sxd3vnbdlm92dry0b0"))))
32802 (build-system pyproject-build-system)
32803 (native-inputs
32804 (list python-mock python-pytest python-pytest-asyncio python-setuptools))
32805 (home-page "https://github.com/mozilla-releng/redo")
32806 (synopsis "Utilities to retry Python callables")
32807 (description "Redo provides various means to add seamless ability to
32808retry to any Python callable.")
32809 (license license:mpl2.0)))
32810
32811(define-public python-opcodes
32812 ;; There are no tags in this repo, but 'opcodes/__init__.py' specifies a
32813 ;; version number, which is what we use here.
32814 (let ((commit "0f7c7d63f5e13ce5a89d9acc3934f1b6e247ec1f"))
32815 (package
32816 (name "python-opcodes")
32817 (version "0.3.14") ;from 'opcodes/__init__.py'
32818 (home-page "https://github.com/Maratyszcza/Opcodes")
32819 (source
32820 (origin
32821 (method git-fetch)
32822 (uri (git-reference (url home-page) (commit commit)))
32823 (file-name (git-file-name name version))
32824 (sha256
32825 (base32 "1fvxkr83gfl9f0ikd2wl2lzazzya2qz1hk4yn2a0pq742brbwpys"))))
32826 (build-system pyproject-build-system)
32827 (native-inputs (list python-pytest python-setuptools))
32828 (synopsis "Database of processor instructions and opcodes")
32829 (description
32830 "This project documents instruction sets in a format convenient for
32831tools development. An instruction set is represented by three files:
32832
32833@itemize
32834@item an XML file that describes instructions;
32835@item an XSD file that describes the structure of the XML file;
32836@item a Python module that reads the XML file and represents it as a set of
32837Python objects;
32838@end itemize
32839
32840It currently provides descriptions for most user-mode x86, x86_64, and k1om
32841instructions up to AVX-512 and SHA (including 3dnow!+, XOP, FMA3, FMA4, TBM
32842and BMI2).")
32843 (license license:bsd-2))))
32844
32845(define-public python-cart
32846 (package
32847 (name "python-cart")
32848 (version "1.2.3")
32849 (source
32850 (origin
32851 (method git-fetch)
32852 (uri (git-reference
32853 (url "https://github.com/CybercentreCanada/cart")
32854 (commit (string-append "v" version))))
32855 (file-name (git-file-name name version))
32856 (sha256
32857 (base32 "1064swqylim0nx0msynkqbz6n57n5yy4mmqxl7wd9bsg5mmrxrd1"))))
32858 (build-system pyproject-build-system)
32859 (arguments
32860 (list
32861 #:test-backend #~'unittest))
32862 (native-inputs
32863 (list python-setuptools))
32864 (propagated-inputs
32865 (list python-pycryptodome))
32866 (home-page "https://github.com/CybercentreCanada/cart")
32867 (synopsis "Library for interacting with the CaRT file format")
32868 (description
32869 "This Python library implements the CaRT file format which is commonly
32870used to store and transmit information about computer malware and associated
32871metadata.")
32872 (license license:bsd-2)))
32873
32874(define-public python-ailment
32875 (package
32876 (name "python-ailment")
32877 ;; Must be the same version as python-angr.
32878 (version "9.2.112")
32879 (source
32880 (origin
32881 (method url-fetch)
32882 (uri (pypi-uri "ailment" version))
32883 (sha256
32884 (base32 "1rv8rwvdm7fc9mf8z5hqb54dsj0n7jlnwghd12ll0b2jmh2ix8mn"))))
32885 (build-system pyproject-build-system)
32886 (arguments
32887 `(#:phases (modify-phases %standard-phases
32888 (replace 'check
32889 ;; Many tests are skipped due to cyclic dependencies.
32890 (lambda* (#:key tests? #:allow-other-keys)
32891 (when tests?
32892 (with-directory-excursion "tests"
32893 (invoke "python" "-m" "unittest"))))))))
32894 (native-inputs (list python-setuptools python-wheel))
32895 (home-page "https://github.com/angr/ailment")
32896 (synopsis "The angr intermediate language")
32897 (description
32898 "This Python module implements an @acronym{IL, Intermediate Language},
32899also known as @acronym{IR, Intermediate Representation}, used by the angr
32900binary analysis platform.")
32901 (license license:bsd-2)))
32902
32903(define-public python-cle
32904 (package
32905 (name "python-cle")
32906 ;; Must be the same version as python-angr.
32907 (version "9.2.112")
32908 (source
32909 (origin
32910 (method url-fetch)
32911 (uri (pypi-uri "cle" version))
32912 (sha256
32913 (base32 "11jbvg12wqxz74iy83ax0q8k156xrw6iqv75dix5cpqgacds3gdj"))))
32914 (build-system pyproject-build-system)
32915 (arguments
32916 (list
32917 #:tests? #f))
32918 (propagated-inputs (list python-pefile python-pyelftools python-pyvex
32919 python-sortedcontainers python-cart))
32920 (native-inputs (list python-cffi python-setuptools python-wheel))
32921 (home-page "https://github.com/angr/cle")
32922 (synopsis "Python loader for binaries and their associated libraries")
32923 (description
32924 "CLE loads binaries and their associated libraries, resolves
32925imports and provides an abstraction of process memory the same way as if
32926it was loader by the operating system's loader.")
32927 (license license:bsd-2)))
32928
32929(define-public python-pyvex
32930 (package
32931 (name "python-pyvex")
32932 ;; Must be the same version as python-angr.
32933 (version "9.2.112")
32934 (source
32935 (origin
32936 (method url-fetch)
32937 (uri (pypi-uri "pyvex" version))
32938 (sha256
32939 (base32 "0z1jiflp7h07mfc26am3v7v5z2n6mw9hkfylbs86qgpm93qcf6i3"))))
32940 (build-system pyproject-build-system)
32941 (arguments
32942 (list
32943 #:phases #~(modify-phases %standard-phases
32944 (replace 'check
32945 (lambda* (#:key tests? #:allow-other-keys)
32946 (when tests?
32947 (with-directory-excursion "tests"
32948 (invoke "python" "-m" "unittest")))))
32949
32950 (add-before 'build 'set-cc
32951 (lambda _
32952 (setenv "CC" #$(cc-for-target))
32953 (setenv "CC_NATIVE" "gcc"))))))
32954 (propagated-inputs (list python-archinfo python-bitstring python-cffi))
32955 (native-inputs (list python-setuptools python-wheel))
32956 (home-page "https://github.com/angr/pyvex")
32957 (synopsis "Python interface to libVEX and VEX IR")
32958 (description
32959 "This package provides a Python interface the libVEX and VEX IR.
32960VEX is the intermediate representation (also known as intermediate
32961language) used by the Valgrind analysis tool. As such, VEX is designed
32962to enable all kinds of binary analysis tasks.")
32963 (license license:bsd-2)))
32964
32965(define-public python-claripy
32966 (package
32967 (name "python-claripy")
32968 ;; Must be the same version as python-angr.
32969 (version "9.2.112")
32970 (source
32971 (origin
32972 ;; Fetching from Git as pypi release doesn't include all test files.
32973 (method git-fetch)
32974 (uri (git-reference
32975 (url "https://github.com/angr/claripy")
32976 (commit (string-append "v" version))))
32977 (file-name (git-file-name name version))
32978 (sha256
32979 (base32 "0c6q6imxjwhxn87d9yz8zvyrszk94r25w8x0g1lr6mrpa9bx7wai"))
32980 (modules '((guix build utils)))
32981 (snippet '(begin
32982 (substitute* "setup.cfg"
32983 ;; Relax the z3 version constraint.
32984 ;; See https://github.com/angr/claripy/commit/d1fe2df
32985 (("z3-solver==4.13.0.0")
32986 ""))))))
32987 (build-system pyproject-build-system)
32988 (arguments
32989 `(#:phases (modify-phases %standard-phases
32990 (replace 'check
32991 (lambda* (#:key tests? #:allow-other-keys)
32992 (when tests?
32993 (with-directory-excursion "tests"
32994 (invoke "python" "-m" "unittest"))))))))
32995 (propagated-inputs (list python-cachetools python-decorator python-pysmt
32996 z3))
32997 (native-inputs (list python-setuptools python-wheel))
32998 (home-page "https://github.com/angr/claripy")
32999 (synopsis "Abstraction layer for constraint solvers")
33000 (description
33001 "This Python module provides an abstraction layer for interacting
33002with constraint solvers. Specifically, it is intended to be used with
33003SMT solvers and is built on top of the Z3 solver.")
33004 (license license:bsd-2)))
33005
33006(define-public python-pysmt
33007 (package
33008 (name "python-pysmt")
33009 (version "0.9.6")
33010 (source
33011 (origin
33012 ;; Fetching from Git as pypi release doesn't include all test files.
33013 (method git-fetch)
33014 (uri (git-reference
33015 (url "https://github.com/pysmt/pysmt")
33016 (commit (string-append "v" version))))
33017 (file-name (git-file-name name version))
33018 (sha256
33019 (base32 "0jiw8pa6hfh9ajr953q187qgpdnk3bvaa3wmrxs8ilw5jc41sq8y"))))
33020 (build-system pyproject-build-system)
33021 (arguments
33022 `(#:phases (modify-phases %standard-phases
33023 (add-before 'check 'set-pysmt-solver
33024 (lambda _
33025 (setenv "PYSMT_SOLVER" "z3"))))))
33026 (native-inputs (list python-pytest python-setuptools python-wheel))
33027 (propagated-inputs (list z3))
33028 (home-page "https://github.com/pysmt/pysmt")
33029 (synopsis
33030 "Solver-agnostic library for SMT formula manipulation and solving")
33031 (description
33032 "This Python module provides a solver-agnostic abstraction for
33033working with @acronym{SMT, Satisfiability Modulo Theory} formulas. For example,
33034it allows manipulation and solving such formulas.")
33035 (license license:asl2.0)))
33036
33037(define-public python-rpyc
33038 (package
33039 (name "python-rpyc")
33040 (version "5.3.1")
33041 (source
33042 (origin
33043 ;; Fetching from Git as pypi release doesn't include all test files.
33044 (method git-fetch)
33045 (uri (git-reference
33046 (url "https://github.com/tomerfiliba-org/rpyc")
33047 (commit version)))
33048 (file-name (git-file-name name version))
33049 (sha256
33050 (base32 "15mnp9qkyw3mmxmr5y4kf3xkvxyp00n892vqaqwznr7al35apgnr"))
33051 (snippet '(begin
33052 ;; Disable deploy tests, these rely on OpenSSH and require
33053 ;; configuring the SSH client manually to accept the host key.
33054 (delete-file "tests/test_deploy.py")
33055 ;; Disable tests requiring network access. These tests
33056 ;; presently fail with the error "Network is unreachable".
33057 (delete-file "tests/test_registry.py")))))
33058 (build-system pyproject-build-system)
33059 (arguments
33060 `(#:phases (modify-phases %standard-phases
33061 (replace 'check
33062 (lambda* (#:key tests? #:allow-other-keys)
33063 (when tests?
33064 (with-directory-excursion "tests"
33065 (invoke "python" "-m" "unittest"))))))))
33066 (propagated-inputs (list python-hatchling python-plumbum))
33067 (home-page "https://github.com/tomerfiliba-org/rpyc")
33068 (synopsis
33069 "Remote Python Call (RPyC) is a symmetric distributed computing library")
33070 (description
33071 "This Python module enables remote procedure calls, clustering, and
33072distributed-computing. For this purpose, it makes use of object-proxying, a technique
33073that employs python's dynamic nature, to overcome the physical boundaries between
33074processes and computers, so that remote objects can be manipulated as if they
33075were local.")
33076 (license license:expat)))
33077
33078(define-public python-nampa
33079 (package
33080 (name "python-nampa")
33081 ;; PyPI version is 0.1.1 from 2017. Tag 1.0 on git is from 2020 and still
33082 ;; has 0.1.1 as version. Latest commit is from 2024.
33083 (properties '((commit . "cb6a63aae64324f57bdc296064bc6aa2b99ff99a")
33084 (revision . "0")))
33085 (version (git-version "1.0.0"
33086 (assoc-ref properties 'revision)
33087 (assoc-ref properties 'commit)))
33088 (source
33089 (origin
33090 (method git-fetch)
33091 (uri (git-reference
33092 (url "https://github.com/thebabush/nampa")
33093 (commit (assoc-ref properties 'commit))))
33094 (file-name (git-file-name name version))
33095 (sha256
33096 (base32 "0a3fx0wpch4il1fwv1nan6nsd7bv84b0bs2xxxjacisw3spizlg0"))))
33097 (build-system pyproject-build-system)
33098 (arguments
33099 (list
33100 #:test-flags
33101 #~(list "-k test_random_values")
33102 #:phases
33103 #~(modify-phases %standard-phases
33104 (add-after 'unpack 'patch-tests
33105 (lambda _
33106 ;; Unclear why this top-level __init__.py is here. It seems to
33107 ;; setup a plugin for binaryninja, which Guix does not package.
33108 (delete-file "__init__.py")
33109 ;; Yields tests, which is not allowed anymore.
33110 (substitute* "tests/test_crc.py"
33111 (("yield") "#yield")))))))
33112 (propagated-inputs (list python-future))
33113 (native-inputs (list python-pytest python-setuptools))
33114 (home-page "https://github.com/thebabush/nampa")
33115 (synopsis "Python implementation of IDA Pro's FLIRT technology")
33116 (description
33117 "This Python module implements the @acronym{FLIRT, Fast Library Identification
33118and Recognition Technology}. This technology is useful for identifying
33119common library subroutines in disassembled binaries.")
33120 (license license:lgpl3)))
33121
33122(define-public python-mulpyplexer
33123 (package
33124 (name "python-mulpyplexer")
33125 (version "0.09")
33126 (source
33127 (origin
33128 (method url-fetch)
33129 (uri (pypi-uri "mulpyplexer" version))
33130 (sha256
33131 (base32 "0c5xzci1djy1yi9hxxh8g67l6ms8r7ad7ja20pv8hfbdysdrwkhl"))))
33132 (build-system pyproject-build-system)
33133 (arguments
33134 (list
33135 #:phases
33136 '(modify-phases %standard-phases
33137 (replace 'check
33138 (lambda* (#:key tests? #:allow-other-keys)
33139 (when tests?
33140 (invoke "python" "mulpyplexer.py")))))))
33141 (native-inputs (list python-setuptools python-wheel))
33142 (home-page "https://github.com/zardus/mulpyplexer/")
33143 (synopsis "Multiplexes interactions with lists of Python objects")
33144 (description "This module provides utilities for multiplexing
33145interactions with lists of Python objects.")
33146 (license license:bsd-2)))
33147
33148(define-public python-itanium-demangler
33149 (package
33150 (name "python-itanium-demangler")
33151 (version "1.1")
33152 (source
33153 (origin
33154 (method git-fetch)
33155 (uri (git-reference
33156 ;; PyPI only provides wheels and no source code.
33157 (url "https://github.com/whitequark/python-itanium_demangler")
33158 (commit (string-append "v" version))))
33159 (file-name (git-file-name name version))
33160 (sha256
33161 (base32 "1q47aqm5z3db6pasdzw05d6236vnb8hnapfy88fcmn9dr5ym98r3"))))
33162 (build-system pyproject-build-system)
33163 (arguments
33164 (list
33165 #:phases
33166 #~(modify-phases %standard-phases
33167 (replace 'check
33168 (lambda* (#:key tests? #:allow-other-keys)
33169 (when tests?
33170 (with-directory-excursion "tests"
33171 (invoke "python" "-m" "unittest"))))))))
33172 (native-inputs (list python-setuptools python-wheel))
33173 (home-page "https://github.com/whitequark/python-itanium_demangler/")
33174 (synopsis "Pure Python Itanium C++ ABI demangler")
33175 (description
33176"This Python module provides an implementation of the Itanium C++ ABI symbol
33177mangling language. The demangler generates an abstract syntax tree from
33178mangled symbols, which can be used for directly extracting type information.")
33179 (license license:bsd-0)))
33180
33181(define-public python-angr
33182 (package
33183 (name "python-angr")
33184 (version "9.2.112")
33185 (source
33186 (origin
33187 ;; Fetching from Git as pypi release doesn't include all test files.
33188 (method git-fetch)
33189 (patches (search-patches "python-angr-check-exec-deps.patch"))
33190 (uri (git-reference
33191 (url "https://github.com/angr/angr")
33192 (commit (string-append "v" version))))
33193 (file-name (git-file-name name version))
33194 (sha256
33195 (base32 "1179926xbfh2930laz33p90vj532jk7g2qylzzpw1185yhlf9cis"))))
33196 (build-system pyproject-build-system)
33197 (arguments
33198 (list
33199 #:test-flags
33200 #~(list "-x"
33201 "--dist" "load"
33202 "-n" (number->string (parallel-job-count))
33203 "-k"
33204 ;; test_mips32_missing_offset_in_instructions fails
33205 ;; with capstone 5 and passes with capstone 4. Might
33206 ;; be a capstone regressions, needs investigation.
33207 ;;
33208 ;; test_concrete_memset is a non-deterministic benchmark.
33209 ;; test_similarity_fauxware is flaky.
33210 (string-append
33211 "not test_mips32_missing_offset_in_instructions"
33212 " and not test_concrete_memset"
33213 " and not test_similarity_fauxware"))
33214 #:phases #~(modify-phases %standard-phases
33215 (add-after 'unpack 'patch-tests
33216 (lambda* (#:key inputs #:allow-other-keys)
33217 (let ((coreutils (assoc-ref inputs "coreutils")))
33218 ;; The constraint exists because of a capstone bug for which
33219 ;; we backport a patch, hence we can relax the constraint.
33220 ;;
33221 ;; See https://github.com/angr/angr/issues/4656
33222 (substitute* "setup.cfg"
33223 (("capstone==5.0.0.post1")
33224 "capstone"))
33225 ;; Relax constraint on python-rich, the constraint is too strict,
33226 ;; angr work well with our packaged version of python-rich.
33227 (substitute* "setup.cfg"
33228 (("rich>=13.1.0")
33229 "rich"))
33230 (substitute* "tests/common.py"
33231 (("\\[\"cc\"\\]")
33232 "[\"gcc\"]")))))
33233 (add-before 'check 'check-setup
33234 (lambda _
33235 (copy-recursively
33236 #$(this-package-native-input "binaries")
33237 "../binaries")))
33238 (add-before 'build 'set-cc
33239 (lambda _
33240 (setenv "CC" "gcc"))))))
33241 (propagated-inputs (list python-ailment
33242 python-archinfo
33243 python-cachetools
33244 python-cffi
33245 python-claripy
33246 python-cle
33247 python-colorama
33248 python-cppheaderparser
33249 python-dpkt
33250 python-gitpython
33251 python-mulpyplexer
33252 python-nampa
33253 python-networkx
33254 python-protobuf
33255 python-psutil
33256 python-itanium-demangler
33257 python-pycparser
33258 python-pyvex
33259 python-pyformlang
33260 python-rich
33261 python-rpyc
33262 python-sortedcontainers
33263 python-sqlalchemy
33264 python-sympy
33265 python-unique-log-filter
33266 unicorn-2.0))
33267 (native-inputs `(("python-pytest" ,python-pytest)
33268 ("python-pytest-xdist" ,python-pytest-xdist)
33269 ("python-setuptools" ,python-setuptools)
33270 ("python-wheel" ,python-wheel)
33271 ("binaries"
33272 ;; This repository ships several binaries used only for testing
33273 ;; purpose. The binaries are not executed and not part of the
33274 ;; angr distribution, they are only used to test angr's binary
33275 ;; analysis capabilities. In the context of the GNU FSDG, these
33276 ;; files should be considered non-functional data.
33277 ,(origin
33278 (method git-fetch)
33279 (uri (git-reference (url
33280 "https://github.com/angr/binaries")
33281 (commit (string-append "v"
33282 version))))
33283 (file-name (git-file-name "angr-binaries" version))
33284 (sha256 (base32
33285 "0bxzf6alkczv9r0151ksvcwyksnw8077acz1wd8drbxw0zl0qnmr"))))))
33286 (home-page "https://github.com/angr/angr")
33287 (synopsis "Multi-architecture binary analysis toolkit")
33288 (description
33289 "This package provides a versatile binary analysis platform with the
33290ability to perform dynamic symbolic execution as well as various
33291static analyses directly on binaries. As such, it can be used for all
33292kinds of reverse engineering, vulnerability discovery, exploit
33293generation, and software testing purposes.")
33294 (license license:bsd-2)))
33295
33296(define-public python-peachpy
33297 ;; There is no tag in this repo.
33298 (let ((commit "349e8f836142b2ed0efeb6bb99b1b715d87202e9")
33299 (version "0.2.0") ;from 'peachpy/__init__.py'
33300 (revision "3"))
33301 (package
33302 (name "python-peachpy")
33303 (version (git-version version revision commit))
33304 (home-page "https://github.com/Maratyszcza/PeachPy")
33305 (source (origin
33306 (method git-fetch)
33307 (uri (git-reference (url home-page) (commit commit)))
33308 (file-name (git-file-name name version))
33309 (sha256
33310 (base32
33311 "16pnkghmqjc7pbws0yhyrwlz43d5pffb5c6v2bb4jk0j537gwzbi"))
33312 (patches (search-patches "python-peachpy-determinism.patch"))))
33313 (build-system pyproject-build-system)
33314 (arguments
33315 ;; The issue is known and the test will probably never be fixed.
33316 ;; https://github.com/Maratyszcza/PeachPy/issues/131
33317 (list #:test-flags ''("--ignore=tests/arm/test_arm.py")))
33318 (native-inputs
33319 (list python-pytest python-setuptools python-wheel))
33320 (propagated-inputs
33321 (list python-six python-opcodes))
33322 (synopsis "Efficient assembly code generation in Python")
33323 (description
33324 "PeachPy is a Python framework for writing high-performance assembly kernels.
33325PeachPy aims to simplify writing optimized assembly kernels while preserving
33326all optimization opportunities of traditional assembly.
33327
33328PeachPy can generate ELF, MS-COFF, Mach-O object files, and assembly listings
33329for the Go language tool chain; it adapts to different calling conventions and
33330application binary interfaces (ABIs); it takes care of register allocation; it
33331supports x86_64 instructions up to AVX-512 and SHA.")
33332 (supported-systems '("x86_64-linux"))
33333 (license license:bsd-2))))
33334
33335(define-public python-sgmllib3k
33336 (let ((commit "799964676f35349ca2dd04503e34c2b3ad522c0d")
33337 (revision "1"))
33338 (package
33339 (name "python-sgmllib3k")
33340 (version
33341 (git-version "1.0.0" revision commit))
33342 (source
33343 (origin
33344 (method git-fetch)
33345 (uri (git-reference
33346 (url "https://github.com/hsoft/sgmllib")
33347 (commit commit)))
33348 (file-name (git-file-name name version))
33349 (sha256
33350 (base32
33351 "0bzf6pv85dzfxfysm6zbj8m40hp0xzr9h8qlk4hp3nmy88rznqvr"))
33352 (patches (search-patches "python-sgmllib3k-assertions.patch"))))
33353 (build-system pyproject-build-system)
33354 (native-inputs (list python-pytest python-setuptools))
33355 (home-page "https://github.com/hsoft/sgmllib")
33356 (synopsis "Python 3 port of sgmllib")
33357 (description "This package provides an unmaintained port of sgmllib to
33358Python 3. It is used to parse text files formatted in @acronym{SGML,Standard
33359Generalized Mark-up Language}.")
33360 (license license:bsd-3))))
33361
33362(define-public python-cwcwidth
33363 (package
33364 (name "python-cwcwidth")
33365 (version "0.1.10")
33366 (source
33367 (origin
33368 (method url-fetch)
33369 (uri (pypi-uri "cwcwidth" version))
33370 (sha256
33371 (base32 "0951lwciwslnzcvfvnk9daiiwh00q15qbcmjw5xi1x61f87pcs3l"))))
33372 (build-system pyproject-build-system)
33373 (arguments
33374 (list
33375 #:phases
33376 #~(modify-phases %standard-phases
33377 (add-before 'check 'remove-local-cwcwidth
33378 (lambda _
33379 ;; This would otherwise interfere with finding the installed
33380 ;; cwcwidth when running tests.
33381 (delete-file-recursively "cwcwidth"))))))
33382 (native-inputs
33383 (list python-cython
33384 python-pytest
33385 python-setuptools
33386 python-setuptools-scm))
33387 (home-page "https://github.com/sebastinas/cwcwidth")
33388 (synopsis "Python bindings for wc(s)width")
33389 (description
33390 "This package provides bindings for wcwidth and wcswidth functions
33391defined in POSIX.1-2001 and POSIX.1-2008.")
33392 (license license:expat)))
33393
33394(define-public python-pyan3
33395 (package
33396 (name "python-pyan3")
33397 (version "1.2.0")
33398 (source
33399 (origin
33400 ;; Source tarball on PyPI lacks tests.
33401 (method git-fetch)
33402 (uri (git-reference
33403 (url "https://github.com/Technologicat/pyan")
33404 (commit (string-append "v" version))))
33405 (file-name (git-file-name name version))
33406 (sha256
33407 (base32
33408 "1367x25rcy2y8f0x9c2dbxl2qgdln3arr7ddyzybz2c28g6jrv5z"))
33409 (patches (search-patches "python-pyan3-fix-positional-arguments.patch"
33410 "python-pyan3-fix-absolute-path-bug.patch"))))
33411 (build-system pyproject-build-system)
33412 (native-inputs
33413 (list python-pytest python-setuptools python-wheel))
33414 (propagated-inputs
33415 (list python-jinja2))
33416 (home-page "https://github.com/Technologicat/pyan")
33417 (synopsis "Offline call graph generator for Python 3")
33418 (description "Pyan takes one or more Python source files, performs
33419a (rather superficial) static analysis, and constructs a directed graph of the
33420objects in the combined source, and how they define or use each other. The
33421graph can be output for rendering by GraphViz or yEd.")
33422 (license license:gpl2)))
33423
33424(define-public python-multipledispatch
33425 (package
33426 (name "python-multipledispatch")
33427 (version "1.0.0")
33428 (source
33429 (origin
33430 (method git-fetch) ;no tests in PyPI archive
33431 (uri (git-reference
33432 (url "https://github.com/mrocklin/multipledispatch")
33433 (commit version)))
33434 (file-name (git-file-name name version))
33435 (sha256
33436 (base32 "0dfnav03bgrp5sxn53gyp4kfagcicm3pz98cj056rf9s6k5006s7"))))
33437 (build-system pyproject-build-system)
33438 (native-inputs
33439 (list python-pytest
33440 python-pytest-benchmark
33441 python-setuptools))
33442 (home-page "https://github.com/mrocklin/multipledispatch/")
33443 (synopsis "Multiple dispatch for Python based on pattern matching")
33444 (description
33445 "This library provides an efficient mechanism for overloading function
33446implementations based on the types of the arguments.")
33447 (license license:bsd-3)))
33448
33449(define-public python-multimethod
33450 (package
33451 (name "python-multimethod")
33452 (version "1.10")
33453 (source
33454 (origin
33455 ;; No tests in the PyPI tarball.
33456 (method git-fetch)
33457 (uri (git-reference
33458 (url "https://github.com/coady/multimethod")
33459 (commit (string-append "v" version))))
33460 (file-name (git-file-name name version))
33461 (sha256
33462 (base32 "07xv92q7f4bkp6dzkqvcv0zxr11729qdak4s3ldmbhdwgsf44g5h"))))
33463 (build-system pyproject-build-system)
33464 (native-inputs (list python-pytest python-setuptools python-wheel))
33465 (home-page "https://github.com/coady/multimethod")
33466 (synopsis "Python support for multiple argument dispatching")
33467 (description
33468 "This package provides a decorator for adding multiple argument
33469dispatching to functions. The decorator creates a multimethod object as
33470needed and registers the function with its annotations.")
33471 (license license:asl2.0)))
33472
33473(define-public python-logical-unification
33474 (package
33475 (name "python-logical-unification")
33476 (version "0.4.7")
33477 (source
33478 (origin
33479 (method git-fetch)
33480 (uri (git-reference
33481 (url "https://github.com/pythological/unification")
33482 (commit (string-append "v" version))))
33483 (file-name (git-file-name name version))
33484 (sha256
33485 (base32 "0y6caigbx32jq2i2hac87vr78j3jxdgpxncyw6lghvw6cgnh2p4v"))))
33486 (build-system pyproject-build-system)
33487 (native-inputs
33488 (list python-pytest
33489 python-pytest-benchmark
33490 python-setuptools
33491 python-setuptools-scm))
33492 (propagated-inputs
33493 (list python-multipledispatch
33494 python-toolz))
33495 (home-page "https://github.com/pythological/unification/")
33496 (synopsis "Logical unification in Python for solving symbolic expressions")
33497 (description "This library provides algorithms and data types for solving
33498symbolic expressions in pure Python using the technique of logical unification.")
33499 (license license:bsd-3)))
33500
33501(define-public python-looseversion
33502 (package
33503 (name "python-looseversion")
33504 (version "1.3.0")
33505 (source
33506 (origin
33507 (method url-fetch)
33508 (uri (pypi-uri "looseversion" version))
33509 (sha256
33510 (base32 "17k625ws83lwksa7yyy4mn0i39lmxgrzxihn22l335dvyvrnbppb"))))
33511 (build-system pyproject-build-system)
33512 (arguments
33513 (list
33514 ;; No tests provided.
33515 #:tests? #f))
33516 (native-inputs
33517 (list python-hatchling))
33518 (home-page "https://github.com/effigies/looseversion")
33519 (synopsis "Version numbering for anarchists and software realists")
33520 (description
33521 "This package provides a drop-in replacement for the original
33522@code{LooseVersion}. It implements an identical interface and comparison
33523logic to @code{LooseVersion}. The only major change is that a
33524@code{looseversion.LooseVersion} is comparable to a
33525@code{distutils.version.LooseVersion}, which means tools should not need to
33526worry whether all dependencies that use LooseVersion have migrated.")
33527 (license license:psfl)))
33528
33529(define-public python-cons
33530 (package
33531 (name "python-cons")
33532 (version "0.4.7")
33533 (source
33534 (origin
33535 (method git-fetch) ;no tests in PyPI archive
33536 (uri (git-reference
33537 (url "https://github.com/pythological/python-cons")
33538 (commit (string-append "v" version))))
33539 (file-name (git-file-name name version))
33540 (sha256
33541 (base32 "07a1gkvc5p3qi55vczhicz3k5bs1c6jdkw6vrrnxrygg357fabh5"))))
33542 (build-system pyproject-build-system)
33543 (native-inputs
33544 (list python-pytest
33545 python-setuptools
33546 python-setuptools-scm
33547 python-wheel))
33548 (propagated-inputs
33549 (list python-logical-unification))
33550 (home-page "https://github.com/pythological/python-cons")
33551 (synopsis "Cons cell data structures and related algorithms for Python")
33552 (description
33553 "This library implements algorithms and data structures for Lisp-style
33554cons cells in Python.")
33555 (license license:lgpl3+)))
33556
33557(define-public python-etuples
33558 (package
33559 (name "python-etuples")
33560 (version "0.3.10")
33561 (source
33562 (origin
33563 (method url-fetch)
33564 (uri (pypi-uri "etuples" version))
33565 (sha256
33566 (base32 "0rqi0ml2az23ly5wanymgrfsnzm6dd6wxgric8a3fa42gqfyiz96"))))
33567 (build-system pyproject-build-system)
33568 (arguments
33569 (list
33570 #:test-flags
33571 ;; assert False == {~_1: <built-in function add>}
33572 #~(list "--deselect=tests/test_dispatch.py::test_unification")))
33573 (native-inputs
33574 (list python-pytest
33575 python-setuptools
33576 python-setuptools-scm))
33577 (propagated-inputs
33578 (list python-cons
33579 python-multipledispatch))
33580 (home-page "https://github.com/pythological/etuples")
33581 (synopsis "S-expressions in Python")
33582 (description
33583 "This library implements eval'able S-expression in Python using tuple-like objects.")
33584 (license license:asl2.0)))
33585
33586(define-public python-minikanren
33587 (package
33588 (name "python-minikanren")
33589 (version "1.0.5")
33590 (source
33591 (origin
33592 (method git-fetch)
33593 (uri (git-reference
33594 (url "https://github.com/pythological/kanren")
33595 (commit (string-append "v" version))))
33596 (file-name (git-file-name name version))
33597 (sha256
33598 (base32 "1fsy5dlkyghz2qvjwc5pv4arxzvczn7s4bmy0fwk5xzxljc3894l"))))
33599 (build-system pyproject-build-system)
33600 (arguments
33601 (list
33602 ;; 60 passed, 3 skipped, 23 deselected
33603 #:test-flags
33604 #~(list "-k" (string-join
33605 ;; XXX: 16 tests fail with assertion not equal, check why.
33606 (list "not test_basics"
33607 "test_eq_assoc"
33608 "test_eq_assoccomm"
33609 "test_eq_comm"
33610 "test_map_anyo"
33611 "test_map_anyo_misc"
33612 "test_map_anyo_reverse"
33613 "test_reduceo"
33614 "test_walko"
33615 "test_walko_reverse")
33616 " and not "))))
33617 (native-inputs
33618 (list python-pytest
33619 python-setuptools))
33620 (propagated-inputs
33621 (list python-cons
33622 python-etuples
33623 python-logical-unification
33624 python-multipledispatch
33625 python-toolz
33626 python-typing-extensions))
33627 (home-page "https://github.com/pythological/kanren")
33628 (synopsis "Relational logic programming in pure Python")
33629 (description
33630 "The minikanren library provides an algorithmic core for computer algebra
33631systems in Python.")
33632 (license license:bsd-3)))
33633
33634(define-public python-dotenv
33635 (package
33636 (name "python-dotenv")
33637 (version "1.1.1")
33638 (source
33639 (origin
33640 (method url-fetch)
33641 (uri (pypi-uri "python_dotenv" version))
33642 (sha256
33643 (base32 "1aw9c5gw2gfjf7n3s7k6lb6ybz090hh60wq0daz4azr52sbkk9m8"))))
33644 (build-system pyproject-build-system)
33645 (native-inputs
33646 (list python-pytest
33647 python-setuptools
33648 python-sh))
33649 (propagated-inputs
33650 (list python-click))
33651 (home-page "https://saurabh-kumar.com/python-dotenv/")
33652 (synopsis "Setup environment variables according to .env files")
33653 (description
33654 "This package provides the @code{python-dotenv} Python module to read
33655key-value pairs from a @code{.env} file and set them as environment variables.")
33656 (license license:bsd-3)))
33657
33658;; Old version just for docker-compose; remove once that is updated.
33659(define-public python-dotenv-0.13.0
33660 (package (inherit python-dotenv)
33661 (name "python-dotenv")
33662 (version "0.13.0")
33663 (source
33664 (origin
33665 (method url-fetch)
33666 (uri (pypi-uri "python-dotenv" version))
33667 (sha256
33668 (base32
33669 "0x5dagmfn31phrbxlwacw3s4w5vibv8fxqc62nqcdvdhjsy0k69v"))))
33670 (arguments
33671 `(#:phases
33672 (modify-phases %standard-phases
33673 (replace 'check
33674 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
33675 (when tests?
33676 (add-installed-pythonpath inputs outputs)
33677 (setenv "PATH" (string-append (getenv "PATH") ":"
33678 (assoc-ref outputs "out") "/bin"))
33679 ;; Skip the ipython tests.
33680 (delete-file "tests/test_ipython.py")
33681 (invoke "python" "-m" "pytest")))))))
33682 (native-inputs
33683 (modify-inputs native-inputs
33684 (append python-mock)
33685 (replace "python-sh" python-sh-1)))))
33686
33687(define-public python-braintree
33688 (package
33689 (name "python-braintree")
33690 (version "4.40.0")
33691 (source
33692 (origin
33693 (method url-fetch)
33694 (uri (pypi-uri "braintree" version))
33695 (sha256
33696 (base32 "0pjllhyx9ymad9nspaviysda4pb5cbl83c6fq4bhwl6khzyh0bkr"))))
33697 (build-system pyproject-build-system)
33698 (arguments (list #:tests? #f)) ; No tests.
33699 (native-inputs (list python-setuptools))
33700 (propagated-inputs (list python-requests))
33701 (home-page
33702 "https://developers.braintreepayments.com/python/sdk/server/overview")
33703 (synopsis "Braintree Python Library")
33704 (description
33705 "The Braintree Python SDK provides integration access to the Braintree
33706Gateway. Braintree is a US-based payments service provider.")
33707 (license license:expat)))
33708
33709(define-public python-markuppy
33710 (package
33711 (name "python-markuppy")
33712 (version "1.18")
33713 (source
33714 (origin
33715 (method git-fetch)
33716 (uri (git-reference
33717 (url "https://github.com/tylerbakke/MarkupPy")
33718 (commit (string-append "v" version))))
33719 (file-name (git-file-name name version))
33720 (sha256
33721 (base32 "0rbxh7dzrqd1xrxbxxbyjslqfaxxyv17ppr9zcjig8yw631k0a51"))))
33722 (build-system pyproject-build-system)
33723 (native-inputs (list python-pytest python-setuptools))
33724 (home-page "https://github.com/tylerbakke/MarkupPy")
33725 (synopsis "Pythonic HTML/XML generator")
33726 (description
33727 "This Python module attempts to make it easier to generate HTML/XML from
33728a Python program in an customizable and pythonic way.")
33729 (license license:expat)))
33730
33731(define-public python-csb43
33732 (package
33733 (name "python-csb43")
33734 (version "1.0.0")
33735 (source
33736 (origin
33737 (method git-fetch)
33738 (uri (git-reference
33739 (url "https://bitbucket.org/wmj/csb43")
33740 (commit version)))
33741 (file-name (git-file-name name version))
33742 (sha256
33743 (base32 "030lncdmrcvzgp8v1jw04snnplqxlwf3vikzd0a3jbk5sgrp2cih"))))
33744 (build-system pyproject-build-system)
33745 ;; tests: 15102 passed, 36 skipped, 5489 warnings
33746 (arguments
33747 (list
33748 #:phases
33749 #~(modify-phases %standard-phases
33750 (add-after 'unpack 'relax-requirements
33751 (lambda _
33752 (substitute* "pyproject.toml"
33753 (("\"deprecated ~=.*\",")
33754 "\"deprecated\",")))))))
33755 (native-inputs
33756 (list python-lxml
33757 python-pytest
33758 python-setuptools
33759 python-setuptools-scm))
33760 (propagated-inputs
33761 (list python-deprecated
33762 python-pycountry
33763 python-pyyaml
33764 python-tablib))
33765 (home-page "https://bitbucket.org/wmj/csb43")
33766 (synopsis "Tools for converting from the Spanish banks' format CSB norm
3376743 (CSB43)")
33768 (description
33769 "This package provides tools to convert files in the format used by
33770multiple Spanish banks (standard 43 of the Spanish Banking Council [CSB43] /
33771Spanish Banking Association [AEB43]) to other formats.
33772
33773Supported output formats are: OFX, HomeBank CSV, HTML, JSON, ODS (OpenDocument
33774spreadsheet), CSV, TSV, XLS, XLSX (Microsoft Excel spreadsheet), and YAML.")
33775 (license license:lgpl3)))
33776
33777(define-public python-csb43-0.10
33778 ;; XXX: 1.0.0 doesn't provide csb43 module where 0.10.1 contains: aeb43, csb43,
33779 ;; homebank, i18n, ofx, and utils.
33780 (package
33781 (inherit python-csb43)
33782 (name "python-csb43")
33783 (version "0.10.1")
33784 ;; tests: 15493 passed, 37 skipped, 7447 warnings
33785 (source
33786 (origin
33787 (method git-fetch)
33788 (uri (git-reference
33789 (url "https://bitbucket.org/wmj/csb43")
33790 (commit version)))
33791 (file-name (git-file-name name version))
33792 (sha256
33793 (base32 "0frxcclz7scpndrr7ygqy6k41bcwgwam26yk7n1cnwyim2wkaykd"))))))
33794
33795(define-public python-febelfin-coda
33796 (package
33797 (name "python-febelfin-coda")
33798 (version "0.3.0")
33799 (source
33800 (origin
33801 (method hg-fetch)
33802 (uri (hg-reference
33803 (url "https://foss.heptapod.net/tryton/coda")
33804 (changeset version)))
33805 (file-name (string-append name "-" version "-checkout"))
33806 (sha256
33807 (base32 "0rnr2xvwr174dbjixaw5h8bjw5ay5knfbry5qhk7wj8vkh538c13"))))
33808 (build-system pyproject-build-system)
33809 (arguments
33810 (list
33811 #:test-backend #~'unittest
33812 #:phases
33813 #~(modify-phases %standard-phases
33814 (add-after 'install 'remove-installed-tests
33815 (lambda* (#:key inputs outputs #:allow-other-keys)
33816 (with-directory-excursion (site-packages inputs outputs)
33817 (for-each delete-file
33818 (list "coda/test.py"
33819 "coda/test_readme.py"))))))))
33820 (native-inputs (list python-setuptools))
33821 (home-page "https://coda.b2ck.com/")
33822 (synopsis "Module to parse Belgian CODA files")
33823 (description
33824 "This package provides a module to parse Coded statement of account
33825(CODA) files as defined be the Belgian Febelfin bank standard.")
33826 (license license:bsd-3)))
33827
33828(define-public python-ofxparse
33829 (package
33830 (name "python-ofxparse")
33831 (version "0.21")
33832 (source
33833 (origin
33834 (method url-fetch)
33835 (uri (pypi-uri "ofxparse" version))
33836 (sha256
33837 (base32 "19y4sp5l9jqiqzzlbqdfiab42qx7d84n4xm4s7jfq397666vcyh5"))))
33838 (build-system pyproject-build-system)
33839 (native-inputs (list python-pynose python-setuptools))
33840 (propagated-inputs (list python-beautifulsoup4 python-lxml python-six))
33841 (home-page "http://sites.google.com/site/ofxparse")
33842 (synopsis "Tools for working with the OFX (Open Financial Exchange) file
33843format")
33844 (description "@code{ofxparse} is a parser for Open Financial
33845Exchange (.ofx) format files. OFX files are available from almost any online
33846banking site, so they work well if you want to pull together your finances
33847from multiple sources. Online trading accounts also often provide account
33848statements in OFX files.")
33849 (license license:expat)))
33850
33851(define-public python-rfc3339-validator
33852 (package
33853 (name "python-rfc3339-validator")
33854 (version "0.1.4")
33855 (source
33856 (origin
33857 (method url-fetch)
33858 (uri (pypi-uri "rfc3339_validator" version))
33859 (sha256
33860 (base32 "0srg0b89aikzinw72s433994k5gv5lfyarq1adhas11kz6yjm2hk"))))
33861 (build-system pyproject-build-system)
33862 (native-inputs
33863 (list python-pytest
33864 python-setuptools
33865 python-strict-rfc3339))
33866 (propagated-inputs
33867 (list python-six))
33868 (home-page "https://github.com/naimetti/rfc3339-validator")
33869 (synopsis "Python RFC3339 validator")
33870 (description "This package provides a pure Python RFC3339 validator.")
33871 (license license:expat)))
33872
33873(define-public python-platformdirs
33874 ;; Try to update simultaneously with the bootstrap version in
33875 ;; (gnu packages python-build).
33876 (package
33877 (name "python-platformdirs")
33878 (version "4.3.6")
33879 (source
33880 (origin
33881 (method url-fetch)
33882 (uri (pypi-uri "platformdirs" version))
33883 (sha256
33884 (base32 "01xrwajkmxv3jp6n14y8jndkrhb48p9kxknkmwch8nw8pjnb4zrm"))))
33885 (build-system pyproject-build-system)
33886 (native-inputs
33887 (list python-appdirs
33888 python-hatchling
33889 python-hatch-vcs
33890 python-pytest
33891 python-pytest-mock))
33892 (home-page "https://github.com/platformdirs/platformdirs")
33893 (synopsis "Determine the appropriate platform-specific directories")
33894 (description "When writing applications, finding the right location to
33895store user data and configuration varies per platform. Even for
33896single-platform apps, there may by plenty of nuances in figuring out the right
33897location. This small Python module determines the appropriate
33898platform-specific directories, e.g. the ``user data dir''.")
33899 (license license:expat)))
33900
33901(define-public python-json2html
33902 (package
33903 (name "python-json2html")
33904 (version "1.3.0")
33905 (source
33906 (origin
33907 (method git-fetch)
33908 (uri (git-reference
33909 (url "https://github.com/softvar/json2html")
33910 (commit (string-append "v" version))))
33911 (file-name (git-file-name name version))
33912 (sha256
33913 (base32 "1ncypljnl5y8lsxy6ibcqy412kx3mzxl4ajg67568hvq98kv1sb3"))))
33914 (build-system pyproject-build-system)
33915 (arguments
33916 (list
33917 #:test-backend #~'custom
33918 #:test-flags #~(list "test/run_tests.py")))
33919 (native-inputs (list python-setuptools))
33920 (home-page "https://github.com/softvar/json2html")
33921 (synopsis "Convert JSON to HTML table")
33922 (description
33923 "@code{python-json2html} is a python module to convert JSON into a human
33924readable HTML table representation.")
33925 (license license:expat)))
33926
33927(define-public python-face
33928 (package
33929 (name "python-face")
33930 (version "24.0.0")
33931 (source
33932 (origin
33933 (method git-fetch)
33934 (uri (git-reference
33935 (url "https://github.com/mahmoud/face")
33936 (commit (string-append "v" version))))
33937 (file-name (git-file-name name version))
33938 (sha256
33939 (base32 "1ps34r3w93rrviwj8xq7ji9l2z301zzny2gx6nrwvgxr8h6bv0kp"))))
33940 (build-system pyproject-build-system)
33941 (native-inputs (list python-pytest python-setuptools))
33942 (propagated-inputs (list python-boltons))
33943 (home-page "https://github.com/mahmoud/face")
33944 (synopsis "CLI parsing and dispatching microframework")
33945 (description "@code{python-face} is a Pythonic microframework for building
33946command-line applications.
33947
33948@itemize
33949@item First-class subcommand support
33950@item Powerful middleware architecture
33951@item Separate parser layer
33952@item Built-in flagfile support
33953@item Handy testing utilities
33954@item Themeable help display
33955@end itemize")
33956 (license license:bsd-3)))
33957
33958(define-public python-glom
33959 (package
33960 (name "python-glom")
33961 (version "24.11.0")
33962 (source
33963 (origin
33964 (method git-fetch)
33965 (uri (git-reference
33966 (url "https://github.com/mahmoud/glom")
33967 (commit (string-append "v" version))))
33968 (file-name (git-file-name name version))
33969 (sha256
33970 (base32 "0vjj6wjxzms947nvbxrlz2cyn0m6483p1laqvcwr8fc117nzary0"))))
33971 (build-system pyproject-build-system)
33972 (native-inputs
33973 (list python-pytest
33974 python-pyyaml
33975 python-setuptools))
33976 (propagated-inputs
33977 (list python-attrs
33978 python-boltons
33979 python-face))
33980 (home-page "https://github.com/mahmoud/glom")
33981 (synopsis "Declaratively restructure data")
33982 (description "Real applications have real data, and real data
33983nests---objects inside of objects inside of lists of objects. glom is a new
33984and powerful way to handle real-world data, featuring:
33985
33986@itemize
33987@item Path-based access to nested data structures
33988@item Readable, meaningful error messages
33989@item Declarative data transformation, using lightweight, Pythonic specifications
33990@item Built-in data exploration and debugging features
33991@end itemize")
33992 (license license:bsd-3)))
33993
33994(define-public python-box
33995 (package
33996 (name "python-box")
33997 (version "7.3.2")
33998 (source
33999 (origin
34000 (method git-fetch)
34001 (uri
34002 (git-reference
34003 (url "https://github.com/cdgriffith/Box")
34004 (commit version)))
34005 (file-name (git-file-name name version))
34006 (sha256
34007 (base32 "0nr8cajrhdwxm3ac5gclajqck7xywlpqnwvff072va5ki0if6lv9"))))
34008 (build-system pyproject-build-system)
34009 (arguments
34010 (list #:test-flags #~(list "-k" "not test_to_yaml_ruamel")))
34011 (native-inputs
34012 (list python-pytest
34013 python-setuptools))
34014 (propagated-inputs
34015 (list python-msgpack
34016 python-ruamel.yaml
34017 python-tomli-w))
34018 (home-page "https://github.com/cdgriffith/Box")
34019 (synopsis "Advanced Python dictionaries with dot notation access")
34020 (description
34021 "This package provides the @code{python-box} Python module.
34022It implements advanced Python dictionaries with dot notation access.")
34023 (license license:expat)))
34024
34025(define-public python-fields
34026 (let ((commit "cb473d126b926621c4423ecf59387da9f0f26563")
34027 (revision "0"))
34028 (package
34029 (name "python-fields")
34030 (version (git-version "5.0.0" revision commit))
34031 (source
34032 (origin
34033 (method git-fetch)
34034 (uri (git-reference
34035 (url "https://github.com/ionelmc/python-fields")
34036 (commit commit)))
34037 (file-name (git-file-name name version))
34038 (sha256
34039 (base32 "1hc39l7ypwn4n11wfdhr8z0m46c96k99lnvw65bw8yadm2f93s9r"))))
34040 (build-system pyproject-build-system)
34041 (arguments
34042 (list #:test-flags #~(list "--ignore=tests/test_perf.py")))
34043 (native-inputs (list python-pytest-8
34044 python-pytest-benchmark
34045 python-setuptools
34046 python-wheel))
34047 (home-page "https://python-fields.readthedocs.io/")
34048 (synopsis "Python container class boilerplate killer")
34049 (description "Avoid repetitive boilerplate code in Python classes.")
34050 (license license:bsd-3))))
34051
34052(define-public python-aspectlib
34053 (package
34054 (name "python-aspectlib")
34055 (version "2.0.0")
34056 (source
34057 (origin
34058 (method git-fetch)
34059 (uri (git-reference
34060 (url "https://github.com/ionelmc/python-aspectlib")
34061 (commit (string-append "v" version))))
34062 (file-name (git-file-name name version))
34063 (sha256
34064 (base32 "07xwp6gp1h5hcyakx607xbgmciqxm799v2k7c8wnrqqxd410zyis"))))
34065 (build-system pyproject-build-system)
34066 (arguments
34067 (list
34068 #:test-flags
34069 #~(list ;; XXX: Require more dependencies.
34070 "--ignore=tests/test_integrations.py"
34071 "--ignore=tests/test_integrations_py3.py")
34072 #:phases
34073 #~(modify-phases %standard-phases
34074 (add-after 'unpack 'fix-pytest-config
34075 (lambda _
34076 ;; Tests fails with warnings: pytest.PytestRemovedIn9Warning:
34077 ;; The (path: py.path.local) argument is deprecated, please
34078 ;; use (collection_path: pathlib.Path).
34079 (delete-file "pytest.ini"))))))
34080 (native-inputs
34081 (list python-pytest-8
34082 python-setuptools
34083 python-tornado))
34084 (propagated-inputs
34085 (list python-fields))
34086 (home-page "https://github.com/ionelmc/python-aspectlib")
34087 (synopsis "Python monkey-patching and decorators")
34088 (description
34089 "This package provides an aspect-oriented programming, monkey-patch
34090and decorators library. It is useful when changing behavior in existing
34091code is desired. It includes tools for debugging and testing:
34092simple mock/record and a complete capture/replay framework.")
34093 (license license:bsd-2)))
34094
34095(define-public python-ijson
34096 (package
34097 (name "python-ijson")
34098 (version "3.5.0")
34099 (source
34100 (origin
34101 (method url-fetch)
34102 (uri (pypi-uri "ijson" version))
34103 (sha256
34104 (base32 "0cbg4h29aysf4mq3iyrqzd2s1yb70b9vhg0vfc954gqff9h8fs4l"))))
34105 (inputs
34106 ;; yajl is optional, but compiling with it makes faster
34107 ;; backends available to ijson:
34108 (list yajl))
34109 (native-inputs
34110 (list python-pytest
34111 python-setuptools))
34112 (build-system pyproject-build-system)
34113 (home-page "https://github.com/ICRAR/ijson")
34114 (synopsis "Iterative JSON parser with Python iterator interfaces")
34115 (description
34116 "Ijson is an iterative JSON parser with standard Python iterator
34117interfaces.")
34118 (license license:bsd-3)))
34119
34120(define-public python-ordered-set
34121 (package
34122 (name "python-ordered-set")
34123 (version "4.1.0")
34124 (source
34125 (origin
34126 (method url-fetch)
34127 (uri (pypi-uri "ordered-set" version))
34128 (sha256
34129 (base32 "1a34fg3r3480nfm6652kyqql3lwixf8jirzdja9camvnr128wjk9"))))
34130 (build-system pyproject-build-system)
34131 (native-inputs (list python-cython python-flit-core python-pytest))
34132 (home-page "https://github.com/simonpercivall/orderedset")
34133 (synopsis "Ordered Set implementation in Cython")
34134 (description "This library provides an @code{OrderedSet} data type that
34135works like a regular set, but remembers insertion order. It supports the full
34136Python @code{set} interface.")
34137 (license license:asl2.0)))
34138
34139(define-public python-orgparse
34140 (package
34141 (name "python-orgparse")
34142 (version "0.4.20251020")
34143 (source
34144 (origin
34145 (method git-fetch)
34146 (uri (git-reference
34147 (url "https://github.com/karlicoss/orgparse")
34148 (commit (string-append "v" version))))
34149 (file-name (git-file-name name version))
34150 (sha256
34151 (base32 "0f390gxx5pjpjjbmll0gdlqg92s3d4xi6p8wjkr0cfixa8fvb7s4"))))
34152 (build-system pyproject-build-system)
34153 (arguments
34154 (list
34155 #:test-flags
34156 #~(list "--ignore-glob=doc/*"
34157 ;; XXX: Unclear why those tests fail.
34158 "--deselect=src/orgparse/tests/test_data.py::test_data[01_attributes]"
34159 "--deselect=src/orgparse/tests/test_data.py::test_data[03_repeated_tasks]"
34160 "--deselect=src/orgparse/tests/test_data.py::test_data[04_logbook]"
34161 "--deselect=src/orgparse/tests/test_misc.py::test_level_0_timestamps")))
34162 (native-inputs (list python-hatchling python-hatch-vcs python-pytest))
34163 (home-page "https://github.com/karlicoss/orgparse")
34164 (synopsis "Emacs Org mode parser in Python")
34165 (description
34166 "This package is a Python module for reading Emacs Org mode files.")
34167 (license license:bsd-3)))
34168
34169(define-public dynaconf
34170 (package
34171 (name "dynaconf")
34172 (version "3.2.11")
34173 (source
34174 (origin
34175 (method git-fetch)
34176 (uri
34177 (git-reference
34178 (url "https://github.com/dynaconf/dynaconf")
34179 (commit version)))
34180 (file-name (git-file-name name version))
34181 (sha256
34182 (base32 "05122x1bwskfqnzi9hqi86h7407byfjvhgczj74x6lp2m6rnwkzl"))
34183 ;; (patches (search-patches "dynaconf-unvendor-deps.patch"))
34184 (modules '((guix build utils)))
34185 ;; Remove vendored dependencies
34186 (snippet
34187 #~(let ((unvendor '("click" "ruamel" "toml")))
34188 (with-directory-excursion "dynaconf/vendor"
34189 (for-each delete-file-recursively unvendor))
34190 (substitute* (find-files "." "\\.py$")
34191 (("from dynaconf\\.vendor import (click|ruamel|toml)([^l]+.*)$"
34192 _ target rest)
34193 (string-append "import " target rest))
34194 (("dynaconf\\.vendor\\.(click|ruamel|toml)" _ target)
34195 target))))))
34196 (build-system pyproject-build-system)
34197 (arguments
34198 (list
34199 #:test-flags
34200 #~(list "--ignore=tests/test_vault.py" ; depend on hvac and a live Vault
34201 "-k" #$(let ((click-tests '("test_negative_get"
34202 "test_not_found_key_exit_error[get]"
34203 "test_inspect_invalid_format")))
34204 ;; Disable integration tests
34205 (string-append "not integration and not "
34206 ;; These tests fail because we use
34207 ;; Click 8.* instead of Click 7
34208 (string-join click-tests " and not ")))
34209 "tests")
34210 #:phases
34211 #~(modify-phases %standard-phases
34212 (add-after 'unpack 'patch-for-click-8
34213 (lambda _
34214 (substitute* "dynaconf/cli.py"
34215 (("click.get_os_args\\()") ;deprecated from Click 8.1+
34216 "sys.argv[1:]")))))))
34217 (propagated-inputs
34218 (list python-click python-configobj python-ruamel.yaml-0.16
34219 python-toml python-tomli))
34220 (native-inputs
34221 (list python-django
34222 python-flask
34223 python-pytest
34224 python-pytest-mock
34225 python-setuptools))
34226 (home-page "https://www.dynaconf.com/")
34227 (synopsis "The dynamic configurator for your Python project")
34228 (description
34229 "This package provides @code{dynaconf} the dynamic configurator manager for
34230your Python project. It provides features such as:
34231
34232@itemize
34233@item Inspired by the @url{https://12factor.net/config, 12-factor application guide};
34234@item Settings management (default values, validation, parsing, templating);
34235@item Protection of sensitive information (passwords/tokens);
34236@item Multiple file formats @code{toml|yaml|json|ini|py} and also customizable
34237loaders;
34238@item Full support for environment variables to override existing settings
34239(dotenv support included);
34240@item Optional layered system for multiple environments @code{[default,
34241development, testing, production]};
34242@item Built-in support for Hashicorp Vault and Redis as settings and secrets storage;
34243@item Built-in extensions for Django and Flask web frameworks;
34244@item CLI for common operations such as @code{init, list, write, validate, export}.
34245@end itemize")
34246 (license license:expat)))
34247
34248(define-public python-pudb
34249 ;; TODO: Rename to pudb as it's a final program.
34250 (package
34251 (name "python-pudb")
34252 (version "2025.1.3")
34253 (source
34254 (origin
34255 (method url-fetch)
34256 (uri (pypi-uri "pudb" version))
34257 (sha256
34258 (base32 "1x210l6wxpn7k8jbca7ahzgsld938cnb6jlg3nrq8vr6xza75zb9"))))
34259 (build-system pyproject-build-system)
34260 (arguments
34261 (list
34262 #:phases
34263 #~(modify-phases %standard-phases
34264 (add-before 'check 'pre-check
34265 (lambda _
34266 (setenv "HOME" "/tmp"))))))
34267 (native-inputs
34268 (list python-hatchling
34269 python-pytest
34270 python-pytest-mock
34271 python-numpy))
34272 (propagated-inputs
34273 (list python-jedi
34274 python-packaging
34275 python-pygments
34276 python-typing-extensions
34277 python-urwid
34278 python-urwid-readline))
34279 (home-page "https://documen.tician.de/pudb/")
34280 (synopsis "Console-based Python debugger")
34281 (description
34282 "@command{pudb} is a full-screen, console-based Python debugger providing
34283all the niceties of modern GUI-based debuggers in a more lightweight and
34284keyboard-friendly package.")
34285 (license license:expat)))
34286
34287(define-public python-iwlib
34288 (package
34289 (name "python-iwlib")
34290 (version "1.7.0")
34291 (source
34292 (origin
34293 (method git-fetch)
34294 (uri (git-reference
34295 (url "https://github.com/nhoad/python-iwlib")
34296 (commit version)))
34297 (file-name (git-file-name name version))
34298 (sha256
34299 (base32 "0z6bgmzxf849irayzshiw3bvvhrr8j0il6113937x7fdam122gmr"))))
34300 (build-system pyproject-build-system)
34301 (arguments
34302 (list
34303 #:phases
34304 #~(modify-phases %standard-phases
34305 (add-before 'check 'cleanup
34306 (lambda _
34307 (delete-file-recursively "iwlib"))))))
34308 (native-inputs (list python-pytest python-setuptools))
34309 (inputs (list wireless-tools))
34310 (propagated-inputs (list python-cffi))
34311 (home-page "https://github.com/nhoad/python-iwlib")
34312 (synopsis "Python module to interface with iwlib")
34313 (description
34314 "This package provides a Python interface to iw wireless tools.")
34315 (license license:gpl2)))
34316
34317(define-public python-pdoc3
34318 (package
34319 (name "python-pdoc3")
34320 (version "0.11.6")
34321 (source
34322 (origin
34323 (method url-fetch)
34324 (uri (pypi-uri "pdoc3" version))
34325 (sha256
34326 (base32 "11z318lnvd7nxkpw2556hh6hvid6gi8mxgv4zf8x2m57hx5yi98y"))))
34327 (build-system pyproject-build-system)
34328 (arguments
34329 (list #:test-backend #~'unittest
34330 #:test-flags #~(list "-v" "pdoc.test")))
34331 (native-inputs
34332 (list python-setuptools-git
34333 python-setuptools
34334 python-setuptools-scm))
34335 (propagated-inputs
34336 (list python-mako
34337 python-markdown))
34338 (home-page "https://pdoc3.github.io/pdoc/")
34339 (synopsis "Auto-generate API documentation for Python projects")
34340 (description
34341 "This package auto-generates API documentation from Python projects
34342already existing modules and objects docstrings.")
34343 (license license:agpl3+)))
34344
34345(define-public python-piexif
34346 (package
34347 (name "python-piexif")
34348 (version "1.1.3")
34349 (source
34350 (origin
34351 (method git-fetch)
34352 (uri (git-reference
34353 (url "https://github.com/hMatoba/Piexif")
34354 (commit version)))
34355 (file-name (git-file-name name version))
34356 (sha256
34357 (base32 "1akmaxq1cjr8wghwaaql1bd3sajl8psshl58lprgfsigrvnklp8b"))
34358 (patches
34359 (search-patches "python-piexif-fix-tests-with-pillow-7.2.patch"))))
34360 (build-system pyproject-build-system)
34361 (native-inputs (list unzip python-pillow python-pytest python-setuptools))
34362 (home-page "https://github.com/hMatoba/Piexif")
34363 (synopsis "Simplify exif manipulations with Python")
34364 (description
34365 "Piexif simplifies interacting with EXIF data in Python. It includes the
34366tools necessary for extracting, creating, manipulating, converting and writing
34367EXIF data to JPEG, WebP and TIFF files.")
34368 (license license:expat)))
34369
34370(define-public python-pyrss2gen
34371 (package
34372 (name "python-pyrss2gen")
34373 (version "1.1")
34374 (source
34375 (origin
34376 (method url-fetch)
34377 (uri (pypi-uri "PyRSS2Gen" version))
34378 (sha256
34379 (base32 "1rvf5jw9hknqz02rp1vg8abgb1lpa0bc65l7ylmlillqx7bswq3r"))))
34380 (build-system pyproject-build-system)
34381 (arguments (list #:tests? #f)) ; No tests.
34382 (native-inputs (list python-setuptools))
34383 (home-page "http://dalkescientific.com/Python/PyRSS2Gen.html")
34384 (synopsis "Generate RSS 2.0 feeds using a Python data structure")
34385 (description "PyRSS2Gen is the interface to generate RSS 2.0 feeds.
34386PyRSS2Gen builds the feed up by using a XML generator.")
34387 (license license:bsd-3)))
34388
34389(define-public python-doit
34390 (package
34391 (name "python-doit")
34392 (version "0.36.0")
34393 (source
34394 (origin
34395 (method url-fetch)
34396 (uri (pypi-uri "doit" version))
34397 (sha256
34398 (base32 "1g1lwaxb9q3a6c24sr3gw5bspsk5frbrk2frb7z25jqljp67rl3i"))))
34399 (build-system pyproject-build-system)
34400 ;; This is not a serious test failure. It's probably due to the load path
34401 ;; at test time.
34402 (arguments (list #:test-flags '(list "-k" "not test_execute")))
34403 (propagated-inputs
34404 (list python-cloudpickle python-importlib-metadata))
34405 (native-inputs (list python-pytest python-setuptools python-wheel))
34406 (home-page "https://pydoit.org")
34407 (synopsis "Automation tool to execute any kind of task in a build-tools
34408fashion")
34409 (description "doit is an automation tool that brings the power of
34410build-tools to execute any kind of task.
34411
34412A task describes some computation to be done (actions), and contains some
34413extra meta-data. The actions can be external programs or Python functions. A
34414single task may define more than one action. doit uses the task’s meta-data
34415to:
34416
34417@itemize
34418@item cache task results
34419@item correct execution order
34420@item parallel execution
34421@item powerful dependency system
34422@end itemize")
34423 (license license:expat)))
34424
34425(define-public python-phpserialize
34426 (package
34427 (name "python-phpserialize")
34428 (version "1.3")
34429 (source
34430 (origin
34431 (method git-fetch)
34432 (uri (git-reference
34433 (url "https://github.com/mitsuhiko/phpserialize")
34434 (commit version)))
34435 (file-name (git-file-name name version))
34436 (sha256
34437 (base32 "062lpv2zpkn96v8gpskvw2pfgh3mafnb0s6xxa0jwbr7vz78wgdr"))))
34438 (build-system pyproject-build-system)
34439 (arguments
34440 (list
34441 ;; XXX: Unclear why this test fails.
34442 #:test-flags #~(list "-k" "not test_dumps_dict" "tests.py")
34443 #:phases
34444 #~(modify-phases %standard-phases
34445 (add-after 'unpack 'patch-tests
34446 (lambda _
34447 (substitute* "tests.py"
34448 (("assert_\\(b'WP_User' in x\\)")
34449 "assertIn(b'WP_User', x)")))))))
34450 (native-inputs (list python-pytest python-setuptools))
34451 (home-page "https://github.com/mitsuhiko/phpserialize")
34452 (synopsis "Python port of the serialize and unserialize functions of PHP")
34453 (description
34454 "This package provides a port of the @code{serialize} and
34455@code{unserialize} functions of PHP for Python.")
34456 (license license:bsd-3)))
34457
34458(define-public python-pydevtool
34459 (package
34460 (name "python-pydevtool")
34461 (version "0.3.0")
34462 (source
34463 (origin
34464 (method url-fetch)
34465 (uri (pypi-uri "pydevtool" version))
34466 (sha256
34467 (base32 "12pwhvvm4pgvfxj18ylb66drxm28b2cpb5rbxqrsrk1k7m7vmqr5"))))
34468 (build-system pyproject-build-system)
34469 (arguments (list #:tests? #false)) ;no tests
34470 (propagated-inputs (list python-doit python-rich-click))
34471 (native-inputs (list python-setuptools python-wheel))
34472 (home-page "https://github.com/pydoit/pydevtool")
34473 (synopsis "CLI dev tools powered by pydoit")
34474 (description "This package provides command line tools, powered by pydoit.
34475It offers integration with @code{click} and @code{rich} for custom CLI and
34476these linters: @code{pycodestlye}, @code{pyflakes}")
34477 (license license:expat)))
34478
34479(define-public nikola
34480 (package
34481 (name "nikola")
34482 (version "8.3.3")
34483 (source
34484 (origin
34485 (method url-fetch)
34486 (uri (pypi-uri "nikola" version))
34487 (sha256
34488 (base32 "1ixi7bhcmyl6nxh4psjkj4q4wq5midgnks294r64zciazippsvb3"))))
34489 (build-system pyproject-build-system)
34490 (arguments
34491 (list
34492 ;; tests: 506 passed, 16 skipped, 10 deselected, 5 xfailed, 66 warnings
34493 #:test-flags
34494 #~(list "--durations=10"
34495 "--ignore=tests/integration/test_dev_server.py"
34496 "-k" (string-join
34497 ;; Some time difference in example tests.
34498 (list "not test_serves_root_dir[http://example.org/deep/down/a/rabbit/hole]"
34499 "test_serves_root_dir[https://example.org:1234/blog]"
34500 "test_serves_root_dir[https://example.org:3456/blog/]"
34501 "test_serves_root_dir[https://example.org]"
34502 ;; AssertionError: Calls not found.
34503 "test_write_content_does_not_detroy_text"
34504 ;; AssertionError: assert 'January 10, 2006,
34505 ;; 12:34:56\u202fPM -0500' == 'January 10, 2006,
34506 ;; 12:34:56\u202fPM EST'
34507 "test_format_date_timezone")
34508 " and not "))))
34509 (native-inputs
34510 (list nss-certs-for-test
34511 python-feedparser
34512 python-freezegun
34513 python-pytest
34514 python-setuptools))
34515 (inputs
34516 (list python-babel
34517 python-blinker
34518 python-dateutil
34519 python-docutils
34520 python-doit
34521 python-jinja2 ;; for themes
34522 python-lxml
34523 python-mako
34524 python-markdown
34525 python-natsort
34526 python-notebook ;; for ipynb
34527 python-phpserialize ;; for wordpress import
34528 python-piexif
34529 python-pillow
34530 python-pygments
34531 python-pyrss2gen
34532 python-requests
34533 python-ruamel.yaml ;; for YAML metadata
34534 python-toml
34535 python-unidecode
34536 python-yapsy))
34537 (home-page "https://getnikola.com/")
34538 (synopsis "Modular, fast and simple static website and blog generator")
34539 (description "Nikola generates static websites and blogs. Out of the box,
34540it supports reStructuredText, Markdown, IPython (Jupyter) Notebooks and HTML,
34541and has plugins for many other formats.")
34542 (license license:expat)))
34543
34544(define-public nbss-upload
34545 (package
34546 (name "nbss-upload")
34547 (version "0.1")
34548 (source
34549 (origin
34550 (method git-fetch)
34551 (uri (git-reference
34552 (url "https://github.com/notebook-sharing-space/nbss-upload")
34553 (commit (string-append "v" version))))
34554 (file-name (git-file-name name version))
34555 (sha256
34556 (base32 "0cxj4zqcxzi3c5kw649jxmdpnbyrkrwx4licxdg6zc317v8gxw54"))))
34557 (build-system pyproject-build-system)
34558 (arguments (list #:tests? #f)) ;no tests
34559 (native-inputs (list python-setuptools))
34560 (propagated-inputs (list python-requests))
34561 (home-page "https://github.com/notebook-sharing-space/nbss-upload")
34562 (synopsis "Upload notebooks to a notebooksharing.space instance")
34563 (description
34564 "Upload notebooks as @code{.ipynb}, @code{.rmd}, and @code{.html} to a
34565notebooksharing.space instance.")
34566 (license license:bsd-3)))
34567
34568(define-public python-reedsolo
34569 (package
34570 (name "python-reedsolo")
34571 (version "1.7.0")
34572 (source
34573 (origin
34574 (method git-fetch)
34575 (uri (git-reference
34576 (url "https://github.com/tomerfiliba/reedsolomon")
34577 (commit (string-append "v" version))))
34578 (file-name (git-file-name name version))
34579 (sha256
34580 (base32 "078f02cal1nn53v10spx141hd5hi22a3xxrz1j32f7cph7b46dwz"))))
34581 (build-system pyproject-build-system)
34582 (native-inputs (list python-pytest python-setuptools))
34583 (home-page "https://github.com/tomerfiliba/reedsolomon")
34584 (synopsis "Pure-Python Reed Solomon encoder/decoder")
34585 (description
34586 "A pure-python universal errors-and-erasures Reed-Solomon Codec, based on
34587the tutorial at Wikiversity. This is a burst-type implementation, so that it
34588supports any Galois field higher than 2^3, but not binary streams.")
34589 (license license:public-domain)))
34590
34591(define-public python-esprima
34592 (package
34593 (name "python-esprima")
34594 (version "4.0.1")
34595 (source
34596 (origin
34597 (method git-fetch)
34598 (uri (git-reference
34599 (url "https://github.com/Kronuz/esprima-python")
34600 (commit (string-append "v" version))))
34601 (file-name (git-file-name name version))
34602 (sha256
34603 (base32 "0yk80j63mds4qvdjk79yp6a831vl5kc17cwkxamir1wp2w4hznas"))))
34604 (build-system pyproject-build-system)
34605 (arguments
34606 (list
34607 ;; XXX: pytest fails to collect tests, and a few tests are failing
34608 ;; using unittest backend. In particular, offsets with math characters
34609 ;; and uncompiled regexps.
34610 #:tests? #f
34611 #:test-backend #~'unittest
34612 #:test-flags
34613 #~(list "-k"
34614 (string-join (list
34615 ;; XXX: Character offsets with maths.
34616 "not test_math_alef"
34617 "test_math_dal_part"
34618 "test_math_kaf_lam"
34619 "test_math_zain_start"
34620 ;; XXX: Uncompiled regexps.
34621 "test_yield_arg_regexp1"
34622 "test_yield_arg_regexp2"
34623 "test_migrated_0005_source"
34624 "test_u_flag_valid_range"
34625 "test_migrated_0049"
34626 "test_migrated_0050_source")
34627 " and not "))))
34628 (native-inputs (list python-setuptools))
34629 (home-page "https://github.com/Kronuz/esprima-python")
34630 (synopsis "ECMAScript parsing infrastructure for analysis in Python")
34631 (description
34632 "This package provides ECMAScript parsing infrastructure for
34633multipurpose analysis in Python.")
34634 (license license:bsd-3)))
34635
34636(define-public python-psycopg2-binary
34637 (package
34638 (name "python-psycopg2-binary")
34639 (version "2.9.10")
34640 (source
34641 (origin
34642 (method url-fetch)
34643 (uri (pypi-uri "psycopg2-binary" version))
34644 (sha256
34645 (base32 "1qkdl21agnifabk508py6m0q4ggixx13k63xlp6qma8ak7kg0gab"))))
34646 (build-system pyproject-build-system)
34647 (arguments
34648 ;; Tests are disable because they need a live instance of PostgreSQL.
34649 '(#:tests? #f))
34650 (native-inputs (list python-setuptools python-wheel))
34651 (inputs (list postgresql))
34652 (home-page "https://psycopg.org/")
34653 (synopsis "PostgreSQL database adapter for Python")
34654 (description
34655 "Psycopg is a PostgreSQL database adapter for the Python programming
34656language. Its main features are the complete implementation of the Python DB
34657API 2.0 specification and the thread safety (several threads can share the
34658same connection). It was designed for heavily multi-threaded applications
34659that create and destroy lots of cursors and make a large number of concurrent
34660@code{INSERT}s or @code{UPDATE}s.
34661
34662Psycopg 2 is mostly implemented in C as a libpq wrapper, resulting in
34663being both efficient and secure. It features client-side and
34664server-side cursors, asynchronous communication and notifications,
34665@code{COPY TO}/@code{COPY FROM} support. Many Python types are supported
34666out-of-the-box and adapted to matching PostgreSQL data types;
34667adaptation can be extended and customized thanks to a flexible objects
34668adaptation system.
34669
34670Psycopg 2 is both Unicode and Python 3 friendly.")
34671 (license license:lgpl3+)))
34672
34673(define-public python-pyfuse3
34674 (package
34675 (name "python-pyfuse3")
34676 (version "3.4.2")
34677 (source
34678 (origin
34679 (method git-fetch)
34680 (uri (git-reference
34681 (url "https://github.com/libfuse/pyfuse3")
34682 (commit (string-append "v" version))))
34683 (file-name (git-file-name name version))
34684 (sha256
34685 (base32 "1vnsk33ql77ix6wpw4sid0xfyskhgv9p4ifpaqynqsv2g2jnss6y"))))
34686 (build-system pyproject-build-system)
34687 (arguments
34688 (list
34689 #:test-flags
34690 ;; FileNotFoundError: [Errno 2] No such file or directory: '/usr/bin'
34691 #~(list "--deselect=test/test_api.py::test_listdir")))
34692 (native-inputs
34693 (list pkg-config
34694 python-cython
34695 python-pytest
34696 python-setuptools
34697 python-setuptools-scm))
34698 (inputs
34699 (list fuse))
34700 (propagated-inputs
34701 (list python-trio))
34702 (home-page "https://github.com/libfuse/pyfuse3")
34703 (synopsis "Python bindings to FUSE 3")
34704 (description "This package provides Python 3 bindings for libfuse 3 with
34705async I/O support.")
34706 (license license:gpl2+)))
34707
34708(define-public python-ansi-styles
34709 ;; Releases are not tagged in Git:
34710 ;; https://github.com/shawwn/ansi-styles-python/issues/2
34711 (let ((commit "c1d79c1defaf68c4f1bfe3f9b3fa49667404f5f4")
34712 (revision "0"))
34713 (package
34714 (name "python-ansi-styles")
34715 (version (git-version "0.2.2" revision commit))
34716 (source
34717 (origin
34718 (method git-fetch)
34719 (uri (git-reference
34720 (url "https://github.com/shawwn/ansi-styles-python")
34721 (commit commit)))
34722 (file-name (git-file-name name version))
34723 (sha256
34724 (base32 "0595v5nxh1j3yv4k668x6yjvabjfpckgjzz6s89cfmwkd70sdkn0"))))
34725 (build-system pyproject-build-system)
34726 (native-inputs (list python-poetry-core python-pytest))
34727 (home-page "https://github.com/shawwn/ansi-styles-python")
34728 (synopsis "ANSI escape codes for styling strings in the terminal")
34729 (description
34730 "This Python package provide ANSI escape codes
34731for styling strings in the terminal.")
34732 (license license:expat))))
34733
34734(define-public python-multipart
34735 (package
34736 (name "python-multipart")
34737 (version "0.0.20")
34738 (source (origin
34739 (method url-fetch)
34740 (uri (pypi-uri "python_multipart" version))
34741 (sha256
34742 (base32
34743 "04wxzakk3hs4z4xf3ldhym3gm46hjicn4iwiw150c8wfbfscml4d"))))
34744 (build-system pyproject-build-system)
34745 (native-inputs
34746 (list python-hatchling
34747 python-pytest
34748 python-pyyaml))
34749 (home-page "https://github.com/andrew-d/python-multipart")
34750 (synopsis "Streaming multipart parser for Python")
34751 (description
34752 "This package provides a streaming multipart parser for Python.")
34753 (license license:asl2.0)))
34754
34755(define-public python-aiopg
34756 (package
34757 (name "python-aiopg")
34758 (version "1.4.0")
34759 (source
34760 (origin
34761 (method git-fetch)
34762 (uri (git-reference
34763 (url "https://github.com/aio-libs/aiopg")
34764 (commit (string-append "v" version))))
34765 (file-name (git-file-name name version))
34766 (sha256
34767 (base32 "0sbf5vfbxivi7fmh99xiviwgq46z5ypi0vsf0vq280934m2naghq"))))
34768 (build-system pyproject-build-system)
34769 (arguments
34770 (list
34771 #:tests? #f ;they need Docker
34772 #:phases
34773 #~(modify-phases %standard-phases
34774 (add-after 'unpack 'use-default-asyncio
34775 ;; async_timeout is deprecated, upstream recommends to use
34776 ;; asyncio, available since Python 3.11.
34777 (lambda _
34778 (substitute* "aiopg/pool.py"
34779 (("async_timeout") "asyncio"))))
34780 (add-after 'unpack 'relax-requirements
34781 (lambda _
34782 (substitute* "setup.py"
34783 (("psycopg2-binary") "psycopg2")
34784 ;; It's a part of Python 3.11+.
34785 ((", \"async_timeout>=3.0,<5.0\"") "")))))))
34786 (native-inputs
34787 (list python-setuptools))
34788 (propagated-inputs
34789 (list python-psycopg2))
34790 (home-page "https://aiopg.readthedocs.io")
34791 (synopsis "Postgres integration with asyncio")
34792 (description
34793 "aiopg is a library for accessing a PostgreSQL database from the
34794asyncio (PEP-3156/tulip) framework. It wraps asynchronous features of the
34795Psycopg database driver.")
34796 (license license:bsd-3)))
34797
34798(define-public python-shtab
34799 (package
34800 (name "python-shtab")
34801 (version "1.7.1")
34802 (source
34803 (origin
34804 (method url-fetch)
34805 (uri (pypi-uri "shtab" version))
34806 (sha256
34807 (base32 "0g14778c5zgiq6b92k40n9irp75c5vcsvl5541cw8bmqxq1cnjsf"))))
34808 (build-system pyproject-build-system)
34809 (native-inputs
34810 (list bash
34811 python-pytest
34812 python-pytest-timeout
34813 python-setuptools
34814 python-setuptools-scm
34815 python-wheel))
34816 (home-page "https://github.com/iterative/shtab")
34817 (synopsis "Automagic shell tab completion for Python CLI applications")
34818 (description
34819 "This package automatically generates shell tab completion scripts for
34820Python CLI apps.")
34821 (license license:asl2.0)))
34822
34823(define-public python-pyperf
34824 (package
34825 (name "python-pyperf")
34826 (version "2.10.0")
34827 (source
34828 (origin
34829 (method git-fetch)
34830 (uri (git-reference
34831 (url "https://github.com/psf/pyperf")
34832 (commit version)))
34833 (file-name (git-file-name name version))
34834 (sha256
34835 (base32 "1xl60vrwp2zqjwv685xxj8b5hxblshf5f4s7qmq8fmn445mg9aiw"))))
34836 (build-system pyproject-build-system)
34837 (arguments
34838 (list
34839 #:test-flags
34840 #~(list "--ignore=pyperf/tests/test_examples.py")))
34841 (native-inputs
34842 (list python-psutil-bootstrap
34843 python-pytest
34844 python-setuptools))
34845 (home-page "https://github.com/psf/pyperf")
34846 (synopsis "Toolkit for running Python benchmarks")
34847 (description
34848 "The Python @code{pyperf} module is a toolkit for writing, running and
34849analyzing benchmarks. It features a simple API that can:
34850
34851@itemize
34852@item automatically calibrate a benchmark for a time budget;
34853@item spawn multiple worker processes;
34854@item compute the mean and standard deviation;
34855@item detect if a benchmark result seems unstable;
34856@item store benchmark results in JSON format;
34857@item support multiple units: seconds, bytes and integer.
34858@end itemize")
34859 (license license:expat)))
34860
34861(define-public python-pydispatcher
34862 (package
34863 (name "python-pydispatcher")
34864 (version "2.0.7")
34865 (source
34866 (origin
34867 (method url-fetch)
34868 (uri (pypi-uri "PyDispatcher" version))
34869 (sha256
34870 (base32 "0cdyymidxkzvcq6lpybhmh0ngyhld6jdcaac9bbvmh8d12nwcxxp"))))
34871 (build-system pyproject-build-system)
34872 (native-inputs (list python-pytest python-setuptools))
34873 (home-page "https://pydispatcher.sourceforge.net")
34874 (synopsis "Multi-producer-multi-consumer signal dispatching mechanism")
34875 (description
34876 "PyDispatcher is an enhanced version of Patrick K. O’Brien’s original
34877@code{dispatcher.py} module. It provides the Python programmer with a robust
34878mechanism for event routing within various application contexts.
34879
34880Included in the package are the robustapply and saferef modules, which
34881provide the ability to selectively apply arguments to callable objects
34882and to reference instance methods using weak-references.")
34883 (license license:bsd-3)))
34884
34885(define-public python-pyee
34886 (package
34887 (name "python-pyee")
34888 (version "13.0.1")
34889 (source
34890 (origin
34891 (method git-fetch)
34892 (uri (git-reference
34893 (url "https://github.com/jfhbrook/pyee")
34894 (commit (string-append "v" version))))
34895 (file-name (git-file-name name version))
34896 (sha256
34897 (base32 "0qmvbh8w15criy9fysgpppla1sk201c6dqvig0hvgxdirmp1zc4j"))))
34898 (build-system pyproject-build-system)
34899 (propagated-inputs (list python-typing-extensions))
34900 (native-inputs
34901 (list python-mock
34902 python-pytest
34903 python-pytest-asyncio
34904 python-pytest-trio
34905 python-setuptools
34906 python-trio
34907 python-twisted))
34908 (home-page "https://github.com/jfhbrook/pyee")
34909 (synopsis "Emit events with Python")
34910 (description
34911 "This package provides a port of node.js's EventEmitter to
34912python. Additionally, it includes a number of subclasses useful for
34913implementing async and threaded programming in python, such as async/await.")
34914 (license license:expat)))
34915
34916(define-public python-pypubsub
34917 (package
34918 (name "python-pypubsub")
34919 (version "4.0.3")
34920 (source
34921 (origin
34922 (method git-fetch)
34923 (uri (git-reference
34924 (url "https://github.com/schollii/pypubsub")
34925 (commit (string-append "v" version))))
34926 (file-name (git-file-name name version))
34927 (sha256
34928 (base32 "02j74w28wzmdvxkk8i561ywjgizjifq3hgcl080yj0rvkd3wivlb"))))
34929 (build-system pyproject-build-system)
34930 (arguments
34931 (list
34932 #:phases
34933 #~(modify-phases %standard-phases
34934 (replace 'check
34935 (lambda* (#:key tests? #:allow-other-keys)
34936 (when tests?
34937 (with-directory-excursion "tests/suite"
34938 (invoke "py.test"))))))))
34939 (native-inputs
34940 (list python-pytest
34941 python-setuptools
34942 python-wheel))
34943 (home-page "https://github.com/schollii/pypubsub")
34944 (synopsis "Python publish-subcribe library")
34945 (description
34946 "This library provides a publish-subscribe API to facilitate event-based
34947or message-based architecture in a single-process application. It is centered
34948on the notion of a topic - senders publish messages of a given topic, and
34949listeners subscribe to messages of a given topic, all inside the same
34950process.")
34951 (license license:bsd-2)))
34952
34953(define-public python-queuelib
34954 (package
34955 (name "python-queuelib")
34956 (version "1.8.0")
34957 (source
34958 (origin
34959 (method git-fetch)
34960 (uri (git-reference
34961 (url "https://github.com/scrapy/queuelib")
34962 (commit (string-append "v" version))))
34963 (file-name (git-file-name name version))
34964 (sha256
34965 (base32 "0rnyk200rd9vvifsx70z2d6h6gkmjmf6384d5bmnslhqircb430b"))))
34966 (build-system pyproject-build-system)
34967 (native-inputs (list python-hatchling python-pytest))
34968 (home-page "https://github.com/scrapy/queuelib")
34969 (synopsis "Collection of queues for Python")
34970 (description
34971 "Queuelib is a Python library that implements object collections which
34972are stored in memory or persisted to disk, provide a simple API, and run fast.
34973
34974Queuelib provides collections for queues (FIFO), stacks (LIFO), queues sorted
34975by priority and queues that are emptied in a round-robin fashion.")
34976 (license license:bsd-3)))
34977
34978(define-public python-posix-ipc
34979 (package
34980 (name "python-posix-ipc")
34981 (version "1.3.2")
34982 (source
34983 (origin
34984 (method git-fetch)
34985 (uri (git-reference
34986 (url "https://github.com/osvenskan/posix_ipc")
34987 (commit (string-append "rel" version))))
34988 (file-name (git-file-name name version))
34989 (sha256
34990 (base32 "0g9zhadssq01q4xcf25lq2qmn7q02p877bx0nyx3b09phgw6860j"))))
34991 (build-system pyproject-build-system)
34992 (arguments
34993 (list
34994 #:test-flags
34995 ;; XXX: Collection fails due to stdin configuration.
34996 #~(list "--ignore=tests/test_memory.py")
34997 #:phases
34998 #~(modify-phases %standard-phases
34999 (add-after 'unpack 'set-cc-path
35000 (lambda _
35001 (setenv "CC" #$(cc-for-target)))))))
35002 (native-inputs (list python-pytest python-setuptools))
35003 (home-page "https://semanchuk.com/philip/posix_ipc/")
35004 (synopsis "POSIX IPC primitives for Python")
35005 (description
35006 "This package provides POSIX IPC primitives - semaphores, shared memory and
35007message queues for Python.")
35008 (license license:bsd-3))) ; BSD like Copyright (c) 2018, Philip Semanchuk
35009
35010(define-public python-itemadapter
35011 (package
35012 (name "python-itemadapter")
35013 (version "0.12.0")
35014 (source
35015 (origin
35016 (method git-fetch)
35017 (uri (git-reference
35018 (url "https://github.com/scrapy/itemadapter")
35019 (commit (string-append "v" version))))
35020 (file-name (git-file-name name version))
35021 (sha256
35022 (base32 "1d7v5x1v8v62rs1xay2m4djdnhsydfb0lzgh8c0c1lipinrqzkfz"))))
35023 (build-system pyproject-build-system)
35024 (arguments (list #:tests? #f)) ; Circular dependency on python-scrapy.
35025 (native-inputs (list python-hatchling))
35026 (home-page "https://github.com/scrapy/itemadapter")
35027 (synopsis "Common interface for data container classes")
35028 (description
35029 "The ItemAdapter class is a wrapper for data container objects, providing
35030a common interface to handle objects of different types in an uniform manner,
35031regardless of their underlying implementation.
35032
35033Currently supported types are:
35034@itemize
35035@item scrapy.item.Item
35036@item dict
35037@item dataclass-based classes
35038@item attrs-based classes
35039@item pydantic-based classes
35040@end itemize
35041
35042Additionally, interaction with arbitrary types is supported by
35043implementing a pre-defined interface.")
35044 (license license:bsd-3)))
35045
35046(define-public python-itemloaders
35047 (package
35048 (name "python-itemloaders")
35049 (version "1.3.2")
35050 (source
35051 (origin
35052 (method url-fetch)
35053 (uri (pypi-uri "itemloaders" version))
35054 (sha256
35055 (base32 "0w37g31n06x6v6b4w7cz3nbq4wl6cv7rrzg3fr203gw3pqx5pbsg"))))
35056 (build-system pyproject-build-system)
35057 (native-inputs
35058 (list python-packaging
35059 python-pytest
35060 python-setuptools
35061 python-wheel))
35062 (propagated-inputs
35063 (list python-itemadapter python-jmespath python-parsel))
35064 (home-page "https://github.com/scrapy/itemloaders")
35065 (synopsis "Base library for scrapy's ItemLoader")
35066 (description "Itemloaders is a library that helps you collect data
35067from HTML and XML sources. It comes in handy to extract data from web
35068pages, as it supports data extraction using CSS and XPath Selectors.
35069
35070It’s specially useful when you need to standardize the data from many
35071sources. For example, it allows you to have all your casting and
35072parsing rules in a single place.")
35073 (license license:bsd-3)))
35074
35075(define-public python-iterable-io
35076 (package
35077 (name "python-iterable-io")
35078 (version "1.0.0")
35079 (source
35080 (origin
35081 (method url-fetch)
35082 (uri (pypi-uri "iterable-io" version))
35083 (sha256
35084 (base32 "0g4cn522n4dv6ly8pwf97dc62rr4f7my38v0bh6vmac7jmrip7pv"))))
35085 (build-system pyproject-build-system)
35086 (native-inputs (list python-setuptools python-pytest))
35087 (home-page "https://github.com/pR0Ps/iterable-io")
35088 (synopsis "Adapt generators and other iterables to a file-like interface")
35089 (description
35090 "@code{iterable-io} is a small Python library that provides an adapter so
35091that it's possible to read from
35092@url{https://docs.python.org/3/glossary.html#term-iterable,iterable} objects
35093in the same way as
35094@url{https://docs.python.org/3/glossary.html#term-file-object,file-like}
35095objects.")
35096 (license license:lgpl3)))
35097
35098(define-public python-iteround
35099 (package
35100 (name "python-iteround")
35101 (version "1.0.4")
35102 ;; PyPI only has wheels.
35103 (source (origin
35104 (method git-fetch)
35105 (uri (git-reference
35106 (url "https://github.com/cgdeboer/iteround")
35107 (commit (string-append "v" version))))
35108 (file-name (git-file-name name version))
35109 (sha256
35110 (base32 "1irw4sqrsgpc0ibxdv1hlx0d0jr1fqs48bj6mpfylzqkag9ywlfj"))))
35111 (build-system pyproject-build-system)
35112 (native-inputs
35113 (list python-pytest python-setuptools python-wheel))
35114 (home-page "https://github.com/cgdeboer/iteround")
35115 (synopsis "Sum-safe rounding for Iterables")
35116 (description "Iteround is a standard library sum-safe rounding library for
35117Python iterables (lists, tuples, dicts).")
35118 (license license:expat)))
35119
35120(define-public python-hypy-utils
35121 (package
35122 (name "python-hypy-utils")
35123 (version "1.0.29")
35124 (source
35125 (origin
35126 (method url-fetch)
35127 (uri (pypi-uri "hypy_utils" version))
35128 (sha256
35129 (base32 "1gf4v4gv9kr4r3prjwvcii153vwjrp7gir2mz6d1qbz6jggif8n7"))))
35130 (build-system pyproject-build-system)
35131 (arguments (list #:tests? #f)) ; No tests upstream.
35132 (native-inputs (list python-setuptools))
35133 (home-page "https://github.com/hykilpikonna/HyPyUtils")
35134 (synopsis "Python utility functions for HyDEV")
35135 (description "This module provides Python utility functions for modifying
35136and setting the color of terminal output, via HyDEV.")
35137 (license license:expat)))
35138
35139(define-public python-mike
35140 (package
35141 (name "python-mike")
35142 (version "2.1.3")
35143 (source
35144 (origin
35145 (method git-fetch) ; no tests data in PyPi package
35146 (uri (git-reference
35147 (url "https://github.com/jimporter/mike")
35148 (commit (string-append "v" version))))
35149 (file-name (git-file-name name version))
35150 (sha256
35151 (base32 "0rgmpxim91rpn8cplyi72g75fhclr40hxcpschn7rbfkqdhj8rbq"))))
35152 (build-system pyproject-build-system)
35153 (arguments
35154 (list
35155 #:test-flags
35156 ;; Most of integration tests hang or fail.
35157 #~(list "--ignore=test/integration/"
35158 ;; AttributeError: 'NoneType' object has no attribute 'group'
35159 "--ignore=test/unit/test_commands.py"
35160 "--deselect=test/unit/test_mkdocs_utils.py::TestVersion::test_version")))
35161 (native-inputs
35162 (list git-minimal/pinned
35163 python-pytest
35164 python-setuptools
35165 python-shtab
35166 python-wheel))
35167 (propagated-inputs
35168 (list python-importlib-metadata
35169 python-importlib-resources
35170 python-jinja2
35171 python-mkdocs
35172 python-pyparsing
35173 python-pyyaml
35174 python-pyyaml-env-tag
35175 python-verspec))
35176 (home-page "https://github.com/jimporter/mike")
35177 (synopsis "Manage multiple versions of MkDocs-powered documentation")
35178 (description
35179 "This package provides a Python utility to easily deploy multiple
35180versions of MkDocs-powered docs to a Git branch. It is suitable for deploying
35181to Github via gh-pages.")
35182 (license license:bsd-3)))
35183
35184(define-public python-arpeggio
35185 (package
35186 (name "python-arpeggio")
35187 (version "2.0.2")
35188 (source
35189 (origin
35190 (method url-fetch)
35191 (uri (pypi-uri "Arpeggio" version))
35192 (sha256
35193 (base32 "00571cmdxw8w8khzscb085kfqv2hgxdzpyz4d3a2sv92dsqb5467"))))
35194 (build-system pyproject-build-system)
35195 (native-inputs
35196 (list python-pytest
35197 python-setuptools
35198 python-wheel))
35199 (home-page "https://github.com/textX/Arpeggio")
35200 (synopsis "Packrat parser interpreter for Python")
35201 (description
35202 "This Python library provides a recursive descent parser with
35203backtracking and memoization (a.k.a. packrat parser). Arpeggio grammars are
35204based on PEG formalism. Arpeggio's main use is a foundation for a toolchain
35205for DSL development but it can be used for all sorts of general purpose
35206parsing.")
35207 (license license:expat)))
35208
35209(define-public python-flatten-json
35210 ;; The latest version was not tagged on GitHub, PyPI provides no tests, use
35211 ;; the commit associated with 0.1.14 version.
35212 (let ((commit "900c4feebcfcd831ddb6143c4b246024ecf911ec")
35213 (revision "0"))
35214 (package
35215 (name "python-flatten-json")
35216 (version (git-version "0.1.14" revision commit))
35217 (source
35218 (origin
35219 (method git-fetch) ; no tests in PyPI release
35220 (uri (git-reference
35221 (url "https://github.com/amirziai/flatten")
35222 (commit commit)))
35223 (file-name (git-file-name name version))
35224 (sha256
35225 (base32 "1vk2ykmk4wirsywinxk9v520y6iv857bn0hsizm25s3d08v5a3sb"))))
35226 (build-system pyproject-build-system)
35227 (native-inputs
35228 (list python-pytest
35229 python-setuptools
35230 python-wheel))
35231 (propagated-inputs
35232 (list python-six))
35233 (home-page "https://github.com/amirziai/flatten")
35234 (synopsis "Flatten JSON objects")
35235 (description
35236 "The @code{flatten_json} Python library flattens the hierarchy in your
35237object, which can be useful if you want to force your objects into a table.")
35238 (license license:expat))))
35239
35240(define-public python-deepdiff
35241 (package
35242 (name "python-deepdiff")
35243 (version "8.6.1")
35244 (source (origin
35245 (method url-fetch)
35246 (uri (pypi-uri "deepdiff" version))
35247 (sha256
35248 (base32
35249 "0fk4zzrv7chynjbpgk7bj7nhqc7c3va7pv00a8dqk06ad6kxfmpc"))))
35250 (build-system pyproject-build-system)
35251 (arguments
35252 ;; tests: 1028 passed, 10 skipped, 1 deselected
35253 ;; Ignore Polars test (not packaged).
35254 (list #:test-flags #~(list "-k" "not test_polars")))
35255 (propagated-inputs (list python-click ; for CLI
35256 python-pyyaml ; for CLI
35257 python-orderly-set
35258 python-orjson)) ; for optimization
35259 (native-inputs
35260 (list python-flit-core
35261 python-jsonpickle
35262 python-numpy
35263 python-pandas
35264 python-pydantic
35265 python-pytest
35266 python-pytest-benchmark
35267 python-pytz
35268 python-uuid6
35269 python-tomli-w))
35270 (home-page "https://github.com/seperman/deepdiff")
35271 (synopsis "Deep difference and search of any Python object/data")
35272 (description
35273 "This package provides tools for computing deep differences and searching
35274of any Python object/data. Recreate objects by adding adding deltas to each
35275other.")
35276 (license license:expat)))
35277
35278(define-public python-deepmerge
35279 (package
35280 (name "python-deepmerge")
35281 (version "1.0.1")
35282 (source
35283 (origin
35284 (method url-fetch)
35285 (uri (pypi-uri "deepmerge" version))
35286 (sha256
35287 (base32 "06hagzg8ccmjzqvszdxb52jgx5il8a1jdz41n4dpkyyjsfg7fi2b"))))
35288 (build-system pyproject-build-system)
35289 (native-inputs
35290 (list python-setuptools-scm
35291 python-pytest
35292 python-setuptools
35293 python-wheel))
35294 (home-page "https://deepmerge.readthedocs.io/en/latest/")
35295 (synopsis "Merge nested data structures")
35296 (description
35297 "The @code{deep-merge} Python library provides a toolset to deeply merge
35298nested data structures in Python like lists and dictionaries.")
35299 (license license:expat)))
35300
35301(define-public python-durationpy
35302 (package
35303 (name "python-durationpy")
35304 (version "0.10")
35305 (source
35306 (origin
35307 (method git-fetch)
35308 (uri (git-reference
35309 (url "https://github.com/icholy/durationpy")
35310 (commit version)))
35311 (file-name (git-file-name name version))
35312 (sha256
35313 (base32 "1617wg77j68z7v4rbjrhv6n7bchznhgjn21qrmb034sf4hwg77dl"))))
35314 (build-system pyproject-build-system)
35315 (arguments
35316 (list #:test-backend #~'custom
35317 #:test-flags #~(list "test.py")))
35318 (native-inputs (list python-setuptools))
35319 (home-page "https://github.com/icholy/durationpy")
35320 (synopsis "Python <-> Golang time duration formats converter")
35321 (description
35322 "This package implements a functionality to convert between
35323Python's @code{datetime.timedelta} and Golang's @code{time.Duration} formats.")
35324 (license license:expat)))
35325
35326(define-public python-murmurhash3
35327 (let ((commit "01f1128a2c5ea08e6dc33515e140bedd68393a2d")
35328 (revision "0"))
35329 (package
35330 (name "python-murmurhash3")
35331 (version (git-version "2.3.5" revision commit))
35332 (source
35333 (origin
35334 (method git-fetch)
35335 (uri (git-reference
35336 (url "https://github.com/veegee/mmh3")
35337 (commit commit)))
35338 (file-name (git-file-name name version))
35339 (sha256
35340 (base32 "1zpk51ms1bvzg52zc9s9az71bgw2kgxidjcc1xib7y9r7dl7vczz"))))
35341 (build-system pyproject-build-system)
35342 (arguments
35343 (list
35344 #:phases
35345 #~(modify-phases %standard-phases
35346 (add-after 'unpack 'fix-package
35347 (lambda _
35348 (substitute* "mmh3module.cpp"
35349 (("#include <stdio\\.h>")
35350 "#define PY_SSIZE_T_CLEAN\n#include <stdio.h>")))))))
35351 (native-inputs
35352 (list python-cython python-pytest python-setuptools python-wheel))
35353 (home-page "https://github.com/veegee/mmh3")
35354 (synopsis "Python wrapper for MurmurHash (MurmurHash3)")
35355 (description
35356 "@code{murmurhash3} is a Python library for MurmurHash (MurmurHash3), a set
35357of fast and robust hash functions. This library is a Python extension module
35358written in C.")
35359 (license license:public-domain))))
35360
35361(define-public python-scooby
35362 (package
35363 (name "python-scooby")
35364 (version "0.11.0")
35365 (source
35366 (origin
35367 (method git-fetch)
35368 (uri (git-reference
35369 (url "https://github.com/banesullivan/scooby")
35370 (commit (string-append "v" version))))
35371 (file-name (git-file-name name version))
35372 (sha256
35373 (base32 "0c47gwcc5kpwx7s8ccp53s174bgraxm4qqrn72yz2ypxah6k3ccj"))))
35374 (build-system pyproject-build-system)
35375 (arguments
35376 (list
35377 ;; tests: 19 passed, 5 deselected, 1 warning
35378 #:test-flags
35379 ;; AssertionError: assert 'Module not found' == '0.1.0'
35380 #~(list "--deselect=tests/test_scooby.py::test_get_version"
35381 ;; ModuleNotFoundError: No module named 'no_version'
35382 "--deselect=tests/test_scooby.py::test_tracking"
35383 ;; Failed: DID NOT RAISE <class 'OSError'>
35384 "--deselect=tests/test_scooby.py::test_import_os_error"
35385 ;; FileNotFoundError: [Errno 2] No such file or directory: 'time'
35386 "--deselect=tests/test_scooby.py::test_import_time"
35387 ;; Errored
35388 "--deselect=tests/test_scooby.py::test_cli")))
35389 (native-inputs
35390 (list python-beautifulsoup4
35391 python-numpy
35392 python-pytest
35393 python-pyvips
35394 python-scipy
35395 python-setuptools
35396 python-setuptools-scm))
35397 (propagated-inputs
35398 (list python-psutil))
35399 (home-page "https://github.com/banesullivan/scooby")
35400 (synopsis "Report hardware information and Python package versions")
35401 (description
35402 "The Scooby package reports the following information about the currently
35403running system:
35404
35405@itemize
35406@item operating system name;
35407@item hardware information including machine type (e.g., @samp{i386},
35408@samp{x86_64}, etc.), CPU count and total RAM;
35409@item Python environment (e.g., Python, IPython, etc.);
35410@item file system name;
35411@item Python version;
35412@item versions of specified Python packages.
35413@end itemize
35414
35415It can generate reports as HTML tables or plain text lists.
35416
35417Scooby has no required dependencies, and only few optional dependencies.")
35418 (license license:expat)))
35419
35420(define-public python-cymem
35421 (package
35422 (name "python-cymem")
35423 (version "2.0.6")
35424 (source
35425 (origin
35426 (method git-fetch)
35427 (uri (git-reference
35428 (url "https://github.com/explosion/cymem")
35429 (commit (string-append "v" version))))
35430 (file-name (git-file-name name version))
35431 (sha256
35432 (base32 "1f0wjm6g2n09b9plddp3bvaz6bl27q6hv0q6g7qx24rgmjzkivm3"))))
35433 (build-system pyproject-build-system)
35434 (native-inputs (list python-cython python-pytest python-setuptools))
35435 (inputs (list python))
35436 (home-page "https://github.com/explosion/cymem")
35437 (synopsis "Cython memory pool for RAII-style memory management")
35438 (description
35439 "Cymem provides two small memory-management helpers for Cython. They make it
35440easy to tie memory to a Python object's life-cycle, so that the memory is freed
35441when the object is garbage collected.")
35442 (license license:expat)))
35443
35444(define-public python-preshed
35445 (package
35446 (name "python-preshed")
35447 (version "3.0.6")
35448 (source
35449 (origin
35450 (method git-fetch)
35451 (uri (git-reference
35452 (url "https://github.com/explosion/preshed")
35453 (commit (string-append "v" version))))
35454 (file-name (git-file-name name version))
35455 (sha256
35456 (base32 "01xwczc4cb9q3iah1gb9lxfh9s8ix695y3s95j7nhbiws6c9b5k5"))))
35457 (build-system pyproject-build-system)
35458 (arguments
35459 (list
35460 #:phases
35461 #~(modify-phases %standard-phases
35462 (add-after 'unpack 'patch-msvccompiler
35463 (lambda _
35464 (substitute* "setup.py"
35465 (("from distutils import ccompiler, msvccompiler")
35466 "from distutils import ccompiler")
35467 (("and msvccompiler.*")
35468 ""))))
35469 (replace 'check
35470 (lambda* (#:key inputs outputs #:allow-other-keys #:rest args)
35471 (with-directory-excursion (site-packages inputs outputs)
35472 (for-each delete-file (find-files "." "\\.pyx$"))
35473 (apply (assoc-ref %standard-phases 'check) args)
35474 (delete-file-recursively "preshed/tests")))))))
35475 (native-inputs
35476 (list python-cython python-cymem python-pytest python-setuptools))
35477 (inputs (list python python-cymem python-murmurhash))
35478 (home-page "https://github.com/explosion/preshed")
35479 (synopsis "Cython hash tables that assume keys are pre-hashed")
35480 (description
35481 "Simple but high performance Cython hash table mapping pre-randomized keys
35482to void* values.")
35483 (license license:expat)))
35484
35485(define-public python-catalogue
35486 (package
35487 (name "python-catalogue")
35488 (version "2.0.10")
35489 (source
35490 (origin
35491 (method git-fetch)
35492 (uri (git-reference
35493 (url "https://github.com/explosion/catalogue")
35494 (commit (string-append "v" version))))
35495 (file-name (git-file-name name version))
35496 (sha256
35497 (base32 "1v93a5dfhqa70kvjh4jxw9mqgwzbzg9w53an0frrx1rj6h96kmw5"))))
35498 (build-system pyproject-build-system)
35499 (native-inputs (list python-pytest python-setuptools))
35500 (home-page "https://github.com/explosion/catalogue")
35501 (synopsis "Lightweight function registries for your library")
35502 (description
35503 "This package is a tiny, zero-dependencies library that makes it easy to
35504add function (or object) registries to your code. Function registries are
35505helpful when you have objects that need to be both easily serializable and
35506fully customizable. Instead of passing a function into your object, you pass
35507in an identifier name, which the object can use to lookup the function from
35508the registry. This makes the object easy to serialize, because the name is a
35509simple string. If you instead saved the function, you'd have to use Pickle
35510for serialization, which has many drawbacks.")
35511 (license license:expat)))
35512
35513(define-public python-gatt
35514 (package
35515 (name "python-gatt")
35516 (version "0.2.7")
35517 (source (origin
35518 (method url-fetch)
35519 (uri (pypi-uri "gatt" version))
35520 (sha256
35521 (base32
35522 "0fjf066jixk30fr8xwfalwfnhqpr56yv0cccyypnx2qp9bi9svb2"))))
35523 (build-system pyproject-build-system)
35524 (arguments (list #:tests? #f)) ; No tests upstream.
35525 (propagated-inputs (list python-dbus-1.2 python-pygobject))
35526 (native-inputs (list python-setuptools))
35527 (home-page "https://github.com/getsenic/gatt-python")
35528 (synopsis "Bluetooth GATT SDK for Python")
35529 (description
35530 "The Bluetooth @acronym{GATT, Generic ATTribute Profile} @acronym{SDK,
35531Software Development Kit} for Python helps you implement and communicate with
35532any Bluetooth Low Energy device that has a GATT profile. It supports:
35533
35534@itemize @bullet
35535@item Discovering nearby Bluetooth Low Energy devices
35536@item Connecting and disconnecting devices
35537@item Implementing your custom GATT profile
35538@item Accessing all GATT services
35539@item Accessing all GATT characteristics
35540@item Reading characteristic values
35541@item Writing characteristic values
35542@item Subscribing for characteristic value change notifications
35543@end itemize
35544
35545Currently, Linux is the only platform supported by this library.")
35546 (license license:expat)))
35547
35548(define-public python-dbus-fast
35549 (package
35550 (name "python-dbus-fast")
35551 (version "2.44.3")
35552 (source
35553 (origin
35554 (method git-fetch) ;No tests in PyPI package.
35555 (uri (git-reference
35556 (url "https://github.com/Bluetooth-Devices/dbus-fast")
35557 (commit (string-append "v" version))))
35558 (file-name (git-file-name name version))
35559 (sha256
35560 (base32 "12f1f25ny7fd59s55gw3vr6ymdqgd51zzpbc1nkqfbmb166d1536"))))
35561 (build-system pyproject-build-system)
35562 (arguments
35563 (list
35564 #:test-flags
35565 '(list
35566 ;; These tests need pytest_codspeed.
35567 "--ignore-glob=tests/benchmarks/test_*marshall.py"
35568 ;; These tests all fail with:
35569 ;; dbus_fast.errors.InvalidAddressError: DBUS_SESSION_BUS_ADDRESS not
35570 ;; set and could not get DISPLAY environment variable to get bus address
35571 "-m" "not asyncio")))
35572 (native-inputs (list python-cython
35573 python-poetry-core
35574 python-setuptools
35575 python-pytest
35576 python-pytest-asyncio
35577 python-covdefaults))
35578 (home-page "https://github.com/bluetooth-devices/dbus-fast")
35579 (synopsis "Faster version of dbus-next")
35580 (description "This package provides a faster version of dbus-next.")
35581 (license license:expat)))
35582
35583(define-public python-bleak
35584 (package
35585 (name "python-bleak")
35586 (version "2.1.1")
35587 (source
35588 (origin
35589 (method git-fetch)
35590 (uri (git-reference
35591 (url "https://github.com/hbldh/bleak")
35592 (commit (string-append "v" version))))
35593 (file-name (git-file-name name version))
35594 (sha256
35595 (base32 "0vdzx6s5fsgnl3j2k0kn6w1v8mqhb2jjpmpq6vdk9i0bdp1456ff"))))
35596 (build-system pyproject-build-system)
35597 (arguments
35598 (list
35599 ;; Integration tests require unpackaged dependencies.
35600 #:test-flags #~(list "--ignore=tests/integration")))
35601 (propagated-inputs
35602 (list python-async-timeout
35603 python-dbus-fast
35604 python-typing-extensions))
35605 (native-inputs
35606 (list python-coverage
35607 python-packaging
35608 python-poetry-core
35609 python-pytest
35610 python-pytest-asyncio))
35611 (home-page "https://github.com/hbldh/bleak")
35612 (synopsis "Bluetooth Low Energy platform Agnostic Klient")
35613 (description "This package provides a Bluetooth Low Energy platform-agnostic
35614client library.")
35615 (license license:expat)))
35616
35617(define-public python-ndeflib
35618 (package
35619 (name "python-ndeflib")
35620 (version "0.3.3")
35621 (source
35622 (origin
35623 (method url-fetch)
35624 (uri (pypi-uri "ndeflib" version))
35625 (sha256
35626 (base32 "122a8prbcj070y3fl82kvxmbciv36hj1h1d448l6zcdrb22q4mhx"))))
35627 (build-system pyproject-build-system)
35628 (arguments
35629 (list
35630 ;; tests: 1571 passed, 37 deselected, 1 warning
35631 ;;
35632 ;; Three test fail with assertion not equal:
35633 ;;
35634 ;; test_decode_error[0001-unpack_from requires a buffer of at least 1
35635 ;; bytes] - AssertionError
35636 ;;
35637 ;; test_decode_error[00000101-unpack_from requires a buffer of at least
35638 ;; 1 bytes] - AssertionError
35639 ;;
35640 ;; test_encode_error[args1-ubyte format requires 0 <= number <= 255]
35641 ;; AssertionError
35642 #:test-flags #~(list "-k" (string-append "not test_decode_error and not "
35643 "test_encode_error"))))
35644 (native-inputs (list python-pytest-8 python-setuptools))
35645 (home-page "https://ndeflib.readthedocs.io/")
35646 (synopsis "NFC Data Exchange Format decoder and encoder.")
35647 (description "This package provides a NFC (Near-Field Communication)
35648Data Exchange Format decoder and encoder.")
35649 (license license:isc)))
35650
35651(define-public python-nfcpy
35652 (package
35653 (name "python-nfcpy")
35654 (version "1.0.4")
35655 (source
35656 (origin
35657 (method url-fetch)
35658 (uri (pypi-uri "nfcpy" version))
35659 (sha256
35660 (base32 "0sxgp298i8y17i9drp8sclxx0i3vn0wgh5ajs2arw7cy2780igg5"))))
35661 (build-system pyproject-build-system)
35662 (arguments
35663 `(#:tests? #f)) ; Tests use nfc.ndef even though that has been removed.
35664 (propagated-inputs (list python-libusb1 python-ndeflib python-pydes
35665 python-pyserial))
35666 (native-inputs (list python-setuptools python-wheel))
35667 (home-page "https://github.com/nfcpy/nfcpy")
35668 (synopsis "Python module for Near-Field Communication.")
35669 (description "This package provides a Python module for Near-Field
35670Communication.")
35671 (license license:eupl1.1)))
35672
35673(define-public python-clrprint
35674 (package
35675 (name "python-clrprint")
35676 (version "2.0.1")
35677 (source (origin
35678 (method url-fetch)
35679 (uri (pypi-uri "clrprint" version))
35680 (sha256
35681 (base32
35682 "0xfn8d1by2w7pjiji887qljk1avn4fylbnz1mj28gysm5g0zvy43"))))
35683 (build-system pyproject-build-system)
35684 (arguments '(#:tests? #f)) ;there are no tests
35685 (native-inputs
35686 (list python-setuptools))
35687 (propagated-inputs (list python-colorama python-termcolor))
35688 (home-page "https://github.com/AbhijithAJ/clrprint")
35689 (synopsis "Print colorful output in the terminal")
35690 (description "@code{clrprint} is developed to print colorful output in the
35691terminal. It has red, blue, green, yellow, purple and black/white (default)
35692colors.")
35693 (license license:expat)))
35694
35695(define-public python-mido
35696 (package
35697 (name "python-mido")
35698 (version "1.3.2")
35699 (source (origin
35700 (method url-fetch)
35701 (uri (pypi-uri "mido" version))
35702 (sha256
35703 (base32
35704 "0j63cydiinfyrvlhydzsb00cb7dyvrw3bnhjbdyp63vkxnv2isis"))))
35705 (build-system pyproject-build-system)
35706 (arguments
35707 (list #:phases
35708 #~(modify-phases %standard-phases
35709 ;; This package requires python-packaging~=23.1 which is not yet
35710 ;; updated to. As per pyproject.toml, it is required to provide
35711 ;; a nice version_info object.
35712 ;; TODO: After updating python-packaging, fix this.
35713 (delete 'sanity-check))))
35714 (propagated-inputs (list python-importlib-metadata python-packaging))
35715 (native-inputs (list python-pytest python-setuptools python-wheel))
35716 (home-page "https://mido.readthedocs.io/en/stable/")
35717 (synopsis "MIDI Objects for Python")
35718 (description "This library is for working with MIDI 1.0 ports, messages and
35719files.")
35720 (license license:expat)))
35721
35722(define-public python-musical-scales
35723 (package
35724 (name "python-musical-scales")
35725 (version "1.0.1")
35726 (source (origin
35727 (method url-fetch)
35728 (uri (pypi-uri "musical-scales" version))
35729 (sha256
35730 (base32
35731 "1ckn8n37i7b65h0i385ycn0w8sg9na0iabz0kmhxxc1wj0hddkw9"))))
35732 (build-system pyproject-build-system)
35733 (arguments (list #:tests? #f)) ;no tests
35734 (native-inputs (list python-setuptools))
35735 (home-page "https://github.com/hmillerbakewell/musical-scales")
35736 (synopsis "Retrieve a scale based on a given mode and starting note")
35737 (description
35738 "Retrieve a scale based on a given mode and starting note.
35739Information about these scales can be
35740@url{https://en.wikipedia.org/wiki/List_of_musical_scales_and_modes, found on
35741Wikipedia}.")
35742 (license license:expat)))
35743
35744(define-public python-langcodes
35745 (package
35746 (name "python-langcodes")
35747 (version "3.5.0")
35748 (source (origin
35749 (method url-fetch)
35750 (uri (pypi-uri "langcodes" version))
35751 (sha256
35752 (base32
35753 "00gqlqs1gi8mvjwf6fkwiqhgcqxnsk5gwzs9l8qy2lbys1l83vqy"))))
35754 (build-system pyproject-build-system)
35755 (native-inputs
35756 (list python-pytest
35757 python-setuptools
35758 python-setuptools-scm))
35759 (propagated-inputs
35760 ;; [optional:data]
35761 (list python-language-data))
35762 (home-page "https://github.com/rspeer/langcodes")
35763 (synopsis "Python library for working with language codes")
35764 (description
35765 "This package provides a Python library for working with and comparing
35766language codes.
35767
35768@code{python-langcodes} implements @url{http://tools.ietf.org/html/bcp47, BCP
3576947}, the IETF Best Current Practices on Tags for Identifying Languages. BCP
3577047 is also known as RFC 5646. It subsumes ISO 639 and is backward compatible
35771with it, and it also implements recommendations from the
35772@url{http://cldr.unicode.org/, Unicode CLDR}.
35773
35774@code{python-langcodes} can also refer to a database of language properties
35775and names, built from Unicode CLDR and the IANA subtag registry, if you
35776install @code{python-language-data}.")
35777 (license license:expat)))
35778
35779(define-public python-anyascii
35780 (package
35781 (name "python-anyascii")
35782 (version "0.3.3")
35783 (source (origin
35784 (method url-fetch)
35785 (uri (pypi-uri "anyascii" version))
35786 (sha256
35787 (base32
35788 "1hwmzg3kxyj6lxdgibrj3azv803x8kwzw1d3xja98gbvskcrskn9"))))
35789 (build-system pyproject-build-system)
35790 (native-inputs (list python-pytest python-flit-core))
35791 (home-page "https://anyascii.com")
35792 (synopsis "Unicode to ASCII transliteration")
35793 (description "@code{anyascii} converts Unicode characters to their best
35794ASCII representation.")
35795 (license license:isc)))
35796
35797(define-public python-geomet
35798 (package
35799 (name "python-geomet")
35800 (version "1.1.0")
35801 (source
35802 (origin
35803 (method git-fetch)
35804 (uri (git-reference
35805 (url "https://github.com/geomet/geomet")
35806 (commit version)))
35807 (file-name (git-file-name name version))
35808 (sha256
35809 (base32 "06pq3xkvsxl2v6q39pqgkjbaysyylshny28k8krzg7drvpvkdwk1"))))
35810 (build-system pyproject-build-system)
35811 (native-inputs (list python-pytest python-setuptools))
35812 (propagated-inputs (list python-click python-six))
35813 (home-page "https://github.com/geomet/geomet")
35814 (synopsis
35815 "Convert GeoJSON to WKT/WKB (Well-Known Text/Binary) or GeoPackage Binary")
35816 (description
35817 "This package provides utilities and functions for converting
35818GeoJSON to WKT/WKB (Well-Known Text/Binary) or GeoPackage Binary, and vice
35819versa. Extended WKB/WKT are also supported.")
35820 (license license:asl2.0)))
35821
35822(define-public python-cogapp
35823 (package
35824 (name "python-cogapp")
35825 (version "3.3.0")
35826 (source (origin
35827 (method url-fetch)
35828 (uri (pypi-uri "cogapp" version))
35829 (sha256
35830 (base32
35831 "1c0xx3p3lzrlyqhmccyq9c50f8v9pqk2992gb4nl50h2yy1m3s8v"))))
35832 (build-system pyproject-build-system)
35833 (native-inputs (list python-pytest python-setuptools python-wheel))
35834 (home-page "https://nedbatchelder.com/code/cog")
35835 (synopsis "Content generation tool that leverages Python")
35836 (description "Cog is a file generation tool. It allows using pieces of
35837Python code as generators in your source files to generate arbitrary text.")
35838 (license license:expat)))
35839
35840(define-public python-cxxheaderparser
35841 (package
35842 (name "python-cxxheaderparser")
35843 (version "1.7.0")
35844 (source
35845 (origin
35846 (method git-fetch)
35847 (uri (git-reference
35848 (url "https://github.com/robotpy/cxxheaderparser")
35849 (commit version)))
35850 (file-name (git-file-name name version))
35851 (sha256
35852 (base32 "0x8bd8zffjg1cq9hgglr445582kyjw5qs6mq7n6k7n01ihhni3hs"))))
35853 (build-system pyproject-build-system)
35854 (native-inputs
35855 (list python-hatch-vcs python-pytest))
35856 (home-page "https://github.com/robotpy/cxxheaderparser/")
35857 (synopsis "Python C++ header parser")
35858 (description "Pure python C++ header parser that parses C++ headers in a
35859mildly naive manner that allows it to handle many C constructs, including
35860many (C++11 and beyond) features.")
35861 (license license:bsd-3)))
35862
35863(define-public python-bsdiff4
35864 (package
35865 (name "python-bsdiff4")
35866 (version "1.2.6")
35867 (source
35868 (origin
35869 (method git-fetch)
35870 (uri (git-reference
35871 (url "https://github.com/ilanschnell/bsdiff4")
35872 (commit version)))
35873 (file-name (git-file-name name version))
35874 (sha256
35875 (base32 "1s64xmgcyzp7x6rcyfcryyz4mv5qm8l7s365rgbi6qfpnblnby0c"))))
35876 (build-system pyproject-build-system)
35877 (arguments
35878 (list
35879 #:test-flags #~(list "--pyargs" "bsdiff4")))
35880 (native-inputs
35881 (list python-pytest
35882 python-setuptools
35883 python-wheel))
35884 (home-page "https://github.com/ilanschnell/bsdiff4")
35885 (synopsis "Binary diff and patch using the BSDIFF4 format")
35886 (description
35887 "This package provides a Python library for the @code{bsdiff} binary diff
35888utility. It also provides two command-line tools, @code{bsdiff4} and
35889@code{bspatch4}.")
35890 (license license:bsd-2)))
35891
35892(define-public python-mpv
35893 (package
35894 (name "python-mpv")
35895 (version "1.0.8")
35896 (source
35897 (origin
35898 (method git-fetch)
35899 (uri (git-reference
35900 (url "https://github.com/jaseg/python-mpv")
35901 (commit (string-append "v" version))))
35902 (file-name (git-file-name name version))
35903 (sha256
35904 (base32 "04azy5wa2n8pa21z6lz1p1p0vy7flaqm8ypy46jb77gig2g50xrh"))))
35905 (build-system pyproject-build-system)
35906 (arguments
35907 (list #:phases
35908 #~(modify-phases %standard-phases
35909 (add-before 'build 'patch-reference-to-mpv
35910 (lambda* (#:key inputs #:allow-other-keys)
35911 ;; Without an absolute path it is not able find and load libmpv.
35912 (substitute* "mpv.py"
35913 (("sofile = .*")
35914 (format #f "sofile = '~a/lib/libmpv.so'~%"
35915 #$(this-package-input "mpv"))))))
35916 (add-before 'check 'prepare-for-tests
35917 (lambda _
35918 ;; Fontconfig throws errors when it has no cache dir to use.
35919 (setenv "XDG_CACHE_HOME" (getcwd))
35920 ;; Some tests fail without a writable and readable HOME.
35921 (setenv "HOME" (getcwd))
35922 (setenv "PY_MPV_SKIP_TESTS"
35923 "test_wait_for_property_event_overflow"))))))
35924 (native-inputs
35925 (list python-pytest
35926 python-pyvirtualdisplay
35927 python-setuptools
35928 xorg-server-for-tests))
35929 (inputs (list mpv))
35930 (propagated-inputs (list python-pillow)) ;for raw screenshots
35931 (home-page "https://github.com/jaseg/python-mpv")
35932 (synopsis "Python interface to the mpv media player")
35933 (description
35934 "python-mpv is a ctypes-based python interface to the mpv media player.
35935It gives you more or less full control of all features of the player, just
35936as the lua interface does.")
35937 ;; From the project's README:
35938 ;; python-mpv inherits the underlying libmpv's license, which can be either
35939 ;; GPLv2 or later (default) or LGPLv2.1 or later. For details, see the mpv
35940 ;; copyright page.
35941 (license license:gpl2+)))
35942
35943(define-public python-biblib
35944 (let ((upstream-version "0.1.0")
35945 (commit "ab0e857b9198fe425ec9b02fcc293b5d9fd0c406")
35946 (revision "1"))
35947 (package
35948 (name "python-biblib")
35949 (version (git-version upstream-version revision commit))
35950 (source
35951 (origin
35952 (method git-fetch)
35953 (uri (git-reference
35954 (url "https://github.com/aclements/biblib")
35955 (commit commit)))
35956 (sha256
35957 (base32 "1ym1gwxys9gl5a7fjs6xh5z9w50pnq4z3rs6fx7kpv78hlrbjlip"))
35958 (file-name (git-file-name name version))))
35959 (build-system pyproject-build-system)
35960 (arguments (list #:tests? #f)) ; No tests upstream.
35961 (native-inputs (list python-setuptools))
35962 (home-page "https://github.com/aclements/biblib")
35963 (synopsis "BibTeX parsing and transformation library")
35964 (description
35965 "Biblib provides a simple, standalone Python 3 package for parsing
35966BibTeX bibliographic databases, as well as algorithms for manipulating BibTeX
35967entries in BibTeX-y ways. Biblib's parser is derived directly from the WEB
35968source code for BibTeX and hence (barring bugs in translation) should be fully
35969compatible with BibTeX's own parser.")
35970 ;; N.B. It seems the parser was translated from WEB by hand: this
35971 ;; package does not contain any generated files.
35972 (license license:expat))))
35973
35974(define-public python-cyclic
35975 (package
35976 (name "python-cyclic")
35977 (version "1.0.0")
35978 (source
35979 (origin
35980 (method git-fetch)
35981 (uri (git-reference
35982 (url "https://github.com/neurobin/cyclic")
35983 ;; Release is not tagged on github, see
35984 ;; https://github.com/neurobin/cyclic/issues/2
35985 (commit "bf616c47ea49a43500ea55a1e6f4890323be0679")))
35986 (file-name (git-file-name name version))
35987 (sha256
35988 (base32 "0r8zzjdv70fpxssxps62rlgpii8fr9gh8gykdygqn6mkdnfjwgjc"))))
35989 (build-system pyproject-build-system)
35990 (arguments (list #:test-backend #~'unittest))
35991 (native-inputs (list python-setuptools))
35992 (home-page "https://github.com/neurobin/cyclic")
35993 (synopsis "Handle cyclic relations")
35994 (description "This package handles cyclic relations compared by value.")
35995 (license license:bsd-3)))
35996
35997(define-public python-rcslice
35998 (package
35999 (name "python-rcslice")
36000 (version "1.1.0")
36001 (source
36002 (origin
36003 (method git-fetch)
36004 (uri (git-reference
36005 (url "https://github.com/neurobin/rcslice")
36006 ;; Releases are not tagged on github, see
36007 ;; https://github.com/neurobin/rcslice/issues/2
36008 (commit "1e1ef42cd262db76b67ded430630d5b499790f42")))
36009 (file-name (git-file-name name version))
36010 (sha256
36011 (base32 "1lmhcgghh60kvdlx0cin1phhgfy9jivc6l0mb4ibnpa1x1md0zvv"))))
36012 (build-system pyproject-build-system)
36013 (arguments (list #:test-backend #~'unittest))
36014 (native-inputs (list python-setuptools))
36015 (home-page "https://github.com/neurobin/rcslice")
36016 (synopsis "Slice a list of sliceables")
36017 (description
36018 "This package provides Python module to slice a list of sliceables (1
36019indexed, both start and end index are inclusive). Helps to slice file content
36020line by line or column by column or a combination of both.")
36021 (license license:bsd-3)))
36022
36023(define-public python-rpds-py
36024 (package
36025 (name "python-rpds-py")
36026 (version "0.10.6")
36027 (source (origin
36028 (method url-fetch)
36029 (uri (pypi-uri "rpds_py" version))
36030 (sha256
36031 (base32
36032 "0l5slkvhq2vf64mapimmj6ginsv01mc4niyj90vvz3assq4agrac"))))
36033 (build-system cargo-build-system)
36034 (arguments
36035 (list
36036 #:imported-modules `(,@%cargo-build-system-modules
36037 ,@%pyproject-build-system-modules)
36038 #:modules '((guix build cargo-build-system)
36039 ((guix build pyproject-build-system) #:prefix py:)
36040 (guix build utils))
36041 #:phases
36042 #~(modify-phases %standard-phases
36043 (add-after 'build 'build-python-module
36044 (assoc-ref py:%standard-phases 'build))
36045 (add-after 'build-python-module 'install-python-module
36046 (assoc-ref py:%standard-phases 'install)))
36047 #:install-source? #false))
36048 (inputs
36049 (cons maturin (cargo-inputs 'python-rpds-py)))
36050 (native-inputs
36051 (list python-wrapper))
36052 (home-page "https://github.com/crate-py/rpds")
36053 (synopsis "Bindings to Rust rpds for persistent data structures")
36054 (description "This package provides Python bindings to the Rust rpds crate
36055for persistent data structures. It was written initially to support replacing
36056@code{python-pyrsistent}.")
36057 (license license:expat)))
36058
36059(define-public python-nanoid
36060 (let ((commit "061f9a598f310b0e2e91b9ed6ce725a22770da64")
36061 (revision "0"))
36062 (package
36063 (name "python-nanoid")
36064 (version "2.0.0")
36065 (source
36066 (origin
36067 (method git-fetch)
36068 (uri
36069 (git-reference
36070 (url "https://github.com/puyuan/py-nanoid")
36071 (commit commit)))
36072 (file-name (git-file-name name commit))
36073 (sha256
36074 (base32 "0y1bcw0h27g8rkqq7cp33ywn0i0lp0q3rjixzkh4191y1dp9yf8s"))))
36075 (build-system pyproject-build-system)
36076 (native-inputs (list python-pytest python-setuptools))
36077 (home-page "https://github.com/puyuan/py-nanoid")
36078 (synopsis "Unique string ID generator")
36079 (description
36080 "This package provides a tiny, secure, URL-friendly, unique string ID
36081generator for Python.")
36082 (license license:expat))))
36083
36084(define-public python-misc-utils
36085 (package
36086 (name "python-misc-utils")
36087 (version "0.28")
36088 (source
36089 (origin
36090 (method git-fetch)
36091 (uri (git-reference
36092 (url "https://github.com/davidel/py_misc_utils")
36093 (commit version)))
36094 (file-name (git-file-name name version))
36095 (sha256
36096 (base32 "0zk3lr9xviqqsvag0is91p2f70w8qlmvk25pp2xprrh30fhxfa9g"))))
36097 (build-system pyproject-build-system)
36098 (arguments
36099 (list
36100 #:tests? #f ; see https://github.com/davidel/py_misc_utils/issues/1
36101 #:test-backend #~'custom
36102 #:test-flags #~(list "test/test_runner.py")))
36103 (propagated-inputs
36104 (list python-numpy python-pandas python-psutil python-pyyaml))
36105 (native-inputs (list python-setuptools))
36106 (home-page "https://github.com/davidel/py_misc_utils")
36107 (synopsis "Collection of Python utilities")
36108 (description "This package provides a collection of Python miscellaneous
36109utility tools mainly used by other projects of the same author.")
36110 (license license:asl2.0)))
36111
36112(define-public python-misskey
36113 (package
36114 (name "python-misskey")
36115 (version "4.1.0")
36116 (source (origin
36117 (method git-fetch)
36118 (uri (git-reference
36119 (url "https://github.com/YuzuRyo61/Misskey.py")
36120 (commit (string-append "v" version))))
36121 (file-name (git-file-name name version))
36122 (sha256
36123 (base32
36124 "0rma8pdsjsy00cg76q6q4qki4xpldykmz1m6dl3w2bjjxfhlbaz5"))))
36125 (build-system pyproject-build-system)
36126 (arguments (list #:tests? #f)) ;needs network
36127 (native-inputs (list python-setuptools))
36128 (propagated-inputs (list python-requests))
36129 (home-page "https://misskeypy.readthedocs.io")
36130 (synopsis "Python bindings for Misskey's API")
36131 (description
36132 "This package provides access to Misskey's API. Misskey is a SNS
36133platform using the ActivityPub protocol.")
36134 (license license:expat)))
36135
36136(define-public python-lief
36137 (package
36138 (name "python-lief")
36139 (version "0.17.6")
36140 (source
36141 (origin
36142 (method git-fetch)
36143 (uri (git-reference
36144 (url "https://github.com/lief-project/LIEF")
36145 (commit version)))
36146 (file-name (git-file-name name version))
36147 (sha256
36148 (base32 "1k3rl02ap6ldn8zdrj1c1vdxf4wx8jv9x5bgrlgph6h8hhc8miar"))))
36149 (build-system pyproject-build-system)
36150 (arguments
36151 (list
36152 ;; TODO: Tests neeed some setup, see:
36153 ;; <.github/workflows/linux-x86-64.yml>.
36154 #:tests? #f
36155 #:phases
36156 #~(modify-phases %standard-phases
36157 (add-before 'build 'change-directory
36158 (lambda _
36159 (chdir "api/python"))))))
36160 (native-inputs
36161 (list ninja
36162 python-pydantic
36163 python-scikit-build-core
36164 python-tomli))
36165 (home-page "https://github.com/lief-project/LIEF")
36166 (synopsis "Library to instrument executable formats")
36167 (description
36168 "@code{python-lief} is a cross platform library which can parse, modify
36169and abstract ELF, PE and MachO formats.")
36170 (license license:asl2.0)))
36171
36172(define-public python-eris
36173 (package
36174 (name "python-eris")
36175 (version "1.0.0")
36176 (source
36177 (origin
36178 (method url-fetch)
36179 (uri (pypi-uri "eris" version))
36180 (sha256
36181 (base32 "07a69y8w8n0zvdcd7qfcjf2s9hnd5jlbdl57g39ds2bxprzyc8va"))))
36182 (build-system pyproject-build-system)
36183 (arguments
36184 ;; No tests in PyPI, tests miss data files in Git:
36185 ;; - tests/test-vectors/test_encode
36186 ;; - tests/test-vectors/test_decode
36187 (list #:tests? #f))
36188 (native-inputs
36189 (list python-setuptools
36190 python-wheel))
36191 (propagated-inputs
36192 (list python-aiocoap
36193 python-pycryptodome))
36194 (home-page "https://codeberg.org/eris/python-eris")
36195 (synopsis "Python implementation of ERIS")
36196 (description
36197 "Python implementation of the @acronym{ERIS, Encoding for Robust Immutable
36198Storage}.")
36199 (license license:lgpl3+)))
36200
36201(define-public python-pymonad
36202 (package
36203 (name "python-pymonad")
36204 (version "2.4.0")
36205 (source
36206 (origin
36207 (method git-fetch)
36208 (uri (git-reference
36209 (url "https://github.com/jasondelaat/pymonad")
36210 (commit (string-append "v" version))))
36211 (file-name (git-file-name name version))
36212 (sha256
36213 (base32 "0ci1mpydldiyg9qv6d19ljhfh7wxlrl2k4mlvqd9bm7dqvpdjsx7"))))
36214 (build-system pyproject-build-system)
36215 (arguments
36216 (list
36217 #:phases
36218 #~(modify-phases %standard-phases
36219 (replace 'check
36220 (lambda* (#:key tests? #:allow-other-keys)
36221 (when tests?
36222 (invoke "./run_tests.sh")))))))
36223 (native-inputs (list python-setuptools))
36224 (home-page "https://github.com/jasondelaat/pymonad")
36225 (synopsis "Monadic style functional programming for Python")
36226 (description "@code{python-pymonad} implements data structures typically
36227available in purely functional or functional first programming languages such
36228as Haskell and F#. Included are
36229
36230@itemize
36231@item Monad and Monoid data types with several common monads such as Maybe and
36232State
36233@item Useful tools such as the @code{@@curry} decorator for defining curried
36234functions
36235@item Type annotations to help ensure correct usage
36236@end itemize")
36237 (license license:bsd-3)))
36238
36239(define-public python-markdown-strings
36240 (package
36241 (name "python-markdown-strings")
36242 (version "3.3.0")
36243 (source
36244 (origin
36245 (method git-fetch)
36246 (uri (git-reference
36247 (url "https://github.com/awesmubarak/markdown_strings.git")
36248 (commit (string-append "v" version))))
36249 (file-name (git-file-name name version))
36250 (sha256
36251 (base32 "0064ni7s3k8hqw61wi9m31icxp61f8adhija2qsp46hclcwx7vz2"))))
36252 (build-system pyproject-build-system)
36253 (arguments
36254 (list
36255 #:test-backend #~'custom
36256 #:test-flags #~(list "test.py")))
36257 (native-inputs (list python-setuptools))
36258 (propagated-inputs (list python-lxml python-six))
36259 (home-page "https://github.com/awesmubarak/markdown_strings")
36260 (synopsis "Python library to create markdown-formatted text")
36261 (description "This package allows the programmatic creation of
36262markdown-compliant strings.")
36263 (license license:expat)))
36264
36265(define-public python-icecream
36266 (package
36267 (name "python-icecream")
36268 (version "2.1.9")
36269 (source
36270 (origin
36271 (method git-fetch)
36272 (uri (git-reference
36273 (url "https://github.com/gruns/icecream")
36274 (commit (string-append "v" version))))
36275 (file-name (git-file-name name version))
36276 (sha256
36277 (base32 "1scxnjnnapqwzvhii07ax72yp6cj9ksn76bpnw04hg2i92snc3g2"))))
36278 (build-system pyproject-build-system)
36279 (native-inputs
36280 (list python-hypothesis
36281 python-pytest
36282 python-setuptools))
36283 (propagated-inputs
36284 (list python-asttokens
36285 python-colorama
36286 python-executing
36287 python-pygments))
36288 (home-page "https://github.com/gruns/icecream")
36289 (synopsis
36290 "Single function call to debug variables, expressions, and program execution")
36291 (description
36292 "This tool lets you debug variables, expressions, and program execution
36293with one function call. IceCream makes print debugging a little sweeter.")
36294 (license license:expat)))
36295
36296(define-public python-icegrams
36297 (package
36298 (name "python-icegrams")
36299 (version "1.1.6")
36300 (source
36301 (origin
36302 (method git-fetch)
36303 (uri (git-reference
36304 ;; no tests in the PyPI archive
36305 (url "https://github.com/mideind/Icegrams")
36306 (commit (string-append version))))
36307 (file-name (git-file-name name version))
36308 (sha256
36309 (base32 "0kzj3k1rl11l66l2xlqilx576hgknb5fd7im96mqjq34ykm70i6f"))))
36310 (build-system pyproject-build-system)
36311 (arguments
36312 (list
36313 #:test-flags
36314 #~(list
36315 ;; two tests fail because of a hardcoded file path in the package's source code
36316 ;; this should be fixed upstream instead of with a substitution here
36317 "-k"
36318 (string-append "not test_trigrams" " and not test_word_ids")
36319 "test/test_ngrams.py")))
36320 (propagated-inputs (list python-cffi))
36321 (native-inputs (list python-pytest python-setuptools
36322 python-setuptools-scm python-wheel))
36323 (home-page "https://github.com/mideind/Icegrams")
36324 (synopsis "Trigram statistics for Icelandic")
36325 (description
36326 "Icegrams is a Python package that encapsulates a large trigram
36327library for Icelandic. You can use Icegrams to obtain probabilities (relative
36328frequencies) of over a million different unigrams (single words or tokens), or of
36329bigrams (pairs of two words or tokens), or of trigrams. Icegrams is useful for
36330instance in spelling correction, predictive typing, to help disabled people
36331write text fast, and for various text generation, statistics, and modeling tasks.")
36332 (license license:expat)))
36333
36334(define-public python-sqlglot
36335 (package
36336 (name "python-sqlglot")
36337 (version "26.33.0")
36338 (source
36339 (origin
36340 (method url-fetch)
36341 (uri (pypi-uri "sqlglot" version))
36342 (sha256
36343 (base32 "0wqdpix71bzx61qwk3mi7v42afmrj03dg81sykgdclgsg63jf5r8"))))
36344 (build-system pyproject-build-system)
36345 (arguments
36346 (list
36347 #:test-backend #~'unittest
36348 #:phases
36349 #~(modify-phases %standard-phases
36350 (add-before 'check 'pre-check
36351 (lambda _
36352 (setenv "SQLGLOTRS_TOKENIZER" "0"))))))
36353 (native-inputs
36354 (list python-duckdb
36355 python-pytz
36356 python-pandas
36357 python-setuptools
36358 python-setuptools-scm
36359 python-tzdata))
36360 (home-page "https://sqlglot.com/")
36361 (synopsis "Python SQL Parser and Transpiler")
36362 (description
36363 "SQLGlot is a no-dependency SQL parser, transpiler, optimizer, and
36364engine. It can be used to format SQL or translate between 31 different
36365dialects like DuckDB, Presto / Trino, Spark / Databricks, Snowflake, and
36366BigQuery. It aims to read a wide variety of SQL inputs and output
36367syntactically and semantically correct SQL in the targeted dialects.")
36368 (license license:expat)))
36369
36370(define-public python-sqlglotrs
36371 (package
36372 (inherit python-sqlglot)
36373 (name "python-sqlglotrs")
36374 (version "0.6.1")
36375 (source
36376 (origin
36377 (method url-fetch)
36378 (uri (pypi-uri "sqlglotrs" version))
36379 (sha256
36380 (base32 "1q8ii7fbgl2b2smi80bn5ifbs5xfzrkqqb4r1j5xx2k98jjsff7n"))))
36381 (build-system cargo-build-system)
36382 (arguments
36383 (list
36384 #:install-source? #false
36385 #:tests? #f ;no tests
36386 #:imported-modules `(,@%cargo-build-system-modules
36387 ,@%pyproject-build-system-modules)
36388 #:modules '((guix build cargo-build-system)
36389 ((guix build pyproject-build-system) #:prefix py:)
36390 (guix build utils))
36391 #:phases
36392 #~(modify-phases %standard-phases
36393 (add-after 'build 'build-python-module
36394 (assoc-ref py:%standard-phases 'build))
36395 (add-after 'build-python-module 'install-python-module
36396 (assoc-ref py:%standard-phases 'install))
36397 (add-after 'install-python-module 'add-install-to-pythonpath
36398 (assoc-ref py:%standard-phases 'add-install-to-pythonpath)))))
36399 (native-inputs
36400 (list maturin
36401 python-wrapper))
36402 (inputs
36403 (cargo-inputs 'python-sqlglotrs))))
36404
36405(define-public python-sqltrie
36406 (package
36407 (name "python-sqltrie")
36408 (version "0.11.2")
36409 (home-page "https://github.com/iterative/sqltrie/")
36410 (source
36411 (origin
36412 (method url-fetch)
36413 (uri (pypi-uri "sqltrie" version))
36414 (sha256
36415 (base32 "1ninmia5ka1nnv4gxqacvbmkfxwc7dilw141rxxk9zmbnf4p1x2d"))))
36416 (build-system pyproject-build-system)
36417 (arguments
36418 (list
36419 #:test-flags
36420 #~(list "--ignore=tests/benchmarks/"
36421 ;; <https://github.com/pyinstaller/pyinstaller> is not packaged
36422 ;; yet in Guix.
36423 "--ignore=src/sqltrie/__pyinstaller")))
36424 (native-inputs
36425 (list python-pytest
36426 python-pytest-mock
36427 python-pytest-sugar
36428 python-setuptools
36429 python-setuptools-scm))
36430 (propagated-inputs
36431 (list python-attrs
36432 python-orjson
36433 python-pygtrie))
36434 (synopsis "SQL-based prefix tree for Python")
36435 (description
36436 "Sqltrie is a SQL-based prefix tree inspired by pygtrie and
36437python-diskcache.")
36438 (license license:asl2.0)))
36439
36440(define-public python-socksipy-branch
36441 (package
36442 (name "python-socksipy-branch")
36443 (version "1.01")
36444 (source
36445 (origin
36446 (method url-fetch)
36447 (uri (pypi-uri "SocksiPy-branch" version))
36448 (sha256
36449 (base32 "01l41v4g7fy9fzvinmjxy6zcbhgqaif8dhdqm4w90fwcw9h51a8p"))))
36450 (build-system pyproject-build-system)
36451 (arguments (list #:tests? #f)) ; There are no tests
36452 (native-inputs (list python-setuptools))
36453 (home-page "https://code.google.com/archive/p/socksipy-branch/")
36454 (synopsis "Python SOCKS module")
36455 (description
36456 "SocksiPy - A Python SOCKS client module. It provides a socket-like
36457interface that supports connections to any TCP service through the use of a
36458SOCKS4, SOCKS5 or HTTP proxy. The original version was developed by Dan Haim,
36459this is a branch created by Mario Vilas to address some open issues,as the
36460original project seems to have been abandoned circa 2007.")
36461 (license license:bsd-3)))
36462
36463(define-public python-socksipychain
36464 (package
36465 (name "python-socksipychain")
36466 (properties '((commit . "570c75c55661db175bd733996ed1ab68fc4e3b33")
36467 (revision . "0")))
36468 (version (git-version "2.1.3"
36469 (assoc-ref properties 'revision)
36470 (assoc-ref properties 'commit)))
36471 (source
36472 (origin
36473 (method git-fetch)
36474 (uri (git-reference
36475 (url "https://github.com/pagekite/PySocksipyChain")
36476 (commit (assoc-ref properties 'commit))))
36477 (file-name (git-file-name name version))
36478 (sha256
36479 (base32 "1fi82id1qgh63wm8k1gcxpkaa8ic0mwliq7x3iy9lxihaqmr0zww"))))
36480 (build-system pyproject-build-system)
36481 (arguments (list #:tests? #f)) ; Tests try to access the network.
36482 (native-inputs (list python-setuptools))
36483 (home-page "http://pagekite.net/wiki/Floss/PySocksipyChain/")
36484 (synopsis "Python SOCKS module with chained proxies support")
36485 (description
36486 "SocksiPyChain is a modified version of the SocksiPy SOCKS module, which
36487adds support for arbitrary chaining of proxy servers and various modes of
36488TLS/SSL encryption. It was developed for use in PageKite, and also includes
36489a simple netcat replacement with chaining support.")
36490 (license license:bsd-3)))
36491
36492(define-public python-sortedcollections
36493 (package
36494 (name "python-sortedcollections")
36495 (version "2.1.0")
36496 (source
36497 (origin
36498 (method git-fetch)
36499 (uri (git-reference
36500 (url "https://github.com/grantjenks/python-sortedcollections")
36501 (commit (string-append "v" version))))
36502 (file-name (git-file-name name version))
36503 (sha256
36504 (base32 "1y2xsbh31jp9fsjy53g5ma974z7a9vcds6ij1vlh00nllzqlwihs"))))
36505 (build-system pyproject-build-system)
36506 (native-inputs (list python-setuptools python-pytest python-wheel))
36507 (propagated-inputs (list python-sortedcontainers))
36508 (home-page "https://www.grantjenks.com/docs/sortedcollections/")
36509 (synopsis "Python Sorted Collections")
36510 (description "Sorted Collections is a Python sorted collections library.")
36511 (license license:asl2.0)))
36512
36513(define-public python-sortedcontainers
36514 (package
36515 (name "python-sortedcontainers")
36516 (version "2.4.0")
36517 (source
36518 (origin
36519 (method git-fetch) ;no tests in PyPI archive
36520 (uri (git-reference
36521 (url "https://github.com/grantjenks/python-sortedcontainers")
36522 (commit (string-append "v" version))))
36523 (file-name (git-file-name name version))
36524 (sha256
36525 (base32 "190w2mvgvx0r5k0r8117slq48nh6k7xidbpsrp02wnmcd0rx45k1"))))
36526 (build-system pyproject-build-system)
36527 (arguments
36528 (list #:test-flags #~(list "--pyargs" "sortedcontainers")))
36529 (native-inputs
36530 (list python-pytest-bootstrap python-setuptools))
36531 (home-page "https://grantjenks.com/docs/sortedcontainers/")
36532 (synopsis "Sorted List, Sorted Dict, Sorted Set")
36533 (description
36534 "This package provides a sorted collections library, written in
36535pure-Python.")
36536 (license license:asl2.0)))
36537
36538(define-public python-soupsieve
36539 (package
36540 (name "python-soupsieve")
36541 (version "2.7")
36542 (source
36543 (origin
36544 (method url-fetch)
36545 (uri (pypi-uri "soupsieve" version))
36546 (sha256
36547 (base32 "0shjmvk8yz2ljc16pmizg16bqhk1i8n5al27mlp6sa16d6djya5d"))))
36548 (build-system pyproject-build-system)
36549 (native-inputs
36550 (list python-beautifulsoup4-bootstrap
36551 python-hatchling
36552 python-pytest))
36553 (home-page "https://github.com/facelessuser/soupsieve")
36554 (synopsis "CSS selector library")
36555 (description
36556 "Soup Sieve is a CSS selector library designed to be used with Beautiful
36557Soup 4. It aims to provide selecting, matching, and filtering using modern
36558CSS selectors. Soup Sieve currently provides selectors from the CSS level 1
36559specifications up through the latest CSS level 4 drafts and beyond (though
36560some are not yet implemented).")
36561 (license license:expat)))
36562
36563(define-public python-spectra
36564 (package
36565 (name "python-spectra")
36566 (version "0.1.0")
36567 (source
36568 (origin
36569 (method url-fetch)
36570 (uri (pypi-uri "spectra" version))
36571 (sha256
36572 (base32 "0gva48a1rn5yxj6dgy76dnndqaf09k5q2l9r41h2a66b84rf6c3a"))))
36573 (build-system pyproject-build-system)
36574 (propagated-inputs
36575 (list python-colormath2))
36576 (native-inputs
36577 (list python-pytest python-setuptools python-wheel))
36578 (home-page "https://github.com/jsvine/spectra")
36579 (synopsis "Color scales and color conversion")
36580 (description
36581 "This package provides a Python library intended to make color math,
36582color scales, and color space conversion easy. It has support for:
36583
36584@enumerate
36585@item Color scales
36586@item Color ranges
36587@item Color blending
36588@item Brightening/darkening colors
36589@item Saturating/desaturating colors
36590@item Conversion to/from multiple color spaces.
36591@end enumerate\n")
36592 (license license:expat)))
36593
36594(define-public python-speedy-antlr-tool
36595 (package
36596 (name "python-speedy-antlr-tool")
36597 (version "1.4.3")
36598 (source
36599 (origin
36600 (method git-fetch)
36601 (uri (git-reference
36602 (url "https://github.com/amykyta3/speedy-antlr-tool")
36603 (commit (string-append "v" version))))
36604 (file-name (git-file-name name version))
36605 (sha256
36606 (base32 "1bj67n3f6admjc7mfgnksb35s983inw2mh27d7wfp1xf697h0yp3"))))
36607 (build-system pyproject-build-system)
36608 (arguments '(#:tests? #f)) ;no test
36609 (native-inputs (list python-setuptools python-setuptools-scm))
36610 (propagated-inputs (list python-antlr4-runtime python-jinja2))
36611 (home-page "https://speedy-antlr-tool.readthedocs.io")
36612 (synopsis "Generate ANTLR parser as Python extension module")
36613 (description
36614 "This tool generates a Python extension that runs your parser
36615using ANTLR's C++ target, and then translates the parsed tree
36616back into Python.")
36617 (license license:bsd-3)))
36618
36619(define-public python-speg
36620 (package
36621 (name "python-speg")
36622 ;; 0.3 was released in 2017, the latest change on master HEAD is from 2018.
36623 (properties '((commit . "877acddfd5ac5ae8b4a4592d045e74e108477643")
36624 (revision . "0")))
36625 (version (git-version "0.3"
36626 (assoc-ref properties 'revision)
36627 (assoc-ref properties 'commit)))
36628 (source
36629 (origin
36630 (method git-fetch)
36631 (uri (git-reference
36632 (url "https://github.com/avakar/speg")
36633 (commit (assoc-ref properties 'commit))))
36634 (file-name (git-file-name name version))
36635 (sha256
36636 (base32 "0lhms1sfvmnplcwq8qwwvkrcz4sgi9yprvrkjz7p84fjhk86n4sb"))))
36637 (build-system pyproject-build-system)
36638 (native-inputs
36639 (list python-pytest
36640 python-setuptools))
36641 (propagated-inputs
36642 (list python-six))
36643 (home-page "https://github.com/avakar/speg")
36644 (synopsis "PEG-based parser interpreter with memoization")
36645 (description "This package is a PEG-based parser and interpreter with
36646memoization.")
36647 (license license:expat)))
36648
36649(define-public python-spinners
36650 (package
36651 (name "python-spinners")
36652 (version "0.0.24")
36653 (source
36654 (origin
36655 (method url-fetch)
36656 (uri (pypi-uri "spinners" version))
36657 (sha256
36658 (base32 "0zz2z6dpdjdq5z8m8w8dfi8by0ih1zrdq0caxm1anwhxg2saxdhy"))))
36659 (build-system pyproject-build-system)
36660 (arguments
36661 (list #:tests? #f)) ;no tests in PyPI archive, tests depend on Nose
36662 (native-inputs
36663 (list python-setuptools))
36664 (home-page "https://github.com/manrajgrover/py-spinners")
36665 (synopsis "Python library with graphical spinners for the terminal")
36666 (description
36667 "Spinners is a Python library that contains graphical spinners that can
36668be displayed terminal.")
36669 (license license:expat)))
36670
36671(define-public python-sre-yield
36672 (package
36673 (name "python-sre-yield")
36674 (version "1.2")
36675 (source
36676 (origin
36677 (method url-fetch)
36678 (uri (pypi-uri "sre_yield" version))
36679 (sha256
36680 (base32 "12kv3mvdr22g2v9wfr5aabh1f58s817dbh8mrlfzxzxs7hm1lkz9"))))
36681 (build-system pyproject-build-system)
36682 (arguments
36683 (list #:test-backend #~'unittest))
36684 (native-inputs
36685 (list python-setuptools))
36686 (home-page "https://github.com/google/sre_yield")
36687 (synopsis "Expands a regular expression to its possible matches")
36688 (description
36689 "The goal of sre_yield is to efficiently generate all values that can
36690match a given regular expression, or count possible matches efficiently. It
36691uses the parsed regular expression, so you get a much more accurate result
36692than trying to just split strings.")
36693 (license license:asl2.0)))
36694
36695(define-public python-srsly
36696 ;; TODO: Unbundle libraries https://github.com/explosion/srsly/pull/120
36697 ;; srsly.msgpack, srsly.cloudpickle, srsly.ruamel_yaml, srsly.ujson should
36698 ;; be replaced with msgpack, cloudpickle, ruamel.yaml, and ujson.
36699 (package
36700 (name "python-srsly")
36701 (version "2.5.3")
36702 (source
36703 (origin
36704 (method git-fetch)
36705 (uri (git-reference
36706 (url "https://github.com/explosion/srsly")
36707 (commit (string-append "release-v" version))))
36708 (file-name (git-file-name name version))
36709 (sha256
36710 (base32 "1fjd6j540k5i2yrib41k99j05qpa281470birqgcn82dxg9v16vm"))))
36711 (build-system pyproject-build-system)
36712 (arguments
36713 (list
36714 ;; tests: 741 passed, 4 skipped, 22 xfailed
36715 #:test-flags
36716 #~(list "--pyargs" "srsly")
36717 #:phases
36718 #~(modify-phases %standard-phases
36719 (add-after 'unpack 'remove-broken-tests
36720 (lambda _
36721 ;; Tests depend on removed in 2.5.3 module
36722 ;; "srsly/cloudpickle/compat.py".
36723 ;; See: <https://github.com/explosion/srsly/issues/121>.
36724 (delete-file "srsly/tests/cloudpickle/cloudpickle_file_test.py")
36725 (delete-file "srsly/tests/cloudpickle/cloudpickle_test.py")))
36726 (add-before 'check 'remove-local-source
36727 (lambda _
36728 (delete-file-recursively "srsly"))))))
36729 (native-inputs
36730 (list python-cython
36731 python-mock
36732 python-numpy
36733 python-psutil
36734 python-pytest
36735 python-pytest-timeout
36736 python-setuptools))
36737 (propagated-inputs
36738 (list python-catalogue))
36739 (home-page "https://github.com/explosion/srsly")
36740 (synopsis "Serialization utilities for Python")
36741 (description "This package bundles some of the best Python serialization
36742libraries into one standalone package, with a high-level API that makes it
36743easy to write code that's correct across platforms and Pythons.")
36744 (license license:expat)))
36745
36746(define-public python-srt
36747 (package
36748 (name "python-srt")
36749 (version "3.5.3")
36750 (source
36751 (origin
36752 (method url-fetch)
36753 (uri (pypi-uri "srt" version))
36754 (sha256
36755 (base32 "1h0cxlp66i6wlq3g6dg1f1nw0sipm9nfsy7qs47p9w548d833128"))))
36756 (build-system pyproject-build-system)
36757 (native-inputs
36758 (list python-pytest
36759 python-setuptools
36760 python-wheel))
36761 (home-page "https://github.com/cdown/srt")
36762 (synopsis "SRT parsing library")
36763 (description
36764 "This package provides a Python library for parsing, modifying, and
36765composing subtitles in the SRT file format.")
36766 (license license:expat)))
36767
36768(define-public python-sshpubkeys
36769 (package
36770 (name "python-sshpubkeys")
36771 (version "3.2.0")
36772 (source
36773 (origin
36774 (method git-fetch)
36775 (uri (git-reference
36776 (url "https://github.com/ojarva/python-sshpubkeys")
36777 (commit (string-append "v" version))))
36778 (file-name (git-file-name name version))
36779 (sha256
36780 (base32 "0n7bjq8wifdw09mxkfzdkybij0csqjcifyxz8dbxy2iffjv5mqnq"))))
36781 (build-system pyproject-build-system)
36782 (arguments
36783 (list #:tests? #f)) ; XXX: All tests fail
36784 (native-inputs
36785 (list python-setuptools
36786 python-wheel))
36787 (propagated-inputs
36788 (list python-cryptography
36789 python-ecdsa))
36790 (home-page "https://github.com/ojarva/python-sshpubkeys")
36791 (synopsis "OpenSSH public key parser")
36792 (description
36793 "This package provides a library for parsing and validating OpenSSH
36794public key files.")
36795 (license license:bsd-3)))
36796
36797(define-public python-sshtunnel
36798 (let ((commit "dc0732884379a19a21bf7a49650d0708519ec54f")
36799 (revision "0"))
36800 (package
36801 (name "python-sshtunnel")
36802 (version (git-version "0.4.0" revision commit))
36803 (source
36804 (origin
36805 (method git-fetch)
36806 (uri (git-reference
36807 (url "https://github.com/pahaz/sshtunnel")
36808 (commit commit)))
36809 (file-name (git-file-name name version))
36810 (sha256
36811 (base32 "0fzq7pbqa6fjamzp61gjpd2hzph2ag7r507dlwpqilp6w8ipz49a"))
36812 (patches (search-patches "python-sshtunnel-pep518.patch"))))
36813 (build-system pyproject-build-system)
36814 (arguments
36815 (list
36816 #:phases
36817 #~(modify-phases %standard-phases
36818 (add-after 'unpack 'remove-deprecated-dsskey
36819 (lambda _
36820 (substitute* "sshtunnel.py"
36821 (("'dsa': paramiko\\.DSSKey,")
36822 "")
36823 (("paramiko\\.DSSKey, ")
36824 "")))))))
36825 (propagated-inputs (list python-paramiko))
36826 (native-inputs
36827 (list openssh python-mock python-pytest python-setuptools))
36828 (home-page "https://github.com/pahaz/sshtunnel")
36829 (synopsis "Python SSH tunnels library")
36830 (description
36831 "@code{sshtunnel} is a Python module for easily creating SSH tunnels
36832in the background, using Python.")
36833 (license license:expat))))
36834
36835(define-public python-stack-data
36836 (package
36837 (name "python-stack-data")
36838 (version "0.6.3")
36839 (source
36840 (origin
36841 (method url-fetch)
36842 (uri (pypi-uri "stack_data" version))
36843 (sha256
36844 (base32 "1fgh900z6g1amb2f2ql461c1y8lazymxi7nqvk8xri7ywj6pfsl3"))))
36845 (build-system pyproject-build-system)
36846 (arguments
36847 (list
36848 #:test-flags
36849 #~(list "-k" (string-join
36850 ;; XXX: Tests fail with HTML diff.
36851 (list "not test_executing_style_defs"
36852 "test_pygments_example"
36853 "test_example")
36854 " and not "))
36855 #:phases
36856 #~(modify-phases %standard-phases
36857 (add-after 'unpack 'set-home-env
36858 (lambda _
36859 (setenv "HOME" "/tmp"))))))
36860 (native-inputs
36861 (list python-cython
36862 python-littleutils
36863 python-pygments
36864 python-pytest
36865 python-setuptools
36866 python-setuptools-scm
36867 python-typeguard
36868 python-wheel))
36869 (propagated-inputs
36870 (list python-asttokens
36871 python-executing
36872 python-pure-eval))
36873 (home-page "https://github.com/alexmojaki/stack_data")
36874 (synopsis "Python stack frame and traceback manipulation library")
36875 (description
36876 "The @code{stack_data} Python library extracts data from stack frames and
36877tracebacks. Is can be used to display more useful tracebacks
36878than the default.")
36879 (license license:expat)))
36880
36881;; Python dead batteries backports. See: PEP 594 – Removing dead batteries
36882;; from the standard library, <https://peps.python.org/pep-0594/>.
36883(define %python-standard-pep-594-version "3.13.0")
36884(define %python-standard-pep-594-source
36885 (origin
36886 (method git-fetch)
36887 (uri (git-reference
36888 (url "https://github.com/youknowone/python-deadlib")
36889 (commit (string-append "v" %python-standard-pep-594-version))))
36890 (file-name (git-file-name "python-standard-pep-594"
36891 %python-standard-pep-594-version))
36892 (sha256
36893 (base32 "1a16pbdr2q6cy87zg3l33k0avrn08qyy8qm9mq2vwp3jvm6qa4dy"))))
36894
36895(define-public python-standard-asynchat
36896 (package
36897 (name "python-standard-asynchat")
36898 (version %python-standard-pep-594-version)
36899 (source %python-standard-pep-594-source)
36900 (build-system pyproject-build-system)
36901 (arguments
36902 (list
36903 #:phases
36904 #~(modify-phases %standard-phases
36905 (add-after 'unpack 'chdir
36906 (lambda _
36907 (chdir "asynchat"))))))
36908 (native-inputs
36909 (list python-setuptools))
36910 (propagated-inputs
36911 (list python-standard-asyncore))
36912 (home-page "https://github.com/youknowone/python-deadlib")
36913 (synopsis "Backport of asynchat from Python 3.11")
36914 (description
36915 "Standard library @code{asynchat} redistribution. Deprecated since
36916version 3.6 and removed in version 3.12; use @code{asyncio} instead. See:
36917@url{https://peps.python.org/pep-0594/, Removing dead batteries from the
36918standard library}.")
36919 (license license:psfl)))
36920
36921(define-public python-standard-asyncore
36922 (package
36923 (name "python-standard-asyncore")
36924 (version %python-standard-pep-594-version)
36925 (source %python-standard-pep-594-source)
36926 (build-system pyproject-build-system)
36927 (arguments
36928 (list
36929 #:phases
36930 #~(modify-phases %standard-phases
36931 (add-after 'unpack 'chdir
36932 (lambda _
36933 (chdir "asyncore"))))))
36934 (native-inputs
36935 (list python-setuptools))
36936 (home-page "https://github.com/youknowone/python-deadlib")
36937 (synopsis "Backport of asyncore from Python 3.11")
36938 (description
36939 "Standard library @code{asyncore} redistribution. Deprecated since
36940version 3.6 and removed in version 3.12; use @code{asyncio} instead. See:
36941@url{https://peps.python.org/pep-0594/, Removing dead batteries from the
36942standard library}.")
36943 (license license:psfl)))
36944
36945(define-public python-standard-smtpd
36946 (package
36947 (name "python-standard-smtpd")
36948 (version %python-standard-pep-594-version)
36949 (source %python-standard-pep-594-source)
36950 (build-system pyproject-build-system)
36951 (arguments
36952 (list
36953 ;; ImportError: cannot import name 'mock_socket' from 'test'
36954 #:tests? #f
36955 #:phases
36956 #~(modify-phases %standard-phases
36957 (add-after 'unpack 'chdir
36958 (lambda _
36959 (chdir "smtpd"))))))
36960 (native-inputs
36961 (list python-setuptools))
36962 (propagated-inputs
36963 (list
36964 python-standard-asynchat
36965 python-standard-asyncore))
36966 (home-page "https://github.com/youknowone/python-deadlib")
36967 (synopsis "Backport of smtpd from Python 3.11")
36968 (description
36969 "Standard library @code{smtpd} redistribution. Deprecated since version
369703.6 and removed in version 3.12; the @code{aiosmtpd} package is a recommended
36971replacement for this module, based on @code{asyncio}. See:
36972@url{https://peps.python.org/pep-0594/, Removing dead batteries from the
36973standard library}.")
36974 (license license:psfl)))
36975
36976(define-public python-stdio-mgr
36977 (package
36978 (name "python-stdio-mgr")
36979 (version "1.0.1")
36980 (source
36981 (origin
36982 (method git-fetch)
36983 (uri (git-reference
36984 (url "https://github.com/bskinn/stdio-mgr")
36985 (commit (string-append "v" version))))
36986 (file-name (git-file-name name version))
36987 (sha256
36988 (base32 "0xb6779s7j162xhig6vc63f9nn3v406fvjh1zqbqbf8zcl17ific"))))
36989 (build-system pyproject-build-system)
36990 (arguments
36991 (list
36992 ;; Do not run doctests requiring sphinx.
36993 #:test-flags #~(list "--ignore=README.rst")))
36994 (native-inputs
36995 (list python-pytest
36996 python-setuptools
36997 python-wheel))
36998 (propagated-inputs
36999 (list python-attrs))
37000 (home-page "https://github.com/bskinn/stdio-mgr")
37001 (synopsis "Context manager for mocking/wrapping stdin/stdout/stderr")
37002 (description
37003 "This package contains a context manager for mocking/wrapping
37004stdin/stdout/stderr.")
37005 (license license:expat)))
37006
37007;; TODO: This package is not necessary in Guix. It should be replaced by a
37008;; trivial python package providing the same functionality.
37009(define-public python-stdlib-list
37010 (package
37011 (name "python-stdlib-list")
37012 (version "0.11.1")
37013 (source
37014 (origin
37015 (method git-fetch)
37016 (uri (git-reference
37017 (url "https://github.com/jackmaney/python-stdlib-list")
37018 (commit (string-append "v" version))))
37019 (file-name (git-file-name name version))
37020 (sha256
37021 (base32 "14aw5xbqcs0ww9n4659z5dbs89xqpw2s4m3q4gp66br2xr9iybjf"))))
37022 (build-system pyproject-build-system)
37023 (native-inputs
37024 (list python-flit-core
37025 python-pytest
37026 python-sphinx))
37027 (home-page "https://github.com/jackmaney/python-stdlib-list")
37028 (synopsis "Python Standard Libraries")
37029 (description
37030 "This package contains a list of Python Standard Libraries.")
37031 (license license:expat)))
37032
37033(define-public python-stem
37034 ;; python-stem is mostly unmaintained, but still has occasional commits
37035 ;; added.
37036 (package
37037 (name "python-stem")
37038 (version "1.8.3")
37039 (source
37040 (origin
37041 (method git-fetch)
37042 (uri (git-reference
37043 (url "https://gitlab.torproject.org/tpo/network-health/stem.git")
37044 (commit version)))
37045 (file-name (git-file-name name version))
37046 (sha256
37047 (base32
37048 "0f8qrp6fz6l3s5dmvkx2zl7nsqs8qsx2yc5qc2ahy4c6jdvfbbhl"))))
37049 (build-system pyproject-build-system)
37050 (arguments
37051 (list
37052 #:test-backend #~'custom
37053 #:test-flags #~(list "run_tests.py" "--unit")
37054 #:phases
37055 #~(modify-phases %standard-phases
37056 (add-after 'unpack 'fix-python-312
37057 (lambda _
37058 (substitute* (find-files "." "\\.py$")
37059 (("assertRaisesRegexp") "assertRaisesRegex")))))))
37060 (native-inputs
37061 (list python-setuptools
37062 python-wheel))
37063 (home-page "https://stem.torproject.org/")
37064 (synopsis
37065 "Python controller library that allows applications to interact with Tor")
37066 (description
37067 "Stem is a Python controller library for Tor. With it you can use Tor's
37068 control protocol to script against the Tor process and read descriptor data
37069 relays publish about themselves.")
37070 (license license:lgpl3)))
37071
37072(define-public python-stltools
37073 (package
37074 (name "python-stltools")
37075 (version "2022.01.20")
37076 (source
37077 (origin
37078 (method git-fetch)
37079 (uri (git-reference
37080 (url "https://github.com/rsmith-nl/stltools")
37081 (commit version)))
37082 (file-name (git-file-name name version))
37083 (sha256
37084 (base32 "1k6dhszza4lpy46qffaqx5zr70ikfqqysbacy7zabnrvz09fd4rs"))))
37085 (build-system pyproject-build-system)
37086 (arguments
37087 (list
37088 #:phases
37089 #~(modify-phases %standard-phases
37090 ;; XXX: Project lacks correct setup.py, setup.cfg or pyproject.toml.
37091 (delete 'build)
37092 (replace 'install
37093 (lambda* (#:key inputs outputs #:allow-other-keys)
37094 (let ((moddir (string-append (site-packages inputs outputs)
37095 "/stltools"))
37096 (bindir (string-append #$output "/bin")))
37097 (copy-recursively "stltools" moddir)
37098 (mkdir-p bindir)
37099 (for-each
37100 (lambda (script)
37101 (let ((source (string-append script ".py"))
37102 (target (string-append bindir "/" script)))
37103 (copy-file source target)
37104 (chmod target #o555)))
37105 '("stl2pov" "stl2ps" "stl2pdf" "stlinfo"))))))))
37106 (native-inputs
37107 (list python-pytest
37108 python-setuptools))
37109 (propagated-inputs
37110 (list python-pycairo))
37111 (home-page "https://github.com/rsmith-nl/stltools")
37112 (synopsis "Python modules and scripts for handling STL files")
37113 (description
37114 "This package consists of Python modules and scripts for manipulating
37115stereolithography (STL) files. It can convert STL files into POV-ray meshes,
37116PDF and PostScript. The Python modules allow for reading and writing STL
37117files. It supports both the text and binary forms of STL.")
37118 (license license:expat)))
37119
37120(define-public python-stone
37121 (package
37122 (name "python-stone")
37123 (version "3.3.9")
37124 (source
37125 (origin
37126 (method git-fetch)
37127 (uri (git-reference
37128 (url "https://github.com/dropbox/stone")
37129 (commit (string-append "v" version))))
37130 (file-name (git-file-name name version))
37131 (sha256
37132 (base32 "1x0kj4jygssjn66lbkln95chhf85vzy1wnpziy9jvpf4kbc1bmfy"))))
37133 (build-system pyproject-build-system)
37134 (native-inputs
37135 (list python-pytest
37136 python-setuptools))
37137 (propagated-inputs
37138 (list python-jinja2
37139 python-packaging
37140 python-ply
37141 python-six)) ;hard requirement, still
37142 (home-page "https://github.com/dropbox/stone")
37143 (synopsis "Official Api Spec Language for Dropbox")
37144 (description
37145 "Stone is an interface description language (IDL) for APIs.")
37146 (license license:expat)))
37147
37148(define-public python-stopit
37149 (package
37150 (name "python-stopit")
37151 (version "1.1.2")
37152 (source
37153 (origin
37154 (method git-fetch)
37155 (uri (git-reference
37156 (url "https://github.com/glenfant/stopit")
37157 (commit version)))
37158 (file-name (git-file-name name version))
37159 (sha256
37160 (base32 "1g3xwd62389643hrz6bljq0ddd1yvwpfk4nrv29naf09pl1m8wmr"))))
37161 (build-system pyproject-build-system)
37162 (arguments
37163 (list #:test-backend #~'custom
37164 #:test-flags #~(list "tests.py")))
37165 (native-inputs (list python-setuptools))
37166 (home-page "https://pypi.python.org/pypi/stopit")
37167 (synopsis "Timeout control decorator and context managers")
37168 (description
37169 "Raise asynchronous exceptions in other threads, control the timeout of
37170blocks or callables with two context managers and two decorators.")
37171 (license license:expat)))
37172
37173(define-public python-straight-plugin
37174 (package
37175 (name "python-straight-plugin")
37176 (properties '((commit . "363b0af4a2560bf9a3cb61160ecf28a1a1b9c91f")
37177 (revision . "0")))
37178 (version (git-version "1.4.1"
37179 (assoc-ref properties 'revision)
37180 (assoc-ref properties 'commit)))
37181 (source
37182 (origin
37183 (method git-fetch)
37184 (uri (git-reference
37185 (url "https://github.com/ironfroggy/straight.plugin")
37186 (commit (assoc-ref properties 'commit))))
37187 (file-name (git-file-name name version))
37188 (sha256
37189 (base32 "03p2apj7i9m38nmccfhvzldmzd61icv145vpmifln3mvh09jm6c2"))))
37190 (build-system pyproject-build-system)
37191 (arguments
37192 (list
37193 ;; XXX: Some tests started failing with the move to [email protected].
37194 ;; Consider removing this leaf unmaintained package.
37195 #:tests? #f
37196 #:test-backend #~'custom
37197 #:test-flags #~(list "tests.py")
37198 #:phases
37199 #~(modify-phases %standard-phases
37200 (add-after 'unpack 'fix-python-3.12-incompatibility
37201 (lambda _
37202 (substitute* "straight/plugin/loaders.py"
37203 (("from imp import find_module")
37204 "")))))))
37205 (native-inputs (list python-mock python-setuptools))
37206 (home-page "https://github.com/ironfroggy/straight.plugin")
37207 (synopsis "Simple namespaced plugin facility")
37208 (description
37209 "Straight Plugin provides a type of plugin you can create from almost any
37210existing Python modules, and an easy way for outside developers to add
37211functionality and customization to your projects with their own plugins.")
37212 (license license:expat)))
37213
37214(define-public python-streamtracer
37215 (package
37216 (name "python-streamtracer")
37217 (version "2.4.0")
37218 (source
37219 (origin
37220 (method url-fetch)
37221 (uri (pypi-uri "streamtracer" version))
37222 (sha256
37223 (base32 "01ncr8q58xkz2dydjdg4a0c3kv4mpd6j1lzj4p0cmpg7jdi24cmr"))))
37224 (build-system pyproject-build-system)
37225 (arguments
37226 (list
37227 #:imported-modules `(,@%cargo-build-system-modules
37228 ,@%pyproject-build-system-modules)
37229 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
37230 (guix build pyproject-build-system)
37231 (guix build utils))
37232 #:test-flags
37233 #~(list "--pyargs" "streamtracer")
37234 #:phases
37235 #~(modify-phases %standard-phases
37236 (add-after 'unpack 'prepare-cargo-build-system
37237 (lambda args
37238 (for-each (lambda (phase)
37239 (format #t "Running cargo phase: ~a~%" phase)
37240 (apply (assoc-ref cargo:%standard-phases phase)
37241 #:cargo-target #$(cargo-triplet)
37242 args))
37243 '(unpack-rust-crates
37244 configure
37245 check-for-pregenerated-files
37246 patch-cargo-checksums)))))))
37247 (native-inputs
37248 (append
37249 (list maturin
37250 python-pytest
37251 python-pytest-doctestplus
37252 rust
37253 `(,rust "cargo"))
37254 (or (and=> (%current-target-system)
37255 (compose list make-rust-sysroot))
37256 '())))
37257 (propagated-inputs
37258 (list python-numpy
37259 python-packaging))
37260 (inputs (cargo-inputs 'python-streamtracer))
37261 (home-page "https://github.com/sunpy/streamtracer")
37262 (synopsis "Rapid streamline tracing in Python")
37263 (description
37264 "streamtracer is a Python package for rapid streamline tracing on
37265regularly spaced grids. The actual streamline tracing is done at a low level
37266in Rust, with a nice Python API provided on top.")
37267 (license license:gpl3+)))
37268
37269(define-public python-strenum
37270 (package
37271 (name "python-strenum")
37272 (version "0.4.15")
37273 (source
37274 (origin
37275 (method git-fetch)
37276 (uri (git-reference
37277 (url "https://github.com/irgeek/StrEnum")
37278 (commit (string-append "v" version))))
37279 (file-name (git-file-name name version))
37280 (sha256
37281 (base32 "1bvk7v5f3sr7awcacdmw5lfzsnn6j52q45va9xpc71n5qxydqbfn"))
37282 (snippet #~(delete-file "versioneer.py"))))
37283 (build-system pyproject-build-system)
37284 (arguments
37285 (list #:test-flags #~(list "tests")))
37286 (native-inputs
37287 (list python-pytest
37288 python-pytest-pylint
37289 python-setuptools
37290 python-versioneer))
37291 (home-page "https://github.com/irgeek/StrEnum")
37292 (synopsis "Enum that inherits from str")
37293 (description "StrEnum is a Python @code{enum.Enum} that inherits from
37294@code{str} to complement @code{enum.IntEnum} in the standard library.")
37295 (license license:expat)))
37296
37297(define-public python-structlog
37298 (package
37299 (name "python-structlog")
37300 (version "25.5.0")
37301 (source
37302 (origin
37303 (method url-fetch)
37304 (uri (pypi-uri "structlog" version))
37305 (sha256
37306 (base32 "167wj0hxrsa9kbalh86vvwqs105zi8ld1ikh8lyibndypsij5189"))))
37307 (build-system pyproject-build-system)
37308 (native-inputs
37309 (list python-hatch-fancy-pypi-readme
37310 python-hatch-vcs
37311 python-hatchling
37312 python-pytest
37313 python-pytest-asyncio
37314 python-time-machine))
37315 (home-page "https://www.structlog.org/")
37316 (synopsis "Structured Logging for Python")
37317 (description "@code{structlog} changes logging in Python by adding structure
37318to your log entries.")
37319 (license (list license:asl2.0 license:expat))))
37320
37321(define-public python-style
37322 (package
37323 (name "python-style")
37324 (version "1.1.6")
37325 (source
37326 (origin
37327 (method url-fetch)
37328 (uri (pypi-uri "style" version))
37329 (sha256
37330 (base32 "1dcfb578v9mrwh92rgms87gql0gp4vgj6l9hpgyfg0wbd3rh3bfh"))))
37331 (build-system pyproject-build-system)
37332 (arguments
37333 (list #:tests? #f)) ;no tests in PyPI, package is 6y old
37334 (native-inputs
37335 (list python-setuptools))
37336 (home-page "https://github.com/lmittmann/style")
37337 (synopsis "Terminal string styling")
37338 (description
37339"@code{python-style} is a simple terminal string styling package. Its API is
37340a port of the chalk package for javascript.")
37341 (license license:expat)))
37342
37343(define-public python-svgelements
37344 (package
37345 (name "python-svgelements")
37346 (version "1.9.6")
37347 (source
37348 (origin
37349 (method git-fetch)
37350 (uri (git-reference
37351 (url "https://github.com/meerk40t/svgelements")
37352 (commit version)))
37353 (file-name (git-file-name name version))
37354 (sha256
37355 (base32 "0bpddyy4klmkkv6w06hqrv2m5ds1kxc0rl9pxnsw91wyfwcsq7cz"))))
37356 (build-system pyproject-build-system)
37357 (arguments
37358 (list
37359 #:phases
37360 #~(modify-phases %standard-phases
37361 (add-after 'unpack 'fix-python-incompatibilities
37362 (lambda _
37363 (substitute* (find-files "test" "\\.py$")
37364 (("(assert(|NotAlmost)Equal)s" all out in)
37365 out)))))))
37366 (native-inputs
37367 (list python-anyio
37368 python-pytest
37369 python-numpy
37370 python-pillow
37371 python-scipy
37372 python-setuptools))
37373 (home-page "https://github.com/meerk40t/svgelements")
37374 (synopsis "SVG parsing for elements, paths, and other SVG objects")
37375 (description
37376 "This module does high fidelity SVG parsing and geometric rendering.
37377The goal is to successfully and correctly process SVG for use with any scripts
37378that may need or want to use SVG files as geometric data.")
37379 (license license:expat)))
37380
37381(define-public python-svgutils
37382 (package
37383 (name "python-svgutils")
37384 (version "0.3.4")
37385 (source
37386 (origin
37387 (method url-fetch)
37388 (uri (pypi-uri "svgutils" version))
37389 (sha256
37390 (base32 "0lz0w2ajdvwd269a7ppnzawmx8px0116j0nx8xvhlihxrd28zx4y"))))
37391 (build-system pyproject-build-system)
37392 (arguments
37393 (list #:tests? #f)) ;no test in PyPI archive, depend on Nose
37394 (native-inputs
37395 (list python-setuptools))
37396 (propagated-inputs
37397 (list python-lxml))
37398 (home-page "https://svgutils.readthedocs.io")
37399 (synopsis "Python SVG editor")
37400 (description "This is an utility package that helps with editing and
37401concatenating SVG files. It is especially directed at scientists preparing
37402final figures for submission to journals. So far it supports arbitrary
37403placement and scaling of SVG figures and adding markers, such as labels.")
37404 (license license:expat)))
37405
37406(define-public python-swagger-spec-validator
37407 (package
37408 (name "python-swagger-spec-validator")
37409 (version "3.0.4")
37410 (source
37411 (origin
37412 (method git-fetch)
37413 (uri (git-reference
37414 (url "https://github.com/Yelp/swagger_spec_validator")
37415 (commit (string-append "v" version))))
37416 (file-name (git-file-name name version))
37417 (sha256
37418 (base32 "1vmwg0432s22g48i2ys1ay441wmgkhjann1s165r499wg3pksggi"))))
37419 (build-system pyproject-build-system)
37420 (native-inputs
37421 (list python-pytest
37422 python-setuptools))
37423 (propagated-inputs
37424 (list python-importlib-resources
37425 python-jsonschema
37426 python-pyyaml
37427 python-typing-extensions))
37428 (home-page "https://github.com/Yelp/swagger_spec_validator")
37429 (synopsis "Validation of Swagger specifications")
37430 (description
37431 "@code{swagger_spec_validator} provides a library for validating Swagger
37432API specifications.")
37433 (license license:asl2.0)))
37434
37435(define-public python-syllables
37436 (package
37437 (name "python-syllables")
37438 (version "1.0.3")
37439 (source
37440 (origin
37441 (method git-fetch)
37442 (uri (git-reference
37443 (url "https://github.com/prosegrinder/python-syllables")
37444 (commit (string-append "v" version))))
37445 (file-name (git-file-name name version))
37446 (sha256
37447 (base32 "12yv9d7hmrkw10p2nivk0c9b96rm6040zfif6pj4sm1vg3n8ik6n"))))
37448 (build-system pyproject-build-system)
37449 (native-inputs
37450 (list python-cmudict
37451 python-pytest
37452 python-setuptools))
37453 (home-page "https://github.com/prosegrinder/python-syllables")
37454 (synopsis "Package for estimating the number of syllables in a word")
37455 (description
37456 "This package provides a Python package for estimating the number of
37457syllables in a word.")
37458 (license license:gpl3)))
37459
37460(define-public python-sympy
37461 (package
37462 (name "python-sympy")
37463 (version "1.13.3")
37464 (source
37465 (origin
37466 (method url-fetch)
37467 (uri (pypi-uri "sympy" version))
37468 (sha256
37469 (base32 "1nf4zrjjbnv47n6sl6x9blfyarski61vdjaz4ygb62hfag3d4zxj"))))
37470 (build-system pyproject-build-system)
37471 (arguments
37472 '(#:phases
37473 (modify-phases %standard-phases
37474 (replace 'check
37475 (lambda* (#:key tests? #:allow-other-keys)
37476 (if tests?
37477 (invoke "python3" "-c"
37478 "import sympy; sympy.test(\"/core\")")))))))
37479 (propagated-inputs (list python-mpmath))
37480 (native-inputs
37481 (list python-hypothesis
37482 python-pytest
37483 python-setuptools
37484 python-wheel))
37485 (home-page "https://www.sympy.org/")
37486 (synopsis "Python library for symbolic mathematics")
37487 (description
37488 "SymPy is a Python library for symbolic mathematics. It aims to become a
37489full-featured computer algebra system (CAS) while keeping the code as simple
37490as possible in order to be comprehensible and easily extensible.")
37491 (license license:bsd-3)))
37492
37493(define-public python-tables
37494 (package
37495 (name "python-tables")
37496 ;; XXX: Compatibility fix for numexpr 2.13.0, see:
37497 ;; <https://github.com/PyTables/PyTables/pull/1256>.
37498 (properties '((commit . "aad9079c80ce3ae7f385d00af760d171dcc10535")
37499 (revision . "0")))
37500 (version (git-version "3.10.2"
37501 (assoc-ref properties 'revision)
37502 (assoc-ref properties 'commit)))
37503 (source
37504 (origin
37505 (method git-fetch)
37506 (uri (git-reference
37507 (url "https://github.com/PyTables/PyTables")
37508 (commit (assoc-ref properties 'commit))))
37509 (file-name (git-file-name name version))
37510 (sha256
37511 (base32 "0gnqj1gj6dnr167pacmynvghw8bwwll6nlz843rm95r07zi6blrm"))
37512 (snippet '(begin
37513 (use-modules (guix build utils))
37514 (delete-file-recursively "hdf5-blosc")
37515 (delete-file-recursively "c-blosc")))))
37516 (build-system pyproject-build-system)
37517 (arguments
37518 (list
37519 #:phases
37520 #~(modify-phases %standard-phases
37521 (add-after 'unpack 'disable-tuning
37522 (lambda _
37523 (substitute* "setup.py"
37524 (("cpu_flags = .*")
37525 "cpu_flags = ['sse2']\n"))))
37526 (add-after 'unpack 'fix-reference-to-blosc2
37527 (lambda* (#:key inputs #:allow-other-keys)
37528 (substitute* "tables/__init__.py"
37529 (("( +)os.path.join\\(current_dir, blosc2_lib_hardcoded\\),"
37530 m indent)
37531 (string-append indent
37532 "\""
37533 (search-input-file inputs "/lib/libblosc2.so")
37534 "\",\n" m)))))
37535 (add-before 'build 'pre-build
37536 (lambda _
37537 (substitute* "setup.py"
37538 (("hdf5-blosc/src")
37539 (format #f "~a/src"
37540 #$(package-source (this-package-input "hdf5-blosc")))))
37541 (invoke "make" "distclean") ;Regenerate C code with Cython
37542 (setenv "BLOSC2_DIR" #$(this-package-input "cblosc2"))
37543 (setenv "BLOSC_DIR" #$(this-package-input "c-blosc"))
37544 (setenv "BZIP2_DIR" #$(this-package-input "bzip2"))
37545 (setenv "HDF5_DIR" #$(this-package-input "hdf5"))
37546 (setenv "LZO_DIR" #$(this-package-input "lzo"))))
37547 (add-before 'check 'pre-check
37548 (lambda _
37549 (setenv "HOME" "/tmp")))
37550 (replace 'check
37551 (lambda* (#:key tests? #:allow-other-keys)
37552 (when tests?
37553 (with-directory-excursion "/tmp"
37554 ;; Performing only a light (yet comprehensive) subset of the
37555 ;; test suite. If you want a more complete test, try
37556 ;; passing the --heavy flag to this script (or set the
37557 ;; 'heavy' parameter in case you are using tables.test()
37558 ;; call). The whole suite will take more than 4 hours to
37559 ;; complete on a relatively modern CPU and around 512 MB of
37560 ;; main memory.
37561 (invoke "python" "-m" "tables.tests.test_all"))))))))
37562 (native-inputs
37563 (list pkg-config
37564 python-cython
37565 python-pytest
37566 python-setuptools
37567 python-sphinx))
37568 (inputs
37569 (list bzip2
37570 c-blosc
37571 c-blosc2
37572 hdf5
37573 hdf5-blosc
37574 lzo))
37575 (propagated-inputs
37576 (list python-blosc2
37577 python-numexpr
37578 python-numpy
37579 python-packaging
37580 python-py-cpuinfo
37581 python-typing-extensions))
37582 (home-page "https://www.pytables.org/")
37583 (synopsis "Hierarchical datasets for Python")
37584 (description "PyTables is a package for managing hierarchical datasets and
37585designed to efficiently cope with extremely large amounts of data.")
37586 (license license:bsd-3)))
37587
37588(define-public python-tablib
37589 (package
37590 (name "python-tablib")
37591 (version "3.9.0")
37592 (source
37593 (origin
37594 (method url-fetch)
37595 (uri (pypi-uri "tablib" version))
37596 (sha256
37597 (base32 "1qjzbpaln1grr5ngcm2apd5dxp0gcrwis5n60hg60d8gvf7bsshv"))))
37598 (build-system pyproject-build-system)
37599 (native-inputs
37600 (list python-pytest python-setuptools python-setuptools-scm))
37601 (inputs ;; [cli]
37602 (list python-tabulate))
37603 (propagated-inputs
37604 (list python-markuppy
37605 python-odfpy
37606 python-openpyxl
37607 python-pyyaml
37608 python-xlrd
37609 python-xlwt))
37610 (home-page "https://tablib.readthedocs.io")
37611 (synopsis "Format agnostic tabular data library")
37612 (description
37613 "@code{tablib} is a format-agnostic tabular dataset library,
37614written in Python. Supported output formats are Excel (Sets + Books),
37615JSON (Sets + Books), YAML (Sets + Books), HTML (Sets), Jira (Sets),
37616TSV (Sets), ODS (Sets), CSV (Sets), and DBF (Sets).
37617
37618@code{tablib} also supports Pandas DataFrames (Sets). Anyhow, since pandas is
37619quite huge, this Guix package doesn't depend on pandas. In case, just also
37620install @code{python-pandas}.")
37621 (license license:expat)))
37622
37623(define-public python-tabulate
37624 (package
37625 (name "python-tabulate")
37626 (version "0.9.0")
37627 (source
37628 (origin
37629 (method url-fetch)
37630 (uri (pypi-uri "tabulate" version))
37631 (sha256
37632 (base32 "0g4b0qnbw55igbpxfxzciqvb6w8ncw4gmcgyq0lyavcnylmv3580"))))
37633 (build-system pyproject-build-system)
37634 (native-inputs
37635 (list python-pytest
37636 python-setuptools-scm
37637 python-setuptools))
37638 (propagated-inputs
37639 (list python-wcwidth))
37640 (home-page "https://github.com/astanin/python-tabulate")
37641 (synopsis "Pretty-print tabular data")
37642 (description
37643 "Tabulate is a library and command-line utility to pretty-print tabular
37644data in Python.")
37645 (license license:expat)))
37646
37647(define-public python-takethetime
37648 (package
37649 (name "python-takethetime")
37650 (version "0.3.1")
37651 (source
37652 (origin
37653 (method url-fetch)
37654 (uri (pypi-uri "TakeTheTime" version))
37655 (sha256
37656 (base32 "1y9gzqb9l1f2smx8783ccjzjvby5mphshgrfks7s75mml59h9qyv"))))
37657 (build-system pyproject-build-system)
37658 (arguments
37659 (list #:tests? #f)) ; tests are time dependent and not provided in PyPI
37660 (native-inputs
37661 (list python-setuptools
37662 python-wheel))
37663 (home-page "https://github.com/ErikBjare/TakeTheTime")
37664 (synopsis "Timing chunks of code")
37665 (description
37666 "This package implements a functionality for time taking using context
37667managers.")
37668 (license license:expat)))
37669
37670(define-public python-targ
37671 (package
37672 (name "python-targ")
37673 (version "0.6.0")
37674 (source
37675 (origin
37676 (method git-fetch)
37677 (uri (git-reference
37678 (url "https://github.com/piccolo-orm/targ/")
37679 (commit version)))
37680 (file-name (git-file-name name version))
37681 (sha256
37682 (base32 "05avykfnbni4iwkv4a2nwpwyiznqv51jn3bn5am91iv7dbq1w94v"))))
37683 (build-system pyproject-build-system)
37684 (native-inputs
37685 (list python-pytest
37686 python-setuptools))
37687 (propagated-inputs
37688 (list python-colorama
37689 python-docstring-parser))
37690 (home-page "https://github.com/piccolo-orm/targ/")
37691 (synopsis "Python CLI builder using type hints and docstrings")
37692 (description
37693 "Targ is a package to build a Python @acronym{Command Line Interface,
37694CLI} for applications by using type hints and docstrings.")
37695 (license license:expat)))
37696
37697(define-public python-tasklib
37698 (package
37699 (name "python-tasklib")
37700 (version "2.5.1")
37701 (source
37702 (origin
37703 (method git-fetch)
37704 (uri (git-reference
37705 (url "https://github.com/GothenburgBitFactory/tasklib")
37706 (commit version)))
37707 (file-name (git-file-name name version))
37708 (sha256
37709 (base32 "1vhqqbkci485m663vbfq0wki6qzrmb0hn1yaszc19kxvp3j8d7zc"))))
37710 (build-system pyproject-build-system)
37711 (arguments
37712 (list
37713 #:test-backend
37714 #~'unittest))
37715 (inputs (list taskwarrior))
37716 (native-inputs (list python-setuptools tzdata-for-tests))
37717 (home-page "https://github.com/GothenburgBitFactory/tasklib")
37718 (synopsis "Official Taskwarrior library for Python")
37719 (description "@code{tasklib} is a Python library for interacting with
37720Taskwarrior databases, using a queryset API similar to that of Django's ORM.")
37721 (license license:bsd-3)))
37722
37723(define-public python-tasklogger
37724 (package
37725 (name "python-tasklogger")
37726 (version "1.2.0")
37727 (source
37728 (origin
37729 (method url-fetch)
37730 (uri (pypi-uri "tasklogger" version))
37731 (sha256
37732 (base32 "1901mibcp6aiyjy8afnybrxnb0dkbdxlbvjqbr3gginlw7dr18xh"))))
37733 (build-system pyproject-build-system)
37734 (native-inputs
37735 (list python-pytest
37736 python-numpy
37737 python-setuptools))
37738 (propagated-inputs
37739 (list python-deprecated))
37740 (home-page "https://github.com/scottgigante/tasklogger")
37741 (synopsis "Extension to the core Python logging library")
37742 (description "This package provides an extension to the core Python
37743logging library for logging the beginning and completion of tasks and
37744subtasks.")
37745 (license license:gpl2)))
37746
37747(define-public python-tatsu
37748 (package
37749 (name "python-tatsu")
37750 (version "5.13.2")
37751 (source
37752 (origin
37753 (method git-fetch)
37754 (uri (git-reference
37755 (url "https://github.com/neogeny/TatSu")
37756 (commit (string-append "v" version))))
37757 (file-name (git-file-name name version))
37758 (sha256
37759 (base32 "0ppgi5r55iirzhnf988b32yvh8ly8lzxbg59y0zgqfaxbma50650"))))
37760 (build-system pyproject-build-system)
37761 (native-inputs
37762 (list python-pytest
37763 python-setuptools))
37764 (home-page "https://tatsu.readthedocs.io/en/stable/")
37765 (synopsis "PEG/Packrat Parser generator for Python")
37766 (description
37767 "TatSu (竜) takes a grammar in a variation of Extended Backus-Naur
37768Form (EBNF) as input, and outputs a memoizing Parsing Expression Grammar (PEG)
37769or Packrat parser in Python.")
37770 (license license:bsd-2)))
37771
37772(define-public python-tblib
37773 (package
37774 (name "python-tblib")
37775 (version "3.1.0")
37776 (source
37777 (origin
37778 (method url-fetch)
37779 (uri (pypi-uri "tblib" version))
37780 (sha256
37781 (base32 "0lnnbicpxx774s29nkbic4rrqvy4rhxd8skx5pp6zxh7kwn4qh06"))))
37782 (build-system pyproject-build-system)
37783 (arguments
37784 (list
37785 ;; Don't run benchmark tests.
37786 #:test-flags #~(list "--ignore=tests/test_perf.py")
37787 #:phases
37788 #~(modify-phases %standard-phases
37789 (add-after 'unpack 'fix-pytest-config
37790 (lambda _
37791 (substitute* "pytest.ini"
37792 (("--benchmark-disable") "")))))))
37793 (native-inputs
37794 (list python-pytest
37795 python-setuptools))
37796 (home-page "https://github.com/ionelmc/python-tblib")
37797 (synopsis "Traceback serialization library")
37798 (description
37799 "Traceback serialization allows you to:
37800
37801@enumerate
37802@item Pickle tracebacks and raise exceptions with pickled tracebacks in
37803different processes. This allows better error handling when running code over
37804multiple processes (imagine multiprocessing, billiard, futures, celery etc).
37805
37806@item Parse traceback strings and raise with the parsed tracebacks.
37807@end enumerate\n")
37808 (license license:bsd-3)))
37809
37810(define-public python-telethon
37811 (package
37812 (name "python-telethon")
37813 (version "1.42.0")
37814 (source
37815 (origin
37816 (method git-fetch)
37817 (uri (git-reference
37818 (url "https://codeberg.org/Lonami/Telethon")
37819 (commit (string-append "v" version))))
37820 (file-name (git-file-name name version))
37821 (sha256
37822 (base32 "16xp5cwfv1ly25zcnnn0jgrmzpsl3yqzf92dfbnpyiy64j8wkh9l"))))
37823 (build-system pyproject-build-system)
37824 (native-inputs
37825 (list python-pytest
37826 python-pytest-asyncio
37827 python-pytest-trio
37828 python-setuptools))
37829 (propagated-inputs
37830 (list python-rsa python-pyaes))
37831 (home-page "https://docs.telethon.dev")
37832 (synopsis "Full-featured Telegram client library for Python 3")
37833 (description "This library is designed to make it easy to write Python
37834programs that can interact with Telegram.")
37835 (license license:expat)))
37836
37837(define-public python-tempdir
37838 (package
37839 (name "python-tempdir")
37840 (version "0.7.1")
37841 (source
37842 (origin
37843 (method url-fetch)
37844 (uri (pypi-uri "tempdir" version))
37845 (sha256
37846 (base32 "13msyyxqbicr111a294x7fsqbkl6a31fyrqflx3q7k547gnq15k8"))))
37847 (build-system pyproject-build-system)
37848 (arguments (list #:tests? #f)) ; No tests.
37849 (native-inputs (list python-setuptools))
37850 (home-page "https://pypi.org/project/tempdir/")
37851 (synopsis "Python library for managing temporary directories")
37852 (description
37853 "This library manages temporary directories that are automatically
37854deleted with all their contents when they are no longer needed. It is
37855particularly convenient for use in tests.")
37856 (license license:expat)))
37857
37858(define-public python-tempora
37859 (package
37860 (name "python-tempora")
37861 (version "5.8.1")
37862 (source
37863 (origin
37864 (method url-fetch)
37865 (uri (pypi-uri "tempora" version))
37866 (sha256
37867 (base32 "1k9d6qmlp0i4v3d0dcqcsndvmng3lfdh4y0p8gwy9i8cg7ndkddb"))))
37868 (build-system pyproject-build-system)
37869 (arguments
37870 (list
37871 ;; Do not test the myproject.toml build as it tries to pull dependencies
37872 ;; from the Internet.
37873 #:test-flags #~(list "-k" "not project"
37874 "tests")))
37875 (native-inputs
37876 (list python-freezegun
37877 python-pytest
37878 python-setuptools
37879 python-setuptools-scm
37880 python-tzdata))
37881 (propagated-inputs (list python-dateutil python-jaraco-functools))
37882 (home-page "https://github.com/jaraco/tempora")
37883 (synopsis "Python date and time objects and routines")
37884 (description
37885 "The @code{tempora} Python library contains miscellaneous date and time
37886related utilities and constants, routines for measuring, profiling, and
37887getting datetime-aware @acronym{UTC, Coordinated Universal Time} values as
37888well as an event scheduler.")
37889 (license license:expat)))
37890
37891(define-public python-tenacity
37892 (package
37893 (name "python-tenacity")
37894 (version "9.0.0")
37895 (source
37896 (origin
37897 (method url-fetch)
37898 (uri (pypi-uri "tenacity" version))
37899 (sha256
37900 (base32 "0fyp421r038naskvyhj90hkq0az96477njad4rhs6annjz53fzw0"))))
37901 (build-system pyproject-build-system)
37902 (native-inputs
37903 (list python-pytest
37904 python-setuptools
37905 python-setuptools-scm
37906 python-tornado
37907 python-typeguard
37908 python-wheel))
37909 (home-page "https://github.com/jd/tenacity")
37910 (synopsis "Retrying library for python")
37911 (description
37912 "Tenacity is a general-purpose python library to simplify the task of
37913adding retry behavior to just about anything.")
37914 (license license:asl2.0)))
37915
37916(define-public python-term-background
37917 (package
37918 (name "python-term-background")
37919 (version "1.0.2")
37920 (source
37921 (origin
37922 (method url-fetch)
37923 (uri (pypi-uri "term_background" version))
37924 (sha256
37925 (base32 "0p674silrwc3jncncmdnj1lr6pl2q5qbx0xi3mzjq9sgcs5vmp4n"))))
37926 (arguments
37927 (list
37928 #:phases
37929 '(modify-phases %standard-phases
37930 (add-after 'unpack 'fix-build
37931 (lambda _ (delete-file "setup.py"))))))
37932 (build-system pyproject-build-system)
37933 (native-inputs
37934 (list python-pytest
37935 python-setuptools
37936 python-setuptools-scm
37937 python-wrapper
37938 python-wheel))
37939 (home-page "http://github.com/rocky/shell-term-background")
37940 (synopsis "Determine if shell has a light or dark background")
37941 (description "This package determines if shell has a light or dark
37942background.")
37943 (license license:gpl2+)))
37944
37945(define-public python-term-image
37946 (package
37947 (name "python-term-image")
37948 (properties '((commit . "a40a12bb0a12944b7d7a182e93f1caad4261693a")
37949 (revision . "0")))
37950 (version (git-version "0.7.2"
37951 (assoc-ref properties 'revision)
37952 (assoc-ref properties 'commit)))
37953 (source
37954 (origin
37955 (method git-fetch)
37956 (uri (git-reference
37957 (url "https://github.com/AnonymouX47/term-image")
37958 (commit (assoc-ref properties 'commit))))
37959 (file-name (git-file-name name version))
37960 (sha256
37961 (base32 "1g1a5b756l7bj69zwy9c86c72bwfb38iifv7z5lfr870i93f1k8r"))))
37962 (build-system pyproject-build-system)
37963 (arguments
37964 (list
37965 #:test-flags
37966 #~(list "tests"
37967 ;; These tests require network access.
37968 "-k" (string-append "not test_from_url"
37969 " and not test_source"
37970 " and not test_close"))
37971 #:phases
37972 #~(modify-phases %standard-phases
37973 (add-after 'unpack 'bump-pillow-requirement
37974 (lambda _
37975 (substitute* "src/term_image/image/common.py"
37976 (("\\.getdata")
37977 ".get_flattened_data"))
37978 (let* ((major #$(version-major
37979 (package-version
37980 (this-package-input "python-pillow"))))
37981 (next (number->string (+ 1 (string->number major)))))
37982 (substitute* "pyproject.toml"
37983 (("pillow>=9.1,<12")
37984 (string-append "pillow>=9.1,<" next)))))))))
37985 (propagated-inputs (list python-pillow python-requests))
37986 (native-inputs
37987 (list python-pytest
37988 python-setuptools
37989 python-urwid))
37990 (home-page "https://github.com/AnonymouX47/term-image")
37991 (synopsis "Display images in the terminal")
37992 (description "term-image is a library and program to display images on
37993compatible terminals.
37994
37995Features:
37996@enumerate
37997@item Multiple image formats (basically all formats supported by
37998@code{PIL.Image.open()})
37999@item Multiple image source types: PIL image instance, local file, URL
38000@item Multiple image render styles (with automatic support detection)
38001@item Support for multiple terminal graphics protocols, including Kitty
38002@item Transparency support (with multiple options)
38003@item Animated image support (including transparent ones)
38004@item Integration into various TUI / terminal-based output libraries
38005@item Terminal size awareness
38006@item Automatic and manual image sizing
38007@item Horizontal and vertical alignment
38008@item Automatic and manual font ratio adjustment (to preserve image aspect
38009ratio)
38010@end enumerate")
38011 (license license:expat)))
38012
38013(define-public python-termcolor
38014 (package
38015 (name "python-termcolor")
38016 (version "2.5.0")
38017 (source
38018 (origin
38019 (method url-fetch)
38020 (uri (pypi-uri "termcolor" version))
38021 (sha256
38022 (base32 "0vwaxyr2vk8gi7s1slq74nb0ssbb0wcn208ziqp48j3dv8kqv3cr"))))
38023 (build-system pyproject-build-system)
38024 (arguments
38025 (list
38026 #:phases
38027 #~(modify-phases %standard-phases
38028 (add-after 'unpack 'relax-coverage-requirements
38029 (lambda _
38030 (substitute* "pyproject.toml"
38031 ((".*coverage.*") "")))))))
38032 (native-inputs
38033 (list python-hatch-vcs python-hatchling python-pytest))
38034 (home-page "https://pypi.org/project/termcolor/")
38035 (synopsis "ANSII Color formatting for terminal output")
38036 (description
38037 "This package provides ANSII Color formatting for output in terminals.")
38038 (license license:expat)))
38039
38040(define-public python-termcolor-1
38041 (package
38042 (inherit python-termcolor)
38043 (version "1.1.0")
38044 (source
38045 (origin
38046 (method url-fetch)
38047 (uri (pypi-uri "termcolor" version))
38048 (sha256
38049 (base32
38050 "0fv1vq14rpqwgazxg4981904lfyp84mnammw7y046491cv76jv8x"))))
38051 ;; There are no tests
38052 (arguments (list #:tests? #false))
38053 (native-inputs
38054 (list python-setuptools
38055 python-wheel))))
38056
38057(define-public python-termcolor-next
38058 (package
38059 (inherit python-termcolor)
38060 (name "python-termcolor-next")
38061 (version "3.1.0")
38062 (source
38063 (origin
38064 (method url-fetch)
38065 (uri (pypi-uri "termcolor" version))
38066 (sha256
38067 (base32 "0w2rwl4h7664illllkmicdh3fz3z3pznqxbaxkp0j6aqxvxxfvba"))))
38068 (arguments '())))
38069
38070(define-public python-terminaltables
38071 (package
38072 (name "python-terminaltables")
38073 (version "3.1.0")
38074 (source
38075 (origin
38076 (method git-fetch)
38077 (uri (git-reference
38078 (url "https://github.com/Robpol86/terminaltables")
38079 (commit (string-append "v" version))))
38080 (file-name (git-file-name name version))
38081 (sha256 (base32 "1jlm7n6kxypbr8mvwpd7hf9hbfk0a002ad03wqgxlri4aw8pk39a"))))
38082 (build-system pyproject-build-system)
38083 ;; XXX: A lot of test fail with flaky behavior.
38084 (arguments (list #:tests? #f))
38085 (native-inputs
38086 (list python-colorclass
38087 python-colorama
38088 python-pytest
38089 python-setuptools
38090 python-termcolor))
38091 (home-page "https://github.com/Robpol86/terminaltables")
38092 (synopsis
38093 "Generate simple tables in terminals from a nested list of strings")
38094 (description
38095 "This package makes it easy to draw tables in terminal/console
38096applications from a list of lists of strings. It supports multi-line rows.")
38097 (license license:expat)))
38098
38099(define-public python-termstyle
38100 (package
38101 (name "python-termstyle")
38102 (version "0.1.11")
38103 (source
38104 (origin
38105 (method url-fetch)
38106 (uri (pypi-uri "termstyle" version))
38107 (sha256
38108 (base32 "17wzkkcqy5zc0g68xlad3kcv66iw14d2pwqc0h9420gak0vbhx7g"))))
38109 (build-system pyproject-build-system)
38110 (arguments
38111 (list #:test-backend #~'custom
38112 #:test-flags #~(list "test3.py")))
38113 (native-inputs
38114 (list python-setuptools))
38115 (home-page "https://github.com/gfxmonk/termstyle")
38116 (synopsis "Console text coloring for Python")
38117 (description "This package provides console text coloring for Python.")
38118 (license license:bsd-3)))
38119
38120(define-public python-text-unidecode
38121 (package
38122 (name "python-text-unidecode")
38123 (version "1.3")
38124 (source
38125 (origin
38126 (method url-fetch)
38127 (uri (pypi-uri "text-unidecode" version))
38128 (sha256
38129 (base32 "14xb99fdv52j21dsljgsbmbaqv10ps4b453p229r29sdn4xn1mms"))))
38130 (build-system pyproject-build-system)
38131 (native-inputs
38132 (list python-pytest
38133 python-setuptools))
38134 (home-page "https://github.com/kmike/text-unidecode/")
38135 (synopsis "Decode Unicode data")
38136 (description
38137 "@code{text-unidecode} is a basic Python port of the @code{Text::Unidecode}
38138Perl library. It can create ASCII representations of Unicode data. In general
38139users should prefer the @code{python-unidecode} package which offers better
38140memory usage and transliteration quality.")
38141 ;; The user can choose either license.
38142 (license (list license:clarified-artistic license:gpl2+))))
38143
38144(define-public python-textdistance
38145 (package
38146 (name "python-textdistance")
38147 (version "4.6.3")
38148 (source
38149 (origin
38150 (method git-fetch)
38151 (uri (git-reference
38152 (url "https://github.com/life4/textdistance")
38153 (commit version)))
38154 (file-name (git-file-name name version))
38155 (sha256
38156 (base32 "1qaplikab46p38jqr93bxd26vvxcnvib15fjxmmp4cbsiy5196sg"))))
38157 (build-system pyproject-build-system)
38158 ;; tests: 430 passed, 1446 warnings
38159 (native-inputs
38160 (list python-numpy
38161 python-pytest
38162 python-setuptools))
38163 (propagated-inputs
38164 (list python-jellyfish
38165 python-distance
38166 python-levenshtein
38167 python-pylev
38168 python-pyxdameraulevenshtein
38169 python-rapidfuzz))
38170 (home-page "https://github.com/life4/textdistance")
38171 (synopsis "Compute distance between the two texts")
38172 (description "@code{textdistance} is a pure Python library for comparing
38173distance between two or more sequences by many algorithms.")
38174 (license license:expat)))
38175
38176(define-public python-textparser
38177 (package
38178 (name "python-textparser")
38179 (version "0.24.0")
38180 (source
38181 (origin
38182 (method url-fetch)
38183 (uri (pypi-uri "textparser" version))
38184 (sha256
38185 (base32 "0dc3aqbzh0x13i6cmr73q777wv8nxyk3p0kdnynh5l59bbkhixsn"))))
38186 (build-system pyproject-build-system)
38187 (arguments
38188 (list #:test-backend #~'unittest))
38189 (native-inputs (list python-setuptools))
38190 (home-page "https://github.com/eerimoq/textparser")
38191 (synopsis "Fast text parser for Python")
38192 (description "This library provides a text parser written in the Python
38193language. It aims to be fast.")
38194 (license license:expat)))
38195
38196(define-public python-texttable
38197 (package
38198 (name "python-texttable")
38199 (version "1.7.0")
38200 (source
38201 (origin
38202 (method git-fetch)
38203 (uri (git-reference
38204 (url "https://github.com/foutaise/texttable/")
38205 (commit (string-append "v" version))))
38206 (file-name (git-file-name name version))
38207 (sha256
38208 (base32 "1p3g8v4wic6bpwa2r1h95a3mrx4vl6r6ci7ijwp0lmq55j9v9rx7"))))
38209 (build-system pyproject-build-system)
38210 (arguments (list #:test-flags #~(list "tests.py")))
38211 (native-inputs (list python-pytest python-setuptools))
38212 (home-page "https://github.com/foutaise/texttable/")
38213 (synopsis "Create simple ASCII tables in Python")
38214 (description
38215 "This package provides a Python module for creating simple ASCII
38216tables.")
38217 (license license:expat)))
38218
38219(define-public python-textual
38220 (package
38221 (name "python-textual")
38222 (version "7.4.0")
38223 (source
38224 (origin
38225 (method git-fetch)
38226 (uri (git-reference
38227 (url "https://github.com/Textualize/textual")
38228 (commit (string-append "v" version))))
38229 (file-name (git-file-name name version))
38230 (sha256
38231 (base32 "0xnfb8g0p66f6i4kzd6l2y2cp1pm33la1rj0hbdws72j5rcpq0nv"))))
38232 (build-system pyproject-build-system)
38233 (arguments
38234 (list
38235 #:test-flags
38236 ;; Snapshot tests require python-pytest-textual-snapshot which
38237 ;; in turn depends on python-textual.
38238 '(list "--ignore=tests/snapshot_tests/test_snapshots.py"
38239 "-k" (string-append
38240 ;; Broken for unknown reason.
38241 "not test_textual_env_var"
38242 ;; Tests that require python-treesitter-languages.
38243 " and not test_widget_construct"
38244 " and not test_setting_builtin_language_via_constructor"
38245 " and not test_setting_builtin_language_via_attribute"
38246 " and not test_setting_language_to_none"
38247 " and not test_setting_unknown_language"
38248 " and not test_register_language"
38249 " and not test_update_highlight_query"
38250 " and not test_default_theme"
38251 " and not test_setting_builtin_themes"
38252 " and not test_setting_unknown_theme_raises_exception"
38253 " and not test_registering_and_setting_theme"
38254 " and not test_progress_bar_width_1fr"))
38255 #:phases
38256 #~(modify-phases %standard-phases
38257 (add-after 'unpack 'relax-requirements
38258 (lambda _
38259 (substitute* "pyproject.toml"
38260 (("pygments =.*")
38261 "pygments = \"*\"\n")))))))
38262 (propagated-inputs
38263 (list python-markdown-it-py
38264 python-mdit-py-plugins
38265 python-platformdirs
38266 python-rich
38267 python-tree-sitter
38268 ;; python-tree-sitter-languages ; optional, not packed yet
38269 python-typing-extensions))
38270 (native-inputs
38271 (list python-poetry-core
38272 python-pytest
38273 python-pytest-asyncio
38274 python-pytest-xdist))
38275 (home-page "https://github.com/Textualize/textual")
38276 (synopsis "Build text user interfaces in Python")
38277 (description "Textual is a @acronym{TUI, Text User Interface} framework
38278for Python inspired by modern web development.")
38279 (license license:expat)))
38280
38281(define-public python-tftpy
38282 (package
38283 (name "python-tftpy")
38284 (version "0.8.6")
38285 (source
38286 (origin
38287 (method git-fetch)
38288 (uri (git-reference
38289 (url "https://github.com/msoulier/tftpy")
38290 (commit version)))
38291 (file-name (git-file-name name version))
38292 (sha256
38293 (base32 "11cs52skmisg7rlmcxghmpcxfszcwmph6cvmfdn2p0ks6ckfy9q2"))))
38294 (build-system pyproject-build-system)
38295 (arguments
38296 (list
38297 #:test-backend #~'unittest
38298 #:test-flags #~(list "tests/test.py")
38299 #:phases
38300 #~(modify-phases %standard-phases
38301 (add-before 'check 'configure-tests
38302 (lambda* (#:key tests? #:allow-other-keys)
38303 (when tests?
38304 ;; The default DEBUG logging level is way too verbose.
38305 (substitute* "tests/test.py"
38306 (("logging\\.DEBUG")
38307 "logging.INFO"))))))))
38308 (native-inputs (list python-setuptools))
38309 (home-page "https://tftpy.sourceforge.net/")
38310 (synopsis "Python trivial file transfer protocol (TFTP) library")
38311 (description
38312 "TFTPy is a trivial file transfer protocol (TFTP) Python library. It can
38313be used to act both as a TFTP client or TFTP server.")
38314 (license license:expat)))
38315
38316(define-public python-thefuzz
38317 (package
38318 (name "python-thefuzz")
38319 (version "0.22.1")
38320 (source
38321 (origin
38322 (method git-fetch)
38323 (uri (git-reference
38324 (url "https://github.com/seatgeek/thefuzz")
38325 (commit version)))
38326 (file-name (git-file-name name version))
38327 (sha256
38328 (base32 "1l24masn3ilfnwdasi5bhs1vb3ll1nqzxljiasdhfly1ncfjyvca"))))
38329 (build-system pyproject-build-system)
38330 (arguments
38331 (list #:test-flags #~'("-k" "not TestCodeFormat")
38332 #:phases #~(modify-phases %standard-phases
38333 ;; pycodestyle is only used in TestCodeFormat.
38334 (add-after 'unpack 'unrequire-pycodestyle
38335 (lambda _
38336 (substitute* "test_thefuzz.py"
38337 (("import pycodestyle.*") "")))))))
38338 (propagated-inputs (list python-rapidfuzz))
38339 (native-inputs (list python-hypothesis
38340 python-pytest
38341 python-setuptools))
38342 (home-page "https://github.com/seatgeek/thefuzz")
38343 (synopsis "Fuzzy string matching in Python")
38344 (description
38345 "This Python package implements fuzzing string matching
38346using Levenshtein distance.")
38347 (license license:expat)))
38348
38349(define-public python-three-merge
38350 (package
38351 (name "python-three-merge")
38352 (version "0.1.1")
38353 (source
38354 (origin
38355 ;; There are no tests in the PyPI tarball.
38356 (method git-fetch)
38357 (uri (git-reference
38358 (url "https://github.com/spyder-ide/three-merge")
38359 (commit (string-append "v" version))))
38360 (file-name (git-file-name name version))
38361 (sha256
38362 (base32 "1fw28swh6jq4myr09j7gv68l241b8vwg470ak5xv0x4xwh2a1m86"))))
38363 (build-system pyproject-build-system)
38364 (propagated-inputs
38365 (list python-diff-match-patch))
38366 (native-inputs
38367 (list python-pytest python-setuptools python-wheel))
38368 (home-page "https://github.com/spyder-ide/three-merge")
38369 (synopsis "Library for merging two strings with respect to a base one")
38370 (description
38371 "This package provides a Python library to perform a 3-way merge between
38372strings, based on @code{diff-match-patch}. This library performs merges at a
38373character level, as opposed to most VCS systems, which opt for a line-based
38374approach.")
38375 (license license:expat)))
38376
38377(define-public python-throttler
38378 (package
38379 (name "python-throttler")
38380 (version "1.2.2")
38381 (source
38382 (origin
38383 (method git-fetch)
38384 (uri (git-reference
38385 (url "https://github.com/uburuntu/throttler")
38386 (commit (string-append "v" version))))
38387 (sha256
38388 (base32 "1gn21x0zkm7rr7qijlz7nvw7z0mm1j2r0r2lslg7wln1z36gjkbw"))))
38389 (build-system pyproject-build-system)
38390 (native-inputs
38391 (list python-aiohttp
38392 python-codecov
38393 python-flake8
38394 python-pytest
38395 python-pytest-asyncio
38396 python-setuptools
38397 python-wheel))
38398 (home-page "https://github.com/uburuntu/throttler")
38399 (synopsis "Throttling with asyncio support")
38400 (description
38401 "This is a Python package for easy throttling with asyncio support.")
38402 (license license:expat)))
38403
38404(define-public python-tifffile
38405 (package
38406 (name "python-tifffile")
38407 (version "2025.10.4")
38408 (source
38409 (origin
38410 (method url-fetch)
38411 (uri (pypi-uri "tifffile" version))
38412 (sha256
38413 (base32 "0f1ybmr2jz19gjg92p9vz3qib49m0x4ipxvrvjyfa6r1mcb7qhrf"))))
38414 (build-system pyproject-build-system)
38415 ;; Tests require lfdfiles, which depends on tifffile
38416 (arguments (list #:tests? #f))
38417 (propagated-inputs
38418 (list python-numpy))
38419 (native-inputs
38420 (list python-setuptools))
38421 (home-page "https://www.lfd.uci.edu/~gohlke/")
38422 (synopsis "Read and write TIFF(r) files")
38423 (description
38424 "This package lets you read image and metadata from many bio-scientific
38425formats such as plain TIFF, BigTIFF, OME-TIFF, STK, LSM, SGI,NIH, ImageJ,
38426MicroManager, MD GEL, and FluoView files. It also lets you write numpy arrays
38427to TIFF, BigTIFF, and ImageJ hyperstack compatible files.")
38428 (license license:bsd-3)))
38429
38430(define-public python-tiktoken
38431 (package
38432 (name "python-tiktoken")
38433 (version "0.9.0")
38434 (source
38435 (origin
38436 (method url-fetch)
38437 (uri (pypi-uri "tiktoken" version))
38438 (sha256
38439 (base32 "0p9cg6n8mzdi4lbbwxrrp26chy5hr14bqmzr3w74kq1qm6k5qanh"))))
38440 (build-system cargo-build-system)
38441 (arguments
38442 (list
38443 #:install-source? #false
38444 #:imported-modules
38445 (append %pyproject-build-system-modules
38446 %cargo-build-system-modules)
38447 #:modules
38448 '((guix build cargo-build-system)
38449 ((guix build pyproject-build-system) #:prefix py:)
38450 (guix build utils))
38451 #:phases
38452 #~(modify-phases %standard-phases
38453 (replace 'build
38454 (assoc-ref py:%standard-phases 'build))
38455 (add-after 'install 'wrap
38456 (lambda _
38457 ;; Collection of python- and pyproject-build-system phases
38458 ;; between 'install and 'check.
38459 (assoc-ref py:%standard-phases 'add-install-to-pythonpath)
38460 (assoc-ref py:%standard-phases 'add-install-to-path)
38461 (assoc-ref py:%standard-phases 'wrap)
38462 (assoc-ref py:%standard-phases 'create-entrypoints)
38463 (assoc-ref py:%standard-phases 'compile-bytecode)))
38464 (replace 'install
38465 (assoc-ref py:%standard-phases 'install)))))
38466 (propagated-inputs (list python-regex python-requests))
38467 (inputs (cargo-inputs 'python-tiktoken))
38468 (native-inputs
38469 (list python-setuptools
38470 python-setuptools-rust
38471 python-wheel
38472 python-wrapper))
38473 (home-page "https://github.com/openai/tiktoken/")
38474 (synopsis "Fast BPE tokeniser for use with OpenAI's models")
38475 (description
38476 "Tiktoken is a fast @dfn{byte pair encoding} (BPE) tokeniser for use with
38477@code{OpenAI's} models.")
38478 (license license:expat)))
38479
38480(define-public python-timeout-decorator
38481 ;; TODO: Remove when python-requests-caches releases a fresh version dropping
38482 ;; it, see, <https://github.com/requests-cache/requests-cache/pull/1111>.
38483 (package
38484 (name "python-timeout-decorator")
38485 (version "0.5.0")
38486 (source
38487 (origin
38488 (method url-fetch)
38489 (uri (pypi-uri "timeout-decorator" version))
38490 (sha256
38491 (base32 "1mxk2qyydhzncm93z08kvj5ssxq3fr2n7pkrrji28nqwvdc2ybva"))))
38492 (build-system pyproject-build-system)
38493 (arguments (list #:tests? #f))
38494 (native-inputs (list python-setuptools python-wheel))
38495 (home-page "https://github.com/pnpnpn/timeout-decorator")
38496 (synopsis "Timeout decorator")
38497 (description "This package provides a decorator that raises an error
38498when an operation takes longer than expected.")
38499 (license license:expat)))
38500
38501(define-public python-titlecase
38502 (package
38503 (name "python-titlecase")
38504 (version "2.4.1")
38505 (source
38506 (origin
38507 (method url-fetch)
38508 (uri (pypi-uri "titlecase" version))
38509 (sha256
38510 (base32 "1x9myq3rlbw6wh946ncch8px7wyabhzacy2fjji13nmvrivs50vx"))))
38511 (build-system pyproject-build-system)
38512 (arguments
38513 (list
38514 #:test-backend #~'unittest))
38515 (native-inputs
38516 (list python-setuptools))
38517 (home-page "https://github.com/ppannuto/python-titlecase")
38518 (synopsis "Capitalize strings similar to book titles")
38519 (description
38520 "Python-Titlecase is a Python port of John Gruber's titlecase.pl.
38521It capitalizes (predominantly English) strings in a way that is similar to
38522book titles, using the New York Times Manual of Style to leave certain words
38523lowercase.")
38524 (license license:expat)))
38525
38526(define-public python-tlsh
38527 (package
38528 (name "python-tlsh")
38529 (version "4.11.2")
38530 (home-page "https://github.com/trendmicro/tlsh")
38531 (source
38532 (origin
38533 (method git-fetch)
38534 (uri (git-reference (url home-page) (commit version)))
38535 (file-name (git-file-name name version))
38536 (sha256
38537 (base32 "1gb5j73nw3nmx030rf8pm75rns5syxhv44zxr6i74kjicyly1i9w"))))
38538 (build-system pyproject-build-system)
38539 (arguments
38540 (list
38541 #:phases
38542 #~(modify-phases %standard-phases
38543 (add-before 'build 'configure
38544 (lambda _
38545 (invoke "cmake" "."))) ;to generate tlsh_version.h
38546 (add-after 'configure 'chdir
38547 (lambda _
38548 (chdir "py_ext")))
38549 (replace 'check
38550 (lambda* (#:key tests? #:allow-other-keys)
38551 (when tests?
38552 (with-directory-excursion "../Testing"
38553 (invoke "./python_test.sh"))))))))
38554 (native-inputs (list cmake-minimal python-setuptools))
38555 (synopsis "Fuzzy matching library for Python")
38556 (description
38557 "Trend Micro Locality Sensitive Hash (TLSH) is a fuzzy matching library.
38558Given a byte stream with a minimum length of 256 bytes, TLSH generates a hash
38559value which can be used for similarity comparisons. Similar objects have
38560similar hash values, which allows for the detection of similar objects by
38561comparing their hash values. The byte stream should have a sufficient amount
38562of complexity; for example, a byte stream of identical bytes will not generate
38563a hash value.")
38564 (license license:asl2.0)))
38565
38566(define-public python-tokenize-rt
38567 (package
38568 (name "python-tokenize-rt")
38569 (version "6.2.0")
38570 (source
38571 (origin
38572 (method git-fetch)
38573 (uri (git-reference
38574 (url "https://github.com/asottile/tokenize-rt")
38575 (commit (string-append "v" version))))
38576 (file-name (git-file-name name version))
38577 (sha256
38578 (base32 "1maa9sifma0a6v7kl7mmyqzj0jdclzlp4wjr0vkdx95raihxx4fv"))))
38579 (build-system pyproject-build-system)
38580 (native-inputs (list python-pytest python-setuptools))
38581 (home-page "https://github.com/asottile/tokenize-rt")
38582 (synopsis "Wrapper around the stdlib tokenize which roundtrips")
38583 (description
38584 "This Python library is a wrapper around @code{tokenize} from the Python
38585standard library. It provides two additional tokens @code{ESCAPED_NL} and
38586@code{UNIMPORTANT_WS}, and a @code{Token} data type. Use @code{src_to_tokens}
38587and @code{tokens_to_src} to roundtrip.")
38588 (license license:expat)))
38589
38590(define-public python-tomlkit
38591 (package
38592 (name "python-tomlkit")
38593 (version "0.13.3")
38594 (source
38595 (origin
38596 (method url-fetch)
38597 (uri (pypi-uri "tomlkit" version))
38598 (sha256
38599 (base32 "18fjmmhiv5jkkg1dwidmxd0sjqnkf675igizxsa2ppspxr3z4323"))))
38600 (build-system pyproject-build-system)
38601 (native-inputs
38602 (list python-poetry-core
38603 python-pytest
38604 python-pyyaml))
38605 (home-page "https://github.com/sdispater/tomlkit")
38606 (synopsis "Style-preserving TOML library")
38607 (description
38608 "TOML Kit is a 1.0.0rc1-compliant TOML library. It includes a parser that
38609preserves all comments, indentations, whitespace and internal element ordering,
38610and makes them accessible and editable via an intuitive API. It can also
38611create new TOML documents from scratch using the provided helpers. Part of the
38612implementation has been adapted, improved, and fixed from Molten.")
38613 (license license:expat)))
38614
38615(define-public python-toolrack
38616 (package
38617 (name "python-toolrack")
38618 (version "4.0.3")
38619 (source
38620 (origin
38621 (method git-fetch)
38622 (uri (git-reference
38623 (url "https://github.com/albertodonato/toolrack")
38624 (commit (string-append "v" version))))
38625 (file-name (git-file-name name version))
38626 (sha256
38627 (base32
38628 "1aglfj7j25fiwx9jh1rl34mlhfpdhn8yrkn30vhkz9yw7zrx42h0"))))
38629 (build-system pyproject-build-system)
38630 (arguments
38631 (list
38632 #:phases
38633 #~(modify-phases %standard-phases
38634 (add-after 'unpack 'patch-/bin/sh
38635 (lambda _
38636 (substitute* "tests/aio/process_test.py"
38637 (("/bin/sh")
38638 (which "sh"))))))))
38639 (native-inputs
38640 (list python-pytest
38641 python-pytest-asyncio
38642 python-pytest-mock
38643 python-setuptools))
38644 (home-page "https://github.com/albertodonato/toolrack")
38645 (synopsis "Collection of Python utility functions and classes")
38646 (description "This package provides a collection of miscellaneous utility
38647functions and classes.")
38648 (license license:lgpl3+)))
38649
38650(define-public python-toolshed
38651 (package
38652 (name "python-toolshed")
38653 (version "0.4.8")
38654 (source
38655 (origin
38656 (method git-fetch)
38657 (uri (git-reference
38658 (url "https://github.com/brentp/toolshed")
38659 (commit (string-append "v" version))))
38660 (file-name (git-file-name name version))
38661 (sha256
38662 (base32 "0r6c6nc2mj83fbg2cwym810cg5gbd0cl7qkhjca7i6vnshcbv8y0"))))
38663 (build-system pyproject-build-system)
38664 (native-inputs
38665 (list python-pytest
38666 python-setuptools))
38667 (home-page "https://github.com/brentp/toolshed/")
38668 (synopsis "Collection of modules and functions for working with data")
38669 (description "This is a collection of well-tested, simple modules and
38670functions that aim to reduce boilerplate when working with data.")
38671 (license license:bsd-2)))
38672
38673(define-public python-toolz
38674 (package
38675 (name "python-toolz")
38676 (version "1.1.0")
38677 (source
38678 (origin
38679 (method git-fetch)
38680 (uri (git-reference
38681 (url "https://github.com/pytoolz/toolz")
38682 (commit version)))
38683 (file-name (git-file-name name version))
38684 (sha256
38685 (base32 "09ams76wl5g0a4v4qiqi9xdagvq1pcwz8nglnhcfarbfivga2rbz"))))
38686 (build-system pyproject-build-system)
38687 (arguments
38688 (list
38689 #:phases
38690 #~(modify-phases %standard-phases
38691 (add-after 'unpack 'set-version
38692 (lambda _
38693 (substitute* "pyproject.toml"
38694 (("\\[tool.setuptools-git-versioning\\]" all)
38695 (string-append "[tool.setuptools_scm]\n"
38696 "write_to = \"toolz/_version.py\"\n"
38697 all))))))))
38698 (native-inputs
38699 (list python-pytest
38700 python-setuptools
38701 ;; Project expects setuptools-git-versioning to build version, but
38702 ;; it does not support envar override as seuptools-scm.
38703 python-setuptools-scm))
38704 (home-page "https://github.com/pytoolz/toolz/")
38705 (synopsis "List processing tools and functional utilities")
38706 (description
38707 "This package provides a set of utility functions for iterators,
38708functions, and dictionaries.")
38709 (license license:bsd-3)))
38710
38711(define-public python-toposort
38712 (package
38713 (name "python-toposort")
38714 (version "1.10")
38715 (source
38716 (origin
38717 (method url-fetch)
38718 (uri (pypi-uri "toposort" version))
38719 (sha256
38720 (base32 "1gd66z5dy6j7qs5qkj1pg0vb15rwd571yq02fkm9d9nhaff4gfxz"))))
38721 (build-system pyproject-build-system)
38722 (arguments
38723 (list #:test-backend #~'custom
38724 #:test-flags #~(list "-m" "test.test_toposort")))
38725 (native-inputs (list python-setuptools))
38726 (home-page "https://gitlab.com/ericvsmith/toposort")
38727 (synopsis "Topological sort algorithm")
38728 (description
38729 "This package provides an implementation of a topological sort
38730algorithm.")
38731 (license license:asl2.0)))
38732
38733(define-public python-towncrier
38734 (package
38735 (name "python-towncrier")
38736 (version "25.8.0")
38737 (source
38738 (origin
38739 (method url-fetch)
38740 (uri (pypi-uri "towncrier" version))
38741 (sha256
38742 (base32 "1c8fjjwlx29jgllxvyzby4cn51iraxba0cmfnfmmgb9iz0lnvwgf"))))
38743 (build-system pyproject-build-system)
38744 (native-inputs
38745 (list git-minimal/pinned ;tests create git repositories
38746 python-hatchling
38747 python-pytest
38748 python-twisted))
38749 (propagated-inputs
38750 (list python-click
38751 python-jinja2))
38752 (home-page "https://towncrier.readthedocs.io/en/stable/")
38753 (synopsis "Manage release notes")
38754 (description
38755 "@code{towncrier} is a utility to produce useful, summarized news files
38756 (also known as changelogs) for a project.")
38757 (license license:expat)))
38758
38759(define-public python-tqdm
38760 (package
38761 (name "python-tqdm")
38762 (version "4.67.1")
38763 (source
38764 (origin
38765 (method url-fetch)
38766 (uri (pypi-uri "tqdm" version))
38767 (sha256
38768 (base32 "1wi7cql2fc76b5z9v1sr96ix2gxcb974z8qfydjkmh885k2zkbpq"))))
38769 (build-system pyproject-build-system)
38770 (arguments
38771 (list #:test-flags
38772 '(list "-o" "asyncio_mode=auto"
38773 "-k" "not perf and not test_rlock_creation")))
38774 (native-inputs
38775 (list python-pytest
38776 python-pytest-asyncio
38777 python-pytest-timeout
38778 python-setuptools
38779 python-setuptools-scm
38780 python-toml
38781 python-wheel))
38782 (home-page "https://github.com/tqdm/tqdm")
38783 (synopsis "Fast, extensible progress meter")
38784 (description
38785 "Make loops show a progress bar on the console by just wrapping any
38786iterable with @code{|tqdm(iterable)|}. Offers many options to define
38787design and layout.")
38788 (license (list license:mpl2.0 license:expat))))
38789
38790(define-public python-traitlets
38791 (package
38792 (name "python-traitlets")
38793 (version "5.14.3")
38794 (source
38795 (origin
38796 (method url-fetch)
38797 (uri (pypi-uri "traitlets" version))
38798 (sha256
38799 (base32 "1dxnjs5vjfsbvr3jhlhl6696zafdfl1i5b1j6x5lpj826nfmgl4y"))))
38800 (build-system pyproject-build-system)
38801 ;; tests: 566 passed, 3 skipped, 1 warning
38802 (native-inputs
38803 (list python-hatchling
38804 python-pytest))
38805 (home-page "https://ipython.org")
38806 (synopsis "Configuration system for Python applications")
38807 (description
38808 "Traitlets is a framework that lets Python classes have attributes with
38809type checking, dynamically calculated default values, and ‘on change’
38810callbacks. The package also includes a mechanism to use traitlets for
38811configuration, loading values from files or from command line arguments. This
38812is a distinct layer on top of traitlets, so you can use traitlets in your code
38813without using the configuration machinery.")
38814 (license license:bsd-3)))
38815
38816(define-public python-translate-toolkit
38817 (package
38818 (name "python-translate-toolkit")
38819 (version "3.15.6")
38820 (source
38821 (origin
38822 (method url-fetch)
38823 (uri (pypi-uri "translate_toolkit" version))
38824 (sha256
38825 (base32 "0p23c5nvfw19wg2h4rqxf301z0023yl7ivpjyhr5byxf0sxnqnpq"))))
38826 (build-system pyproject-build-system)
38827 (arguments
38828 (list
38829 ;; tests: 2828 passed, 3 skipped, 28 deselected, 32 xfailed, 11 warnings
38830 #:test-flags
38831 ;; TODO: Some of the optional inputs are not packaged yet.
38832 #~(list #$@(map (lambda (file) (string-append "--ignore="
38833 "tests/translate/"
38834 file))
38835 (list "convert/test_ini2po.py"
38836 "convert/test_php2po.py"
38837 "convert/test_po2ini.py"
38838 "convert/test_po2php.py"
38839 "storage/test_cpo.py"
38840 "storage/test_fluent.py"
38841 "storage/test_ini.py"
38842 "storage/test_php.py"
38843 "storage/test_po.py"
38844 "storage/test_pypo.py"
38845 "storage/test_subtitles.py"))
38846 #$@(map (lambda (test) (string-append "--deselect="
38847 "tests/translate/storage/"
38848 test))
38849 ;; UnicodeDecodeError: 'utf-8' codec can't decode byte
38850 ;; 0xff in position 0: invalid start byte
38851 (list "test_csvl10n.py::TestCSV::test_encoding_save"
38852 ;; FileNotFoundError: [Errno 2] No such file or
38853 ;; directory: 'msgfmt'
38854 "test_mo.py::TestMOFile::test_output"
38855 ;; assert 0 == -16200
38856 "test_poheader.py::test_timezones"))
38857 #$@(map (lambda (test) (string-append "--deselect="
38858 "tests/translate/tools/"
38859 test))
38860 ;; XXX: Some issues with XML parsing.
38861 (list "test_junitmsgfmt.py::test_output"
38862 "test_pocount.py::test_output"
38863 "test_pocount.py::test_cases"))
38864 "-k" "not test_open_office_to_xliff and not test_po_to_xliff")))
38865 (native-inputs
38866 (list python-pytest
38867 python-setuptools
38868 python-setuptools-scm))
38869 (propagated-inputs
38870 (list python-cwcwidth
38871 python-cheroot
38872 ;; python-aeidon
38873 ;; python-fluent
38874 python-iniparse
38875 python-lxml
38876 python-mistletoe
38877 python-phply
38878 python-pyparsing
38879 python-ruamel.yaml
38880 python-vobject))
38881 (home-page "https://toolkit.translatehouse.org")
38882 (synopsis "Tools and API for translation and localization engineering")
38883 (description
38884 "Tools and API for translation and localization engineering. It contains
38885several utilities, as well as an API for building localization tools.")
38886 (license license:gpl2+)))
38887
38888;; XXX: See: <https://codeberg.org/guix/guix/pulls/3780#issuecomment-7957715>
38889(define-public python-translate-toolkit-for-offlate
38890 (hidden-package
38891 (package
38892 (inherit python-translate-toolkit)
38893 (version "3.6.2")
38894 (source
38895 (origin
38896 (method url-fetch)
38897 (uri (pypi-uri "translate-toolkit" version ".tar.gz"))
38898 (sha256
38899 (base32 "0m4cpsp7x7h5m5agg4ybscf7y86wla46q2lvxpi2myplb6qlgcli"))))
38900 (arguments
38901 (list #:tests? #f)))))
38902
38903(define-public python-translitcodec
38904 (package
38905 (name "python-translitcodec")
38906 (version "0.7.0")
38907 (source
38908 (origin
38909 (method git-fetch)
38910 (uri (git-reference
38911 (url "https://github.com/claudep/translitcodec")
38912 (commit (string-append "version-" version))))
38913 (file-name (git-file-name name version))
38914 (sha256
38915 (base32 "1cj11sa5hy8ga7p0dgwi4g4gv0qx6c1yi2csgnvxiir16ywslhpw"))))
38916 (build-system pyproject-build-system)
38917 (native-inputs (list python-pytest python-setuptools))
38918 (home-page "https://github.com/claudep/translitcodec")
38919 (synopsis "Unicode to 8-bit charset transliteration codec")
38920 (description
38921 "This package contains codecs for transliterating ISO 10646 texts into
38922best-effort representations using smaller coded character sets (ASCII,
38923ISO 8859, etc.).")
38924 (license license:expat)))
38925
38926(define-public python-treelib
38927 (package
38928 (name "python-treelib")
38929 (version "1.8.0")
38930 (source
38931 (origin
38932 (method git-fetch)
38933 (uri (git-reference
38934 (url "https://github.com/caesar0301/treelib")
38935 (commit (string-append "v" version))))
38936 (file-name (git-file-name name version))
38937 (sha256
38938 (base32 "0jd3rdaq8v7ykb626cm1gxa03higqnn2pmnv46fc0lc55xbrkxlf"))
38939 (patches
38940 (search-patches "python-treelib-remove-python2-compat.patch"))))
38941 (build-system pyproject-build-system)
38942 (native-inputs (list python-poetry-core python-pytest))
38943 (home-page "https://github.com/caesar0301/treelib")
38944 (synopsis "Implementation of a tree structure in Python")
38945 (description
38946 "This package provides a Python implementation of a tree structure.")
38947 (license license:asl2.0)))
38948
38949(define-public python-trio
38950 (package
38951 (name "python-trio")
38952 (version "0.32.0")
38953 (source
38954 (origin
38955 (method url-fetch)
38956 (uri (pypi-uri "trio" version))
38957 (sha256
38958 (base32 "0sw04md83splkb0x37bmd1yj8rbf033p2k0x3qim3k9vjbn2j3qm"))))
38959 (build-system pyproject-build-system)
38960 (arguments
38961 (list
38962 #:test-flags
38963 #~(list
38964 #$@(if (package? (this-package-native-input "python-trustme"))
38965 #~()
38966 #~("--ignore=src/trio/_tests/test_dtls.py"
38967 "--ignore=src/trio/_tests/test_highlevel_ssl_helpers.py"
38968 "--ignore=src/trio/_tests/test_ssl.py"))
38969 ;; Skip tests for the upstream repository's tooling.
38970 "--ignore=src/trio/_tests/tools"
38971 "-k" (string-join
38972 (list
38973 ;; Keyboard interrupts misbehave in the build sandbox.
38974 "not test_ki_in_repl"
38975 "test_KI_interrupts"
38976 "test_run_in_trio_thread_ki"
38977 ;; Somehow f'{check_errno_is_5!r}' evaluates
38978 ;; to "'check_errno_is_5'" instead of "<function ...>",
38979 ;; and f'{bool!r}' to "'bool'" instead of "<class 'bool'>".
38980 ;; Matcher and RaisesGroup are deprecated in Trio 0.33
38981 ;; will probably be removed in version 0.35.
38982 "test_Matcher_check"
38983 "test_matcher_tostring"
38984 "test_raisesgroup_tostring"
38985 ;; Failure in name resolution.
38986 "test_SocketType_resolve"
38987 ;; OSError: protocol not found.
38988 "test_getprotobyname")
38989 " and not ")
38990 "src/trio/_tests")
38991 #:phases
38992 #~(modify-phases %standard-phases
38993 (add-after 'unpack 'patch-pthread-path
38994 (lambda* (#:key inputs #:allow-other-keys)
38995 (substitute* '("src/trio/_core/_thread_cache.py"
38996 "src/trio/_tests/test_threads.py")
38997 (("ctypes.util.find_library\\(\"pthread\"\\)")
38998 (simple-format #f "~s"
38999 (search-input-file inputs "lib/libpthread.so.0"))))))
39000 (add-before 'check 'set-env
39001 (lambda _
39002 ;; Tests require a writable home.
39003 (setenv "HOME" "/tmp"))))))
39004 (native-inputs
39005 (append
39006 (if (supported-package? python-pyopenssl)
39007 (list python-pyopenssl)
39008 '())
39009 (if (supported-package? python-trustme)
39010 (list python-trustme)
39011 '())
39012 (list python-async-generator)
39013 (if (supported-package? python-cryptography)
39014 (list python-cryptography)
39015 '())
39016 (list python-jedi
39017 python-pylint
39018 python-pytest
39019 python-setuptools)))
39020 (propagated-inputs
39021 (list python-attrs
39022 python-idna
39023 python-outcome
39024 python-sniffio
39025 python-sortedcontainers))
39026 (home-page "https://trio.readthedocs.io")
39027 (synopsis "Friendly Python library for async concurrency and I/O")
39028 (description
39029 "Trio strives to be a production-quality, async/await-native I/O library
39030for Python. Like all async libraries, its main purpose is to help you write
39031programs that do multiple things at the same time with parallelized I/O.")
39032 ;; Either license applies.
39033 (license (list license:expat license:asl2.0))))
39034
39035(define-public python-trio-typing
39036 (package
39037 (name "python-trio-typing")
39038 (version "0.10.0")
39039 (source
39040 (origin
39041 (method url-fetch)
39042 (uri (pypi-uri "trio-typing" version))
39043 (sha256
39044 (base32 "1hvsj3w500i33ykfgh3sfkjnxhxf05incx131smshlkd562fcph6"))))
39045 (build-system pyproject-build-system)
39046 (native-inputs (list python-pytest python-setuptools python-wheel))
39047 (propagated-inputs
39048 (list python-async-generator
39049 python-importlib-metadata
39050 python-mypy-extensions
39051 python-packaging
39052 python-trio
39053 python-typing-extensions))
39054 (home-page "https://github.com/python-trio/trio-typing")
39055 (synopsis "Static type checking support for Trio and related projects")
39056 (description
39057 "This package provides:
39058
39059@itemize
39060@item PEP 561 typing stubs packages for the Trio project packages:
39061
39062@itemize
39063@item trio (@code{trio-stubs})
39064@item outcome (@code{outcome-stubs})
39065@item async_generator (@code{async_generator-stubs})
39066@end itemize
39067
39068@item A package @code{trio_typing} containing types that Trio programs often
39069want to refer to (@code{AsyncGenerator[Y, S]} and @code{TaskStatus[T])} and
39070a mypy plugin that smooths over some limitations in the basic type hints.
39071@end itemize")
39072 ;; Either license applies.
39073 (license (list license:expat license:asl2.0))))
39074
39075(define-public python-trubar
39076 (package
39077 (name "python-trubar")
39078 (version "0.3.4")
39079 (source
39080 (origin
39081 (method url-fetch)
39082 (uri (pypi-uri "trubar" version))
39083 (sha256
39084 (base32 "149l5wid1b41gmfzsrhapcigcbcsflviz8p1pfa937443fxw1dkd"))))
39085 (build-system pyproject-build-system)
39086 (arguments
39087 (list
39088 #:test-flags
39089 #~(list "-k" (string-join
39090 ;; AttributeError: module 'libcst' has no attribute
39091 ;; 'FlattenSentinel'. Did you mean: 'MaybeSentinel'?
39092 (list "not test_import_from_future"
39093 "test_inport_after_docstring"
39094 ;; AssertionError: Items in the second set but not
39095 ;; the first
39096 "test_walk_files")
39097 " and not "))))
39098 (native-inputs
39099 (list python-pytest
39100 python-setuptools
39101 python-wheel))
39102 (propagated-inputs
39103 (list python-libcst
39104 python-pyyaml))
39105 (home-page "https://github.com/janezd/trubar")
39106 (synopsis "Utility for translation of Python sources")
39107 (description
39108 "This package provides a tool for translation and localization of Python
39109programs via modification of source files. Trubar supports f-strings and does
39110not require any changes to the original source code, such as marking strings
39111for translation.")
39112 (license license:expat)))
39113
39114(define-public python-twine
39115 (package
39116 (name "python-twine")
39117 (version "6.2.0")
39118 (source
39119 (origin
39120 (method url-fetch)
39121 (uri (pypi-uri "twine" version))
39122 (sha256
39123 (base32 "1kvm9cdvbnh232wafww1w5scaic9kkrwhlff1mvmk68cswphvvg5"))))
39124 (build-system pyproject-build-system)
39125 (arguments
39126 (list
39127 ;; tests: 228 passed, 1 deselected
39128 #:test-flags
39129 ;; Assertion is not equal for one tests.
39130 #~(list "--deselect=tests/test_check.py::test_fails_rst_syntax_error")))
39131 (native-inputs
39132 (list python-pretend
39133 python-pytest
39134 python-pytest-socket
39135 python-setuptools
39136 python-setuptools-scm))
39137 (propagated-inputs
39138 (list python-id
39139 python-keyring
39140 python-packaging
39141 python-readme-renderer
39142 python-requests
39143 python-requests-toolbelt
39144 python-rfc3986
39145 python-rich
39146 python-urllib3))
39147 (home-page "https://github.com/pypa/twine")
39148 (synopsis "Collection of utilities for interacting with PyPI")
39149 (description
39150 "@code{twine} currently supports registering projects and uploading
39151distributions. It authenticates the user over HTTPS, allows them to pre-sign
39152their files and supports any packaging format (including wheels).")
39153 (license license:asl2.0)))
39154
39155(define-public python-twisted
39156 (package
39157 (name "python-twisted")
39158 (version "25.5.0")
39159 (source
39160 (origin
39161 (method git-fetch)
39162 (uri (git-reference
39163 (url "https://github.com/twisted/twisted")
39164 (commit (string-append "twisted-" version))))
39165 (file-name (git-file-name name version))
39166 (sha256
39167 (base32 "07v2ssr2s6zcj2r6nvp28x7i3awjb6k8gz0mi4wg606gw4kdgxsk"))))
39168 (build-system pyproject-build-system)
39169 (arguments
39170 (list
39171 ;; tests: skips=638, successes=9759
39172 #:test-backend #~'custom
39173 #:test-flags
39174 #~(list "-m" "twisted.trial"
39175 "--temp-directory=/tmp/_trial_temp"
39176 (string-append "-j" (number->string (min 8 (parallel-job-count))))
39177 "twisted")
39178 #:phases
39179 #~(modify-phases %standard-phases
39180 (add-after 'unpack 'disable-broken-tests
39181 (lambda _
39182 (for-each delete-file
39183 (list
39184 ;; No idea why they fail
39185 "src/twisted/test/test_log.py"
39186 ;; Network tests
39187 "src/twisted/conch/test/test_cftp.py"
39188 "src/twisted/internet/test/test_endpoints.py"
39189 "src/twisted/protocols/test/test_tls.py"
39190 "src/twisted/test/test_sslverify.py"
39191 "src/twisted/web/test/test_agent.py"
39192 "src/twisted/web/test/test_tap.py"
39193 ;; These need a git executable
39194 "src/twisted/python/test/test_release.py"
39195 ;; These leave behind a socket file, which breaks the
39196 ;; build with "...has an unsupported type"
39197 "src/twisted/internet/test/test_unix.py"
39198 "src/twisted/test/test_unix.py"
39199 ;; These complain about missing test modules.
39200 "src/twisted/test/test_failure.py"
39201 "src/twisted/web/test/test_http2.py"
39202 "src/twisted/conch/test/test_forwarding.py")))))))
39203 (propagated-inputs
39204 (list python-attrs
39205 python-automat
39206 python-bcrypt
39207 python-constantly
39208 python-hyperlink
39209 python-incremental
39210 python-typing-extensions
39211 python-zope-interface
39212 ;; [conch]
39213 (list python "tk")
39214 python-appdirs
39215 python-bcrypt
39216 python-cryptography
39217 ;; [http2]
39218 python-h2
39219 python-priority
39220 ;; [tls]
39221 python-idna
39222 python-pyopenssl
39223 python-service-identity
39224 ;; [serial]
39225 python-pyserial))
39226 (native-inputs
39227 (list glibc-utf8-locales ;for OpenTestLogTests.test_utf8
39228 python-hatch-fancy-pypi-readme
39229 python-hatchling
39230 python-httpx
39231 python-hypothesis
39232 python-incremental
39233 python-pyhamcrest
39234 python-pytest))
39235 (home-page "https://twistedmatrix.com/")
39236 (synopsis "Asynchronous networking framework written in Python")
39237 (description
39238 "Twisted is an extensible framework for Python programming, with special
39239focus on event-based network programming and multiprotocol integration.")
39240 (license license:expat)))
39241
39242(define-public python-txredisapi
39243 (let ((commit "d2259a379695284f4a84d7821ed47e1db409501d")
39244 ;; The latest version is 1.4.11, but it contains a bug:
39245 ;; https://github.com/IlyaSkriblovsky/txredisapi/pull/157. That bug is
39246 ;; patched in commit d2259a3.
39247 (revision "0"))
39248 (package
39249 (name "python-txredisapi")
39250 (version (git-version "1.4.11" revision commit))
39251 (source
39252 (origin
39253 (method git-fetch)
39254 ;; The source distribution on PyPi is missing test files:
39255 ;; https://github.com/IlyaSkriblovsky/txredisapi/pull/155
39256 (uri (git-reference
39257 (url "https://github.com/IlyaSkriblovsky/txredisapi")
39258 (commit commit)))
39259 (file-name (git-file-name name version))
39260 (sha256
39261 (base32 "0v9r01cn5zb0jjb1h394y667345yp17485bl5d4k80019b34dm98"))))
39262 (build-system pyproject-build-system)
39263 (arguments
39264 (list #:test-backend #~'custom
39265 #:test-flags #~(list "-m" "twisted.trial" "tests")
39266 #:phases
39267 #~(modify-phases %standard-phases
39268 ;; The tests require a running Redis server.
39269 (add-before 'check 'start-redis
39270 (lambda _
39271 (invoke "redis-server" "--daemonize" "yes"))))))
39272 (propagated-inputs (list python-twisted))
39273 (native-inputs (list python-mock python-setuptools redis))
39274 (home-page "https://github.com/IlyaSkriblovsky/txredisapi")
39275 (synopsis "Non-blocking Redis client for Python")
39276 (description "txredisapi is a non-blocking client driver for the Redis
39277database, written in Python. It uses Twisted for asynchronous communication
39278with Redis.")
39279 (license license:asl2.0))))
39280
39281(define-public python-typeapi
39282 (package
39283 (name "python-typeapi")
39284 (version "2.2.4")
39285 (source
39286 (origin
39287 (method url-fetch)
39288 (uri (pypi-uri "typeapi" version))
39289 (sha256
39290 (base32 "0yzx10cn33gxqvs33vwdf0f959hbkir4yzjp42imf28ca9khga6s"))))
39291 (build-system pyproject-build-system)
39292 (arguments
39293 (list
39294 #:tests? #false)) ;there are none
39295 (propagated-inputs (list python-typing-extensions))
39296 (native-inputs (list python-hatchling))
39297 (home-page "https://pypi.org/project/typeapi/")
39298 (synopsis "Type hints")
39299 (description "The typeapi package provides an object-oriented interface
39300for introspecting PEP484 type hints at runtime, including forward references
39301that make use of the more recent PEP585 and PEP604 type hint features in
39302Python versions that don't natively support them.")
39303 (license license:expat)))
39304
39305(define-public python-typer
39306 (package
39307 (name "python-typer")
39308 (version "0.22.0")
39309 (source
39310 (origin
39311 (method git-fetch)
39312 (uri (git-reference
39313 (url "https://github.com/fastapi/typer")
39314 (commit version)))
39315 (file-name (git-file-name name version))
39316 (sha256
39317 (base32 "17gxqqiafrp5dvqfm6k39zbanvnwb8b9kr7dvnkah17js0rfy1sz"))))
39318 (build-system pyproject-build-system)
39319 (arguments
39320 (list
39321 #:phases
39322 #~(modify-phases %standard-phases
39323 (add-before 'check 'pre-check
39324 (lambda _
39325 (setenv "HOME" "/tmp"))))
39326 #:test-flags
39327 #~(list "-k" "not test_cli"
39328 "--numprocesses" (number->string (min 8 (parallel-job-count))))))
39329 (native-inputs
39330 (list python-coverage ;this is required in tests
39331 python-pdm-backend
39332 python-pytest
39333 python-pytest-xdist))
39334 (propagated-inputs
39335 (list python-click
39336 python-typing-extensions
39337 python-annotated-doc
39338 ;; [optional]
39339 python-rich
39340 python-shellingham))
39341 (home-page "https://github.com/fastapi/typer")
39342 (synopsis "Typer builds CLI based on Python type hints")
39343 (description
39344 "Typer is a library for building CLI applications. It's based on Python
393453.6+ type hints.")
39346 (license license:expat)))
39347
39348(define-public python-types-aiofiles
39349 (package
39350 (name "python-types-aiofiles")
39351 (version "25.1.0.20251011")
39352 (source
39353 (origin
39354 (method url-fetch)
39355 (uri (pypi-uri "types_aiofiles" version))
39356 (sha256
39357 (base32 "1zyk53h1017s1pc094w909miwvjsq3yhxlgr2l6d8g6bc2r8laqw"))))
39358 (build-system pyproject-build-system)
39359 (arguments (list #:tests? #f)) ;no tests in PyPI archive
39360 (native-inputs (list python-setuptools))
39361 (home-page "https://github.com/python/typeshed")
39362 (synopsis "Typing stubs for python-aiofiles")
39363 (description "This package providis typing stubs for python-aiofiles.")
39364 (license license:asl2.0)))
39365
39366(define-public python-types-colorama
39367 (package
39368 (name "python-types-colorama")
39369 (version "0.4.15.20250801")
39370 (source
39371 (origin
39372 (method url-fetch)
39373 (uri (pypi-uri "types_colorama" version))
39374 (sha256
39375 (base32 "1xapqdq6450ngzp18nvvkwbs68nnxksk1wyk6wid2qw9sq9msmh2"))))
39376 (build-system pyproject-build-system)
39377 (arguments (list #:tests? #f)) ;no tests in PyPI archive
39378 (native-inputs
39379 (list python-setuptools))
39380 (home-page "https://github.com/python/typeshed")
39381 (synopsis "Typing stubs for colorama")
39382 (description "This package provides typing stubs for colorama.")
39383 (license license:asl2.0)))
39384
39385(define-public python-types-dataclasses
39386 (package
39387 (name "python-types-dataclasses")
39388 (version "0.6.6")
39389 (source
39390 (origin
39391 (method url-fetch)
39392 (uri (pypi-uri "types-dataclasses" version))
39393 (sha256
39394 (base32 "1fgp96m4kfxrwy6rdv3p24jzh6hf68702sfdfhcmm3aniv7jynjb"))))
39395 (build-system pyproject-build-system)
39396 (arguments (list #:tests? #f)) ;no tests
39397 (native-inputs (list python-setuptools))
39398 (home-page "https://github.com/python/typeshed")
39399 (synopsis "Typing stubs for dataclasses")
39400 (description
39401 "This package provides a collection of library stubs for Python, with
39402static types.")
39403 (license license:asl2.0)))
39404
39405(define-public python-types-dateutil
39406 (package
39407 (name "python-types-dateutil")
39408 (version "2.9.0.20240316")
39409 (source
39410 (origin
39411 (method url-fetch)
39412 (uri (pypi-uri "types-python-dateutil" version))
39413 (sha256
39414 (base32 "00h2xi8p6ygdv9nhgwdyx86ky9m9dpdqgmsdji05x4461cj2wbsx"))))
39415 (build-system pyproject-build-system)
39416 (arguments (list #:tests? #f)) ; no tests
39417 (native-inputs
39418 (list python-pytest python-setuptools python-wheel))
39419 (home-page "https://github.com/python/typeshed")
39420 (synopsis "Typing stubs for python-dateutil")
39421 (description
39422 "This is a PEP 561 type stub package for the @code{python-dateutil}
39423package.")
39424 (license license:asl2.0)))
39425
39426(define-public python-types-docutils
39427 (package
39428 (name "python-types-docutils")
39429 (version "0.22.2.20251006")
39430 (source
39431 (origin
39432 (method url-fetch)
39433 (uri (pypi-uri "types_docutils" version))
39434 (sha256
39435 (base32 "1cp3p4bsaa646fa3kpjwjwsqbn6vz77pn57913lkknkf21ch8v63"))))
39436 (build-system pyproject-build-system)
39437 (arguments (list #:tests? #f)) ;no tests
39438 (native-inputs (list python-setuptools))
39439 (home-page "https://github.com/python/typeshed")
39440 (synopsis "Typing stubs for docutils")
39441 (description "This package provides a collection of library stubs for
39442Python, with static types.")
39443 (license license:asl2.0)))
39444
39445(define-public python-types-freezegun
39446 (package
39447 (name "python-types-freezegun")
39448 (version "1.1.8")
39449 (source
39450 (origin
39451 (method url-fetch)
39452 (uri (pypi-uri "types-freezegun" version))
39453 (sha256
39454 (base32 "08g926s8343zwq140zcfwly3qfgmahm7lp0vgb3ics549b2hifzl"))))
39455 (build-system pyproject-build-system)
39456 (arguments
39457 ;; XXX: No tests in PyPi source, but it's also unclear how to get the
39458 ;; right files from source, so ignore them for now.
39459 (list #:tests? #f))
39460 (native-inputs (list python-setuptools python-wheel))
39461 (home-page "https://github.com/python/typeshed")
39462 (synopsis "Typing stubs for @code{freezegun}")
39463 (description "This package contains typing stubs for for @code{freezegun}, a
39464very small subset the Python stubs contained in the complete @code{typeshed}
39465collection.")
39466 (license license:asl2.0)))
39467
39468(define-public python-types-orjson
39469 (package
39470 (name "python-types-orjson")
39471 (version "3.6.2")
39472 (source
39473 (origin
39474 (method url-fetch)
39475 (uri (pypi-uri "types-orjson" version))
39476 (sha256
39477 (base32 "0f66lf2qrl9d4vad42db3dmnzv89h4rr05r5zxx5qcl6kb3zr6ng"))))
39478 (build-system pyproject-build-system)
39479 (arguments (list #:tests? #f)) ;no tests
39480 (native-inputs (list python-setuptools))
39481 (home-page "https://github.com/python/typeshed")
39482 (synopsis "Typing stubs for orjson")
39483 (description "This is a PEP 561 type stub package for the @code{orjson}
39484package. It can be used by type-checking tools like mypy, PyCharm, pytype
39485etc. to check code that uses @code{orjson}.")
39486 (license license:asl2.0)))
39487
39488(define-public python-types-protobuf
39489 (package
39490 (name "python-types-protobuf")
39491 (version "3.20.1")
39492 (source (origin
39493 (method url-fetch)
39494 (uri (pypi-uri "types-protobuf" version))
39495 (sha256
39496 (base32
39497 "000f8n6d4ilihiaf590k73rx3327jh8ima5q5dpxlwz3frj45qrn"))))
39498 (build-system pyproject-build-system)
39499 (arguments
39500 ;; XXX: No tests in PyPi source, but it's also unclear how to get the
39501 ;; right files from source, so ignore them for now.
39502 (list #:tests? #f))
39503 (native-inputs (list python-setuptools python-wheel))
39504 (home-page "https://github.com/python/typeshed")
39505 (synopsis "Typing stubs for @code{protobuf}")
39506 (description "This package contains typing stubs for @code{protobuf}, a
39507very small subset the Python stubs contained in the complete @code{typeshed}
39508collection.")
39509 (license license:asl2.0)))
39510
39511(define-public python-types-pyside6
39512 (package
39513 (name "python-types-pyside6")
39514 ;; Project does not tag PyPI releases in Git, PyPI does not provide source
39515 ;; variant.
39516 (properties '((commit . "3a97b71975bda6d96cfa7b37ac6bf50ea100c1a2")
39517 (revision . "0")))
39518 (version (git-version "6.10.1.1"
39519 (assoc-ref properties 'revision)
39520 (assoc-ref properties 'commit)))
39521 (source
39522 (origin
39523 (method git-fetch)
39524 (uri (git-reference
39525 (url "https://github.com/LumaPictures/cg-stubs")
39526 (commit (assoc-ref properties 'commit))))
39527 (file-name (git-file-name name version))
39528 (sha256
39529 (base32 "07ydqy33fapmmpyq6d90jax3k4vlbb3az1v77bjlgmg8x0jimh4k"))))
39530 (build-system pyproject-build-system)
39531 (arguments
39532 (list
39533 #:tests? #f ;XXX: all tests failed
39534 #:phases
39535 #~(modify-phases %standard-phases
39536 (add-after 'unpack 'select-pyside6
39537 (lambda _
39538 (chdir "pyside6"))))))
39539 (native-inputs
39540 (list python-hatchling))
39541 (home-page "https://github.com/LumaPictures/cg-stubs")
39542 (synopsis "Accurate stubs for PySide6")
39543 (description
39544 "This package provides PySide6 stubs produced with @code{mypy}'s official
39545stubgen tool to directly generate stubs, with a set of corrections applied.")
39546 ;; As a derived work from PySide2, the stubs are delivered under the LGPL
39547 ;; v2.1 . See file LICENSE for more details.
39548 ;;
39549 ;; MIT in pyproject.toml
39550 (license (list license:lgpl2.1+
39551 license:expat))))
39552
39553(define-public python-types-python-dateutil
39554 (package
39555 (name "python-types-python-dateutil")
39556 (version "2.9.0.20250708")
39557 (source
39558 (origin
39559 (method url-fetch)
39560 (uri (pypi-uri "types_python_dateutil" version))
39561 (sha256
39562 (base32 "1ay8sp8qshx2na2sa9sz9hg2hb7yrws9ymshqfb9cv1dmdfxgnyc"))))
39563 (build-system pyproject-build-system)
39564 (arguments (list #:tests? #f)) ;no tests in PyPI archive
39565 (native-inputs (list python-setuptools))
39566 (home-page "https://github.com/python/typeshed")
39567 (synopsis "Typing stubs for python-dateutil")
39568 (description "This package providis typing stubs for python-dateutil.")
39569 (license license:asl2.0)))
39570
39571(define-public python-types-pytz
39572 (package
39573 (name "python-types-pytz")
39574 (version "2025.2.0.20250809")
39575 (source
39576 (origin
39577 (method url-fetch)
39578 (uri (pypi-uri "types_pytz" version))
39579 (sha256
39580 (base32 "1r91pvn1w9rb1395qw8w8k22s7w0wf2qfkl3z1qqiclvlbk34bi2"))))
39581 (build-system pyproject-build-system)
39582 (arguments
39583 (list #:tests? #f)) ;no tests provided
39584 (native-inputs (list python-setuptools))
39585 (home-page "https://github.com/python/typeshed")
39586 (synopsis "Typing stubs for pytz")
39587 (description "This package contains typing stubs for @code{pytz}, a very
39588small subset the Python stubs contained in the complete @code{typeshed}
39589collection.")
39590 (license license:asl2.0)))
39591
39592(define-public python-types-pyyaml
39593 (package
39594 (name "python-types-pyyaml")
39595 (version "6.0.12.20250915")
39596 (source
39597 (origin
39598 (method url-fetch)
39599 (uri (pypi-uri "types_pyyaml" version))
39600 (sha256
39601 (base32 "1lyirqjacfmn6bv27b7w0z483yps6gfqfmhnyzkg00y352jm92qg"))))
39602 (build-system pyproject-build-system)
39603 (arguments (list #:tests? #f)) ;no tests in PyPI archive
39604 (native-inputs
39605 (list python-setuptools))
39606 (home-page " https://github.com/python/typeshed")
39607 (synopsis "Typing stubs for PyYAML")
39608 (description "This package provides typing stubs for @code{PyYAML}.")
39609 (license license:asl2.0)))
39610
39611(define-public python-types-regex
39612 (package
39613 (name "python-types-regex")
39614 (version "2025.9.18.20250921")
39615 (source
39616 (origin
39617 (method url-fetch)
39618 (uri (pypi-uri "types_regex" version))
39619 (sha256
39620 (base32 "0gqc8b9d38pdm1l6nryi9rq9vmpis575hqnxlvj904n3n4hhqw71"))))
39621 (build-system pyproject-build-system)
39622 (arguments (list #:tests? #f)) ;no tests in PyPI archive
39623 (native-inputs (list python-setuptools))
39624 (home-page "https://github.com/python/typeshed")
39625 (synopsis "Typing stubs for regex")
39626 (description "This package provides typing stubs for regex.")
39627 (license license:asl2.0)))
39628
39629(define-public python-types-requests
39630 (package
39631 (name "python-types-requests")
39632 (version "2.32.4.20250611")
39633 (source
39634 (origin
39635 (method url-fetch)
39636 (uri (pypi-uri "types_requests" version))
39637 (sha256
39638 (base32 "09pqdfa66d3p5dig26chrd6rpxs5wamxcm0yyl5q69b4xmvqf73l"))))
39639 (build-system pyproject-build-system)
39640 (arguments (list #:tests? #f)) ;no tests in PyPI archive
39641 (native-inputs
39642 (list python-setuptools))
39643 (propagated-inputs
39644 (list python-urllib3))
39645 (home-page "https://github.com/python/typeshed")
39646 (synopsis "Typing stubs for requests")
39647 (description "This package provides typing stubs for requests.")
39648 (license license:asl2.0)))
39649
39650(define-public python-types-setuptools
39651 (package
39652 (name "python-types-setuptools")
39653 (version "80.9.0.20250529")
39654 (source
39655 (origin
39656 (method url-fetch)
39657 (uri (pypi-uri "types_setuptools" version))
39658 (sha256
39659 (base32 "149w6lg8n56k50n08jx450ni9frs2hzbv729sv48c8ds1jx8iq3r"))))
39660 (build-system pyproject-build-system)
39661 (arguments (list #:tests? #f)) ;no tests in PyPI archive
39662 (native-inputs
39663 (list python-setuptools))
39664 (home-page "https://github.com/python/typeshed")
39665 (synopsis "Typing stubs for setuptools")
39666 (description "This package provides typing stubs for setuptools.")
39667 (license license:asl2.0)))
39668
39669(define-public python-types-simplejson
39670 (package
39671 (name "python-types-simplejson")
39672 (version "3.19.0.20241221")
39673 (source
39674 (origin
39675 (method url-fetch)
39676 (uri (pypi-uri "types_simplejson" version))
39677 (sha256
39678 (base32 "0w7wvr84d7bj27hc2bsyh69s9d84zpkdhsibbmsibba91zdzjjhi"))))
39679 (build-system pyproject-build-system)
39680 (arguments
39681 (list
39682 #:tests? #f)) ; no tests in PyPI archive, no release or tags on GitHub
39683 (native-inputs
39684 (list python-setuptools python-wheel))
39685 (home-page "https://github.com/python/typeshed")
39686 (synopsis "Typing stubs for simplejson")
39687 (description "Typing stubs for simplejson.")
39688 (license license:asl2.0)))
39689
39690(define-public python-types-toml
39691 (package
39692 (name "python-types-toml")
39693 (version "0.10.8.20240310")
39694 (source
39695 (origin
39696 (method url-fetch)
39697 (uri (pypi-uri "types-toml" version))
39698 (sha256
39699 (base32 "0c83hfw4aqy01vzlh6r84mz6b2b6n98chfdjp2k3c94p089m0h9x"))))
39700 (build-system pyproject-build-system)
39701 (arguments
39702 (list #:tests? #f)) ;no tests provided
39703 (native-inputs (list python-setuptools))
39704 (home-page "https://github.com/python/typeshed")
39705 (synopsis "Typing stubs for TOML")
39706 (description
39707 "This package contains typing stubs for TOML, a very small subset the
39708Python stubs contained in the complete @code{typeshed} collection.")
39709 (license license:asl2.0)))
39710
39711(define-public python-types-tqdm
39712 (package
39713 (name "python-types-tqdm")
39714 (version "4.67.0.20250809")
39715 (source
39716 (origin
39717 (method url-fetch)
39718 (uri (pypi-uri "types_tqdm" version))
39719 (sha256
39720 (base32 "006md2hnsq79p7d5z3kiaapvl9wwa4dz3yb39jf0n22n2awpmgq2"))))
39721 (build-system pyproject-build-system)
39722 (arguments (list #:tests? #f)) ;no tests in PyPI archive
39723 (native-inputs (list python-setuptools))
39724 (propagated-inputs (list python-types-requests))
39725 (home-page "https://github.com/python/typeshed")
39726 (synopsis "Typing stubs for python-tqdm")
39727 (description "This package providis typing stubs for python-tqdm.")
39728 (license license:asl2.0)))
39729
39730(define-public python-types-ujson
39731 (package
39732 (name "python-types-ujson")
39733 (version "5.10.0.20250822")
39734 (source
39735 (origin
39736 (method url-fetch)
39737 (uri (pypi-uri "types_ujson" version))
39738 (sha256
39739 (base32 "01m0gdcy6plrjxxih96ra86wd2zhn4skzw7k7hvk51gpw5c5ay8a"))))
39740 (build-system pyproject-build-system)
39741 (arguments
39742 (list #:tests? #f)) ;no tests provided
39743 (native-inputs (list python-setuptools))
39744 (home-page "https://github.com/python/typeshed")
39745 (synopsis "Typing stubs for ujson")
39746 (description
39747 "This is a PEP 561 type stub package for the ujson package. It can be
39748used by type-checking tools like mypy, PyCharm, pytype etc. to check code that
39749uses ujson.")
39750 (license license:asl2.0)))
39751
39752(define-public python-types-urllib3
39753 (package
39754 (name "python-types-urllib3")
39755 (version "1.26.25.14")
39756 (source
39757 (origin
39758 (method url-fetch)
39759 (uri (pypi-uri "types-urllib3" version))
39760 (sha256
39761 (base32 "13ys7c7k9pg3lb11qvdgs9xq8j8bvcpjpg61j8dqq6wmgibpz6r2"))))
39762 (build-system pyproject-build-system)
39763 (arguments (list #:tests? #f)) ;no tests in PyPI archive
39764 (native-inputs
39765 (list python-setuptools))
39766 (home-page "https://github.com/python/typeshed")
39767 (synopsis "Typing stubs for urllib3")
39768 (description "This package provides typing stubs for urllib3.")
39769 (license license:asl2.0)))
39770
39771(define-public python-typeshed-client
39772 (package
39773 (name "python-typeshed-client")
39774 (version "2.8.2")
39775 (source
39776 (origin
39777 (method git-fetch)
39778 (uri (git-reference
39779 (url "https://github.com/JelleZijlstra/typeshed_client")
39780 (commit (string-append "v" version))))
39781 (file-name (git-file-name name version))
39782 (sha256
39783 (base32 "0i74ygf49184ab1ipfdzf706wnzs3id15rkysqarzcngdydrcszs"))))
39784 (build-system pyproject-build-system)
39785 (arguments
39786 (list #:test-backend #~'custom
39787 #:test-flags #~(list "tests/test.py")))
39788 (native-inputs
39789 (list python-setuptools))
39790 (propagated-inputs
39791 (list python-importlib-resources
39792 python-typing-extensions))
39793 (home-page "https://github.com/JelleZijlstra/typeshed_client")
39794 (synopsis "Library for accessing stubs in typeshed")
39795 (description
39796 "This package provides a library for accessing stubs in typeshed.")
39797 (license license:expat)))
39798
39799(define-public python-typing-inspect
39800 (package
39801 (name "python-typing-inspect")
39802 (version "0.9.0")
39803 (source
39804 (origin
39805 (method url-fetch)
39806 (uri (pypi-uri "typing_inspect" version))
39807 (sha256
39808 (base32 "0y0z8v4wr5bahlgzjd1il2z8vlfd2asiyb45wia6kvznyqpw8gxj"))))
39809 (build-system pyproject-build-system)
39810 (native-inputs
39811 (list python-pytest
39812 python-setuptools
39813 python-wheel))
39814 (propagated-inputs
39815 (list python-mypy-extensions
39816 python-typing-extensions))
39817 (home-page "https://github.com/ilevkivskyi/typing_inspect")
39818 (synopsis "API for inspection of types in the Python @code{typing} module")
39819 (description
39820 "The @code{typing_inspect} module defines experimental API for runtime
39821inspection of types defined in the Python standard typing module.")
39822 (license license:expat)))
39823
39824(define-public python-typing-inspection
39825 (package
39826 (name "python-typing-inspection")
39827 (version "0.4.2")
39828 (source
39829 (origin
39830 (method git-fetch)
39831 (uri (git-reference
39832 (url "https://github.com/pydantic/typing-inspection")
39833 (commit (string-append "v" version))))
39834 (file-name (git-file-name name version))
39835 (sha256
39836 (base32 "1dqib4arxxaxwyapw6y4pcvm38l8djkhd8cfr149w42bw4xrqr38"))))
39837 (build-system pyproject-build-system)
39838 ;; tests: 89 passed, 3 skipped
39839 (native-inputs
39840 (list python-pytest
39841 python-hatchling))
39842 (propagated-inputs
39843 (list python-typing-extensions))
39844 (home-page "https://github.com/pydantic/typing-inspection")
39845 (synopsis "Runtime typing introspection tools")
39846 (description
39847 "@code{typing-inspection} provides tools to inspect type annotations at
39848runtime.")
39849 (license license:expat)))
39850
39851(define-public python-typogrify
39852 (package
39853 (name "python-typogrify")
39854 (version "2.1.0")
39855 (source
39856 (origin
39857 (method url-fetch)
39858 (uri (pypi-uri "typogrify" version))
39859 (sha256
39860 (base32 "1vk17q04sax8rpdqll5zldnf6l3ixgknbnn9wimnwah3k1701aph"))))
39861 (build-system pyproject-build-system)
39862 (arguments
39863 (list
39864 #:test-flags
39865 #~(list "--doctest-modules"
39866 "typogrify/filters.py"
39867 "typogrify/packages/titlecase/tests.py")))
39868 (native-inputs
39869 (list python-pytest
39870 python-hatchling))
39871 (propagated-inputs
39872 (list python-smartypants))
39873 (home-page "https://github.com/justinmayer/typogrify")
39874 (synopsis "Filters to transform text into typographically-improved HTML")
39875 (description
39876 "@code{typogrify} provides a set of custom filters that automatically
39877apply various transformations to plain text in order to yield
39878typographically-improved HTML. While often used in conjunction with Jinja and
39879Django template systems, the filters can be used in any environment.")
39880 (license license:bsd-3)))
39881
39882(define-public python-ua-parser
39883 (package
39884 (name "python-ua-parser")
39885 (version "0.10.0")
39886 (source
39887 (origin
39888 (method url-fetch)
39889 (uri (pypi-uri "ua-parser" version))
39890 (sha256
39891 (base32
39892 "0csh307zfz666kkk5idrw3crj1x8q8vsqgwqil0r1n1hs4p7ica7"))))
39893 (build-system pyproject-build-system)
39894 (arguments
39895 `(#:tests? #f)) ;no test suite in release
39896 (native-inputs
39897 (list python-pyyaml
39898 python-setuptools))
39899 (home-page "https://github.com/ua-parser/uap-python")
39900 (synopsis "User agent parser")
39901 (description
39902 "@code{ua-parser} is a Python port of Browserscope's user agent parser.")
39903 (license license:asl2.0)))
39904
39905(define-public python-ubelt
39906 (package
39907 (name "python-ubelt")
39908 (version "1.3.6")
39909 (source
39910 (origin
39911 (method git-fetch)
39912 (uri (git-reference
39913 (url "https://github.com/Erotemic/ubelt")
39914 (commit (string-append "v" version))))
39915 (file-name (git-file-name name version))
39916 (sha256
39917 (base32 "1v2kf9lbdfaf9nppdq45rfanz4bdd2v6x59iajcznwgc4jmhj2na"))))
39918 (build-system pyproject-build-system)
39919 (arguments
39920 (list
39921 ;; The builder user home doesn't match HOME, which causes this test to
39922 ;; fail.
39923 #:test-flags #~(list "-k" "not userhome")
39924 #:phases
39925 #~(modify-phases %standard-phases
39926 (add-before 'check 'pre-check
39927 (lambda _
39928 (setenv "HOME" "/tmp")))))) ;else the test suite hangs
39929 (native-inputs
39930 (list python-pytest
39931 python-requests
39932 python-setuptools
39933 python-wheel
39934 python-xdoctest))
39935 (propagated-inputs
39936 (list python-ordered-set))
39937 (home-page "https://github.com/Erotemic/ubelt")
39938 (synopsis "Python library for hashing, caching, timing and more")
39939 (description
39940 "Ubelt is a small library of simple functions that extend the Python
39941standard library. It includes an @acronym{API, Application Programming
39942Interface} to simplify common problems such as caching, timing, computing
39943progress, among other things.")
39944 (license license:asl2.0)))
39945
39946(define-public python-uc-micro-py
39947 (package
39948 (name "python-uc-micro-py")
39949 (version "1.0.1")
39950 (source (origin
39951 (method git-fetch) ;for tests
39952 (uri (git-reference
39953 (url "https://github.com/tsutsu3/uc.micro-py")
39954 (commit (string-append "v" version))))
39955 (file-name (git-file-name name version))
39956 (sha256
39957 (base32
39958 "17f55gi55rg47nm88fn3f8851ph03dgykdp011lxr3j6hk18lyfv"))))
39959 (build-system pyproject-build-system)
39960 (native-inputs (list python-pytest python-setuptools python-wheel))
39961 (home-page "https://github.com/tsutsu3/uc.micro-py")
39962 (synopsis "Unicode data files for linkify-it-py projects")
39963 (description "This package contains a micro subset of Unicode data files
39964for linkify-it-py projects.")
39965 (license license:expat)))
39966
39967(define-public python-udapi
39968 (package
39969 (name "python-udapi")
39970 (version "0.5.2")
39971 (source
39972 (origin
39973 (method git-fetch)
39974 (uri (git-reference
39975 (url "https://github.com/udapi/udapi-python")
39976 (commit version)))
39977 (file-name (git-file-name name version))
39978 (sha256
39979 (base32 "1z9nyj0jmd2yk58c5kag4fkfb7y478di859xi56xc7fhvmyjf7nj"))))
39980 (build-system pyproject-build-system)
39981 (native-inputs
39982 (list python-pytest python-setuptools))
39983 (propagated-inputs
39984 (list python-colorama python-termcolor))
39985 (home-page "http://udapi.readthedocs.io")
39986 (synopsis "Framework for processing Universal Dependencies data")
39987 (description
39988 "This package is a Python library providing an API for processing
39989Universal Dependencies data.")
39990 (license license:gpl3+)))
39991
39992(define-public python-ujson
39993 (package
39994 (name "python-ujson")
39995 (version "5.10.0")
39996 (source
39997 (origin
39998 (method url-fetch)
39999 (uri (pypi-uri "ujson" version))
40000 (sha256
40001 (base32
40002 "1habmn3bmmv2ym4ldiijcavdkdzp8h28h60hgwjkhxwcbly8zkdk"))
40003 (modules '((guix build utils)))
40004 (snippet
40005 #~(begin (delete-file-recursively "deps")))))
40006 (build-system pyproject-build-system)
40007 (arguments
40008 (list
40009 #:phases
40010 #~(modify-phases %standard-phases
40011 (add-after 'unpack 'link-to-system-double-conversion
40012 (lambda* (#:key inputs #:allow-other-keys)
40013 (let ((d-c (assoc-ref inputs "double-conversion")))
40014 (substitute* "setup.py"
40015 (("./deps/double-conversion/double-conversion\"")
40016 (string-append d-c "/include/double-conversion\""))
40017 (("-lstdc++" stdc)
40018 (string-append "-L" d-c "/lib\","
40019 " \"-ldouble-conversion\","
40020 " \"" stdc)))))))))
40021 (native-inputs
40022 (list double-conversion
40023 python-pytest
40024 python-setuptools
40025 python-setuptools-scm
40026 python-wheel))
40027 (home-page "https://github.com/ultrajson/ultrajson")
40028 (synopsis "Ultra fast JSON encoder and decoder for Python")
40029 (description
40030 "UltraJSON is an ultra fast JSON encoder and decoder written in pure C with
40031bindings for Python 3.")
40032 (license license:bsd-3)))
40033
40034(define-public python-ukkonen
40035 (package
40036 (name "python-ukkonen")
40037 (version "1.0.1")
40038 (source
40039 (origin
40040 ;; There are no tests in the PyPI tarball.
40041 (method git-fetch)
40042 (uri (git-reference
40043 (url "https://github.com/asottile/ukkonen")
40044 (commit (string-append "v" version))))
40045 (file-name (git-file-name name version))
40046 (sha256
40047 (base32 "17gspl2dsykg000275svvyam4k7wz9ypi9xrfrmsgcgryczravlc"))))
40048 (build-system pyproject-build-system)
40049 (native-inputs (list python-pytest python-setuptools python-wheel))
40050 (propagated-inputs (list python-cffi))
40051 (home-page "https://github.com/asottile/ukkonen")
40052 (synopsis "Implementation of bounded Levenshtein distance (Ukkonen)")
40053 (description "This package is an implementation of of bounded Levenshtein
40054distance (Ukkonen).")
40055 (license license:expat)))
40056
40057(define-public python-ulid
40058 (package
40059 (name "python-ulid")
40060 (version "3.1.0")
40061 (source
40062 (origin
40063 (method git-fetch)
40064 (uri (git-reference
40065 (url "https://github.com/mdomke/python-ulid")
40066 (commit version)))
40067 (file-name (git-file-name name version))
40068 (sha256
40069 (base32 "0m1sixmqynlalsw50af5mv5q4gpz2052d1p2ig9hr7yqmdvqcz6p"))))
40070 (build-system pyproject-build-system)
40071 (arguments
40072 ;; test_same_millisecond_overflow is flaky, fails 1 in 10 times.
40073 ;; See <https://github.com/mdomke/python-ulid/issues/55>.
40074 ;; 68 passed, 1 deselected in 2.55s
40075 (list #:test-flags #~(list "-k" "not test_same_millisecond_overflow")))
40076 (native-inputs
40077 (list python-freezegun
40078 python-hatch-fancy-pypi-readme
40079 python-hatch-vcs
40080 python-hatchling
40081 python-pytest))
40082 (propagated-inputs
40083 (list python-pydantic))
40084 (home-page "https://github.com/mdomke/python-ulid")
40085 (synopsis "Universally unique lexicographically sortable identifier")
40086 (description
40087 "ULID is a universally unique lexicographically sortable identifier.
40088It is:
40089@itemize
40090@item 128-bit compatible with UUID
40091@item 1.21e+24 unique ULIDs per millisecond
40092@item lexicographically sortable!
40093@item canonically encoded as a 26 character string, as opposed to the 36
40094character UUID
40095@item uses Crockford's base32 for better efficiency and readability (5 bits
40096per character)
40097@item case insensitive
40098@item no special characters (URL safe)
40099@item monotonic sort order (correctly detects and handles the same
40100millisecond)
40101@end itemize")
40102 (license license:expat)))
40103
40104(define-public python-uncertainties
40105 (package
40106 (name "python-uncertainties")
40107 (version "3.2.3")
40108 (source
40109 (origin
40110 (method url-fetch)
40111 (uri (pypi-uri "uncertainties" version))
40112 (sha256
40113 (base32
40114 "0c9hl35jvld1a1vinh9mdcpfgz4ykqinlm1dj917lqbgd0z6b9bn"))))
40115 (build-system pyproject-build-system)
40116 (native-inputs
40117 (list python-pytest python-setuptools python-setuptools-scm python-wheel))
40118 (propagated-inputs (list python-numpy))
40119 (home-page "https://uncertainties.readthedocs.io/en/latest/")
40120 (synopsis "Calculations with uncertainties")
40121 (description
40122 "The uncertainties package transparently handles calculations with
40123numbers with uncertainties. It can also yield the derivatives of any
40124expression.")
40125 (license license:bsd-3)))
40126
40127(define-public python-unicode-linebreak
40128 (package
40129 (name "python-unicode-linebreak")
40130 (version "0.0.2")
40131 (source
40132 (origin
40133 (method git-fetch)
40134 (uri (git-reference
40135 (url "https://github.com/mondeja/py-unicode-linebreak")
40136 (commit (string-append "v" version))))
40137 (file-name (git-file-name name version))
40138 (sha256
40139 (base32 "0qvh729b2q82sy057qgldcbz513wxnsckmwl3c18wkyb3c1iq2qk"))))
40140 (build-system pyproject-build-system)
40141 (arguments
40142 (list
40143 #:imported-modules `(,@%cargo-build-system-modules
40144 ,@%pyproject-build-system-modules)
40145 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
40146 (guix build pyproject-build-system)
40147 (guix build utils))
40148 #:test-backend #~'unittest
40149 #:phases
40150 #~(modify-phases %standard-phases
40151 (add-after 'unpack 'prepare-cargo-build-system
40152 (lambda args
40153 (for-each
40154 (lambda (phase)
40155 (format #t "Running cargo phase: ~a~%" phase)
40156 (apply (assoc-ref cargo:%standard-phases phase)
40157 #:cargo-target #$(cargo-triplet)
40158 args))
40159 '(unpack-rust-crates
40160 configure
40161 check-for-pregenerated-files
40162 patch-cargo-checksums)))))))
40163 (native-inputs
40164 (append
40165 (list maturin
40166 rust
40167 `(,rust "cargo"))
40168 (or (and=> (%current-target-system)
40169 (compose list make-rust-sysroot))
40170 '())))
40171 (inputs (cargo-inputs 'unicode_linebreak))
40172 (home-page "https://github.com/mondeja/py-unicode-linebreak")
40173 (synopsis "Markdown paragraph wrapper")
40174 (description
40175 "This package provides a Markdown paragraph wrapper using Unicode Line
40176Breaking Algorithm written in Rust with Python bindings.")
40177 (license license:expat)))
40178
40179(define-public python-unicodedata2
40180 (package
40181 (name "python-unicodedata2")
40182 (version "16.0.0")
40183 (source
40184 (origin
40185 (method url-fetch)
40186 (uri (pypi-uri "unicodedata2" version))
40187 (sha256
40188 (base32 "1z3llixb4cd6cc6nmyps5vv2sss14n3x6dzcc65xg75mj9jqsj05"))))
40189 (build-system pyproject-build-system)
40190 (native-inputs
40191 (list python-pytest
40192 python-setuptools))
40193 (home-page "https://github.com/fonttools/unicodedata2")
40194 (synopsis "Python unicodedata backport")
40195 (description "This package corresponds to the latest @code{unicodedata}
40196standard Python module.")
40197 (license license:asl2.0)))
40198
40199(define-public python-unicodeitplus
40200 (package
40201 (name "python-unicodeitplus")
40202 (version "0.3.1")
40203 (source
40204 (origin
40205 (method url-fetch)
40206 (uri (pypi-uri "unicodeitplus" version))
40207 (sha256
40208 (base32 "1mssdjih7dqz25lrb2pyjg2yvab0b9c7a5k1llx1yzkkqbqyh74c"))))
40209 (build-system pyproject-build-system)
40210 (native-inputs
40211 (list python-pytest
40212 python-setuptools
40213 python-setuptools-scm))
40214 (propagated-inputs
40215 (list python-lark))
40216 (home-page "https://github.com/HDembinski/unicodeitplus")
40217 (synopsis "Convert simple LaTeX to an Unicode approximation")
40218 (description
40219 "This package provides a more complete LaTeX to Unicode converter than
40220@code{unicodeit} using a parser generated from @acronym{EBNF, Extended
40221Backus-Naur Form} with the Lark library.")
40222 (license license:bsd-3)))
40223
40224(define-public python-unidecode
40225 (package
40226 (name "python-unidecode")
40227 (version "1.4.0")
40228 (source
40229 (origin
40230 (method url-fetch)
40231 (uri (pypi-uri "Unidecode" version))
40232 (sha256
40233 (base32 "08rbx8vxsnj06cvrdxy80zrn9hk25lwcqfh2fdjng2rk1189hdff"))))
40234 (build-system pyproject-build-system)
40235 (native-inputs
40236 (list python-pytest python-setuptools))
40237 (home-page "https://pypi.org/project/Unidecode/")
40238 (synopsis "ASCII transliterations of Unicode text")
40239 (description
40240 "Unidecode provides ASCII transliterations of Unicode text. Unidecode is
40241useful when integrating with legacy code that doesn't support Unicode, or for
40242ease of entry of non-Roman names on a US keyboard, or when constructing ASCII
40243machine identifiers from human-readable Unicode strings that should still be
40244somewhat intelligible.")
40245 (license license:gpl2+)))
40246
40247(define-public python-unique-log-filter
40248 (package
40249 (name "python-unique-log-filter")
40250 (version "0.1.0")
40251 (source
40252 (origin
40253 (method git-fetch)
40254 (uri (git-reference
40255 (url "https://github.com/twizmwazin/unique_log_filter")
40256 (commit (string-append "v" version))))
40257 (file-name (git-file-name name version))
40258 (sha256
40259 (base32 "036mh6nqskck2fa1q2inasqxb9wcz2p09qcpldnnffzcy1a6kzba"))))
40260 (build-system pyproject-build-system)
40261 (arguments
40262 (list #:test-backend #~'custom
40263 #:test-flags #~(list "test_unique_log_filter.py")))
40264 (native-inputs (list python-flit-core))
40265 (home-page "https://github.com/twizmwazin/unique_log_filter")
40266 (synopsis "Log filter that removes duplicate log messages")
40267 (description
40268 "This library provides a filter for the @code{logging} module
40269from the Python standard library which allows removing duplicate log
40270messages.")
40271 (license license:bsd-2)))
40272
40273(define-public python-uniseg
40274 (package
40275 (name "python-uniseg")
40276 (version "0.10.0")
40277 (source
40278 (origin
40279 (method url-fetch)
40280 (uri (pypi-uri "uniseg" version))
40281 (sha256
40282 (base32 "18sj1i7xlssrsfwlr95bd4x78mfhq0v6irfx3b7fkgr17a5jbsmm"))))
40283 (build-system pyproject-build-system)
40284 (native-inputs
40285 (list python-pytest
40286 python-setuptools
40287 python-setuptools-scm))
40288 (home-page "https://bitbucket.org/emptypage/uniseg-python")
40289 (synopsis "Python library to determine Unicode text segmentations")
40290 (description
40291 "Uniseg is a Python package used to determine Unicode text segmentations.
40292Supported segmentations include:
40293@enumerate
40294@item @dfn{Code point} (any value in the Unicode codespace)
40295@item @dfn{Grapheme cluster} (user-perceived character made of a single or
40296multiple Unicode code points, e.g. \"G\" + acute-accent)
40297@item Word break
40298@item Sentence break
40299@item Line break
40300@end enumerate")
40301 (license license:expat)))
40302
40303(define-public python-universal-pathlib
40304 (package
40305 (name "python-universal-pathlib")
40306 (version "0.2.6")
40307 (source
40308 (origin
40309 (method git-fetch)
40310 (uri (git-reference
40311 (url "https://github.com/fsspec/universal_pathlib")
40312 (commit (string-append "v" version))))
40313 (file-name (git-file-name name version))
40314 (sha256
40315 (base32 "0y2czk4civjjy9v8vhv6icivk4lapjcjzhdxjrrm3629apqja7wp"))))
40316 (build-system pyproject-build-system)
40317 (arguments
40318 (list
40319 #:tests? #f)) ;requires network
40320 (native-inputs
40321 (list python-setuptools
40322 python-setuptools-scm))
40323 (propagated-inputs
40324 (list python-fsspec
40325 python-pathlib-abc))
40326 (home-page "https://github.com/fsspec/universal_pathlib")
40327 (synopsis
40328 "@code{pathlib} API extended to use @code{fsspec} backends")
40329 (description
40330 "Universal Pathlib is a Python library that extends the @code{pathlib.Path}
40331API to support a variety of backend filesystems via filesystem_spec.")
40332 (license license:expat)))
40333
40334(define-public python-unpaddedbase64
40335 (package
40336 (name "python-unpaddedbase64")
40337 (version "2.1.0")
40338 (source
40339 (origin
40340 (method git-fetch)
40341 (uri (git-reference
40342 (url "https://github.com/matrix-org/python-unpaddedbase64")
40343 (commit (string-append "v" version))))
40344 (file-name (git-file-name name version))
40345 (sha256
40346 (base32 "1n6har8pxv0mqb96lanzihp1xf76aa17jw3977drb1fgz947pnmz"))))
40347 (build-system pyproject-build-system)
40348 (native-inputs (list python-poetry-core
40349 python-pytest
40350 python-setuptools
40351 python-wheel))
40352 (home-page "https://github.com/matrix-org/python-unpaddedbase64")
40353 (synopsis "Encode and decode Base64 without “=” padding")
40354 (description
40355 "RFC 4648 specifies that Base64 should be padded to a multiple of 4 bytes
40356using “=” characters. However this conveys no benefit so many protocols
40357choose to use Base64 without the “=” padding.")
40358 (license license:asl2.0)))
40359
40360(define-public python-update-checker
40361 (package
40362 (name "python-update-checker")
40363 (version "0.18.0")
40364 (source
40365 (origin
40366 (method url-fetch)
40367 (uri (pypi-uri "update-checker" version))
40368 (sha256
40369 (base32 "04yb5a9mi45ax50m2m0ih6gdvkk1j7gfmy83dd58i1f59axlabba"))))
40370 (build-system pyproject-build-system)
40371 (native-inputs
40372 (list python-pytest
40373 python-setuptools))
40374 (propagated-inputs
40375 (list python-requests))
40376 (home-page "https://github.com/bboe/update_checker")
40377 (synopsis "Python module that will check for package updates")
40378 (description "This package provides a Python module that will check for
40379package updates.")
40380 (license license:bsd-2)))
40381
40382(define-public python-uri-template
40383 (package
40384 (name "python-uri-template")
40385 (version "1.3.0")
40386 (source
40387 (origin
40388 (method url-fetch)
40389 (uri (pypi-uri "uri-template" version))
40390 (sha256
40391 (base32 "1ixczlgnsjv2850r6w0cb2npwcwzdqri8njr1pi7v371cpmzh00f"))))
40392 (build-system pyproject-build-system)
40393 (arguments
40394 (list
40395 #:phases
40396 '(modify-phases %standard-phases
40397 (replace 'check
40398 (lambda* (#:key tests? #:allow-other-keys)
40399 (when tests?
40400 (invoke "python3" "test.py")))))))
40401 (native-inputs
40402 (list python-setuptools
40403 python-setuptools-scm
40404 python-wheel))
40405 (home-page "https://gitlab.linss.com/open-source/python/uri-template")
40406 (synopsis "RFC 6570 URI Template Processor")
40407 (description "This package implements URI Template expansion in strict
40408adherence to RFC 6570, but adds a few extensions.")
40409 (license license:expat)))
40410
40411(define-public python-uritools
40412 (package
40413 (name "python-uritools")
40414 (version "6.0.1")
40415 (source
40416 (origin
40417 (method git-fetch)
40418 (uri (git-reference
40419 (url "https://github.com/tkem/uritools/")
40420 (commit (string-append "v" version))))
40421 (file-name (git-file-name name version))
40422 (sha256
40423 (base32 "115a8xphnv0ykd4c0pjh5rd4zy92znpdv4nwbn7n2d6irznvk00v"))))
40424 (build-system pyproject-build-system)
40425 (native-inputs
40426 (list python-pytest
40427 python-setuptools))
40428 (home-page "https://github.com/tkem/uritools/")
40429 (synopsis "URI parsing, classification and composition")
40430 (description
40431 "This package provides RFC 3986 compliant functions for parsing,
40432classifying and composing URIs and URI references, largely replacing the
40433Python Standard Library's urllib.parse module.")
40434 (license license:expat)))
40435
40436(define-public python-urwid
40437 (package
40438 (name "python-urwid")
40439 (version "3.0.3")
40440 (source
40441 (origin
40442 (method url-fetch)
40443 (uri (pypi-uri "urwid" version))
40444 (sha256
40445 (base32
40446 "16zdji1fdr5jbry9h01dxwnadrygs1xj415jqnhmmnlcavfh821h"))))
40447 (build-system pyproject-build-system)
40448 (arguments
40449 (list
40450 #:test-flags
40451 #~(list "tests"
40452 ;; According to Debian these tests are cursed.
40453 ;; https://salsa.debian.org/python-team/packages/urwid/-/blob/debian/2.1.2-2/debian/changelog#L141
40454 "--ignore=tests/test_vterm.py")))
40455 (native-inputs
40456 (list python-pytest python-setuptools python-setuptools-scm))
40457 (propagated-inputs
40458 (list python-wcwidth
40459 ;; [optional]
40460 python-pygobject
40461 python-pyzmq
40462 python-tornado
40463 python-pyserial
40464 python-twisted))
40465 (home-page "https://urwid.org")
40466 (synopsis "Console user interface library for Python")
40467 (description
40468 "Urwid is a curses-based UI/widget library for Python. It includes many
40469features useful for text console applications.")
40470 (license license:lgpl2.1+)))
40471
40472(define-public python-urwid-2
40473 (package
40474 (inherit python-urwid)
40475 (name "python-urwid")
40476 (version "2.6.16")
40477 (source
40478 (origin
40479 (method url-fetch)
40480 (uri (pypi-uri "urwid" version))
40481 (sha256
40482 (base32 "18ijvgf1l7jvmg45x1cysn3c9rdrg1w0405acig3hk7476cj7bck"))))))
40483
40484(define-deprecated/public-alias python-urwid-3
40485 python-urwid) ;may be removed after 2025-11-12
40486
40487(define-public python-urwid-for-zulip-term
40488 ;; [email protected] requires exact 2.1.2 version otherwise some tests fail
40489 ;; to pass, remove when no longer required.
40490 (hidden-package
40491 (package
40492 (inherit python-urwid)
40493 (version "2.1.2")
40494 (source
40495 (origin
40496 (method url-fetch)
40497 (uri (pypi-uri "urwid" version))
40498 (sha256
40499 (base32 "1bky2bra6673xx8jy0826znw6cmxs89wcwwzda8d025j3jffx2sq"))))
40500 (arguments
40501 (list #:tests? #f)))))
40502
40503(define-public python-urwid-readline
40504 (package
40505 (name "python-urwid-readline")
40506 (version "0.15.1")
40507 (source
40508 (origin
40509 (method git-fetch)
40510 (uri (git-reference
40511 (url "https://github.com/rr-/urwid_readline")
40512 (commit version)))
40513 (file-name (git-file-name name version))
40514 (sha256
40515 (base32 "0zhpx86gvpkziclb7bcqn73fadkzn805rjqy7lzhrza46lphq8qy"))))
40516 (build-system pyproject-build-system)
40517 (native-inputs
40518 (list python-pytest
40519 python-setuptools))
40520 (propagated-inputs
40521 (list python-urwid))
40522 (home-page "https://github.com/rr-/urwid_readline")
40523 (synopsis "Text input widget for urwid that supports readline shortcuts")
40524 (description
40525 "This package provides a textbox edit widget for @code{python-urwid} that
40526supports @code{readline} shortcuts.")
40527 (license license:expat)))
40528
40529(define-public python-urwidgets
40530 (package
40531 (name "python-urwidgets")
40532 (version "0.2.1")
40533 (source
40534 (origin
40535 (method url-fetch)
40536 (uri (pypi-uri "urwidgets" version))
40537 (sha256
40538 (base32 "1vrydw9h8c5gi89dnv12a9cdyyxaffvxl1kq51f118cxjk9brwpr"))))
40539 (build-system pyproject-build-system)
40540 (arguments
40541 (list #:tests? #f)) ;no tests
40542 (native-inputs
40543 (list python-setuptools))
40544 (propagated-inputs
40545 (list python-urwid-2))
40546 (home-page "https://github.com/AnonymouX47/urwidgets")
40547 (synopsis "Collection of widgets for urwid")
40548 (description
40549 "This package provides a collection of widgets for urwid.")
40550 (license license:expat)))
40551
40552(define-public python-urwidtrees
40553 (package
40554 (name "python-urwidtrees")
40555 (version "1.0.4")
40556 (source
40557 (origin
40558 (method git-fetch)
40559 ;; package author intends on distributing via github rather than pypi:
40560 ;; https://github.com/pazz/alot/issues/877#issuecomment-230173331
40561 (uri (git-reference
40562 (url "https://github.com/pazz/urwidtrees")
40563 (commit version)))
40564 (file-name (git-file-name name version))
40565 (sha256
40566 (base32
40567 "17k0gx8i7wrzw6skzdjh9b8v3n6lb5zvg9jrybc3d09p8ipvc31i"))))
40568 (build-system pyproject-build-system)
40569 (arguments
40570 '(#:tests? #f)) ; no tests
40571 (propagated-inputs (list python-urwid))
40572 (native-inputs (list python-mock python-setuptools python-wheel))
40573 (home-page "https://github.com/pazz/urwidtrees")
40574 (synopsis "Tree widgets for urwid")
40575 (description "Urwidtrees is a Widget Container API for the @code{urwid}
40576toolkit. Use it to build trees of widgets.")
40577 (license license:gpl3+)))
40578
40579(define-public python-user-agents
40580 (package
40581 (name "python-user-agents")
40582 (version "2.2.0")
40583 (source
40584 (origin
40585 (method git-fetch)
40586 (uri (git-reference
40587 (url "https://github.com/selwin/python-user-agents")
40588 (commit (string-append "v" version))))
40589 (file-name (git-file-name name version))
40590 (sha256
40591 (base32 "0pcbjqj21c2ixhl414bh2h8khi8y1igzfpkyqwan1pakix0lq45a"))))
40592 (build-system pyproject-build-system)
40593 (arguments
40594 (list #:test-backend #~'unittest))
40595 (native-inputs
40596 (list python-setuptools))
40597 (propagated-inputs
40598 (list python-ua-parser))
40599 (home-page "https://github.com/selwin/python-user-agents")
40600 (synopsis "User Agent strings parsing library")
40601 (description
40602 "A library to identify devices (phones, tablets) and their capabilities by
40603parsing (browser/HTTP) user agent strings.")
40604 (license license:expat)))
40605
40606(define-public python-userpath
40607 (package
40608 (name "python-userpath")
40609 (version "1.9.2")
40610 (source
40611 (origin
40612 (method url-fetch)
40613 (uri (pypi-uri "userpath" version))
40614 (sha256
40615 (base32 "05fqxzdi27vqm5lywxs6bm2j4d8k91fx2ihqhg65g4h6mf6jhlkc"))))
40616 (build-system pyproject-build-system)
40617 (arguments
40618 ;; See https://github.com/ofek/userpath/issues/43.
40619 ;; In Guix, tests try to find the temporary build directory in PATH, but
40620 ;; only the store output is present.
40621 (list #:tests? #f))
40622 (native-inputs (list python-hatchling python-pytest))
40623 (propagated-inputs (list python-click))
40624 (home-page "https://github.com/ofek/userpath")
40625 (synopsis "Add locations to the user's PATH")
40626 (description "This package provides a tool for modifying a user's PATH.")
40627 (license license:expat)))
40628
40629(define-public python-userspacefs
40630 (package
40631 (name "python-userspacefs")
40632 (version "3.1.1")
40633 (source
40634 (origin
40635 (method url-fetch)
40636 (uri (pypi-uri "userspacefs" version))
40637 (sha256
40638 (base32 "0lfzgijza3p4wbrhlf8pzj89j7caj8x6aij78d4izppvq4kfjqs6"))))
40639 (build-system pyproject-build-system)
40640 (arguments
40641 (list #:tests? #f ;no tests
40642 #:phases
40643 #~(modify-phases %standard-phases
40644 (add-after 'unpack 'hardcode-libfuse
40645 (lambda* (#:key inputs #:allow-other-keys)
40646 (substitute* "userspacefs/fusepy.py"
40647 (("^_libfuse_path.*")
40648 (string-append "_libfuse_path = '"
40649 (search-input-file inputs "lib/libfuse.so")
40650 "'\n"))))))))
40651 (inputs (list fuse-2))
40652 (native-inputs (list python-setuptools))
40653 (propagated-inputs (list python-aiohttp python-typing-extensions))
40654 (home-page "https://thelig.ht/code/userspacefs/readme.html")
40655 (synopsis "User-space file systems for Python")
40656 (description
40657 "@code{userspacefs} is a library that allows you to easily write
40658user-space file systems in Python.")
40659 (license license:gpl3+)))
40660
40661(define-public python-utils
40662 (package
40663 (name "python-utils")
40664 (version "3.9.1")
40665 (source
40666 (origin
40667 (method url-fetch)
40668 (uri (pypi-uri "python_utils" version))
40669 (sha256
40670 (base32 "18292j4p1bvlpbrfj2cgkdby6dpgnl5gbjwly0qb4pj1j914nmzb"))))
40671 (build-system pyproject-build-system)
40672 (native-inputs
40673 (list python-pytest
40674 python-pytest-asyncio
40675 python-setuptools))
40676 (propagated-inputs
40677 (list python-loguru
40678 python-typing-extensions))
40679 (home-page "https://github.com/WoLpH/python-utils")
40680 (synopsis "Convenient utilities not included with the standard Python install")
40681 (description
40682 "Python Utils is a collection of small Python functions and classes
40683which make common patterns shorter and easier.")
40684 (license license:bsd-2)))
40685
40686(define-public python-uuid6
40687 (package
40688 (name "python-uuid6")
40689 (version "2025.0.1")
40690 (source
40691 (origin
40692 (method git-fetch)
40693 (uri (git-reference
40694 (url "https://github.com/oittaa/uuid6-python")
40695 (commit version)))
40696 (file-name (git-file-name name version))
40697 (sha256
40698 (base32 "0xawnq7b0vzcvrw50jfdagn4a2javyav108hlpf31kbn7rn03jhk"))))
40699 (build-system pyproject-build-system)
40700 (arguments
40701 (list
40702 #:test-flags
40703 ;; Test is time based: AssertionError: 13987034766.015247 !=
40704 ;; 13987034766.01471 within 3 places (0.000537872314453125 difference)
40705 #~(list "--deselect=test/test_uuid6.py::UUIDTests::test_time")))
40706 (native-inputs
40707 (list python-pytest
40708 python-setuptools
40709 python-setuptools-scm))
40710 (home-page "https://github.com/oittaa/uuid6-python")
40711 (synopsis "Time-based UUID formats which are suited for use as a database key")
40712 (description
40713 "This module extends immutable UUID objects (the UUID class) with the
40714functions @code{uuid6()}, @code{uuid7()}, and @code{uuid8()} from the proposed
40715@url{https://datatracker.ietf.org/doc/rfc9562/, IETF RFC 9562}.")
40716 (license license:expat)))
40717
40718(define-public python-validate-email
40719 (package
40720 (name "python-validate-email")
40721 (version "1.3")
40722 (source
40723 (origin
40724 (method url-fetch)
40725 (uri (pypi-uri "validate_email" version))
40726 (sha256
40727 (base32 "1bxffaf5yz2cph8ki55vdvdypbwkvn2xr1firlcy62vqbzf1jivq"))))
40728 (build-system pyproject-build-system)
40729 (arguments (list #:tests? #f)) ;no tests in PyPI or Git
40730 (native-inputs
40731 (list python-setuptools))
40732 (home-page "https://github.com/syrusakbary/validate_email")
40733 (synopsis "Verifies if an email address is valid and really exists")
40734 (description
40735 "@code{validate_email} can be used to verify if an email address is
40736valid and really exists.")
40737 (license license:lgpl3+)))
40738
40739(define-public python-validators
40740 (package
40741 (name "python-validators")
40742 (version "0.34.0")
40743 (source
40744 (origin
40745 (method url-fetch)
40746 (uri (pypi-uri "validators" version))
40747 (sha256
40748 (base32 "07vq3s77f5yndn7jfx39jbsaq5m8wqc3p52v4i6sgyasnh3y8zv4"))))
40749 (build-system pyproject-build-system)
40750 (arguments
40751 (list
40752 ;; python-eth-hash is not packed yet.
40753 #:test-flags #~(list "--ignore=tests/crypto_addresses/test_eth_address.py")))
40754 (native-inputs
40755 (list python-pytest
40756 python-setuptools
40757 python-wheel))
40758 (propagated-inputs
40759 (list python-decorator
40760 ;; python-eth-hash ; optional, not packed yet.
40761 python-six))
40762 (home-page "https://github.com/kvesteri/validators")
40763 (synopsis "Data validation library")
40764 (description
40765 "This package contains validators for different things such as email
40766addresses, IP addresses, URLs, hashes and more. It has been designed to be
40767easy to use and not require defining a schema or form just to validate some
40768input.")
40769 (license license:expat)))
40770
40771(define-public python-valkey
40772 (package
40773 (name "python-valkey")
40774 (version "6.1.1")
40775 (source
40776 (origin
40777 (method git-fetch)
40778 (uri (git-reference
40779 (url "https://github.com/valkey-io/valkey-py")
40780 (commit (string-append "v" version))))
40781 (file-name (git-file-name name version))
40782 (sha256
40783 (base32 "05zmnb8lmygv75zx0hb40s2rgr53sy4g0sizcb9mq8fd09z5i0n2"))))
40784 (build-system pyproject-build-system)
40785 (arguments
40786 ;; XXX: A lot of tests fail with ConnectionError
40787 ;; Maybe we need to spawn a valkey server?
40788 (list #:tests? #f))
40789 (native-inputs
40790 (list python-setuptools))
40791 (home-page "https://github.com/valkey-io/valkey-py")
40792 (synopsis "Python client for Valkey")
40793 (description
40794 "This package provides a python client for the @code{Valkey} key-value
40795store, forked from redis-py.")
40796 (license license:expat)))
40797
40798;; XXX: No fresh releases or updates since 2016, consider to remove, leaf
40799;; package.
40800(define-public python-vcversioner
40801 (package
40802 (name "python-vcversioner")
40803 (version "2.16.0.0")
40804 (source
40805 (origin
40806 (method url-fetch)
40807 (uri (pypi-uri "vcversioner" version))
40808 (sha256
40809 (base32
40810 "16z10sm78jd7ca3jbkgc3q5i8a8q7y1h21q1li21yy3rlhbhrrns"))))
40811 (build-system pyproject-build-system)
40812 (arguments
40813 (list #:tests? #f)) ;no tests in PyPI archive
40814 (native-inputs
40815 (list python-setuptools))
40816 (home-page "https://github.com/habnabit/vcversioner")
40817 (synopsis "Python library for version number discovery")
40818 (description
40819 "Vcversioner is a Python library that inspects tagging information in a
40820variety of version control systems in order to discover version numbers.")
40821 (license license:isc)))
40822
40823(define-public python-vdf
40824 (package
40825 (name "python-vdf")
40826 (version "3.4")
40827 (source
40828 (origin
40829 (method git-fetch) ; no tests in PyPI release
40830 (uri (git-reference
40831 (url "https://github.com/ValvePython/vdf")
40832 (commit (string-append "v" version))))
40833 (file-name (git-file-name name version))
40834 (sha256
40835 (base32 "1xc0sd21xgf08pf6dwa4l23y9jb6yqaw61rr03ns0d2r6sby137a"))))
40836 (build-system pyproject-build-system)
40837 (native-inputs
40838 (list python-pytest python-setuptools))
40839 (home-page "https://github.com/ValvePython/vdf")
40840 (synopsis "Work with Valve's VDF text format")
40841 (description
40842 "This package provides @code{python-vdf}, a library for working with
40843 Valve's VDF text format.")
40844 (license license:expat)))
40845
40846(define-public python-vendetect
40847 (package
40848 (name "python-vendetect")
40849 (version "0.0.3")
40850 (source
40851 (origin
40852 (method url-fetch)
40853 (uri (pypi-uri "vendetect" version))
40854 (sha256
40855 (base32 "0hi13sbgr8y66mih2xyzczjfff4lwymkn9cw5215ms2nn6qq9rhi"))))
40856 (build-system pyproject-build-system)
40857 (propagated-inputs (list python-copydetect python-rich))
40858 (native-inputs (list python-hatchling python-pytest))
40859 (home-page "https://github.com/trailofbits/vendetect")
40860 (synopsis "Detect vendored and copy-pasted code")
40861 (description
40862 "Vendetect helps identify copied or vendored code between repositories,
40863making it easier to detect when code has been copied with or without
40864attribution. It uses similarity detection algorithms to compare code files
40865and highlight matching sections.")
40866 (license license:agpl3+)))
40867
40868;; XXX: No updates since 2017.
40869(define-public python-verboselogs
40870 (package
40871 (name "python-verboselogs")
40872 (version "1.7")
40873 (source
40874 (origin
40875 (method url-fetch)
40876 (uri (pypi-uri "verboselogs" version))
40877 (sha256
40878 (base32 "09z4d1jiasn7k1hs5af2ckmnrd0i1d1m04bhfjhv7z6svzfdwgg3"))))
40879 (build-system pyproject-build-system)
40880 (arguments
40881 (list
40882 #:test-flags
40883 ;; Do not run pylint plugin test, as astroid is an old unsupported
40884 ;; version.
40885 #~(list "-k" "not test_pylint_plugin"
40886 "verboselogs/tests.py")))
40887 (native-inputs
40888 (list python-mock
40889 python-pytest
40890 python-setuptools))
40891 (home-page "https://verboselogs.readthedocs.io")
40892 (synopsis "Verbose logging level for Python's logging module")
40893 (description
40894 "The @code{verboselogs} package extends Python's @code{logging} module to
40895add the log levels NOTICE, SPAM, SUCCESS and VERBOSE.")
40896 (license license:expat)))
40897
40898(define-public python-verlib2
40899 (package
40900 (name "python-verlib2")
40901 (version "0.3.1")
40902 (source
40903 (origin
40904 (method git-fetch)
40905 (uri (git-reference
40906 (url "https://github.com/pyveci/verlib2")
40907 (commit (string-append "v" version))))
40908 (file-name (git-file-name name version))
40909 (sha256
40910 (base32 "1xp0qfzy4l4fs1rn1670fbf7d7xv1p2s3rplspx8xqszjd5j0n8c"))))
40911 (build-system pyproject-build-system)
40912 (native-inputs
40913 (list python-pretend python-pytest python-setuptools))
40914 (home-page "https://github.com/pyveci/verlib2")
40915 (synopsis "Python versioning utilities")
40916 (description
40917 "This package provides a standalone variant of @code{distutils.version} and
40918@code{packaging.version}, without anything else.")
40919 (license license:bsd-2)))
40920
40921;; XXX: No updates since 2018, consider to remove when fails to build, it's a
40922;; leaf package.
40923(define-public python-version
40924 ;; No version tags available in the git repo; just using bare commit instead.
40925 (let ((commit "5232eea250ab72cc5cb72b0b75efb35d2192b906")
40926 (revision "1"))
40927 (package
40928 (name "python-version")
40929 (version (git-version "0.0.2" revision commit))
40930 (source
40931 (origin
40932 (method git-fetch)
40933 (uri (git-reference
40934 (url "https://gitlab.com/halfak/python_version")
40935 (commit commit)))
40936 (file-name (git-file-name name version))
40937 (sha256
40938 (base32 "0w210559ypdynlj9yn40m9awzkaknwrf682i99hswl7h66sdgh0h"))))
40939 (build-system pyproject-build-system)
40940 (arguments
40941 (list #:tests? #f)) ;no tests
40942 (native-inputs
40943 (list python-setuptools))
40944 (home-page "https://gitlab.com/halfak/python_version")
40945 (synopsis "Python version checking utility")
40946 (description
40947 "This package provides a simple utility for checking the python version.")
40948 (license license:expat))))
40949
40950(define-public python-versioneer
40951 (package
40952 (name "python-versioneer")
40953 (version "0.29")
40954 (source
40955 (origin
40956 (method url-fetch)
40957 (uri (pypi-uri "versioneer" version))
40958 (sha256
40959 (base32
40960 "0cap4cjckxp9mlkprqayfs77k3pn5iwpr2riacdxc4bjhnwq7cjs"))
40961 (patches (search-patches "python-versioneer-guix-support.patch"))))
40962 (build-system pyproject-build-system)
40963 (arguments
40964 (list
40965 ;; Minimize test requirements.
40966 #:test-flags
40967 #~(list "--deselect=test/git/test_git.py::Repo::test_pyproject"
40968 "--ignore=test/git/test_invocations.py"
40969 "--ignore=test/test_render.py")
40970 #:phases
40971 #~(modify-phases %standard-phases
40972 (add-before 'check 'pre-check
40973 (lambda _
40974 (invoke "python" "setup.py" "make_versioneer"
40975 "make_long_version_py_git"))))))
40976 (native-inputs
40977 (list git-minimal/pinned
40978 python-pytest
40979 python-setuptools
40980 python-wheel))
40981 (propagated-inputs
40982 (list python-tomli))
40983 (home-page "https://github.com/python-versioneer/python-versioneer")
40984 (synopsis "Version-string management for VCS-controlled trees")
40985 (description
40986 "@code{versioneer} is a tool for managing a recorded version number in
40987distutils-based python projects. The goal is to remove the tedious and
40988error-prone \"update the embedded version string\" step from your release
40989process.")
40990 (license license:unlicense)))
40991
40992(define-public python-verspec
40993 (package
40994 (name "python-verspec")
40995 (version "0.1.0")
40996 (source
40997 (origin
40998 (method url-fetch)
40999 (uri (pypi-uri "verspec" version))
41000 (sha256
41001 (base32 "07n06wv85fm4vl1ird2mja0823js3x322wgs9gdnq1djjyk4ql64"))))
41002 (build-system pyproject-build-system)
41003 (arguments
41004 (list
41005 #:phases
41006 #~(modify-phases %standard-phases
41007 (add-before 'check 'pre-check
41008 (lambda _
41009 (invoke "touch" "test/__init__.py"))))))
41010 (native-inputs
41011 (list python-pretend
41012 python-pytest
41013 python-setuptools))
41014 (home-page "https://github.com/jimporter/verspec")
41015 (synopsis "Flexible version handling for Python")
41016 (description
41017 "This Python library handles software versions and specifiers. It is
41018adapted from the @code{packaging} package.")
41019 (license (list license:bsd-2 license:asl2.0))))
41020
41021(define-public python-vine
41022 (package
41023 (name "python-vine")
41024 (version "5.1.0")
41025 (source
41026 (origin
41027 (method url-fetch)
41028 (uri (pypi-uri "vine" version))
41029 (sha256
41030 (base32 "1q31krwxdvwawdn1kfqmpplix31d4jhs0qng26908hawsf0yjqlb"))))
41031 (build-system pyproject-build-system)
41032 (arguments
41033 (list
41034 #:test-flags
41035 ;; AttributeError: 'test_barrier' object has no attribute 'ps'.
41036 #~(list "-k" (string-join
41037 (list "not test_evaluate"
41038 "test_reverse"
41039 "test_cancel"
41040 "test_throw")
41041 " and not "))))
41042 (native-inputs
41043 (list python-pytest python-setuptools python-wheel))
41044 (home-page "https://github.com/celery/vine")
41045 (synopsis "Promises for Python")
41046 (description
41047 "@code{vine} provides a special implementation of promises in that it can
41048be used both for \"promise of a value\" and lazy evaluation. The biggest
41049upside for this is that everything in a promise can also be a promise,
41050e.g. filters, callbacks and errbacks can all be promises.")
41051 (license license:bsd-3)))
41052
41053(define-public python-virtualenv
41054 (package
41055 (name "python-virtualenv")
41056 (version "20.35.4")
41057 (source
41058 (origin
41059 (method git-fetch)
41060 (uri (git-reference
41061 (url "https://github.com/pypa/virtualenv")
41062 (commit version)))
41063 (file-name (git-file-name name version))
41064 (sha256
41065 (base32 "0yiwqkdxlk3ly8xafyc7raaib75hr6df6zs50n77ikbz9mhqixfh"))))
41066 (build-system pyproject-build-system)
41067 (arguments
41068 (list
41069 ;; tests: 347 passed, 43 skipped, 8 deselected
41070 #:test-flags
41071 #~(list #$@(map (lambda (ls) (string-append "--deselect=tests/unit/"
41072 (string-join ls "::")))
41073 '(("discovery/py_info/test_py_info.py"
41074 "test_fallback_existent_system_executable")
41075 ("discovery/test_discovery.py"
41076 "test_get_paths_no_path_env")
41077 ("create/via_global_ref/test_build_c_ext.py"
41078 "test_can_build_c_extensions[cpython3-posix]")
41079 ("create/via_global_ref/test_build_c_ext.py"
41080 "test_can_build_c_extensions[venv]")
41081 ("create/test_creator.py"
41082 "test_create_distutils_cfg[cpython3-posix]")
41083 ("create/test_creator.py"
41084 "test_create_distutils_cfg[venv]")
41085 ("seed/embed/test_bootstrap_link_via_app_data.py"
41086 "test_seed_link_via_app_data[True]")
41087 ("seed/embed/test_bootstrap_link_via_app_data.py"
41088 "test_seed_link_via_app_data[False]"))))))
41089 (native-inputs
41090 (list python-flaky
41091 python-hatch-vcs
41092 python-hatchling
41093 python-packaging
41094 python-pytest
41095 python-pytest-env
41096 python-pytest-freezer
41097 python-pytest-mock
41098 python-pytest-timeout
41099 python-setuptools
41100 python-time-machine))
41101 (propagated-inputs
41102 (list python-distlib
41103 python-filelock
41104 python-platformdirs))
41105 (home-page "https://virtualenv.pypa.io/")
41106 (synopsis "Virtual Python environment builder")
41107 (description
41108 "Virtualenv is a tool to create isolated Python environments.")
41109 (license license:expat)))
41110
41111(define-public python-vncdotool
41112 (package
41113 (name "python-vncdotool")
41114 (version "1.2.0")
41115 (source
41116 (origin
41117 (method git-fetch)
41118 (uri (git-reference
41119 (url "http://github.com/sibson/vncdotool")
41120 (commit (string-append "v" version))))
41121 (file-name (git-file-name name version))
41122 (sha256
41123 (base32 "1adsc263qsa3hcyk8mhv0wwq44h8zhcksx92chd5rr1wz37zmc22"))))
41124 (build-system pyproject-build-system)
41125 (propagated-inputs (list python-pillow python-pycryptodomex python-twisted))
41126 (native-inputs (list python-pexpect python-pytest python-pyvirtualdisplay
41127 python-setuptools python-wheel))
41128 (home-page "http://github.com/sibson/vncdotool")
41129 (synopsis "Command line VNC client")
41130 (description
41131 "This package provides a Python command line VNC client. It can be
41132useful to automating interactions with virtual machines or hardware devices
41133that are otherwise difficult to control.")
41134 (license license:expat)))
41135
41136(define-public python-vncdotool-bootstrap
41137 (hidden-package
41138 (package/inherit python-vncdotool
41139 (arguments (list #:tests? #f))
41140 (native-inputs (list python-pexpect python-pytest python-setuptools
41141 python-wheel)))))
41142
41143(define-public python-vobject
41144 (package
41145 (name "python-vobject")
41146 (version "0.9.9")
41147 (source (origin
41148 (method url-fetch)
41149 (uri (pypi-uri "vobject" version))
41150 (sha256
41151 (base32
41152 "13mk8wrg7js0zv3w8246jnxb3i5yp4ascl1csp0q9787wbbyai5c"))))
41153 (build-system pyproject-build-system)
41154 (arguments
41155 '(;; The test suite relies on some non-portable Windows interfaces. Tests
41156 ;; are rewokred on master's HEAD.
41157 #:tests? #f))
41158 (native-inputs
41159 (list python-setuptools))
41160 (propagated-inputs
41161 (list python-dateutil
41162 python-pytz
41163 python-six)) ;it's dropped on master's HEAD
41164 (home-page "https://py-vobject.github.io/")
41165 (synopsis "Parse and generate vCard and vCalendar files")
41166 (description
41167 "Vobject is intended to be a full featured Python package for parsing
41168and generating vCard and vCalendar files. Currently, iCalendar files are
41169supported and well tested. vCard 3.0 files are supported, and all data should
41170be imported, but only a few components are understood in a sophisticated way.")
41171 (license license:asl2.0)))
41172
41173(define-public python-voluptuous
41174 (package
41175 (name "python-voluptuous")
41176 (version "0.15.2")
41177 (source
41178 (origin
41179 (method url-fetch)
41180 (uri (pypi-uri "voluptuous" version))
41181 (sha256
41182 (base32 "1akr0adq9can0ibravqzl4aaf20rgv47g9gk596hn8ykqhrapz3g"))))
41183 (build-system pyproject-build-system)
41184 (native-inputs
41185 (list python-pytest
41186 python-setuptools))
41187 (home-page "https://github.com/alecthomas/voluptuous")
41188 (synopsis "Python data validation library")
41189 (description
41190 "Voluptuous is a Python data validation library. It is primarily
41191intended for validating data coming into Python as JSON, YAML, etc.")
41192 (license license:bsd-3)))
41193
41194(define-public python-wadler-lindig
41195 (package
41196 (name "python-wadler-lindig")
41197 (version "0.1.7")
41198 (source
41199 (origin
41200 ;; GitHub includes the tests, unlike the PyPI tarball
41201 (method git-fetch)
41202 (uri (git-reference
41203 (url "https://github.com/patrick-kidger/wadler_lindig")
41204 (commit (string-append "v" version))))
41205 (file-name (git-file-name name version))
41206 (sha256
41207 (base32 "0nl2zx75p0fza3xyd5qsl4gx68hma677gin68d290ivk6zmkdzx8"))))
41208 (build-system pyproject-build-system)
41209 (native-inputs (list python-hatchling python-pytest python-numpy))
41210 (home-page "https://docs.kidger.site/wadler_lindig")
41211 (synopsis "Pretty printer for Python using the Wadler-Lindig algorithm")
41212 (description
41213 "Wadler-Lindig is a minimal, zero-dependency pretty-printing
41214library for Python that implements a simplified version of the Wadler-Lindig
41215algorithm. Designed to consume less horizontal space than Python's
41216built-in pprint.pprint, it produces compact, well-formatted representations
41217even for complex custom types.")
41218 (license license:asl2.0)))
41219
41220(define-public python-wait-for2
41221 (package
41222 (name "python-wait-for2")
41223 (version "0.4.1")
41224 (source
41225 (origin
41226 (method git-fetch)
41227 (uri (git-reference
41228 (url "https://github.com/Traktormaster/wait-for2")
41229 (commit (string-append "v" version))))
41230 (file-name (git-file-name name version))
41231 (sha256
41232 (base32 "08911yby18sw2y6njn1fqlwvf9j2aay0p5d3wykdlcj36nyxfv1w"))))
41233 (build-system pyproject-build-system)
41234 (native-inputs
41235 (list python-pytest
41236 python-pytest-asyncio
41237 python-setuptools))
41238 (home-page "https://github.com/Traktormaster/wait-for2")
41239 (synopsis "Asyncio wait_for handling simultaneous cancellation and future completion")
41240 (description
41241 "This package provide an alternate implementation of @code{asyncio.wait_for()}
41242introduced in Python 3.12. It handles several edge cases like simultaneous
41243cancellation of wait and completion of future differently and consistently
41244across Python versions 3.7+.")
41245 (license license:asl2.0)))
41246
41247(define-public python-wand
41248 (package
41249 (name "python-wand")
41250 (version "0.7.1")
41251 (source
41252 (origin
41253 (method git-fetch)
41254 (uri (git-reference
41255 (url "https://github.com/emcconville/wand")
41256 (commit version)))
41257 (file-name (git-file-name name version))
41258 (sha256
41259 (base32 "0yzv3jwbfg0h2n102718cw392gx2dkrbpj4b54khszrcgrsifa2a"))))
41260 (build-system pyproject-build-system)
41261 (arguments
41262 (list
41263 #:phases
41264 #~(modify-phases %standard-phases
41265 (add-after 'unpack 'hardcode-lib-path
41266 (lambda _
41267 (substitute* "wand/api.py"
41268 (("os\\.environ\\.get\\('MAGICK_HOME'\\)")
41269 (string-append "\"" #$(this-package-input "imagemagick") "\""))
41270 (("os\\.environ\\.get\\('WAND_MAGICK_LIBRARY_SUFFIX'\\)")
41271 "\".Q16\"")))))))
41272 (native-inputs
41273 (list python-setuptools python-pytest))
41274 (inputs
41275 (list imagemagick))
41276 (home-page "https://docs.wand-py.org/")
41277 (synopsis "MagickWand API binding for Python")
41278 (description
41279 "Wand is a ctypes-based binding for ImageMagick's MagickWand library.")
41280 (license license:expat)))
41281
41282(define-public python-wasabi
41283 (package
41284 (name "python-wasabi")
41285 (version "1.1.3")
41286 (source
41287 (origin
41288 (method url-fetch)
41289 (uri (pypi-uri "wasabi" version))
41290 (sha256
41291 (base32 "0y085r7hym3x34a9jgxl5cd8gsh617rdmd187q6dn29q027h1csb"))))
41292 (build-system pyproject-build-system)
41293 (arguments
41294 (list
41295 #:test-flags
41296 ;; Test requires nbconvert which is huge.
41297 #~(list "--deselect=wasabi/tests/test_jupyter.py::test_jupyter")))
41298 (native-inputs
41299 (list python-pytest
41300 python-setuptools))
41301 (propagated-inputs
41302 (list python-colorama))
41303 (home-page "https://github.com/ines/wasabi")
41304 (synopsis "Console printing and formatting toolkit")
41305 (description
41306 "This package provides a lightweight console printing and formatting
41307toolkit for Python.")
41308 (license license:expat)))
41309
41310(define-public python-watchdog
41311 (package
41312 (name "python-watchdog")
41313 (version "6.0.0")
41314 (source
41315 (origin
41316 (method url-fetch)
41317 (uri (pypi-uri "watchdog" version))
41318 (sha256
41319 (base32 "10n2v2iflhdriwfp34yvhfcckqb6vs7378fdvqj8xbm3zn17rpwx"))))
41320 (build-system pyproject-build-system)
41321 (arguments
41322 (list
41323 #:test-flags
41324 #~(list "-k" (string-join
41325 (list "not test_kill_auto_restart"
41326 "test_auto_restart_on_file_change_debounce"
41327 ;; Fails with too many open files.
41328 "test_select_fd")
41329 " and not "))))
41330 (native-inputs
41331 (list python-pytest python-setuptools))
41332 (propagated-inputs
41333 (list python-pyyaml))
41334 (home-page "https://github.com/gorakhargosh/watchdog")
41335 (synopsis "File system events monitoring")
41336 (description
41337 "This package provides a way to monitor file system events such as a file
41338modification and trigger an action. This is similar to inotify, but
41339portable.")
41340 (license license:asl2.0)))
41341
41342(define-public python-watchfiles
41343 (package
41344 (name "python-watchfiles")
41345 (version "1.1.1")
41346 (source
41347 (origin
41348 (method git-fetch)
41349 (uri (git-reference
41350 (url "https://github.com/samuelcolvin/watchfiles")
41351 (commit (string-append "v" version))))
41352 (file-name (git-file-name name version))
41353 (sha256
41354 (base32 "1jj9lqbkk8q61g74lykqgyx4ck30kxs7ljkxqzwd2lwdhh4jfm2j"))))
41355 (build-system pyproject-build-system)
41356 (arguments
41357 (list
41358 ;; Missing file in source.
41359 #:test-flags ''("-k" "not test_docs_examples")
41360 #:imported-modules `(,@%cargo-build-system-modules
41361 ,@%pyproject-build-system-modules)
41362 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
41363 (guix build pyproject-build-system)
41364 (guix build utils))
41365 #:phases
41366 #~(modify-phases %standard-phases
41367 (add-after 'unpack 'prepare-cargo-build-system
41368 (lambda args
41369 (for-each
41370 (lambda (phase)
41371 (format #t "Running cargo phase: ~a~%" phase)
41372 (apply (assoc-ref cargo:%standard-phases phase)
41373 #:cargo-target #$(cargo-triplet)
41374 args))
41375 '(unpack-rust-crates
41376 configure
41377 check-for-pregenerated-files
41378 patch-cargo-checksums))))
41379 (add-after 'build 'install-rust-library
41380 (lambda _
41381 (copy-file "target/release/lib_rust_notify.so"
41382 "watchfiles/_rust_notify.so"))))))
41383 (native-inputs
41384 (append
41385 (list maturin
41386 python-anyio
41387 python-dirty-equals
41388 python-pytest
41389 python-pytest-mock
41390 python-pytest-timeout
41391 rust
41392 `(,rust "cargo"))
41393 (or (and=> (%current-target-system)
41394 (compose list make-rust-sysroot))
41395 '())))
41396 (inputs
41397 (cargo-inputs 'python-watchfiles))
41398 (propagated-inputs
41399 (list python-anyio))
41400 (home-page "https://github.com/samuelcolvin/watchfiles")
41401 (synopsis "Simple, modern file watching and code reload in Python")
41402 (description
41403 "Simple, modern file watching and code reload in Python inspired by
41404@code{watchdog}. Among the differences are a unified approach for each
41405operating systems and an elegant approach to concurrency using threading.")
41406 (license license:expat)))
41407
41408(define-public python-wcwidth
41409 (package
41410 (name "python-wcwidth")
41411 (version "0.2.13")
41412 (source (origin
41413 (method url-fetch)
41414 (uri (pypi-uri "wcwidth" version))
41415 (sha256
41416 (base32
41417 "1dbj74q1iz349sdkxrkc90f7xd4y7a9bdvgxg3cqdcly7430rskj"))))
41418 (build-system pyproject-build-system)
41419 (native-inputs (list python-pytest python-setuptools))
41420 (home-page "https://github.com/jquast/wcwidth")
41421 (synopsis "Measure number of terminal column cells of wide-character codes")
41422 (description
41423 "Wcwidth measures the number of terminal column cells of wide-character
41424codes. It is useful for those implementing a terminal emulator, or programs
41425that carefully produce output to be interpreted by one. It is a Python
41426implementation of the @code{wcwidth} and @code{wcswidth} C functions specified
41427in POSIX.1-2001 and POSIX.1-2008.")
41428 (license license:expat)))
41429
41430(define-public python-whatever
41431 (package
41432 (name "python-whatever")
41433 (version "0.7")
41434 (source
41435 (origin
41436 (method git-fetch)
41437 (uri (git-reference
41438 (url "https://github.com/Suor/whatever")
41439 (commit version)))
41440 (file-name (git-file-name name version))
41441 (sha256
41442 (base32 "1x5b4r3fppp208v52hn8inf2988w4llbkw9kvfc3w81dhmrf5fvq"))))
41443 (build-system pyproject-build-system)
41444 (native-inputs
41445 (list python-pytest python-setuptools python-wheel))
41446 (home-page "https://github.com/Suor/whatever")
41447 (synopsis "Make anonymous functions by partial application of operators")
41448 (description "@code{whatever} provides an easy way to make anonymous
41449functions by partial application of operators.")
41450 (license license:bsd-3)))
41451
41452(define-public python-whatthepatch
41453 (package
41454 (name "python-whatthepatch")
41455 (version "1.0.7")
41456 (source
41457 (origin
41458 (method url-fetch)
41459 (uri (pypi-uri "whatthepatch" version))
41460 (sha256
41461 (base32 "1pvygmgj9xqs8d9lsjxvg1mymni8pjsd44yl0a74002jxbmv9vwy"))))
41462 (build-system pyproject-build-system)
41463 (native-inputs (list python-pytest python-setuptools))
41464 (home-page "https://github.com/cscorley/whatthepatch")
41465 (synopsis "Patch parsing and application library")
41466 (description
41467 "This package provides a patch parsing and application library.")
41468 (license license:expat)))
41469
41470(define-public python-wheel-filename
41471 (package
41472 (name "python-wheel-filename")
41473 (version "1.4.2")
41474 (source
41475 (origin
41476 (method url-fetch)
41477 (uri (pypi-uri "wheel_filename" version))
41478 (sha256
41479 (base32 "1zcqq8mydjjrk8x5xlm53bavs51jm40nz42a7500pd6bbm31r2c7"))))
41480 (build-system pyproject-build-system)
41481 (native-inputs (list python-hatchling python-pytest))
41482 (home-page "https://github.com/wheelodex/wheel-filename")
41483 (synopsis "Parse wheel filenames")
41484 (description
41485 "This software allows you to verify
41486@url{https://packaging.python.org/en/latest/specifications/binary-distribution-format/, wheel}
41487filenames and parse them into their component fields.
41488
41489This package adheres strictly to the standard, with the following
41490exceptions:
41491
41492@itemize @bullet
41493@item
41494Version components may be any sequence of the relevant set of
41495characters; they are not verified for PEP 440 compliance.
41496@item
41497The @file{.whl} file extension is matched case-insensitively.
41498@end itemize")
41499 (license license:expat)))
41500
41501(define-public python-whenever
41502 (package
41503 (name "python-whenever")
41504 (version "0.9.2")
41505 (source
41506 (origin
41507 (method url-fetch)
41508 (uri (pypi-uri "whenever" version))
41509 (sha256
41510 (base32 "1awcy5s25z2f7yk4n4x3ibjhypxz7ilgz4hi3fiww58pdcgzcnpw"))))
41511 (build-system pyproject-build-system)
41512 (arguments
41513 (list
41514 ;; tests: 2170 passed, 3 skipped, 2 warnings
41515 #:phases
41516 #~(modify-phases %standard-phases
41517 ;; Use the pure python version
41518 (add-before 'build 'setenv
41519 (lambda _
41520 (setenv "WHENEVER_NO_BUILD_RUST_EXT" "1")))
41521 (add-before 'check 'set-check-environment
41522 (lambda* (#:key inputs #:allow-other-keys)
41523 (setenv "TZ" "UTC")
41524 (setenv "TZDIR"
41525 (search-input-directory inputs
41526 "share/zoneinfo")))))))
41527 (propagated-inputs
41528 (list python-time-machine python-tzdata python-tzlocal))
41529 (native-inputs
41530 (list python-pytest
41531 python-setuptools
41532 tzdata-for-tests))
41533 (home-page "https://whenever.readthedocs.io/")
41534 (synopsis "Modern datetime library for Python")
41535 (description "Modern datetime library for Python. Supports:
41536@itemize
41537@item DST-safe arithmetic
41538@item Nanosecond precision
41539@item Date arithmetic
41540@end itemize")
41541 (license license:expat)))
41542
41543;; XXX: See: <https://github.com/cookiecutter/whichcraft/issues/26>.
41544(define-public python-whichcraft
41545 (package
41546 (name "python-whichcraft")
41547 (version "0.6.1")
41548 (source
41549 (origin
41550 (method url-fetch)
41551 (uri (pypi-uri "whichcraft" version))
41552 (sha256
41553 (base32
41554 "11yfkzyplizdgndy34vyd5qlmr1n5mxis3a3svxmx8fnccdvknxc"))))
41555 (build-system pyproject-build-system)
41556 (native-inputs
41557 (list python-pytest python-setuptools))
41558 (home-page "https://github.com/pydanny/whichcraft")
41559 (synopsis "Cross-platform cross-python shutil.which functionality")
41560 (description
41561 "This package provides a shim of the shutil.which function that's
41562designed to work across multiple versions of Python.")
41563 (license license:bsd-3)))
41564
41565(define-public python-widgetsnbextension
41566 (package
41567 (name "python-widgetsnbextension")
41568 (version "4.0.14")
41569 (source
41570 (origin
41571 (method url-fetch)
41572 (uri (pypi-uri "widgetsnbextension" version))
41573 (sha256
41574 (base32 "1bxm6ys3kmxfhi8dns9q6xrjkxijfa606qpq5lhr7f7dwc29nqm3"))))
41575 (build-system pyproject-build-system)
41576 (arguments
41577 (list #:tests? #f)) ;no tests in PyPI or git
41578 (native-inputs
41579 (list python-jupyter-packaging
41580 python-setuptools))
41581 (home-page "https://ipython.org")
41582 (synopsis "IPython HTML widgets for Jupyter")
41583 (description "This package provides interactive HTML widgets for Jupyter
41584notebooks.")
41585 (license license:bsd-3)))
41586
41587(define-public python-wrapt
41588 (package
41589 (name "python-wrapt")
41590 (version "2.0.1")
41591 (source
41592 (origin
41593 (method url-fetch)
41594 (uri (pypi-uri "wrapt" version))
41595 (sha256
41596 (base32 "13s6zkcs2291bf73prrnl73wmap04cdv3y443swaqz29g1g6774w"))))
41597 (build-system pyproject-build-system)
41598 (arguments
41599 (list
41600 ;; tests: 562 passed, 1 deselected
41601 #:test-flags
41602 ;; AssertionError: Output did not match expected for
41603 ;; mypy_function_wrapper_fn_t6.py
41604 #~(list "--deselect=tests/conftest.py::mypy_function_wrapper_fn_t6")))
41605 (native-inputs
41606 (list python-mypy-for-tests ;hard dependencies in tests
41607 python-pytest
41608 python-setuptools))
41609 (home-page "https://github.com/GrahamDumpleton/wrapt")
41610 (synopsis "Module for decorators, wrappers and monkey patching")
41611 (description
41612 "The aim of the wrapt module is to provide a transparent object proxy for
41613 Python, which can be used as the basis for the construction of function
41614 wrappers and decorator functions.")
41615 (license license:bsd-2)))
41616
41617(define-public python-wurlitzer
41618 (package
41619 (name "python-wurlitzer")
41620 (version "3.1.1")
41621 (source
41622 (origin
41623 (method url-fetch)
41624 (uri (pypi-uri "wurlitzer" version))
41625 (sha256
41626 (base32 "1ncvsc6b0bscvj5dn4iyyw42sf7ssgdqkzxr0bc8f97hp5519fdz"))))
41627 (build-system pyproject-build-system)
41628 (arguments
41629 (list #:test-flags #~(list "test.py")))
41630 (native-inputs
41631 (list python-pytest
41632 python-setuptools))
41633 (home-page "https://github.com/minrk/wurlitzer")
41634 (synopsis "Capture C-level output in context managers")
41635 (description
41636 "This library helps to redirect @code{sys.stdout} to a stream or a file
41637while executing some piece of code, including C code running within a Python
41638process.")
41639 (license license:expat)))
41640
41641(define-public python-xattr
41642 (package
41643 (name "python-xattr")
41644 (version "1.2.0")
41645 (source
41646 (origin
41647 (method url-fetch)
41648 (uri (pypi-uri "xattr" version))
41649 (sha256
41650 (base32 "19z0wp1plr5g8a3jknipii3qmqp3znwd63zqrhx19gpixwhqwk56"))))
41651 (build-system pyproject-build-system)
41652 (native-inputs
41653 (list python-pytest
41654 python-setuptools))
41655 (propagated-inputs
41656 (list python-cffi))
41657 (home-page "https://github.com/xattr/xattr")
41658 (synopsis "Python wrapper for extended file system attributes")
41659 (description "This package provides a Python wrapper for using extended
41660file system attributes. Extended attributes extend the basic attributes of files
41661and directories in the file system. They are stored as name:data pairs
41662associated with file system objects (files, directories, symlinks, etc).")
41663 (license license:expat)))
41664
41665(define-public python-xdg-base-dirs
41666 (package
41667 (name "python-xdg-base-dirs")
41668 (version "6.0.2")
41669 (source
41670 (origin
41671 (method git-fetch)
41672 (uri (git-reference
41673 (url "https://github.com/srstevenson/xdg-base-dirs")
41674 (commit version)))
41675 (file-name (git-file-name name version))
41676 (sha256 (base32 "0ipqrgmxzbn061m02halpsnizp56yk24cyzpwrjnlzjk8icvswl9"))
41677 (modules '((guix build utils)))
41678 ;; All pytest options are for coverage; remove snippet in next release:
41679 ;; https://github.com/srstevenson/xdg-base-dirs/commit/28b6a6beaeb5
41680 (snippet #~(substitute* "pyproject.toml"
41681 (("^addopts = .*") "")))))
41682 (build-system pyproject-build-system)
41683 (native-inputs
41684 (list python-poetry-core python-pytest))
41685 (home-page "https://github.com/srstevenson/xdg-base-dirs")
41686 (synopsis "Variables defined by the XDG Base Directory Specification")
41687 (description "xdg-base-dirs is a Python module that provides functions to
41688return paths to the directories defined by the XDG Base Directory
41689Specification, to save you from duplicating the same snippet of logic in every
41690Python utility you write that deals with user cache, configuration, or data
41691files.")
41692 (license license:isc)))
41693
41694;; XXX: Deprecated on <2026-02-19>.
41695(define-deprecated-package python-xdg
41696 python-xdg-base-dirs)
41697
41698(define-public python-xkbcommon
41699 (package
41700 (name "python-xkbcommon")
41701 (version "1.0.1")
41702 (source
41703 (origin
41704 (method git-fetch)
41705 (uri (git-reference
41706 (url "https://github.com/sde1000/python-xkbcommon")
41707 (commit (string-append "v" version))))
41708 (file-name (git-file-name name version))
41709 (sha256
41710 (base32 "0r9fknyys2mr5fl9hbyp8n9izf27553yf49krzinzksnfr9b6c7s"))))
41711 (build-system pyproject-build-system)
41712 (propagated-inputs (list python-cffi))
41713 (native-inputs (list libxkbcommon python-setuptools))
41714 (arguments
41715 (list
41716 #:test-backend
41717 #~'unittest
41718 #:phases
41719 #~(modify-phases %standard-phases
41720 (add-before 'check 'cleanup
41721 (lambda _
41722 (delete-file-recursively "xkbcommon"))))))
41723 (home-page "https://github.com/sde1000/python-xkbcommon")
41724 (synopsis "Bindings for libxkbcommon using cffi")
41725 (description "Bindings for libxkbcommon using cffi.")
41726 (license license:expat)))
41727
41728(define-public python-xlib
41729 (package
41730 (name "python-xlib")
41731 (version "0.33")
41732 (source
41733 (origin
41734 (method git-fetch)
41735 (uri (git-reference
41736 (url "https://github.com/python-xlib/python-xlib")
41737 (commit version)))
41738 (file-name (git-file-name name version))
41739 (sha256
41740 (base32 "03d28lx6sz0724ps6lnn4m6s0cfspgwqdf2l773lqf88add8wkmv"))))
41741 (build-system pyproject-build-system)
41742 (arguments
41743 `(#:phases
41744 (modify-phases %standard-phases
41745 (add-before 'check 'start-xserver
41746 (lambda* (#:key inputs #:allow-other-keys)
41747 (let ((xorg-server (assoc-ref inputs "xorg-server")))
41748 ;; There must be a running X server and make check doesn't
41749 ;; start one. Therefore we must do it.
41750 (system (format #f "~a/bin/Xvfb :1 &" xorg-server))
41751 (setenv "DISPLAY" ":1")))))))
41752 (native-inputs
41753 (list python-mock
41754 python-pytest
41755 python-setuptools
41756 xorg-server))
41757 (propagated-inputs
41758 (list python-six))
41759 (home-page "https://github.com/python-xlib/python-xlib")
41760 (synopsis "Python X11 client library")
41761 (description
41762 "The Python X Library is intended to be a fully functional
41763X client library for Python programs. It is useful to implement
41764low-level X clients. It is written entirely in Python.")
41765 (license license:gpl2+)))
41766
41767(define-public python-xlrd
41768 (package
41769 (name "python-xlrd")
41770 (version "2.0.2")
41771 (source
41772 (origin
41773 (method git-fetch) ;no tests in PyPI archive
41774 (uri (git-reference
41775 (url "https://github.com/python-excel/xlrd")
41776 (commit version)))
41777 (file-name (git-file-name name version))
41778 (sha256
41779 (base32 "1zgb03a4l2an2hy17w0nlyfisl53jzf8csdj90f5xkibbnjsg3y3"))))
41780 (build-system pyproject-build-system)
41781 (native-inputs
41782 (list python-pytest
41783 python-setuptools))
41784 (home-page "https://www.python-excel.org/")
41785 (synopsis "Library for extracting data from Excel files")
41786 (description "This package provides a library to extract data from
41787spreadsheets using Microsoft Excel proprietary file formats @samp{.xls} and
41788@samp{.xlsx} (versions 2.0 onwards). It has support for Excel dates and is
41789Unicode-aware. It is not intended as an end-user tool.")
41790 (license license:bsd-3)))
41791
41792(define-public python-xlsxwriter
41793 (package
41794 (name "python-xlsxwriter")
41795 (version "3.2.0")
41796 (source
41797 (origin
41798 ;; There are no tests in the PyPI tarball.
41799 (method git-fetch)
41800 (uri (git-reference
41801 (url "https://github.com/jmcnamara/XlsxWriter")
41802 (commit (string-append "RELEASE_" version))))
41803 (file-name (git-file-name name version))
41804 (sha256
41805 (base32 "1g16xb4nsjd807qcm8756ixlxxvdjmbr2v7r6wxkajw1h4m8id0w"))))
41806 (build-system pyproject-build-system)
41807 (native-inputs
41808 (list python-setuptools
41809 python-wheel))
41810 (home-page "https://github.com/jmcnamara/XlsxWriter")
41811 (synopsis "Python module for creating Excel XLSX files")
41812 (description
41813 "XlsxWriter is a Python module that can be used to write text, numbers,
41814formulas and hyperlinks to multiple worksheets in an Excel 2007+ XLSX file.")
41815 (license license:bsd-2)))
41816
41817;;; Note: this package is unmaintained since 2018 (archived on GitHub).
41818(define-public python-xlwt
41819 (package
41820 (name "python-xlwt")
41821 (version "1.3.0")
41822 (source
41823 (origin
41824 (method url-fetch)
41825 (uri (pypi-uri "xlwt" version))
41826 (sha256
41827 (base32 "123c2pdamshkq75wwvck8fq0cjq1843xd3x9qaiz2a4vg9qi56f5"))))
41828 (build-system pyproject-build-system)
41829 (native-inputs (list python-pytest python-setuptools python-wheel))
41830 (home-page "https://www.python-excel.org/")
41831 (synopsis "Library for creating spreadsheet Excel files")
41832 (description
41833 "@code{xlwt} is a library for writing data and formatting information to
41834older Excel files (i.e. .xls). The package itself is pure Python with no
41835dependencies on modules or packages outside the standard Python distribution.
41836It is not intended as an end-user tool.")
41837 (license license:bsd-3)))
41838
41839(define-public python-xmldiff
41840 (package
41841 (name "python-xmldiff")
41842 (version "3.0b1")
41843 (source
41844 (origin
41845 (method git-fetch)
41846 (uri (git-reference
41847 (url "https://github.com/Shoobx/xmldiff")
41848 (commit version)))
41849 (file-name (git-file-name name version))
41850 (sha256
41851 (base32 "0p4ry9dl719gmgkxksdv4ghyyzib1irg6g27bbkla2wmprrj1ai9"))))
41852 (build-system pyproject-build-system)
41853 (native-inputs (list python-pytest python-setuptools))
41854 (propagated-inputs (list python-lxml))
41855 (home-page "https://github.com/Shoobx/xmldiff")
41856 (synopsis "Creates diffs of XML files")
41857 (description "This Python tool figures out the differences between two
41858similar XML files, in the same way the @command{diff} utility does it.")
41859 (license license:expat)))
41860
41861(define-public python-xmlsec
41862 (package
41863 (name "python-xmlsec")
41864 (version "1.3.17")
41865 (source
41866 (origin
41867 (method git-fetch)
41868 (uri (git-reference
41869 (url "https://github.com/xmlsec/python-xmlsec")
41870 (commit version)))
41871 (file-name (git-file-name name version))
41872 (sha256
41873 (base32 "1kd34c248jz603jisamxcs18xchyyizkzaqnfv5668yl6bj7nxd7"))))
41874 (build-system pyproject-build-system)
41875 (arguments
41876 (list
41877 ;; See https://github.com/xmlsec/python-xmlsec/issues/210
41878 #:test-flags #~(list "-n" "1")))
41879 (inputs (list openssl libltdl libxslt libxml2))
41880 (propagated-inputs (list python-lxml xmlsec-openssl))
41881 (native-inputs (list pkg-config
41882 python-lxml
41883 python-pkgconfig
41884 python-pytest
41885 python-pytest-xdist
41886 python-setuptools
41887 python-setuptools-scm
41888 python-wheel))
41889 (home-page "https://github.com/xmlsec/python-xmlsec")
41890 (synopsis "Python bindings for the XML Security Library")
41891 (description "This package provides Python bindings for the XML Security
41892Library.")
41893 (license license:expat)))
41894
41895(define-public python-xmp-toolkit
41896 (package
41897 (name "python-xmp-toolkit")
41898 (version "2.1.0")
41899 (source
41900 (origin
41901 (method url-fetch)
41902 (uri (pypi-uri "python_xmp_toolkit" version))
41903 (sha256
41904 (base32 "1np2njq6c1fnxh6bbh3xp2slz5dm7aamknv7hxax53a11p3a42na"))))
41905 (build-system pyproject-build-system)
41906 (arguments
41907 (list
41908 #:phases
41909 #~(modify-phases %standard-phases
41910 (add-after 'unpack 'patch-source
41911 (lambda* (#:key inputs #:allow-other-keys)
41912 (substitute* "libxmp/exempi.py"
41913 (("ctypes.util.find_library\\('exempi'\\)")
41914 (format #f "~s" (search-input-file
41915 inputs "lib/libexempi.so")))))))))
41916 (native-inputs
41917 (list python-pytest
41918 python-flit-core))
41919 (inputs
41920 (list exempi))
41921 (propagated-inputs
41922 (list python-pytz))
41923 (home-page "https://github.com/python-xmp-toolkit/python-xmp-toolkit")
41924 (synopsis "Python XMP Toolkit for working with metadata")
41925 (description "Python XMP Toolkit is a library for working with XMP
41926metadata, as well as reading/writing XMP metadata stored in many different
41927file formats.
41928
41929Python XMP Toolkit is wrapping Exempi (using ctypes), a C/C++ XMP library
41930based on Adobe XMP Toolkit, ensuring that future updates to the XMP standard
41931are easily incorporated into the library with a minimum amount of work.")
41932 (license license:bsd-3)))
41933
41934(define-public python-yamlcore
41935 (package
41936 (name "python-yamlcore")
41937 (version "0.0.4")
41938 (source
41939 (origin
41940 (method git-fetch)
41941 (uri (git-reference
41942 (url "https://github.com/perlpunk/pyyaml-core")
41943 (commit (string-append "v" version))))
41944 (file-name (git-file-name name version))
41945 (sha256
41946 (base32 "03y7fabyky67cw4g71xcbwfdal79wxcnmr303qyllz21x2d4s5ac"))))
41947 (build-system pyproject-build-system)
41948 (arguments
41949 (list
41950 #:phases
41951 #~(modify-phases %standard-phases
41952 (add-after 'unpack 'fix-test-file-names
41953 (lambda _
41954 (rename-file "tests/test-schema.py" "tests/test_schema.py")
41955 (rename-file "tests/test-yaml.py" "tests/test_yaml.py"))))))
41956 (native-inputs (list python-pytest python-setuptools))
41957 (inputs (list python-pyyaml))
41958 (home-page "https://github.com/perlpunk/pyyaml-core")
41959 (synopsis "YAML 1.2 support for PyYAML")
41960 (description "This module can be used on top of PyYAML to load YAML 1.2
41961files.")
41962 (license license:expat)))
41963
41964(define-deprecated-package python-yamlcore-0.0.2 python-yamlcore)
41965
41966(define-public python-yamllint
41967 (package
41968 (name "python-yamllint")
41969 (version "1.37.1")
41970 (source
41971 (origin
41972 (method url-fetch)
41973 (uri (pypi-uri "yamllint" version))
41974 (sha256
41975 (base32 "0p9401y9f1pgxi9lggmw6wv135kfnd361n3hjh2civ4vap2w1xw1"))))
41976 (build-system pyproject-build-system)
41977 (arguments
41978 (list #:test-backend #~'unittest))
41979 (native-inputs
41980 (list python-setuptools))
41981 (propagated-inputs
41982 (list python-pathspec python-pyyaml))
41983 (home-page "https://github.com/adrienverge/yamllint")
41984 (synopsis "Linter for YAML files")
41985 (description
41986 "Yamllint is a linter for YAML files. yamllint does not only check for
41987syntax validity, but for weirdnesses like key repetition and cosmetic problems
41988such as lines length, trailing spaces, indentation, etc.")
41989 (license license:gpl3+)))
41990
41991(define-public python-yamlloader
41992 (package
41993 (name "python-yamlloader")
41994 (version "1.6.0")
41995 (source
41996 (origin
41997 (method url-fetch)
41998 (uri (pypi-uri "yamlloader" version))
41999 (sha256
42000 (base32 "0gw21aa94fcbf5knx9csc0l44rzgz5pjdcvlxxwx044rdjbk50li"))))
42001 (build-system pyproject-build-system)
42002 (arguments
42003 (list #:test-backend #~'unittest
42004 #:test-flags #~(list "discover" "-v")))
42005 (native-inputs
42006 (list python-hatch-vcs
42007 python-hatchling
42008 python-hypothesis
42009 python-pytest))
42010 (propagated-inputs
42011 (list python-pyyaml))
42012 (home-page "https://github.com/Phynix/yamlloader")
42013 (synopsis "Ordered YAML loader and dumper for PyYAML")
42014 (description
42015 "This package provides loaders and dumpers for PyYAML. Currently, an
42016OrderedDict loader/dumper is implemented, allowing to keep items order when
42017loading resp. dumping a file from/to an OrderedDict (Python 3.8+: Also regular
42018dicts are supported and are the default items to be loaded to. As of Python
420193.7 preservation of insertion order is a language feature of regular dicts.)
42020It was originally mirrored from
42021@url{https://github.com/fmenabe/python-yamlordereddictloader,
42022yamlordereddict}.")
42023 (license license:expat)))
42024
42025;; XXX: Deprecated, the <https://github.com/Phynix/yamlloader> project provide
42026;; an improved version of this library with unit tests, performance
42027;; improvements (by providing access to the C implementation of PyYAML) and is
42028;; more actively developed.
42029(define-public python-yamlordereddictloader
42030 (package
42031 (name "python-yamlordereddictloader")
42032 (version "0.4.2")
42033 (source
42034 (origin
42035 (method git-fetch)
42036 (uri (git-reference
42037 (url "https://github.com/fmenabe/python-yamlordereddictloader")
42038 (commit version)))
42039 (file-name (git-file-name name version))
42040 (sha256
42041 (base32 "1rwvasdmfq7lbd2bm7vmx759fv535cp5ndyhf845fqd86mr7a94c"))))
42042 (build-system pyproject-build-system)
42043 (arguments
42044 (list #:tests? #f)) ;no tests
42045 (native-inputs
42046 (list python-setuptools))
42047 (propagated-inputs
42048 (list python-pyyaml))
42049 (home-page "https://github.com/fmenabe/python-yamlordereddictloader")
42050 (synopsis "Loader and a dumper for PyYAML")
42051 (description
42052 "yamlordereddictloader is a Python package that provides a loader and a
42053dumper for PyYAML allowing to keep items order when loading a file (by putting
42054them in OrderedDict objects) and to manage OrderedDict objects when dumping to
42055a file.")
42056 (license license:expat)))
42057
42058(define-public python-yapf
42059 (package
42060 (name "python-yapf")
42061 (version "0.43.0")
42062 (source
42063 (origin
42064 (method url-fetch)
42065 (uri (pypi-uri "yapf" version))
42066 (sha256
42067 (base32
42068 "13i1sn0jfm7snfdzbyrawxl457bdmgsxkmg0n8h99zzdpwjamlq0"))))
42069 (build-system pyproject-build-system)
42070 (propagated-inputs
42071 (list python-platformdirs python-tomli))
42072 (native-inputs
42073 (list python-pytest python-setuptools python-wheel))
42074 (home-page "https://github.com/google/yapf")
42075 (synopsis "Formatter for Python code")
42076 (description "YAPF is a formatter for Python code. It's based off of
42077@dfn{clang-format}, developed by Daniel Jasper. In essence, the algorithm
42078takes the code and reformats it to the best formatting that conforms to the
42079style guide, even if the original code didn't violate the style guide.")
42080 (license license:asl2.0)))
42081
42082(define-public python-yapsy
42083 (package
42084 (name "python-yapsy")
42085 ;; 1.12.2 (2019-06-28), the latest changes provide support for Python
42086 ;; 3.12+; move back to git tag when released.
42087 (properties '((commit . "6b487b04affb19ab40adbbc87827668bea0abcee")
42088 (revision . "0")))
42089 (version (git-version "1.12.2"
42090 (assoc-ref properties 'revision)
42091 (assoc-ref properties 'commit)))
42092 (source
42093 (origin
42094 (method git-fetch)
42095 (uri (git-reference
42096 (url "https://github.com/tibonihoo/yapsy")
42097 (commit (assoc-ref properties 'commit))))
42098 (file-name (git-file-name name version))
42099 (sha256
42100 (base32 "046c505kwdbp4vhqjrc5xpdrji7lyxv11nzq9yn20c2q1186b9j0"))))
42101 (build-system pyproject-build-system)
42102 (native-inputs
42103 (list python-pytest python-setuptools))
42104 (home-page "https://yapsy.sourceforge.net")
42105 (synopsis "Simple plugin system for Python applications")
42106 (description "Yapsy, or Yet Another Plugin SYstem, is a small library
42107implementing the core mechanisms needed to build a plugin system into a wider
42108application.
42109
42110The main purpose is to depend only on Python's standard libraries and to
42111implement only the basic functionalities needed to detect, load and keep track
42112of several plugins.")
42113 (license license:bsd-3)))
42114
42115(define-public python-yaspin
42116 (package
42117 (name "python-yaspin")
42118 (version "3.2.0")
42119 (source
42120 (origin
42121 (method url-fetch)
42122 (uri
42123 (pypi-uri "yaspin" version))
42124 (sha256
42125 (base32 "1ryc5099sjsa49fhcm6dp5l4rp9v9yxrh17ml78y89idfbbfhvs1"))))
42126 (build-system pyproject-build-system)
42127 ;; tests: 3007 passed, 1758 skipped
42128 (native-inputs
42129 (list python-poetry-core
42130 python-pytest
42131 python-pytest-mock))
42132 (propagated-inputs
42133 (list python-termcolor-next))
42134 (home-page "https://github.com/pavdmyt/yaspin")
42135 (synopsis "Yet Another Terminal Spinner")
42136 (description "Yaspin provides a terminal spinner to indicate the progress
42137during long operations.")
42138 (license license:expat)))
42139
42140(define-public python-yattag
42141 (package
42142 (name "python-yattag")
42143 (version "1.16.1")
42144 (source
42145 (origin
42146 (method url-fetch)
42147 (uri (pypi-uri "yattag" version))
42148 (sha256
42149 (base32 "1x2is0lkpywvqaayc21n1cvfbq0havzx46i83033wpgawxag5a5s"))))
42150 (build-system pyproject-build-system)
42151 (native-inputs
42152 (list python-pytest
42153 python-setuptools
42154 python-wheel))
42155 (home-page "https://www.yattag.org/")
42156 (synopsis "HTML or XML generator for Python")
42157 (description
42158 "Yattag is a Python library for generating HTML or XML in a pythonic
42159way.")
42160 (license license:lgpl2.1)))
42161
42162(define-public python-yq
42163 (package
42164 (name "python-yq")
42165 (version "3.4.3")
42166 (source
42167 (origin
42168 (method url-fetch)
42169 (uri (pypi-uri "yq" version))
42170 (sha256
42171 (base32 "0fvf4n7wpbc0gdxhw8c008rcv092vw96f84j5xdp1krhdwd6ln5s"))))
42172 (build-system pyproject-build-system)
42173 (arguments
42174 (list
42175 #:test-backend #~'custom
42176 #:test-flags #~(list "test/test.py" "-v")
42177 #:phases
42178 #~(modify-phases %standard-phases
42179 (add-after 'unpack 'patch
42180 (lambda _
42181 (substitute* "yq/__init__.py"
42182 (("Popen\\(\\[\"jq")
42183 (string-append
42184 "Popen([\""
42185 #$(this-package-input "jq") "/bin/jq"))))))))
42186 (native-inputs
42187 (list python-hatchling
42188 python-hatch-vcs))
42189 (inputs
42190 (list jq))
42191 (propagated-inputs
42192 (list python-argcomplete
42193 python-pyyaml
42194 python-tomlkit
42195 python-xmltodict))
42196 (home-page "https://github.com/kislyuk/yq")
42197 (synopsis "Command-line YAML/XML processor")
42198 (description
42199 "This package provides @command{yq} and @command{xq} for processing YAML
42200and XML respectively. The processing is done through @command{jq},
42201@command{jq} filters can be used to process the data as it passes through.")
42202 (license license:asl2.0)))
42203
42204(define-public python-yte
42205 (package
42206 (name "python-yte")
42207 (version "1.8.1") ;TODO higher versions depend on uv_build
42208 (source
42209 (origin
42210 (method git-fetch)
42211 (uri (git-reference
42212 (url "https://github.com/koesterlab/yte")
42213 (commit (string-append "v" version))))
42214 (sha256
42215 (base32 "05qrmjf9x6wvy8976kqiy3axk3im8jbc8hpc1yrbidm099vik0ni"))))
42216 (build-system pyproject-build-system)
42217 (arguments
42218 (list
42219 #:test-flags #~(list "tests.py")
42220 #:phases
42221 '(modify-phases %standard-phases
42222 (add-after 'unpack 'set-HOME
42223 (lambda _ (setenv "HOME" "/tmp"))))))
42224 (propagated-inputs (list python-dpath python-plac python-pyyaml))
42225 (native-inputs (list python-numpy python-poetry-core python-pytest))
42226 (home-page "https://github.com/koesterlab/yte")
42227 (synopsis "YAML template engine with Python expressions")
42228 (description
42229 "This package provides a YAML template engine with Python expressions.")
42230 (license license:expat)))
42231
42232(define-public python-zarr
42233 (package
42234 (name "python-zarr")
42235 (version "2.18.7")
42236 (source
42237 (origin
42238 (method url-fetch)
42239 (uri (pypi-uri "zarr" version))
42240 (sha256
42241 (base32
42242 "1xbjjpjskykbdskck5p1f0grh6wq36437ll0n5kazi6s2ipzdf5j"))))
42243 (build-system pyproject-build-system)
42244 (arguments
42245 (list
42246 #:test-flags
42247 #~(list "--numprocesses" (number->string (parallel-job-count))
42248 ;; This tests are flaky. The pass several times on my laptop
42249 ;; but occasionally fail. They fail pretty reliably on the
42250 ;; build farm.
42251 "-k" (string-append "not test_lazy_loader and not open_array"
42252 ;; File not found.
42253 " and not test_filesystem_path"))
42254 #:phases
42255 #~(modify-phases %standard-phases
42256 (add-before 'build 'set-version
42257 (lambda _
42258 (substitute* "pyproject.toml"
42259 (("^version_file.*") "")
42260 (("dynamic = \\[\"version\"\\]")
42261 (string-append "version = \"" #$version "\"")))))
42262 (add-after 'unpack 'disable-service-tests
42263 (lambda _
42264 (setenv "ZARR_TEST_ABS" "0")
42265 (setenv "ZARR_TEST_MONGO" "0")
42266 (setenv "ZARR_TEST_REDIS" "0"))))))
42267 (propagated-inputs
42268 (list python-asciitree
42269 python-fasteners
42270 python-numcodecs
42271 python-numpy))
42272 (native-inputs
42273 (list python-pytest
42274 python-pytest-xdist
42275 python-setuptools
42276 python-wheel))
42277 (home-page "https://github.com/zarr-developers/zarr-python")
42278 (synopsis "Chunked, compressed, N-dimensional arrays for Python")
42279 (description
42280 "This package provides an implementation of chunked, compressed,
42281N-dimensional arrays for Python.")
42282 (license license:expat)))
42283
42284(define-public python-zeroc-ice
42285 (package
42286 (name "python-zeroc-ice")
42287 (version "3.7.10.1")
42288 (source (origin
42289 (method url-fetch)
42290 (uri (pypi-uri "zeroc-ice" version))
42291 (sha256
42292 (base32
42293 "0r46q4hd7xbpvnidbra1prkg4xhmajxjjmclfqgp3pv0lgyslqxh"))))
42294 (build-system pyproject-build-system)
42295 (arguments
42296 ;; XXX: No tests in PyPI, tere are tests in Git, but there is no 3.7.10.1
42297 ;; tag.
42298 ;;
42299 ;; See:
42300 ;; - URL: <https://raw.githubusercontent.com/zeroc-ice>
42301 ;; - File: <ice/refs/heads/main/python/allTests.py>
42302 (list #:tests? #f))
42303 (inputs (list openssl))
42304 (native-inputs (list python-setuptools))
42305 (home-page "https://zeroc.com")
42306 (synopsis "RPC framework")
42307 (description
42308 "Ice is a comprehensive RPC framework. Ice helps you network your
42309software by taking care of all interactions with low-level network programming
42310interfaces.")
42311 (license license:gpl2)))
42312
42313;; Package variant to build [email protected]
42314(define-public python-zeroc-ice-3.6
42315 (package
42316 (inherit python-zeroc-ice)
42317 (version "3.6.5")
42318 (source (origin
42319 (method url-fetch)
42320 (uri (pypi-uri "zeroc-ice" version))
42321 (sha256
42322 (base32
42323 "0mikjfvq26kh8asnn9v55z41pap4c5ypymqnwwi4xkavc3mzyda2"))
42324 (patches
42325 (search-patches
42326 "python-zeroc-ice-3.6.5-python-3.11-support.patch"
42327 "python-zeroc-ice-3.6.5-python-3.12-support.patch"))))
42328 (arguments
42329 (substitute-keyword-arguments arguments
42330 ((#:phases phases #~%standard-phases)
42331 #~(modify-phases #$phases
42332 (add-before 'build 'relax-gcc-14-strictness
42333 (lambda _
42334 (setenv "CFLAGS"
42335 "-g -O2 -Wno-error=implicit-function-declaration")))))))))
42336
42337(define-public python-zeroconf
42338 (package
42339 (name "python-zeroconf")
42340 (version "0.38.1")
42341 (source
42342 (origin
42343 (method git-fetch)
42344 (uri (git-reference
42345 (url "https://github.com/jstasiak/python-zeroconf")
42346 (commit version)))
42347 (file-name (git-file-name name version))
42348 (sha256
42349 (base32 "1p1a0ywlg5sq0ilcphmz9h4kayscz0q1lyfk57j7mwxyx4gl9cpi"))))
42350 (build-system pyproject-build-system)
42351 (arguments
42352 (list
42353 #:test-flags
42354 #~(list
42355 "-k" (string-append
42356 ;; XXX: Despite asyncio, this test fails.
42357 "not test_run_coro_with_timeout and not "
42358 ;; XXX: Networking isn't available.
42359 (string-join
42360 (list "test_integration_with_listener_ipv6"
42361 "test_launch_and_close_v4_v6"
42362 "test_launch_and_close_context_manager"
42363 "test_launch_and_close"
42364 "test_close_multiple_times")
42365 " and not ")))))
42366 (native-inputs
42367 (list python-pytest python-pytest-asyncio python-setuptools))
42368 (propagated-inputs
42369 (list python-ifaddr))
42370 (home-page "https://github.com/jstasiak/python-zeroconf")
42371 (synopsis "Pure Python mDNS service discovery")
42372 (description "Pure Python multicast DNS (mDNS) service discovery library
42373(Bonjour/Avahi compatible).")
42374 (license license:lgpl2.1+)))
42375
42376(define-public python-zict
42377 (package
42378 (name "python-zict")
42379 (version "3.0.0")
42380 (source
42381 (origin
42382 (method url-fetch)
42383 (uri (pypi-uri "zict" version))
42384 (sha256
42385 (base32
42386 "19gvr41xi5fazkzkg33kwrk70sv50hygng0cg70ayym9nriy48g3"))))
42387 (build-system pyproject-build-system)
42388 (arguments
42389 (list
42390 #:test-flags
42391 ;; This uses "importorskip", but it won't skip.
42392 '(list "--ignore=tests/test_lmdb.py")))
42393 (propagated-inputs
42394 (list python-heapdict))
42395 (native-inputs
42396 (list python-pytest
42397 python-pytest-asyncio
42398 python-pytest-repeat
42399 python-pytest-timeout
42400 python-setuptools
42401 python-wheel))
42402 (home-page "https://zict.readthedocs.io/en/latest/")
42403 (synopsis "Composable mutable mapping tools")
42404 (description "This package provides abstract @code{MutableMapping} classes
42405that consume and build on other @code{MutableMappings}. Several of these can
42406be composed with one another to form intuitive interfaces over complex storage
42407systems policies.")
42408 (license license:bsd-3)))
42409
42410(define-public python-zipfly
42411 (package
42412 (name "python-zipfly")
42413 (version "6.0.5")
42414 (source
42415 (origin
42416 (method url-fetch)
42417 (uri (pypi-uri "zipfly" version))
42418 (sha256
42419 (base32
42420 "1h7g922a8lsqd69j8blgcgg0lcd8kz51b2p4glfqmgx4vi1nkick"))))
42421 (build-system pyproject-build-system)
42422 (arguments
42423 (list #:test-backend #~'unittest))
42424 (native-inputs (list python-setuptools))
42425 (home-page "https://github.com/sandes/zipfly")
42426 (synopsis "Zip archive generator")
42427 (description "ZipFly is a zip archive generator. It was created to
42428generate very large zip archives for immediate sending out to clients, or
42429for writing large zip archives without memory inflation.")
42430 (license license:expat)))
42431
42432(define-public python-zipstream-new
42433 (package
42434 (name "python-zipstream-new")
42435 (version "1.1.8")
42436 (source
42437 (origin
42438 (method git-fetch) ; no tests in PyPI release
42439 (uri (git-reference
42440 (url "https://github.com/arjan-s/python-zipstream")
42441 (commit (string-append "v" version))))
42442 (file-name (git-file-name name version))
42443 (sha256
42444 (base32 "14vhgg8mcjqi8cpzrw8qzbij2fr2a63l2a8fhil21k2r8vzv92cv"))))
42445 (build-system pyproject-build-system)
42446 (arguments
42447 (list #:test-backend #~'unittest))
42448 (native-inputs (list python-setuptools))
42449 (home-page "https://github.com/arjan-s/python-zipstream")
42450 (synopsis "Zipfile generator that takes input files as well as streams")
42451 (description "@code{zipstream.py} is a zip archive generator based on
42452@code{zipfile.py}. It was created to generate a zip file generator for
42453streaming. This is beneficial for when you want to provide a downloadable
42454archive of a large collection of regular files, which would be infeasible
42455to generate the archive prior to downloading or of a very large file that
42456you do not want to store entirely on disk or on memory.")
42457 ;; No copyright headers in the source. The LICENSE file indicates GPL3.
42458 (license license:gpl3)))
42459
42460(define-public shrinkwrap
42461 (package
42462 (name "shrinkwrap")
42463 (version "0.1.0")
42464 (source
42465 (origin
42466 (method git-fetch)
42467 (uri (git-reference
42468 (url "https://github.com/fzakaria/shrinkwrap")
42469 (commit (string-append "v" version))))
42470 (file-name (git-file-name name version))
42471 (sha256
42472 (base32 "1f3qrygj16y767q2c7pn9j6m95ggcmj9s5cx9v92ygygly4mr3jp"))))
42473 (build-system pyproject-build-system)
42474 (native-inputs
42475 (list python-click
42476 python-poetry-core
42477 python-pypa-build
42478 python-pytest))
42479 (inputs (list python-lief python-sh))
42480 (home-page "https://github.com/fzakaria/shrinkwrap")
42481 (synopsis "Emboss needed dependencies on the top level executable")
42482 (description
42483 "@code{shrinkwrap} is a tool which will discover all transitive dynamic
42484shared objects, and lift them up to the executable referenced by absolute
42485path.")
42486 (license license:expat)))
42487
42488(define-public staticsite
42489 (package
42490 (name "staticsite")
42491 (version "2.5")
42492 (source
42493 (origin
42494 (method git-fetch)
42495 (uri (git-reference
42496 (url "https://github.com/spanezz/staticsite")
42497 (commit (string-append "v" version))))
42498 (file-name (git-file-name name version))
42499 (sha256
42500 (base32 "0fk0yy0flwwfqwb4gsizr7gnkadas4rjffn3mnzlwmkn08z3w0c7"))))
42501 (build-system pyproject-build-system)
42502 (arguments
42503 (list
42504 #:phases
42505 #~(modify-phases %standard-phases
42506 (add-after 'unpack 'use-themes-in-output
42507 (lambda _
42508 (substitute* "staticsite/global_settings.py"
42509 (("/usr/share/staticsite") #$output))))
42510 (add-after 'install 'install-themes
42511 (lambda _
42512 (let ((themedir (string-append #$output "/themes")))
42513 (copy-recursively "themes" themedir)))))))
42514 (native-inputs
42515 (list python-hatchling
42516 python-pytest))
42517 (inputs
42518 (list perl-image-exiftool
42519 python-dateutil
42520 python-docutils
42521 python-jinja2
42522 python-markdown
42523 python-pillow
42524 python-pytz
42525 python-pyyaml
42526 python-ruamel.yaml
42527 python-slugify
42528 python-toml
42529 tzdata-for-tests))
42530 (home-page "https://github.com/spanezz/staticsite")
42531 (synopsis "Static site generator")
42532 (description
42533 "Statistic is a static site generator based on Markdown and Jinja2.")
42534 (license (list license:gpl3+ license:expat))))
42535
42536;;;
42537;;; Avoid adding new packages to the end of this file. To reduce the chances
42538;;; of a merge conflict, place them above in alphabetic order:
42539;;; guix import --insert=gnu/packages/python-xyz.scm pypi <package-name>.
42540;;;